summaryrefslogtreecommitdiff
path: root/toxcore
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2013-11-25 11:23:52 -0800
committerirungentoo <irungentoo@gmail.com>2013-11-25 11:23:52 -0800
commit2967b67b7f3dd27ae1c8fb99f37e42016b946f26 (patch)
tree8391050a7d3bb58bf2ca5a3da98a151857786dde /toxcore
parent6374093254041f0f0581b6581890c368f874d474 (diff)
parent0b0848d9aca9e2587a3c294477cae820777b1d60 (diff)
Merge pull request #663 from FullName/peerchange-detail
group_namelistchange(): for gui reasons, divulge peernumber and change type
Diffstat (limited to 'toxcore')
-rw-r--r--toxcore/Messenger.c6
-rw-r--r--toxcore/Messenger.h4
-rw-r--r--toxcore/group_chats.c20
-rw-r--r--toxcore/group_chats.h10
-rw-r--r--toxcore/tox.c2
-rw-r--r--toxcore/tox.h9
6 files changed, 36 insertions, 15 deletions
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c
index cc52c069..1a7fc230 100644
--- a/toxcore/Messenger.c
+++ b/toxcore/Messenger.c
@@ -785,7 +785,7 @@ void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int,
785 * It gets called every time the name list changes(new peer/name, deleted peer) 785 * It gets called every time the name list changes(new peer/name, deleted peer)
786 * Function(Tox *tox, int groupnumber, void *userdata) 786 * Function(Tox *tox, int groupnumber, void *userdata)
787 */ 787 */
788void m_callback_group_namelistchange(Messenger *m, void (*function)(Messenger *m, int, void *), void *userdata) 788void m_callback_group_namelistchange(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t, void *), void *userdata)
789{ 789{
790 m->group_namelistchange = function; 790 m->group_namelistchange = function;
791 m->group_namelistchange_userdata = userdata; 791 m->group_namelistchange_userdata = userdata;
@@ -812,7 +812,7 @@ static void group_message_function(Group_Chat *chat, int peer_number, uint8_t *m
812 (*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);
813} 813}
814 814
815static void group_namelistchange_function(Group_Chat *chat, void *userdata) 815static void group_namelistchange_function(Group_Chat *chat, int peer, uint8_t change, void *userdata)
816{ 816{
817 Messenger *m = userdata; 817 Messenger *m = userdata;
818 int i = get_chat_num(m, chat); 818 int i = get_chat_num(m, chat);
@@ -820,7 +820,7 @@ static void group_namelistchange_function(Group_Chat *chat, void *userdata)
820 return; 820 return;
821 821
822 if (m->group_namelistchange) 822 if (m->group_namelistchange)
823 (*m->group_namelistchange)(m, i, m->group_namelistchange_userdata); 823 (*m->group_namelistchange)(m, i, peer, change, m->group_namelistchange_userdata);
824} 824}
825 825
826 826
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h
index bf8a0572..6fc23db4 100644
--- a/toxcore/Messenger.h
+++ b/toxcore/Messenger.h
@@ -198,7 +198,7 @@ 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 *); 201 void (*group_namelistchange)(struct Messenger *m, int, int, uint8_t, void *);
202 void *group_namelistchange_userdata; 202 void *group_namelistchange_userdata;
203 203
204 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 *);
@@ -462,7 +462,7 @@ void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int,
462 * It gets called every time the name list changes(new peer/name, deleted peer) 462 * It gets called every time the name list changes(new peer/name, deleted peer)
463 * Function(Tox *tox, int groupnumber, void *userdata) 463 * Function(Tox *tox, int groupnumber, void *userdata)
464 */ 464 */
465void m_callback_group_namelistchange(Messenger *m, void (*function)(Messenger *m, int, void *), void *userdata); 465void m_callback_group_namelistchange(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t, void *), void *userdata);
466 466
467/* Creates a new groupchat and puts it in the chats array. 467/* Creates a new groupchat and puts it in the chats array.
468 * 468 *
diff --git a/toxcore/group_chats.c b/toxcore/group_chats.c
index b551a1fd..ec9229c4 100644
--- a/toxcore/group_chats.c
+++ b/toxcore/group_chats.c
@@ -219,7 +219,7 @@ static int addpeer(Group_Chat *chat, uint8_t *client_id)
219 ++chat->numpeers; 219 ++chat->numpeers;
220 220
221 if (chat->peer_namelistchange != NULL) 221 if (chat->peer_namelistchange != NULL)
222 (*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata); 222 (*chat->peer_namelistchange)(chat, chat->numpeers - 1, CHAT_CHANGE_PEER_ADD, chat->group_namelistchange_userdata);
223 223
224 return (chat->numpeers - 1); 224 return (chat->numpeers - 1);
225} 225}
@@ -254,8 +254,12 @@ static int delpeer(Group_Chat *chat, int peernum)
254 254
255 chat->group = temp; 255 chat->group = temp;
256 256
257 if (chat->peer_namelistchange != NULL) 257 if (chat->peer_namelistchange != NULL) {
258 (*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata); 258 (*chat->peer_namelistchange)(chat, chat->numpeers, CHAT_CHANGE_PEER_DEL, chat->group_namelistchange_userdata);
259
260 if (chat->numpeers != (uint32_t)peernum)
261 (*chat->peer_namelistchange)(chat, peernum, CHAT_CHANGE_PEER_NAME, chat->group_namelistchange_userdata);
262 }
259 263
260 return 0; 264 return 0;
261} 265}
@@ -286,12 +290,18 @@ static void setnick(Group_Chat *chat, int peernum, uint8_t *contents, uint16_t c
286 if (contents_len > MAX_NICK_BYTES || contents_len == 0) 290 if (contents_len > MAX_NICK_BYTES || contents_len == 0)
287 return; 291 return;
288 292
293 /* same name as already stored? */
294 if ((chat->group[peernum].nick_len == contents_len) &&
295 !memcmp(chat->group[peernum].nick, contents, contents_len))
296 return;
297
289 memcpy(chat->group[peernum].nick, contents, contents_len); 298 memcpy(chat->group[peernum].nick, contents, contents_len);
290 /* Force null termination */ 299 /* Force null termination */
291 chat->group[peernum].nick[contents_len - 1] = 0; 300 chat->group[peernum].nick[contents_len - 1] = 0;
292 chat->group[peernum].nick_len = contents_len; 301 chat->group[peernum].nick_len = contents_len;
302
293 if (chat->peer_namelistchange != NULL) 303 if (chat->peer_namelistchange != NULL)
294 (*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata); 304 (*chat->peer_namelistchange)(chat, peernum, CHAT_CHANGE_PEER_NAME, chat->group_namelistchange_userdata);
295} 305}
296 306
297/* min time between pings sent to one peer in seconds */ 307/* min time between pings sent to one peer in seconds */
@@ -626,7 +636,7 @@ void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat,
626 chat->group_message_userdata = userdata; 636 chat->group_message_userdata = userdata;
627} 637}
628 638
629void callback_namelistchange(Group_Chat *chat, void (*function)(Group_Chat *chat, void *), void *userdata) 639void callback_namelistchange(Group_Chat *chat, void (*function)(Group_Chat *chat, int peer, uint8_t change, void *), void *userdata)
630{ 640{
631 chat->peer_namelistchange = function; 641 chat->peer_namelistchange = function;
632 chat->group_namelistchange_userdata = userdata; 642 chat->group_namelistchange_userdata = userdata;
diff --git a/toxcore/group_chats.h b/toxcore/group_chats.h
index 2235a6e3..65f573fb 100644
--- a/toxcore/group_chats.h
+++ b/toxcore/group_chats.h
@@ -65,7 +65,7 @@ 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 *); 68 void (*peer_namelistchange)(struct Group_Chat *m, int peer, uint8_t change, void *);
69 void *group_namelistchange_userdata; 69 void *group_namelistchange_userdata;
70 70
71 uint64_t last_sent_ping; 71 uint64_t last_sent_ping;
@@ -105,7 +105,13 @@ void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat,
105 * 105 *
106 * format of function is: function(Group_Chat *chat, userdata) 106 * format of function is: function(Group_Chat *chat, userdata)
107 */ 107 */
108void callback_namelistchange(Group_Chat *chat, void (*function)(Group_Chat *chat, void *), void *userdata); 108typedef enum {
109 CHAT_CHANGE_PEER_ADD,
110 CHAT_CHANGE_PEER_DEL,
111 CHAT_CHANGE_PEER_NAME,
112} CHAT_CHANGE;
113
114void callback_namelistchange(Group_Chat *chat, void (*function)(Group_Chat *chat, int peer, uint8_t change, void *), void *userdata);
109 115
110/* 116/*
111 * Send a message to the group. 117 * Send a message to the group.
diff --git a/toxcore/tox.c b/toxcore/tox.c
index 4ba17e34..d5bc1c35 100644
--- a/toxcore/tox.c
+++ b/toxcore/tox.c
@@ -422,7 +422,7 @@ void tox_callback_group_message(Tox *tox, void (*function)(Messenger *tox, int,
422 * Function(Tox *tox, int groupnumber, void *userdata) 422 * Function(Tox *tox, int groupnumber, void *userdata)
423 */ 423 */
424 424
425void tox_callback_group_namelistchange(Tox *tox, void (*function)(Tox *tox, int, void *), void *userdata) 425void tox_callback_group_namelistchange(Tox *tox, void (*function)(Tox *tox, int, int, uint8_t, void *), void *userdata)
426{ 426{
427 Messenger *m = tox; 427 Messenger *m = tox;
428 m_callback_group_namelistchange(m, function, userdata); 428 m_callback_group_namelistchange(m, function, userdata);
diff --git a/toxcore/tox.h b/toxcore/tox.h
index fedc2c8a..08727d2a 100644
--- a/toxcore/tox.h
+++ b/toxcore/tox.h
@@ -366,10 +366,15 @@ void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, int, u
366/* Set callback function for peer name list changes. 366/* Set callback function for peer name list changes.
367 * 367 *
368 * It gets called every time the name list changes(new peer/name, deleted peer) 368 * It gets called every time the name list changes(new peer/name, deleted peer)
369 * Function(Tox *tox, int groupnumber, void *userdata) 369 * Function(Tox *tox, int groupnumber, int peernumber, TOX_CHAT_CHANGE change, void *userdata)
370 */ 370 */
371typedef enum {
372 TOX_CHAT_CHANGE_PEER_ADD,
373 TOX_CHAT_CHANGE_PEER_DEL,
374 TOX_CHAT_CHANGE_PEER_NAME,
375} TOX_CHAT_CHANGE;
371 376
372void tox_callback_group_namelistchange(Tox *tox, void (*function)(Tox *tox, int, void *), void *userdata); 377void tox_callback_group_namelistchange(Tox *tox, void (*function)(Tox *tox, int, int, uint8_t, void *), void *userdata);
373 378
374/* Creates a new groupchat and puts it in the chats array. 379/* Creates a new groupchat and puts it in the chats array.
375 * 380 *