Implemented loading unsent messages from disk.

This commit is contained in:
Håvard Pettersson 2014-09-26 22:50:50 +02:00
parent 3cf80be3e9
commit 6dfacdf04c
4 changed files with 70 additions and 5 deletions

View File

@ -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));
}
}
} }
/** /**

View File

@ -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)

View File

@ -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)
{
}

View File

@ -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