summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.c
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r--toxcore/Messenger.c41
1 files changed, 37 insertions, 4 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;