mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-26 21:53:27 +01:00
Fix/update group logging implementation
This commit is contained in:
parent
18ef7ff693
commit
0a0756ec6a
@ -219,7 +219,7 @@ void cmd_group_accept(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (init_groupchat_win(m, groupnumber, NULL, 0) == -1) {
|
if (init_groupchat_win(m, groupnumber, NULL, 0, Group_Join_Type_Join) == -1) {
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat window failed to initialize.");
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat window failed to initialize.");
|
||||||
tox_group_leave(m, groupnumber, NULL, 0, NULL);
|
tox_group_leave(m, groupnumber, NULL, 0, NULL);
|
||||||
return;
|
return;
|
||||||
|
@ -521,7 +521,7 @@ void cmd_groupchat(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*arg
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int init = init_groupchat_win(m, groupnumber, name, len);
|
int init = init_groupchat_win(m, groupnumber, name, len, Group_Join_Type_Create);
|
||||||
|
|
||||||
if (init == -1) {
|
if (init == -1) {
|
||||||
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Group chat window failed to initialize.");
|
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Group chat window failed to initialize.");
|
||||||
@ -598,7 +598,7 @@ void cmd_join(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MA
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int init = init_groupchat_win(m, groupnumber, NULL, 0);
|
int init = init_groupchat_win(m, groupnumber, NULL, 0, Group_Join_Type_Join);
|
||||||
|
|
||||||
if (init == -1) {
|
if (init == -1) {
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat window failed to initialize.");
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Group chat window failed to initialize.");
|
||||||
|
@ -265,8 +265,54 @@ void exit_groupchat(ToxWindow *self, Tox *m, uint32_t groupnumber, const char *p
|
|||||||
}
|
}
|
||||||
|
|
||||||
tox_group_leave(m, groupnumber, (uint8_t *) partmessage, length, NULL);
|
tox_group_leave(m, groupnumber, (uint8_t *) partmessage, length, NULL);
|
||||||
|
|
||||||
|
if (self != NULL) {
|
||||||
close_groupchat(self, m, groupnumber);
|
close_groupchat(self, m, groupnumber);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initializes groupchat log. This should only be called after we have the group name.
|
||||||
|
*/
|
||||||
|
static void init_groupchat_log(ToxWindow *self, Tox *m, uint32_t groupnumber)
|
||||||
|
{
|
||||||
|
GroupChat *chat = get_groupchat(groupnumber);
|
||||||
|
|
||||||
|
if (!chat) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatContext *ctx = self->chatwin;
|
||||||
|
|
||||||
|
char my_id[TOX_ADDRESS_SIZE];
|
||||||
|
tox_self_get_address(m, (uint8_t *) my_id);
|
||||||
|
|
||||||
|
char chat_id[TOX_GROUP_CHAT_ID_SIZE];
|
||||||
|
|
||||||
|
TOX_ERR_GROUP_STATE_QUERIES err;
|
||||||
|
|
||||||
|
if (!tox_group_get_chat_id(m, groupnumber, (uint8_t *)chat_id, &err)) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Failed to fetch chat id. Logging disabled. (error: %d)", err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log_init(ctx->log, chat->group_name, my_id, chat_id, LOG_TYPE_CHAT) != 0) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Warning: Log failed to initialize.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (load_chat_history(self, ctx->log) != 0) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Failed to load chat history.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user_settings->autolog == AUTOLOG_ON) {
|
||||||
|
if (log_enable(ctx->log) != 0) {
|
||||||
|
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Failed to enable chat log.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
execute(ctx->history, self, m, "/log", GLOBAL_COMMAND_MODE); // print log state to screen
|
||||||
|
}
|
||||||
|
|
||||||
/* Creates a new toxic groupchat window associated with groupnumber.
|
/* Creates a new toxic groupchat window associated with groupnumber.
|
||||||
*
|
*
|
||||||
@ -275,15 +321,10 @@ void exit_groupchat(ToxWindow *self, Tox *m, uint32_t groupnumber, const char *p
|
|||||||
* Returns -2 if the groupnumber is already in use. This usually means that the client has
|
* Returns -2 if the groupnumber is already in use. This usually means that the client has
|
||||||
* been kicked and needs to close the chat window before opening a new one.
|
* been kicked and needs to close the chat window before opening a new one.
|
||||||
*/
|
*/
|
||||||
int init_groupchat_win(Tox *m, uint32_t groupnumber, const char *groupname, size_t length)
|
int init_groupchat_win(Tox *m, uint32_t groupnumber, const char *groupname, size_t length, Group_Join_Type join_type)
|
||||||
{
|
{
|
||||||
ToxWindow *self = new_group_chat(m, groupnumber, groupname, length);
|
ToxWindow *self = new_group_chat(m, groupnumber, groupname, length);
|
||||||
|
|
||||||
/* In case we're loading a saved group */
|
|
||||||
if (length == 0) {
|
|
||||||
groupchat_set_group_name(self, m, groupnumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i <= max_groupchat_index; ++i) {
|
for (int i = 0; i <= max_groupchat_index; ++i) {
|
||||||
if (!groupchats[i].active) {
|
if (!groupchats[i].active) {
|
||||||
groupchats[i].chatwin = add_window(m, self);
|
groupchats[i].chatwin = add_window(m, self);
|
||||||
@ -307,6 +348,10 @@ int init_groupchat_win(Tox *m, uint32_t groupnumber, const char *groupname, size
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (join_type == Group_Join_Type_Create || join_type == Group_Join_Type_Load) {
|
||||||
|
groupchat_set_group_name(self, m, groupnumber);
|
||||||
|
}
|
||||||
|
|
||||||
groupchat_onGroupPeerJoin(self, m, groupnumber, peer_id);
|
groupchat_onGroupPeerJoin(self, m, groupnumber, peer_id);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -901,6 +946,12 @@ void groupchat_onGroupPeerExit(ToxWindow *self, Tox *m, uint32_t groupnumber, ui
|
|||||||
|
|
||||||
static void groupchat_set_group_name(ToxWindow *self, Tox *m, uint32_t groupnumber)
|
static void groupchat_set_group_name(ToxWindow *self, Tox *m, uint32_t groupnumber)
|
||||||
{
|
{
|
||||||
|
GroupChat *chat = get_groupchat(groupnumber);
|
||||||
|
|
||||||
|
if (!chat) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
TOX_ERR_GROUP_STATE_QUERIES err;
|
TOX_ERR_GROUP_STATE_QUERIES err;
|
||||||
size_t len = tox_group_get_name_size(m, groupnumber, &err);
|
size_t len = tox_group_get_name_size(m, groupnumber, &err);
|
||||||
|
|
||||||
@ -916,11 +967,12 @@ static void groupchat_set_group_name(ToxWindow *self, Tox *m, uint32_t groupnumb
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char groupname[TOX_GROUP_MAX_GROUP_NAME_LENGTH + 1];
|
len = copy_tox_str(chat->group_name, sizeof(chat->group_name), tmp_groupname, len);
|
||||||
len = copy_tox_str(groupname, sizeof(groupname), tmp_groupname, len);
|
chat->group_name_length = len;
|
||||||
|
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
set_window_title(self, groupname, len);
|
set_window_title(self, chat->group_name, len);
|
||||||
|
init_groupchat_log(self, m, groupnumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -936,7 +988,6 @@ static void groupchat_onGroupSelfJoin(ToxWindow *self, Tox *m, uint32_t groupnum
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
groupchat_set_group_name(self, m, groupnumber);
|
|
||||||
chat->time_connected = get_unix_time();
|
chat->time_connected = get_unix_time();
|
||||||
|
|
||||||
char topic[TOX_GROUP_MAX_TOPIC_LENGTH + 1];
|
char topic[TOX_GROUP_MAX_TOPIC_LENGTH + 1];
|
||||||
@ -962,6 +1013,10 @@ static void groupchat_onGroupSelfJoin(ToxWindow *self, Tox *m, uint32_t groupnum
|
|||||||
|
|
||||||
line_info_add(self, timefrmt, NULL, NULL, SYS_MSG, 1, MAGENTA, "-!- Topic set to: %s", topic);
|
line_info_add(self, timefrmt, NULL, NULL, SYS_MSG, 1, MAGENTA, "-!- Topic set to: %s", topic);
|
||||||
|
|
||||||
|
if (chat->group_name_length == 0) {
|
||||||
|
groupchat_set_group_name(self, m, groupnumber);
|
||||||
|
}
|
||||||
|
|
||||||
/* Update own role since it may have changed while we were offline */
|
/* Update own role since it may have changed while we were offline */
|
||||||
TOX_ERR_GROUP_SELF_QUERY s_err;
|
TOX_ERR_GROUP_SELF_QUERY s_err;
|
||||||
TOX_GROUP_ROLE role = tox_group_self_get_role(m, groupnumber, &s_err);
|
TOX_GROUP_ROLE role = tox_group_self_get_role(m, groupnumber, &s_err);
|
||||||
@ -1583,17 +1638,6 @@ static void groupchat_onInit(ToxWindow *self, Tox *m)
|
|||||||
|
|
||||||
line_info_init(ctx->hst);
|
line_info_init(ctx->hst);
|
||||||
|
|
||||||
if (user_settings->autolog == AUTOLOG_ON) {
|
|
||||||
char myid[TOX_ADDRESS_SIZE];
|
|
||||||
tox_self_get_address(m, (uint8_t *) myid);
|
|
||||||
|
|
||||||
if (log_enable(self->name, myid, NULL, ctx->log, LOG_CONFERENCE) == -1) {
|
|
||||||
line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, "Warning: Log failed to initialize.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
execute(ctx->history, self, m, "/log", GLOBAL_COMMAND_MODE);
|
|
||||||
|
|
||||||
scrollok(ctx->history, 0);
|
scrollok(ctx->history, 0);
|
||||||
wmove(self->window, y2 - CURS_Y_OFFSET, 0);
|
wmove(self->window, y2 - CURS_Y_OFFSET, 0);
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,12 @@
|
|||||||
|
|
||||||
#define MAX_GROUPCHAT_NUM (MAX_WINDOWS_NUM - 2)
|
#define MAX_GROUPCHAT_NUM (MAX_WINDOWS_NUM - 2)
|
||||||
|
|
||||||
|
typedef enum Group_Join_Type {
|
||||||
|
Group_Join_Type_Create,
|
||||||
|
Group_Join_Type_Join,
|
||||||
|
Group_Join_Type_Load,
|
||||||
|
} Group_Join_Type;
|
||||||
|
|
||||||
typedef struct GroupPeer {
|
typedef struct GroupPeer {
|
||||||
bool active;
|
bool active;
|
||||||
char name[TOX_MAX_NAME_LENGTH];
|
char name[TOX_MAX_NAME_LENGTH];
|
||||||
@ -49,6 +55,8 @@ typedef struct {
|
|||||||
uint32_t num_peers; /* Number of peers in the chat/name_list array */
|
uint32_t num_peers; /* Number of peers in the chat/name_list array */
|
||||||
uint32_t max_idx; /* Maximum peer list index - 1 */
|
uint32_t max_idx; /* Maximum peer list index - 1 */
|
||||||
|
|
||||||
|
char group_name[TOX_GROUP_MAX_GROUP_NAME_LENGTH + 1];
|
||||||
|
size_t group_name_length;
|
||||||
uint32_t groupnumber;
|
uint32_t groupnumber;
|
||||||
bool active;
|
bool active;
|
||||||
uint64_t time_connected; /* The time we successfully connected to the group */
|
uint64_t time_connected; /* The time we successfully connected to the group */
|
||||||
@ -58,7 +66,7 @@ typedef struct {
|
|||||||
} GroupChat;
|
} GroupChat;
|
||||||
|
|
||||||
void exit_groupchat(ToxWindow *self, Tox *m, uint32_t groupnumber, const char *partmessage, size_t length);
|
void exit_groupchat(ToxWindow *self, Tox *m, uint32_t groupnumber, const char *partmessage, size_t length);
|
||||||
int init_groupchat_win(Tox *m, uint32_t groupnumber, const char *groupname, size_t length);
|
int init_groupchat_win(Tox *m, uint32_t groupnumber, const char *groupname, size_t length, Group_Join_Type join_type);
|
||||||
void set_nick_all_groups(Tox *m, const char *new_nick, size_t length);
|
void set_nick_all_groups(Tox *m, const char *new_nick, size_t length);
|
||||||
void set_status_all_groups(Tox *m, uint8_t status);
|
void set_status_all_groups(Tox *m, uint8_t status);
|
||||||
int group_get_nick_peer_id(uint32_t groupnumber, const char *nick, uint32_t *peer_id);
|
int group_get_nick_peer_id(uint32_t groupnumber, const char *nick, uint32_t *peer_id);
|
||||||
|
@ -478,7 +478,7 @@ static void load_groups(Tox *m)
|
|||||||
size_t numgroups = tox_group_get_number_groups(m);
|
size_t numgroups = tox_group_get_number_groups(m);
|
||||||
|
|
||||||
for (size_t i = 0; i < numgroups; ++i) {
|
for (size_t i = 0; i < numgroups; ++i) {
|
||||||
if (init_groupchat_win(m, i, NULL, 0) != 0) {
|
if (init_groupchat_win(m, i, NULL, 0, Group_Join_Type_Load) != 0) {
|
||||||
tox_group_leave(m, i, NULL, 0, NULL);
|
tox_group_leave(m, i, NULL, 0, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user