1
0
mirror of https://github.com/Tha14/toxic.git synced 2024-11-15 05:53:02 +01:00

add support for group persistence

This commit is contained in:
Jfreegman 2015-02-27 19:03:53 -05:00
parent b31bd93e7d
commit 830ddb21b5
4 changed files with 22 additions and 5 deletions

View File

@ -355,7 +355,7 @@ void cmd_groupchat(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*arg
return; return;
} }
if (init_groupchat_win(prompt, m, groupnum, name, len) == -1) { if (init_groupchat_win(m, groupnum, name, len) == -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_delete(m, groupnum, NULL, 0); tox_group_delete(m, groupnum, NULL, 0);
return; return;
@ -372,7 +372,7 @@ static void join_invite(ToxWindow *self, Tox *m)
return; return;
} }
if (init_groupchat_win(prompt, m, groupnumber, NULL, 0) == -1) { if (init_groupchat_win(m, groupnumber, NULL, 0) == -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_delete(m, groupnumber, NULL, 0); tox_group_delete(m, groupnumber, NULL, 0);
return; return;
@ -430,7 +430,7 @@ void cmd_join(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MA
return; return;
} }
if (init_groupchat_win(prompt, m, groupnum, NULL, 0) == -1) { if (init_groupchat_win(m, groupnum, NULL, 0) == -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_delete(m, groupnum, NULL, 0); tox_group_delete(m, groupnum, NULL, 0);
return; return;

View File

@ -112,7 +112,7 @@ static const char group_cmd_list[AC_NUM_GROUP_COMMANDS][MAX_CMDNAME_SIZE] = {
ToxWindow new_group_chat(Tox *m, int groupnum, const char *groupname, int length); ToxWindow new_group_chat(Tox *m, int groupnum, const char *groupname, int length);
int init_groupchat_win(ToxWindow *prompt, Tox *m, int groupnum, const char *groupname, int length) int init_groupchat_win(Tox *m, int groupnum, const char *groupname, int length)
{ {
if (groupnum > MAX_GROUPCHAT_NUM) if (groupnum > MAX_GROUPCHAT_NUM)
return -1; return -1;
@ -137,6 +137,7 @@ int init_groupchat_win(ToxWindow *prompt, Tox *m, int groupnum, const char *grou
if (i == max_groupchat_index) if (i == max_groupchat_index)
++max_groupchat_index; ++max_groupchat_index;
store_data(m, DATA_FILE);
return 0; return 0;
} }
} }
@ -159,6 +160,9 @@ static void kill_groupchat_window(ToxWindow *self)
del_window(self); del_window(self);
} }
/* Closes groupchat window and cleans up.
* If delete_group is true the group will be permanently deleted.
*/
void close_groupchat(ToxWindow *self, Tox *m, int groupnum, const char *partmessage, int length) void close_groupchat(ToxWindow *self, Tox *m, int groupnum, const char *partmessage, int length)
{ {
tox_group_delete(m, groupnum, (const uint8_t *) partmessage, (uint16_t) length); tox_group_delete(m, groupnum, (const uint8_t *) partmessage, (uint16_t) length);

View File

@ -73,7 +73,7 @@ typedef struct {
} GroupChat; } GroupChat;
void close_groupchat(ToxWindow *self, Tox *m, int groupnum, const char *partmessage, int length); void close_groupchat(ToxWindow *self, Tox *m, int groupnum, const char *partmessage, int length);
int init_groupchat_win(ToxWindow *prompt, Tox *m, int groupnum, const char *groupname, int length); int init_groupchat_win(Tox *m, int groupnum, const char *groupname, int length);
void set_nick_all_groups(Tox *m, const char *nick, uint16_t length); void set_nick_all_groups(Tox *m, const char *nick, uint16_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_peernumber(int groupnum, const char *nick); int group_get_nick_peernumber(int groupnum, const char *nick);

View File

@ -47,6 +47,7 @@
#include "toxic.h" #include "toxic.h"
#include "windows.h" #include "windows.h"
#include "friendlist.h" #include "friendlist.h"
#include "groupchat.h"
#include "prompt.h" #include "prompt.h"
#include "misc_tools.h" #include "misc_tools.h"
#include "file_senders.h" #include "file_senders.h"
@ -481,6 +482,17 @@ static void load_friendlist(Tox *m)
sort_friendlist_index(); sort_friendlist_index();
} }
static void load_groups(Tox *m)
{
uint32_t i;
uint32_t numgroups = tox_group_count_groups(m);
for (i = 0; i < numgroups; ++i) {
if (init_groupchat_win(m, i, NULL, 0) == -1)
tox_group_delete(m, i, NULL, 0);
}
}
/* return length of password on success, 0 on failure */ /* return length of password on success, 0 on failure */
static int password_prompt(char *buf, int size) static int password_prompt(char *buf, int size)
{ {
@ -1109,6 +1121,7 @@ int main(int argc, char *argv[])
if (settings_err == -1) if (settings_err == -1)
queue_init_message("Failed to load user settings"); queue_init_message("Failed to load user settings");
load_groups(m);
print_init_messages(prompt); print_init_messages(prompt);
cleanup_init_messages(); cleanup_init_messages();