Implemented loading unsent messages from disk.
This commit is contained in:
parent
3cf80be3e9
commit
6dfacdf04c
@ -120,6 +120,9 @@ tox_weechat_data_unsent_messages_json(struct t_tox_weechat_identity *identity)
|
|||||||
recipient;
|
recipient;
|
||||||
recipient = recipient->next_recipient)
|
recipient = recipient->next_recipient)
|
||||||
{
|
{
|
||||||
|
if (!(recipient->unsent_messages))
|
||||||
|
continue;
|
||||||
|
|
||||||
char hex_id[TOX_CLIENT_ID_SIZE * 2 + 1];
|
char hex_id[TOX_CLIENT_ID_SIZE * 2 + 1];
|
||||||
tox_weechat_bin2hex(recipient->recipient_id, TOX_CLIENT_ID_SIZE, hex_id);
|
tox_weechat_bin2hex(recipient->recipient_id, TOX_CLIENT_ID_SIZE, hex_id);
|
||||||
|
|
||||||
@ -204,9 +207,26 @@ tox_weechat_data_load_friend_requests(struct t_tox_weechat_identity *identity,
|
|||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
tox_weechat_data_load_unsent_messages(struct t_tox_weechat_identity *identity,
|
tox_weechat_data_load_unsent_messages(struct t_tox_weechat_identity *identity,
|
||||||
json_t *friend_requests)
|
json_t *recipient_object)
|
||||||
{
|
{
|
||||||
// TODO
|
tox_weechat_unsent_messages_free(identity);
|
||||||
|
|
||||||
|
const char *key;
|
||||||
|
json_t *message_array;
|
||||||
|
json_object_foreach(recipient_object, key, message_array)
|
||||||
|
{
|
||||||
|
uint8_t client_id[TOX_CLIENT_ID_SIZE];
|
||||||
|
tox_weechat_hex2bin(key, TOX_CLIENT_ID_SIZE * 2, (char *)client_id);
|
||||||
|
|
||||||
|
size_t index;
|
||||||
|
json_t *message;
|
||||||
|
json_array_foreach(message_array, index, message)
|
||||||
|
{
|
||||||
|
tox_weechat_add_unsent_message(identity,
|
||||||
|
client_id,
|
||||||
|
json_string_value(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -74,7 +74,8 @@ tox_weechat_friend_request_add(struct t_tox_weechat_identity *identity,
|
|||||||
void
|
void
|
||||||
tox_weechat_friend_request_remove(struct t_tox_weechat_friend_request *request)
|
tox_weechat_friend_request_remove(struct t_tox_weechat_friend_request *request)
|
||||||
{
|
{
|
||||||
struct t_tox_weechat_identity *identity = request->identity; if (request == identity->last_friend_request)
|
struct t_tox_weechat_identity *identity = request->identity;
|
||||||
|
if (request == identity->last_friend_request)
|
||||||
identity->last_friend_request = request->prev_request;
|
identity->last_friend_request = request->prev_request;
|
||||||
|
|
||||||
if (request->prev_request)
|
if (request->prev_request)
|
||||||
|
@ -57,7 +57,7 @@ tox_weechat_unsent_message_recipient_new(struct t_tox_weechat_identity *identity
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
memcpy(recipient->recipient_id, id, TOX_CLIENT_ID_SIZE);
|
memcpy(recipient->recipient_id, id, TOX_CLIENT_ID_SIZE);
|
||||||
|
recipient->identity = identity;
|
||||||
recipient->unsent_messages = recipient->last_unsent_message = NULL;
|
recipient->unsent_messages = recipient->last_unsent_message = NULL;
|
||||||
|
|
||||||
recipient->prev_recipient = identity->last_unsent_message_recipient;
|
recipient->prev_recipient = identity->last_unsent_message_recipient;
|
||||||
@ -93,6 +93,7 @@ tox_weechat_add_unsent_message(struct t_tox_weechat_identity *identity,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
unsent_message->message = strdup(message);
|
unsent_message->message = strdup(message);
|
||||||
|
unsent_message->recipient = recipient;
|
||||||
|
|
||||||
unsent_message->prev_message = recipient->last_unsent_message;
|
unsent_message->prev_message = recipient->last_unsent_message;
|
||||||
unsent_message->next_message = NULL;
|
unsent_message->next_message = NULL;
|
||||||
@ -105,6 +106,25 @@ tox_weechat_add_unsent_message(struct t_tox_weechat_identity *identity,
|
|||||||
recipient->last_unsent_message = unsent_message;
|
recipient->last_unsent_message = unsent_message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tox_weechat_remove_unsent_message(struct t_tox_weechat_unsent_message *message)
|
||||||
|
{
|
||||||
|
struct t_tox_weechat_unsent_message_recipient *recipient = message->recipient;
|
||||||
|
if (message == recipient->last_unsent_message)
|
||||||
|
recipient->last_unsent_message = message->prev_message;
|
||||||
|
|
||||||
|
if (message->prev_message)
|
||||||
|
message->prev_message->next_message = message->next_message;
|
||||||
|
else
|
||||||
|
recipient->unsent_messages = message->next_message;
|
||||||
|
|
||||||
|
if (message->next_message)
|
||||||
|
message->next_message->prev_message = message->prev_message;
|
||||||
|
|
||||||
|
free(message->message);
|
||||||
|
free(message);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a message to a friend. Does message splitting and queuing.
|
* Sends a message to a friend. Does message splitting and queuing.
|
||||||
*/
|
*/
|
||||||
@ -128,3 +148,22 @@ tox_weechat_send_friend_message(struct t_tox_weechat_identity *identity,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tox_weechat_unsent_messages_free(struct t_tox_weechat_identity *identity)
|
||||||
|
{
|
||||||
|
struct t_tox_weechat_unsent_message_recipient *recipient;
|
||||||
|
for (recipient = identity->unsent_message_recipients;
|
||||||
|
recipient;
|
||||||
|
recipient = recipient->next_recipient)
|
||||||
|
{
|
||||||
|
while (recipient->unsent_messages)
|
||||||
|
tox_weechat_remove_unsent_message(recipient->unsent_messages);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tox_weechat_attempt_message_flush(struct t_tox_weechat_identity *identity,
|
||||||
|
int32_t friend_number)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -27,6 +27,7 @@ struct t_tox_weechat_identity;
|
|||||||
struct t_tox_weechat_unsent_message_recipient
|
struct t_tox_weechat_unsent_message_recipient
|
||||||
{
|
{
|
||||||
uint8_t recipient_id[TOX_CLIENT_ID_SIZE];
|
uint8_t recipient_id[TOX_CLIENT_ID_SIZE];
|
||||||
|
struct t_tox_weechat_identity *identity;
|
||||||
|
|
||||||
struct t_tox_weechat_unsent_message *unsent_messages;
|
struct t_tox_weechat_unsent_message *unsent_messages;
|
||||||
struct t_tox_weechat_unsent_message *last_unsent_message;
|
struct t_tox_weechat_unsent_message *last_unsent_message;
|
||||||
@ -37,7 +38,8 @@ struct t_tox_weechat_unsent_message_recipient
|
|||||||
|
|
||||||
struct t_tox_weechat_unsent_message
|
struct t_tox_weechat_unsent_message
|
||||||
{
|
{
|
||||||
const char *message;
|
char *message;
|
||||||
|
struct t_tox_weechat_unsent_message_recipient *recipient;
|
||||||
|
|
||||||
struct t_tox_weechat_unsent_message *next_message;
|
struct t_tox_weechat_unsent_message *next_message;
|
||||||
struct t_tox_weechat_unsent_message *prev_message;
|
struct t_tox_weechat_unsent_message *prev_message;
|
||||||
@ -53,4 +55,7 @@ tox_weechat_add_unsent_message(struct t_tox_weechat_identity *identity,
|
|||||||
const uint8_t *recipient_id,
|
const uint8_t *recipient_id,
|
||||||
const char *message);
|
const char *message);
|
||||||
|
|
||||||
|
void
|
||||||
|
tox_weechat_unsent_messages_free(struct t_tox_weechat_identity *identity);
|
||||||
|
|
||||||
#endif // TOX_WEECHAT_MESSAGES_H
|
#endif // TOX_WEECHAT_MESSAGES_H
|
||||||
|
Loading…
Reference in New Issue
Block a user