summaryrefslogtreecommitdiff
path: root/toxcore
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2013-11-23 17:19:02 -0500
committerirungentoo <irungentoo@gmail.com>2013-11-23 17:19:02 -0500
commitf21a9a7666e0f93cd8c19d1491c92526424ae0cb (patch)
tree2ebed714b388f18917ac6473ad6d7ec9f8ed8cfc /toxcore
parentd2b56faded6e88e916d8f291c1cdff82f5cdd1ff (diff)
Added callback that tells you when the peer name list of a group chat changes.
Diffstat (limited to 'toxcore')
-rw-r--r--toxcore/Messenger.c41
-rw-r--r--toxcore/Messenger.h9
-rw-r--r--toxcore/group_chats.c15
-rw-r--r--toxcore/group_chats.h11
-rw-r--r--toxcore/tox.c13
-rw-r--r--toxcore/tox.h8
6 files changed, 92 insertions, 5 deletions
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c
index 889de367..acb038df 100644
--- a/toxcore/Messenger.c
+++ b/toxcore/Messenger.c
@@ -779,20 +779,51 @@ void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int,
779 m->group_message = function; 779 m->group_message = function;
780 m->group_message_userdata = userdata; 780 m->group_message_userdata = userdata;
781} 781}
782static void group_message_function(Group_Chat *chat, int peer_number, uint8_t *message, uint16_t length, void *userdata) 782
783/* Set callback function for peer name list changes.
784 *
785 * It gets called every time the name list changes(new peer/name, deleted peer)
786 * Function(Tox *tox, int groupnumber, void *userdata)
787 */
788void m_callback_group_namelistchange(Messenger *m, void (*function)(Messenger *m, int, void *), void *userdata)
783{ 789{
784 Messenger *m = userdata; 790 m->group_namelistchange = function;
785 uint32_t i; 791 m->group_namelistchange_userdata = userdata;
792}
786 793
794static int get_chat_num(Messenger *m, Group_Chat *chat)
795{
796 uint32_t i;
787 for (i = 0; i < m->numchats; ++i) { //TODO: remove this 797 for (i = 0; i < m->numchats; ++i) { //TODO: remove this
788 if (m->chats[i] == chat) 798 if (m->chats[i] == chat)
789 break; 799 return i;
790 } 800 }
801 return -1;
802}
803
804static void group_message_function(Group_Chat *chat, int peer_number, uint8_t *message, uint16_t length, void *userdata)
805{
806 Messenger *m = userdata;
807 int i = get_chat_num(m, chat);
808 if (i == -1)
809 return;
791 810
792 if (m->group_message) 811 if (m->group_message)
793 (*m->group_message)(m, i, peer_number, message, length, m->group_message_userdata); 812 (*m->group_message)(m, i, peer_number, message, length, m->group_message_userdata);
794} 813}
795 814
815static void group_namelistchange_function(Group_Chat *chat, void *userdata)
816{
817 Messenger *m = userdata;
818 int i = get_chat_num(m, chat);
819 if (i == -1)
820 return;
821
822 if (m->group_namelistchange)
823 (*m->group_namelistchange)(m, i, m->group_namelistchange_userdata);
824}
825
826
796/* Creates a new groupchat and puts it in the chats array. 827/* Creates a new groupchat and puts it in the chats array.
797 * 828 *
798 * return group number on success. 829 * return group number on success.
@@ -810,6 +841,7 @@ int add_groupchat(Messenger *m)
810 return -1; 841 return -1;
811 842
812 callback_groupmessage(newchat, &group_message_function, m); 843 callback_groupmessage(newchat, &group_message_function, m);
844 callback_namelistchange(newchat, &group_namelistchange_function, m);
813 /* TODO: remove this (group nicks should not be tied to the global one) */ 845 /* TODO: remove this (group nicks should not be tied to the global one) */
814 set_nick(newchat, m->name, m->name_length); 846 set_nick(newchat, m->name, m->name_length);
815 m->chats[i] = newchat; 847 m->chats[i] = newchat;
@@ -830,6 +862,7 @@ int add_groupchat(Messenger *m)
830 862
831 m->chats = temp; 863 m->chats = temp;
832 callback_groupmessage(temp[m->numchats], &group_message_function, m); 864 callback_groupmessage(temp[m->numchats], &group_message_function, m);
865 callback_namelistchange(temp[m->numchats], &group_namelistchange_function, m);
833 /* TODO: remove this (group nicks should not be tied to the global one) */ 866 /* TODO: remove this (group nicks should not be tied to the global one) */
834 set_nick(temp[m->numchats], m->name, m->name_length); 867 set_nick(temp[m->numchats], m->name, m->name_length);
835 ++m->numchats; 868 ++m->numchats;
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h
index 651f3f12..bf8a0572 100644
--- a/toxcore/Messenger.h
+++ b/toxcore/Messenger.h
@@ -198,6 +198,8 @@ typedef struct Messenger {
198 void *group_invite_userdata; 198 void *group_invite_userdata;
199 void (*group_message)(struct Messenger *m, int, int, uint8_t *, uint16_t, void *); 199 void (*group_message)(struct Messenger *m, int, int, uint8_t *, uint16_t, void *);
200 void *group_message_userdata; 200 void *group_message_userdata;
201 void (*group_namelistchange)(struct Messenger *m, int, void *);
202 void *group_namelistchange_userdata;
201 203
202 void (*file_sendrequest)(struct Messenger *m, int, uint8_t, uint64_t, uint8_t *, uint16_t, void *); 204 void (*file_sendrequest)(struct Messenger *m, int, uint8_t, uint64_t, uint8_t *, uint16_t, void *);
203 void *file_sendrequest_userdata; 205 void *file_sendrequest_userdata;
@@ -455,6 +457,13 @@ void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int, u
455void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t *, uint16_t, void *), 457void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t *, uint16_t, void *),
456 void *userdata); 458 void *userdata);
457 459
460/* Set callback function for peer name list changes.
461 *
462 * It gets called every time the name list changes(new peer/name, deleted peer)
463 * Function(Tox *tox, int groupnumber, void *userdata)
464 */
465void m_callback_group_namelistchange(Messenger *m, void (*function)(Messenger *m, int, void *), void *userdata);
466
458/* Creates a new groupchat and puts it in the chats array. 467/* Creates a new groupchat and puts it in the chats array.
459 * 468 *
460 * return group number on success. 469 * return group number on success.
diff --git a/toxcore/group_chats.c b/toxcore/group_chats.c
index 34c84c40..7e18a334 100644
--- a/toxcore/group_chats.c
+++ b/toxcore/group_chats.c
@@ -218,6 +218,9 @@ static int addpeer(Group_Chat *chat, uint8_t *client_id)
218 chat->group[chat->numpeers].last_recv_msgping = unix_time(); 218 chat->group[chat->numpeers].last_recv_msgping = unix_time();
219 ++chat->numpeers; 219 ++chat->numpeers;
220 220
221 if (chat->peer_namelistchange != NULL)
222 (*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata);
223
221 return (chat->numpeers - 1); 224 return (chat->numpeers - 1);
222} 225}
223 226
@@ -250,6 +253,10 @@ static int delpeer(Group_Chat *chat, int peernum)
250 return -1; 253 return -1;
251 254
252 chat->group = temp; 255 chat->group = temp;
256
257 if (chat->peer_namelistchange != NULL)
258 (*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata);
259
253 return 0; 260 return 0;
254} 261}
255 262
@@ -283,6 +290,8 @@ static void setnick(Group_Chat *chat, int peernum, uint8_t *contents, uint16_t c
283 /* Force null termination */ 290 /* Force null termination */
284 chat->group[peernum].nick[contents_len - 1] = 0; 291 chat->group[peernum].nick[contents_len - 1] = 0;
285 chat->group[peernum].nick_len = contents_len; 292 chat->group[peernum].nick_len = contents_len;
293 if (chat->peer_namelistchange != NULL)
294 (*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata);
286} 295}
287 296
288/* min time between pings sent to one peer in seconds */ 297/* min time between pings sent to one peer in seconds */
@@ -616,6 +625,12 @@ void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat,
616 chat->group_message_userdata = userdata; 625 chat->group_message_userdata = userdata;
617} 626}
618 627
628void callback_namelistchange(Group_Chat *chat, void (*function)(Group_Chat *chat, void *), void *userdata)
629{
630 chat->peer_namelistchange = function;
631 chat->group_namelistchange_userdata = userdata;
632}
633
619uint32_t group_numpeers(Group_Chat *chat) 634uint32_t group_numpeers(Group_Chat *chat)
620{ 635{
621 return chat->numpeers; 636 return chat->numpeers;
diff --git a/toxcore/group_chats.h b/toxcore/group_chats.h
index 4257b1f5..2235a6e3 100644
--- a/toxcore/group_chats.h
+++ b/toxcore/group_chats.h
@@ -65,6 +65,8 @@ typedef struct Group_Chat {
65 uint32_t message_number; 65 uint32_t message_number;
66 void (*group_message)(struct Group_Chat *m, int, uint8_t *, uint16_t, void *); 66 void (*group_message)(struct Group_Chat *m, int, uint8_t *, uint16_t, void *);
67 void *group_message_userdata; 67 void *group_message_userdata;
68 void (*peer_namelistchange)(struct Group_Chat *m, void *);
69 void *group_namelistchange_userdata;
68 70
69 uint64_t last_sent_ping; 71 uint64_t last_sent_ping;
70 72
@@ -94,9 +96,16 @@ int group_peername(Group_Chat *chat, int peernum, uint8_t *name);
94 * 96 *
95 * format of function is: function(Group_Chat *chat, peer number, message, message length, userdata) 97 * format of function is: function(Group_Chat *chat, peer number, message, message length, userdata)
96 */ 98 */
97
98void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat, int, uint8_t *, uint16_t, void *), 99void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat, int, uint8_t *, uint16_t, void *),
99 void *userdata); 100 void *userdata);
101/*
102 * Set callback function for peer name list changes.
103 *
104 * It gets called every time the name list changes(new peer/name, deleted peer)
105 *
106 * format of function is: function(Group_Chat *chat, userdata)
107 */
108void callback_namelistchange(Group_Chat *chat, void (*function)(Group_Chat *chat, void *), void *userdata);
100 109
101/* 110/*
102 * Send a message to the group. 111 * Send a message to the group.
diff --git a/toxcore/tox.c b/toxcore/tox.c
index b5e754bb..4ba17e34 100644
--- a/toxcore/tox.c
+++ b/toxcore/tox.c
@@ -415,6 +415,19 @@ void tox_callback_group_message(Tox *tox, void (*function)(Messenger *tox, int,
415 Messenger *m = tox; 415 Messenger *m = tox;
416 m_callback_group_message(m, function, userdata); 416 m_callback_group_message(m, function, userdata);
417} 417}
418
419/* Set callback function for peer name list changes.
420 *
421 * It gets called every time the name list changes(new peer/name, deleted peer)
422 * Function(Tox *tox, int groupnumber, void *userdata)
423 */
424
425void tox_callback_group_namelistchange(Tox *tox, void (*function)(Tox *tox, int, void *), void *userdata)
426{
427 Messenger *m = tox;
428 m_callback_group_namelistchange(m, function, userdata);
429}
430
418/* Creates a new groupchat and puts it in the chats array. 431/* Creates a new groupchat and puts it in the chats array.
419 * 432 *
420 * return group number on success. 433 * return group number on success.
diff --git a/toxcore/tox.h b/toxcore/tox.h
index a0093ff3..fedc2c8a 100644
--- a/toxcore/tox.h
+++ b/toxcore/tox.h
@@ -363,6 +363,14 @@ void tox_callback_group_invite(Tox *tox, void (*function)(Tox *tox, int, uint8_t
363void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, int, uint8_t *, uint16_t, void *), 363void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, int, uint8_t *, uint16_t, void *),
364 void *userdata); 364 void *userdata);
365 365
366/* Set callback function for peer name list changes.
367 *
368 * It gets called every time the name list changes(new peer/name, deleted peer)
369 * Function(Tox *tox, int groupnumber, void *userdata)
370 */
371
372void tox_callback_group_namelistchange(Tox *tox, void (*function)(Tox *tox, int, void *), void *userdata);
373
366/* Creates a new groupchat and puts it in the chats array. 374/* Creates a new groupchat and puts it in the chats array.
367 * 375 *
368 * return group number on success. 376 * return group number on success.