Merge pull request #434 from nurupo/master

Replaced friendstatus with connectionstatus
This commit is contained in:
irungentoo 2013-08-11 13:44:20 -07:00
commit 7f3cbfdc2f
2 changed files with 28 additions and 11 deletions

View File

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

View File

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