mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
Added callback that tells you when the peer name list of a group chat changes.
This commit is contained in:
parent
d2b56faded
commit
f21a9a7666
|
@ -1003,7 +1003,13 @@ void print_groupmessage(Tox *m, int groupnumber, int peernumber, uint8_t *messag
|
||||||
|
|
||||||
new_lines(msg);
|
new_lines(msg);
|
||||||
}
|
}
|
||||||
|
void print_groupnamelistchange(Tox *m, int groupnumber, void *userdata)
|
||||||
|
{
|
||||||
|
char msg[256];
|
||||||
|
sprintf(msg, "[g] %u: Name list changed:", groupnumber);
|
||||||
|
new_lines(msg);
|
||||||
|
print_groupchatpeers(m, groupnumber);
|
||||||
|
}
|
||||||
void file_request_accept(Tox *m, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename,
|
void file_request_accept(Tox *m, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename,
|
||||||
uint16_t filename_length, void *userdata)
|
uint16_t filename_length, void *userdata)
|
||||||
{
|
{
|
||||||
|
@ -1105,6 +1111,7 @@ int main(int argc, char *argv[])
|
||||||
tox_callback_file_data(m, write_file, NULL);
|
tox_callback_file_data(m, write_file, NULL);
|
||||||
tox_callback_file_control(m, file_print_control, NULL);
|
tox_callback_file_control(m, file_print_control, NULL);
|
||||||
tox_callback_file_sendrequest(m, file_request_accept, NULL);
|
tox_callback_file_sendrequest(m, file_request_accept, NULL);
|
||||||
|
tox_callback_group_namelistchange(m, print_groupnamelistchange, NULL);
|
||||||
|
|
||||||
initscr();
|
initscr();
|
||||||
noecho();
|
noecho();
|
||||||
|
|
|
@ -779,20 +779,51 @@ void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int,
|
||||||
m->group_message = function;
|
m->group_message = function;
|
||||||
m->group_message_userdata = userdata;
|
m->group_message_userdata = userdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set callback function for peer name list changes.
|
||||||
|
*
|
||||||
|
* It gets called every time the name list changes(new peer/name, deleted peer)
|
||||||
|
* Function(Tox *tox, int groupnumber, void *userdata)
|
||||||
|
*/
|
||||||
|
void m_callback_group_namelistchange(Messenger *m, void (*function)(Messenger *m, int, void *), void *userdata)
|
||||||
|
{
|
||||||
|
m->group_namelistchange = function;
|
||||||
|
m->group_namelistchange_userdata = userdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_chat_num(Messenger *m, Group_Chat *chat)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
for (i = 0; i < m->numchats; ++i) { //TODO: remove this
|
||||||
|
if (m->chats[i] == chat)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static void group_message_function(Group_Chat *chat, int peer_number, uint8_t *message, uint16_t length, void *userdata)
|
static void group_message_function(Group_Chat *chat, int peer_number, uint8_t *message, uint16_t length, void *userdata)
|
||||||
{
|
{
|
||||||
Messenger *m = userdata;
|
Messenger *m = userdata;
|
||||||
uint32_t i;
|
int i = get_chat_num(m, chat);
|
||||||
|
if (i == -1)
|
||||||
for (i = 0; i < m->numchats; ++i) { //TODO: remove this
|
return;
|
||||||
if (m->chats[i] == chat)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m->group_message)
|
if (m->group_message)
|
||||||
(*m->group_message)(m, i, peer_number, message, length, m->group_message_userdata);
|
(*m->group_message)(m, i, peer_number, message, length, m->group_message_userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void group_namelistchange_function(Group_Chat *chat, void *userdata)
|
||||||
|
{
|
||||||
|
Messenger *m = userdata;
|
||||||
|
int i = get_chat_num(m, chat);
|
||||||
|
if (i == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (m->group_namelistchange)
|
||||||
|
(*m->group_namelistchange)(m, i, m->group_namelistchange_userdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Creates a new groupchat and puts it in the chats array.
|
/* Creates a new groupchat and puts it in the chats array.
|
||||||
*
|
*
|
||||||
* return group number on success.
|
* return group number on success.
|
||||||
|
@ -810,6 +841,7 @@ int add_groupchat(Messenger *m)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
callback_groupmessage(newchat, &group_message_function, m);
|
callback_groupmessage(newchat, &group_message_function, m);
|
||||||
|
callback_namelistchange(newchat, &group_namelistchange_function, m);
|
||||||
/* TODO: remove this (group nicks should not be tied to the global one) */
|
/* TODO: remove this (group nicks should not be tied to the global one) */
|
||||||
set_nick(newchat, m->name, m->name_length);
|
set_nick(newchat, m->name, m->name_length);
|
||||||
m->chats[i] = newchat;
|
m->chats[i] = newchat;
|
||||||
|
@ -830,6 +862,7 @@ int add_groupchat(Messenger *m)
|
||||||
|
|
||||||
m->chats = temp;
|
m->chats = temp;
|
||||||
callback_groupmessage(temp[m->numchats], &group_message_function, m);
|
callback_groupmessage(temp[m->numchats], &group_message_function, m);
|
||||||
|
callback_namelistchange(temp[m->numchats], &group_namelistchange_function, m);
|
||||||
/* TODO: remove this (group nicks should not be tied to the global one) */
|
/* TODO: remove this (group nicks should not be tied to the global one) */
|
||||||
set_nick(temp[m->numchats], m->name, m->name_length);
|
set_nick(temp[m->numchats], m->name, m->name_length);
|
||||||
++m->numchats;
|
++m->numchats;
|
||||||
|
|
|
@ -198,6 +198,8 @@ typedef struct Messenger {
|
||||||
void *group_invite_userdata;
|
void *group_invite_userdata;
|
||||||
void (*group_message)(struct Messenger *m, int, int, uint8_t *, uint16_t, void *);
|
void (*group_message)(struct Messenger *m, int, int, uint8_t *, uint16_t, void *);
|
||||||
void *group_message_userdata;
|
void *group_message_userdata;
|
||||||
|
void (*group_namelistchange)(struct Messenger *m, int, void *);
|
||||||
|
void *group_namelistchange_userdata;
|
||||||
|
|
||||||
void (*file_sendrequest)(struct Messenger *m, int, uint8_t, uint64_t, uint8_t *, uint16_t, void *);
|
void (*file_sendrequest)(struct Messenger *m, int, uint8_t, uint64_t, uint8_t *, uint16_t, void *);
|
||||||
void *file_sendrequest_userdata;
|
void *file_sendrequest_userdata;
|
||||||
|
@ -455,6 +457,13 @@ void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int, u
|
||||||
void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t *, uint16_t, void *),
|
void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t *, uint16_t, void *),
|
||||||
void *userdata);
|
void *userdata);
|
||||||
|
|
||||||
|
/* Set callback function for peer name list changes.
|
||||||
|
*
|
||||||
|
* It gets called every time the name list changes(new peer/name, deleted peer)
|
||||||
|
* Function(Tox *tox, int groupnumber, void *userdata)
|
||||||
|
*/
|
||||||
|
void m_callback_group_namelistchange(Messenger *m, void (*function)(Messenger *m, int, void *), void *userdata);
|
||||||
|
|
||||||
/* Creates a new groupchat and puts it in the chats array.
|
/* Creates a new groupchat and puts it in the chats array.
|
||||||
*
|
*
|
||||||
* return group number on success.
|
* return group number on success.
|
||||||
|
|
|
@ -218,6 +218,9 @@ static int addpeer(Group_Chat *chat, uint8_t *client_id)
|
||||||
chat->group[chat->numpeers].last_recv_msgping = unix_time();
|
chat->group[chat->numpeers].last_recv_msgping = unix_time();
|
||||||
++chat->numpeers;
|
++chat->numpeers;
|
||||||
|
|
||||||
|
if (chat->peer_namelistchange != NULL)
|
||||||
|
(*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata);
|
||||||
|
|
||||||
return (chat->numpeers - 1);
|
return (chat->numpeers - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,6 +253,10 @@ static int delpeer(Group_Chat *chat, int peernum)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
chat->group = temp;
|
chat->group = temp;
|
||||||
|
|
||||||
|
if (chat->peer_namelistchange != NULL)
|
||||||
|
(*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,6 +290,8 @@ static void setnick(Group_Chat *chat, int peernum, uint8_t *contents, uint16_t c
|
||||||
/* Force null termination */
|
/* Force null termination */
|
||||||
chat->group[peernum].nick[contents_len - 1] = 0;
|
chat->group[peernum].nick[contents_len - 1] = 0;
|
||||||
chat->group[peernum].nick_len = contents_len;
|
chat->group[peernum].nick_len = contents_len;
|
||||||
|
if (chat->peer_namelistchange != NULL)
|
||||||
|
(*chat->peer_namelistchange)(chat, chat->group_namelistchange_userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* min time between pings sent to one peer in seconds */
|
/* 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,
|
||||||
chat->group_message_userdata = userdata;
|
chat->group_message_userdata = userdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void callback_namelistchange(Group_Chat *chat, void (*function)(Group_Chat *chat, void *), void *userdata)
|
||||||
|
{
|
||||||
|
chat->peer_namelistchange = function;
|
||||||
|
chat->group_namelistchange_userdata = userdata;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t group_numpeers(Group_Chat *chat)
|
uint32_t group_numpeers(Group_Chat *chat)
|
||||||
{
|
{
|
||||||
return chat->numpeers;
|
return chat->numpeers;
|
||||||
|
|
|
@ -65,6 +65,8 @@ typedef struct Group_Chat {
|
||||||
uint32_t message_number;
|
uint32_t message_number;
|
||||||
void (*group_message)(struct Group_Chat *m, int, uint8_t *, uint16_t, void *);
|
void (*group_message)(struct Group_Chat *m, int, uint8_t *, uint16_t, void *);
|
||||||
void *group_message_userdata;
|
void *group_message_userdata;
|
||||||
|
void (*peer_namelistchange)(struct Group_Chat *m, void *);
|
||||||
|
void *group_namelistchange_userdata;
|
||||||
|
|
||||||
uint64_t last_sent_ping;
|
uint64_t last_sent_ping;
|
||||||
|
|
||||||
|
@ -94,9 +96,16 @@ int group_peername(Group_Chat *chat, int peernum, uint8_t *name);
|
||||||
*
|
*
|
||||||
* format of function is: function(Group_Chat *chat, peer number, message, message length, userdata)
|
* format of function is: function(Group_Chat *chat, peer number, message, message length, userdata)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat, int, uint8_t *, uint16_t, void *),
|
void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat, int, uint8_t *, uint16_t, void *),
|
||||||
void *userdata);
|
void *userdata);
|
||||||
|
/*
|
||||||
|
* Set callback function for peer name list changes.
|
||||||
|
*
|
||||||
|
* It gets called every time the name list changes(new peer/name, deleted peer)
|
||||||
|
*
|
||||||
|
* format of function is: function(Group_Chat *chat, userdata)
|
||||||
|
*/
|
||||||
|
void callback_namelistchange(Group_Chat *chat, void (*function)(Group_Chat *chat, void *), void *userdata);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Send a message to the group.
|
* Send a message to the group.
|
||||||
|
|
|
@ -415,6 +415,19 @@ void tox_callback_group_message(Tox *tox, void (*function)(Messenger *tox, int,
|
||||||
Messenger *m = tox;
|
Messenger *m = tox;
|
||||||
m_callback_group_message(m, function, userdata);
|
m_callback_group_message(m, function, userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set callback function for peer name list changes.
|
||||||
|
*
|
||||||
|
* It gets called every time the name list changes(new peer/name, deleted peer)
|
||||||
|
* Function(Tox *tox, int groupnumber, void *userdata)
|
||||||
|
*/
|
||||||
|
|
||||||
|
void tox_callback_group_namelistchange(Tox *tox, void (*function)(Tox *tox, int, void *), void *userdata)
|
||||||
|
{
|
||||||
|
Messenger *m = tox;
|
||||||
|
m_callback_group_namelistchange(m, function, userdata);
|
||||||
|
}
|
||||||
|
|
||||||
/* Creates a new groupchat and puts it in the chats array.
|
/* Creates a new groupchat and puts it in the chats array.
|
||||||
*
|
*
|
||||||
* return group number on success.
|
* return group number on success.
|
||||||
|
|
|
@ -363,6 +363,14 @@ void tox_callback_group_invite(Tox *tox, void (*function)(Tox *tox, int, uint8_t
|
||||||
void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, int, uint8_t *, uint16_t, void *),
|
void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, int, uint8_t *, uint16_t, void *),
|
||||||
void *userdata);
|
void *userdata);
|
||||||
|
|
||||||
|
/* Set callback function for peer name list changes.
|
||||||
|
*
|
||||||
|
* It gets called every time the name list changes(new peer/name, deleted peer)
|
||||||
|
* Function(Tox *tox, int groupnumber, void *userdata)
|
||||||
|
*/
|
||||||
|
|
||||||
|
void tox_callback_group_namelistchange(Tox *tox, void (*function)(Tox *tox, int, void *), void *userdata);
|
||||||
|
|
||||||
/* Creates a new groupchat and puts it in the chats array.
|
/* Creates a new groupchat and puts it in the chats array.
|
||||||
*
|
*
|
||||||
* return group number on success.
|
* return group number on success.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user