From aa6e205ee848b316f7d902022815c28317006e97 Mon Sep 17 00:00:00 2001 From: Jfreegman Date: Tue, 3 Sep 2013 21:31:50 -0400 Subject: [PATCH 1/5] Show offline friends names and some cosmetic changes --- src/chat.c | 4 ++-- src/friendlist.c | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/chat.c b/src/chat.c index 5b26165..b6cb639 100644 --- a/src/chat.c +++ b/src/chat.c @@ -102,7 +102,7 @@ static void chat_onNickChange(ToxWindow *self, int num, uint8_t *nick, uint16_t wattroff(ctx->history, COLOR_PAIR(2)); nick[len - 1] = '\0'; - snprintf(self->title, sizeof(self->title), "[%s (%d)]", nick, num); + snprintf(self->title, sizeof(self->title), "[%s]", nick); wprintw(ctx->history, "* Chat partner changed nick to '%s'\n", nick); } @@ -444,7 +444,7 @@ ToxWindow new_chat(Tox *m, int friendnum) uint8_t nick[TOX_MAX_NAME_LENGTH] = {0}; tox_getname(m, friendnum, (uint8_t *) &nick); - snprintf(ret.title, sizeof(ret.title), "[%s (%d)]", nick, friendnum); + snprintf(ret.title, sizeof(ret.title), "[%s]", nick); ChatContext *x = calloc(1, sizeof(ChatContext)); ret.x = x; diff --git a/src/friendlist.c b/src/friendlist.c index af30e0e..b5078e4 100644 --- a/src/friendlist.c +++ b/src/friendlist.c @@ -72,8 +72,10 @@ int friendlist_onFriendAdded(Tox *m, int num) friends[i].num = num; friends[i].active = true; friends[i].chatwin = -1; - //tox_getname(m, num, friends[i].name); - strcpy((char *) friends[i].name, "unknown"); + + if (tox_getname(m, num, friends[i].name) != 0 || friends[i].name[0] == '\0') + strcpy((char *) friends[i].name, "unknown"); + strcpy((char *) friends[i].statusmsg, NOSTATUSMSG); if (i == num_friends) @@ -164,8 +166,8 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m) wprintw(self->window, "Empty. Add some friends! :-)\n"); } else { wattron(self->window, COLOR_PAIR(2) | A_BOLD); - wprintw(self->window, " * Open chat with up/down keys and enter.\n"); - wprintw(self->window, " * Delete friends with the backspace key.\n\n"); + wprintw(self->window, " Open chat with up/down keys and enter.\n"); + wprintw(self->window, " Delete friends with the backspace key.\n\n"); wattroff(self->window, COLOR_PAIR(2) | A_BOLD); } @@ -182,33 +184,31 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m) if (is_online) { TOX_USERSTATUS status = tox_get_userstatus(m, friends[i].num); - int colour; + int colour = 7; /* Invalid or other errors default to black */ switch(status) { case TOX_USERSTATUS_NONE: colour = 1; break; - case TOX_USERSTATUS_AWAY: colour = 5; break; - case TOX_USERSTATUS_BUSY: - case TOX_USERSTATUS_INVALID: - default: colour = 3; break; } + wprintw(self->window, "["); wattron(self->window, COLOR_PAIR(colour)); - wprintw(self->window, "%s ", friends[i].name); + wprintw(self->window, "O"); wattroff(self->window, COLOR_PAIR(colour)); + wprintw(self->window, "] %s ", friends[i].name); if (strncmp(friends[i].statusmsg, NOSTATUSMSG, strlen(NOSTATUSMSG))) wprintw(self->window, "(%s)\n", friends[i].statusmsg); } else { - wprintw(self->window, "%s (Offline)\n", friends[i].name); + wprintw(self->window, "[O] %s (Offline)\n", friends[i].name); } } } From 0be84ecbb30df7a36735b8d162654454b7812004 Mon Sep 17 00:00:00 2001 From: Jfreegman Date: Tue, 3 Sep 2013 22:05:36 -0400 Subject: [PATCH 2/5] notes/status messages no longer forced --- src/friendlist.c | 13 +++++++------ src/friendlist.h | 2 -- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/friendlist.c b/src/friendlist.c index b5078e4..3849082 100644 --- a/src/friendlist.c +++ b/src/friendlist.c @@ -76,7 +76,7 @@ int friendlist_onFriendAdded(Tox *m, int num) if (tox_getname(m, num, friends[i].name) != 0 || friends[i].name[0] == '\0') strcpy((char *) friends[i].name, "unknown"); - strcpy((char *) friends[i].statusmsg, NOSTATUSMSG); + tox_set_statusmessage(m, "\0", strlen("\0")); if (i == num_friends) ++num_friends; @@ -202,13 +202,14 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m) wattron(self->window, COLOR_PAIR(colour)); wprintw(self->window, "O"); wattroff(self->window, COLOR_PAIR(colour)); - wprintw(self->window, "] %s ", friends[i].name); - - if (strncmp(friends[i].statusmsg, NOSTATUSMSG, strlen(NOSTATUSMSG))) - wprintw(self->window, "(%s)\n", friends[i].statusmsg); + wprintw(self->window, "] %s", friends[i].name); + if (friends[i].statusmsg[0] != '\0') + wprintw(self->window, " (%s)\n", friends[i].statusmsg); + else + wprintw(self->window, "\n"); } else { - wprintw(self->window, "[O] %s (Offline)\n", friends[i].name); + wprintw(self->window, "[O] %s\n", friends[i].name); } } } diff --git a/src/friendlist.h b/src/friendlist.h index 6b21bac..26c9106 100644 --- a/src/friendlist.h +++ b/src/friendlist.h @@ -4,8 +4,6 @@ #include "toxic_windows.h" #include "chat.h" -#define NOSTATUSMSG "NOSTATUSMSG" /* Friends' default status message */ - ToxWindow new_friendlist(); int friendlist_onFriendAdded(Tox *m, int num); void disable_chatwin(int f_num); From 20d1ad9842bdea3d01f24520be2ca24604d85e97 Mon Sep 17 00:00:00 2001 From: Jfreegman Date: Wed, 4 Sep 2013 00:58:23 -0400 Subject: [PATCH 3/5] save nicks and exit tox properly --- src/chat.c | 1 + src/prompt.c | 1 + src/windows.c | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/chat.c b/src/chat.c index b6cb639..dbc53c5 100644 --- a/src/chat.c +++ b/src/chat.c @@ -270,6 +270,7 @@ void execute(ToxWindow *self, ChatContext *ctx, Tox *m, char *cmd) else if (!strcmp(cmd, "/quit") || !strcmp(cmd, "/exit") || !strcmp(cmd, "/q")) { endwin(); + tox_kill(m); exit(0); } diff --git a/src/prompt.c b/src/prompt.c index 0444494..19ab274 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -235,6 +235,7 @@ void cmd_connect(ToxWindow *self, Tox *m, int argc, char **argv) void cmd_quit(ToxWindow *self, Tox *m, int argc, char **argv) { endwin(); + tox_kill(m); exit(0); } diff --git a/src/windows.c b/src/windows.c index 1e28667..229e224 100644 --- a/src/windows.c +++ b/src/windows.c @@ -64,8 +64,11 @@ void on_nickchange(Tox *m, int friendnumber, uint8_t *string, uint16_t length, v int i; for (i = 0; i < MAX_WINDOWS_NUM; ++i) { - if (windows[i].onNickChange != NULL) + if (windows[i].onNickChange != NULL) { windows[i].onNickChange(&windows[i], friendnumber, string, length); + if (store_data(m, DATA_FILE)) + wprintw(prompt->window, "\nCould not store Tox data\n"); + } } } From f93af40f28971274892a388b63752d2dd350ea93 Mon Sep 17 00:00:00 2001 From: Jfreegman Date: Wed, 4 Sep 2013 02:05:36 -0400 Subject: [PATCH 4/5] Save messenger data on exit --- src/chat.c | 4 ++++ src/friendlist.c | 3 +-- src/prompt.c | 1 + src/windows.c | 5 +---- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/chat.c b/src/chat.c index dbc53c5..5a4e283 100644 --- a/src/chat.c +++ b/src/chat.c @@ -19,6 +19,9 @@ #define CURS_Y_OFFSET 3 +extern char *DATA_FILE; +extern int store_data(Tox *m, char *path); + typedef struct { int friendnum; wchar_t line[MAX_STR_SIZE]; @@ -270,6 +273,7 @@ void execute(ToxWindow *self, ChatContext *ctx, Tox *m, char *cmd) else if (!strcmp(cmd, "/quit") || !strcmp(cmd, "/exit") || !strcmp(cmd, "/q")) { endwin(); + store_data(m, DATA_FILE); tox_kill(m); exit(0); } diff --git a/src/friendlist.c b/src/friendlist.c index 3849082..3a349ef 100644 --- a/src/friendlist.c +++ b/src/friendlist.c @@ -37,9 +37,8 @@ void friendlist_onMessage(ToxWindow *self, Tox *m, int num, uint8_t *str, uint16 if (num >= num_friends) return; - if (friends[num].chatwin == -1) { + if (friends[num].chatwin == -1) friends[num].chatwin = add_window(m, new_chat(m, friends[num].num)); - } } void friendlist_onNickChange(ToxWindow *self, int num, uint8_t *str, uint16_t len) diff --git a/src/prompt.c b/src/prompt.c index 19ab274..2865654 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -235,6 +235,7 @@ void cmd_connect(ToxWindow *self, Tox *m, int argc, char **argv) void cmd_quit(ToxWindow *self, Tox *m, int argc, char **argv) { endwin(); + store_data(m, DATA_FILE); tox_kill(m); exit(0); } diff --git a/src/windows.c b/src/windows.c index 229e224..1e28667 100644 --- a/src/windows.c +++ b/src/windows.c @@ -64,11 +64,8 @@ void on_nickchange(Tox *m, int friendnumber, uint8_t *string, uint16_t length, v int i; for (i = 0; i < MAX_WINDOWS_NUM; ++i) { - if (windows[i].onNickChange != NULL) { + if (windows[i].onNickChange != NULL) windows[i].onNickChange(&windows[i], friendnumber, string, length); - if (store_data(m, DATA_FILE)) - wprintw(prompt->window, "\nCould not store Tox data\n"); - } } } From 2f93081a42b590117c0e85650661bbc9ba3b3da0 Mon Sep 17 00:00:00 2001 From: Jfreegman Date: Wed, 4 Sep 2013 17:22:16 -0400 Subject: [PATCH 5/5] slight refactor of select_friend() and fix mistake --- src/friendlist.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/friendlist.c b/src/friendlist.c index 3a349ef..9073420 100644 --- a/src/friendlist.c +++ b/src/friendlist.c @@ -75,8 +75,6 @@ int friendlist_onFriendAdded(Tox *m, int num) if (tox_getname(m, num, friends[i].name) != 0 || friends[i].name[0] == '\0') strcpy((char *) friends[i].name, "unknown"); - tox_set_statusmessage(m, "\0", strlen("\0")); - if (i == num_friends) ++num_friends; @@ -87,39 +85,34 @@ int friendlist_onFriendAdded(Tox *m, int num) return -1; } -static void select_friend(wint_t key) +static void select_friend(Tox *m, wint_t key) { if (num_friends < 1) return; int n = num_selected; - int f_inf = num_selected; if (key == KEY_UP) { - while (true) { - if (--n < 0) n = num_friends-1; + while (--n != num_selected) { + if (n < 0) n = num_friends - 1; if (friends[n].active) { num_selected = n; return; } - if (n == f_inf) { - endwin(); - exit(2); - } } } else if (key == KEY_DOWN) { - while (true) { - n = (n + 1) % num_friends; + while ((n = (n + 1) % num_friends) != num_selected) { if (friends[n].active) { num_selected = n; return; } - if (n == f_inf) { - endwin(); - exit(2); - } } - } + } else return; /* Bad key input */ + + /* If we reach this something is wrong */ + endwin(); + tox_kill(m); + exit(2); } static void delete_friend(Tox *m, ToxWindow *self, int f_num, wint_t key) @@ -138,13 +131,13 @@ static void delete_friend(Tox *m, ToxWindow *self, int f_num, wint_t key) wprintw(self->window, "\nFailed to store messenger data\n"); num_friends = i; - select_friend(KEY_DOWN); + select_friend(m, KEY_DOWN); } static void friendlist_onKey(ToxWindow *self, Tox *m, wint_t key) { if (key == KEY_UP || key == KEY_DOWN) { - select_friend(key); + select_friend(m, key); } else if (key == '\n') { /* Jump to chat window if already open */ if (friends[num_selected].chatwin != -1) { @@ -174,14 +167,12 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m) for (i = 0; i < num_friends; ++i) { if (friends[i].active) { - bool is_online = tox_friendstatus(m, friends[i].num) == TOX_FRIEND_ONLINE; - if (i == num_selected) wprintw(self->window, " > "); else wprintw(self->window, " "); - if (is_online) { + if (tox_friendstatus(m, friends[i].num) == TOX_FRIEND_ONLINE) { TOX_USERSTATUS status = tox_get_userstatus(m, friends[i].num); int colour = 7; /* Invalid or other errors default to black */ @@ -203,7 +194,7 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m) wattroff(self->window, COLOR_PAIR(colour)); wprintw(self->window, "] %s", friends[i].name); - if (friends[i].statusmsg[0] != '\0') + if (friends[i].statusmsg[0]) wprintw(self->window, " (%s)\n", friends[i].statusmsg); else wprintw(self->window, "\n"); @@ -212,7 +203,7 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m) } } } - + wrefresh(self->window); }