1
0
mirror of https://github.com/Tha14/toxic.git synced 2025-12-15 14:06:34 +01:00

Add last seen and public key fields for group peers and add whois command

This commit is contained in:
Jfreegman
2015-09-13 23:15:58 -04:00
parent 97d5fb84fc
commit 2e4c86be4b
8 changed files with 129 additions and 7 deletions

View File

@@ -63,16 +63,16 @@
extern char *DATA_FILE;
static GroupChat groupchats[MAX_GROUPCHAT_NUM];
GroupChat groupchats[MAX_GROUPCHAT_NUM];
static int max_groupchat_index = 0;
extern struct user_settings *user_settings;
extern struct Winthread Winthread;
#ifdef AUDIO
#define AC_NUM_GROUP_COMMANDS 39
#define AC_NUM_GROUP_COMMANDS 40
#else
#define AC_NUM_GROUP_COMMANDS 35
#define AC_NUM_GROUP_COMMANDS 36
#endif /* AUDIO */
/* groupchat command names used for tab completion. */
@@ -112,6 +112,7 @@ static const char group_cmd_list[AC_NUM_GROUP_COMMANDS][MAX_CMDNAME_SIZE] = {
{ "/unmod" },
{ "/unsilence" },
{ "/whisper" },
{ "/whois" },
#ifdef AUDIO
@@ -327,10 +328,23 @@ int group_get_nick_peer_id(uint32_t groupnum, const char *nick, uint32_t *peer_i
return -1;
}
static void groupchat_update_last_seen(uint32_t groupnum, uint32_t peer_id)
{
GroupChat *chat = &groupchats[groupnum];
if (!chat)
return;
int peer_index = get_peer_index(groupnum, peer_id);
if (peer_index >= 0)
chat->peer_list[peer_index].last_active = get_unix_time();
}
/* Returns the peerlist index of peer_id for groupnum's group chat.
* Returns -1 on failure.
*/
static int get_peer_index(uint32_t groupnum, uint32_t peer_id)
int get_peer_index(uint32_t groupnum, uint32_t peer_id)
{
GroupChat *chat = &groupchats[groupnum];
@@ -448,6 +462,8 @@ static void groupchat_onGroupMessage(ToxWindow *self, Tox *m, uint32_t groupnum,
if (self->num != groupnum)
return;
groupchat_update_last_seen(groupnum, peer_id);
if (type == TOX_MESSAGE_TYPE_ACTION) {
group_onAction(self, m, groupnum, peer_id, msg, len);
return;
@@ -493,6 +509,8 @@ static void groupchat_onGroupPrivateMessage(ToxWindow *self, Tox *m, uint32_t gr
if (self->num != groupnum)
return;
groupchat_update_last_seen(groupnum, peer_id);
ChatContext *ctx = self->chatwin;
char nick[TOX_MAX_NAME_LENGTH];
@@ -520,6 +538,8 @@ static void groupchat_onGroupTopicChange(ToxWindow *self, Tox *m, uint32_t group
if (self->num != groupnum)
return;
groupchat_update_last_seen(groupnum, peer_id);
char timefrmt[TIME_STR_SIZE];
get_time_str(timefrmt, sizeof(timefrmt));
@@ -651,6 +671,8 @@ static void groupchat_onGroupPeerJoin(ToxWindow *self, Tox *m, uint32_t groupnum
chat->peer_list[i].name_length = strlen(chat->peer_list[i].name);
chat->peer_list[i].status = tox_group_peer_get_status(m, groupnum, peer_id, NULL);
chat->peer_list[i].role = tox_group_peer_get_role(m, groupnum, peer_id, NULL);
chat->peer_list[i].last_active = get_unix_time();
tox_group_peer_get_public_key(m, groupnum, peer_id, (uint8_t *) chat->peer_list[i].public_key, NULL);
if (i == chat->max_idx)
++chat->max_idx;
@@ -833,6 +855,8 @@ static void groupchat_onGroupModeration(ToxWindow *self, Tox *m, uint32_t groupn
if (tgt_index < 0)
return;
groupchat_update_last_seen(groupnum, src_peer_id);
char timefrmt[TIME_STR_SIZE];
get_time_str(timefrmt, sizeof(timefrmt));
@@ -876,6 +900,8 @@ static void groupchat_onGroupNickChange(ToxWindow *self, Tox *m, uint32_t groupn
if (peer_index < 0)
return;
groupchat_update_last_seen(groupnum, peer_id);
char oldnick[TOX_MAX_NAME_LENGTH];
get_group_nick_truncate(m, oldnick, peer_id, groupnum);
@@ -903,6 +929,8 @@ static void groupchat_onGroupStatusChange(ToxWindow *self, Tox *m, uint32_t grou
if (peer_index < 0)
return;
groupchat_update_last_seen(groupnum, peer_id);
GroupChat *chat = &groupchats[groupnum];
chat->peer_list[peer_index].status = status;
}