From eaa7d3e0a0a38e4bac6c8879567cbb064f7d48c3 Mon Sep 17 00:00:00 2001 From: Maxim Biro Date: Sun, 11 Aug 2013 14:57:47 -0400 Subject: Replaced friendstatus with connectionstatus --- core/Messenger.c | 27 +++++++++++++++++++-------- core/Messenger.h | 12 +++++++++--- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/core/Messenger.c b/core/Messenger.c index d26bba56..4ea7e507 100644 --- a/core/Messenger.c +++ b/core/Messenger.c @@ -169,7 +169,7 @@ int m_addfriend_norequest(uint8_t * client_id) for (i = 0; i <= numfriends; ++i) { if(friendlist[i].status == NOFRIEND) { DHT_addfriend(client_id); - set_friend_status(i, FRIEND_REQUESTED); + friendlist[i].status = FRIEND_REQUESTED; friendlist[i].crypt_connection_id = -1; friendlist[i].friend_request_id = -1; memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE); @@ -482,18 +482,29 @@ void m_callback_read_receipt(void (*function)(int, uint32_t)) read_receipt_isset = 1; } -static void (*friend_statuschange)(int, uint8_t); -static uint8_t friend_statuschange_isset = 0; -void m_callback_friendstatus(void (*function)(int, uint8_t)) +static void (*friend_connectionstatuschange)(int, uint8_t); +static uint8_t friend_connectionstatuschange_isset = 0; +void m_callback_connectionstatus(void (*function)(int, uint8_t)) { - friend_statuschange = function; - friend_statuschange_isset = 1; + friend_connectionstatuschange = function; + friend_connectionstatuschange_isset = 1; +} + +static void check_friend_connectionstatus(int friendnumber, uint8_t status) +{ + if (!friend_connectionstatuschange_isset) + return; + if (status == NOFRIEND) + return; + const uint8_t is_connected = friendlist[friendnumber].status == FRIEND_ONLINE; + const uint8_t was_connected = status == FRIEND_ONLINE; + if (is_connected != was_connected) + friend_connectionstatuschange(friendnumber, is_connected); } static void set_friend_status(int friendnumber, uint8_t status) { - if (friendlist[friendnumber].status != status && friend_statuschange_isset) - friend_statuschange(friendnumber, status); + check_friend_connectionstatus(friendnumber, status); friendlist[friendnumber].status = status; } diff --git a/core/Messenger.h b/core/Messenger.h index 55c86682..fa0daf41 100644 --- a/core/Messenger.h +++ b/core/Messenger.h @@ -211,9 +211,15 @@ void m_callback_userstatus(void (*function)(int, USERSTATUS)); in that case, you should discard it. */ void m_callback_read_receipt(void (*function)(int, uint32_t)); -/* set the callback for friend status changes - function(int friendnumber, uint8_t status) */ -void m_callback_friendstatus(void (*function)(int, uint8_t)); +/* set the callback for conenction status changes + function(int friendnumber, uint8_t status) + status: + 0 -- friend went offline after being previously online + 1 -- friend went online + note that this callback is not called when adding friends, thus the "after + being previously online" part. it's assumed that when adding friends, + their connection status is offline. */ +void m_callback_connectionstatus(void (*function)(int, uint8_t)); /* run this at startup returns 0 if no connection problems -- cgit v1.2.3