diff options
author | irungentoo <irungentoo@gmail.com> | 2013-11-23 17:19:02 -0500 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2013-11-23 17:19:02 -0500 |
commit | f21a9a7666e0f93cd8c19d1491c92526424ae0cb (patch) | |
tree | 2ebed714b388f18917ac6473ad6d7ec9f8ed8cfc /toxcore | |
parent | d2b56faded6e88e916d8f291c1cdff82f5cdd1ff (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.c | 41 | ||||
-rw-r--r-- | toxcore/Messenger.h | 9 | ||||
-rw-r--r-- | toxcore/group_chats.c | 15 | ||||
-rw-r--r-- | toxcore/group_chats.h | 11 | ||||
-rw-r--r-- | toxcore/tox.c | 13 | ||||
-rw-r--r-- | toxcore/tox.h | 8 |
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 | } |
782 | static 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 | */ | ||
788 | void 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 | ||
794 | static 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 | |||
804 | static 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 | ||
815 | static 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 | |||
455 | void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t *, uint16_t, void *), | 457 | void 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 | */ | ||
465 | void 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 | ||
628 | void 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 | |||
619 | uint32_t group_numpeers(Group_Chat *chat) | 634 | uint32_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 | |||
98 | void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat, int, uint8_t *, uint16_t, void *), | 99 | void 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 | */ | ||
108 | void 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 | |||
425 | void 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 | |||
363 | void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, int, uint8_t *, uint16_t, void *), | 363 | void 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 | |||
372 | void 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. |