1
0
mirror of https://github.com/Tha14/toxic.git synced 2024-11-26 20:03:27 +01:00

show "last seen" time for offline friends

This commit is contained in:
Jfreegman 2014-03-14 17:48:52 -04:00
parent d29836845c
commit a68fc671e5
2 changed files with 42 additions and 12 deletions

View File

@ -27,6 +27,7 @@
#include <string.h> #include <string.h>
#include <stdint.h> #include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h>
#include <tox/tox.h> #include <tox/tox.h>
@ -105,6 +106,8 @@ static void friendlist_onConnectionChange(ToxWindow *self, Tox *m, int num, uint
return; return;
friends[num].online = status == 1 ? true : false; friends[num].online = status == 1 ? true : false;
friends[num].last_online = get_unix_time();
store_data(m, DATA_FILE);
sort_friendlist_index(); sort_friendlist_index();
} }
@ -151,6 +154,7 @@ void friendlist_onFriendAdded(ToxWindow *self, Tox *m, int num, bool sort)
friends[i].chatwin = -1; friends[i].chatwin = -1;
friends[i].online = false; friends[i].online = false;
friends[i].status = TOX_USERSTATUS_NONE; friends[i].status = TOX_USERSTATUS_NONE;
friends[i].last_online = tox_get_last_online(m, num);
friends[i].namelength = tox_get_name(m, num, friends[i].name); friends[i].namelength = tox_get_name(m, num, friends[i].name);
tox_get_client_id(m, num, friends[i].pub_key); tox_get_client_id(m, num, friends[i].pub_key);
@ -347,6 +351,7 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m)
getmaxyx(self->window, y2, x2); getmaxyx(self->window, y2, x2);
uint64_t cur_time = get_unix_time(); uint64_t cur_time = get_unix_time();
struct tm cur_loc_t = *localtime(&cur_time);
bool fix_statuses = x2 != self->x; /* true if window x axis has changed */ bool fix_statuses = x2 != self->x; /* true if window x axis has changed */
@ -445,7 +450,10 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m)
friends[f].statusmsg_len = maxlen; friends[f].statusmsg_len = maxlen;
} }
wprintw(self->window, " (%s)\n", friends[f].statusmsg); if (friends[f].statusmsg[0])
wprintw(self->window, " [%s]", friends[f].statusmsg);
wprintw(self->window, "\n");
} else { } else {
wprintw(self->window, "["); wprintw(self->window, "[");
wattron(self->window, A_BOLD); wattron(self->window, A_BOLD);
@ -460,7 +468,29 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m)
if (f_selected) if (f_selected)
wattroff(self->window, A_BOLD); wattroff(self->window, A_BOLD);
uint64_t last_seen = friends[f].last_online;
if (last_seen != 0) {
uint8_t hour_min[MAX_STR_SIZE];
struct tm last_loc_t = *localtime(&last_seen);
strftime(hour_min, MAX_STR_SIZE, "%I:%M %p", &last_loc_t);
int day_dist = (cur_loc_t.tm_yday - last_loc_t.tm_yday) % 365;
switch (day_dist) {
case 0:
wprintw(self->window, " [Last seen: Today %s]\n", hour_min);
break;
case 1:
wprintw(self->window, " [Last seen: Yesterday %s]\n", hour_min);
break;
default:
wprintw(self->window, " [Last seen: %d days ago]\n", day_dist);
break;
}
} else {
wprintw(self->window, " [Last seen: Never]\n");
}
} }
} }
} }

View File

@ -54,6 +54,17 @@ struct tm *get_time(void)
return timeinfo; return timeinfo;
} }
/* Prints the time to given window */
void print_time(WINDOW *window)
{
uint8_t s[MAX_STR_SIZE];
strftime(s, MAX_STR_SIZE, "[%H:%M:%S] ", get_time());
wattron(window, COLOR_PAIR(BLUE));
wprintw(window, "%s", s);
wattroff(window,COLOR_PAIR(BLUE));
}
/* XXX: FIX */ /* XXX: FIX */
unsigned char *hex_string_to_bin(char hex_string[]) unsigned char *hex_string_to_bin(char hex_string[])
{ {
@ -75,17 +86,6 @@ unsigned char *hex_string_to_bin(char hex_string[])
return val; return val;
} }
/* Prints the time to given window */
void print_time(WINDOW *window)
{
uint8_t s[MAX_STR_SIZE];
strftime(s, MAX_STR_SIZE, "[%H:%M:%S] ", get_time());
wattron(window, COLOR_PAIR(BLUE));
wprintw(window, "%s", s);
wattroff(window,COLOR_PAIR(BLUE));
}
/* Returns 1 if the string is empty, 0 otherwise */ /* Returns 1 if the string is empty, 0 otherwise */
int string_is_empty(char *string) int string_is_empty(char *string)
{ {