1
0
mirror of https://github.com/Tha14/toxic.git synced 2024-07-03 17:17:46 +02:00

handle last online stuff properly & update toxic version

This commit is contained in:
Jfreegman 2014-03-15 17:18:23 -04:00
parent c055af7348
commit 33a4e806e2
3 changed files with 32 additions and 19 deletions

View File

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_PREREQ([2.65]) AC_PREREQ([2.65])
AC_INIT([toxic], [0.3.0], [https://tox.im/]) AC_INIT([toxic], [0.3.1], [https://tox.im/])
AC_CONFIG_AUX_DIR(configure_aux) AC_CONFIG_AUX_DIR(configure_aux)
AC_CONFIG_SRCDIR([src/main.c]) AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])

View File

@ -47,7 +47,10 @@ extern struct _Winthread Winthread;
ToxicFriend friends[MAX_FRIENDS_NUM]; ToxicFriend friends[MAX_FRIENDS_NUM];
static int friendlist_index[MAX_FRIENDS_NUM] = {0}; static int friendlist_index[MAX_FRIENDS_NUM] = {0};
static PendingDel pendingdelete; struct _pendingDel {
int num;
bool active;
} pendingdelete;
#define S_WEIGHT 100 #define S_WEIGHT 100
@ -76,6 +79,14 @@ void sort_friendlist_index(void)
qsort(friendlist_index, num_friends, sizeof(int), index_name_cmp); qsort(friendlist_index, num_friends, sizeof(int), index_name_cmp);
} }
static void update_friend_last_online(int num, uint64_t timestamp)
{
friends[num].last_online.last_on = timestamp;
friends[num].last_online.tm = *localtime(&timestamp);
strftime(friends[num].last_online.hour_min_str, TIME_STR_SIZE, "%I:%M %p",
&friends[num].last_online.tm);
}
static void friendlist_onMessage(ToxWindow *self, Tox *m, int num, uint8_t *str, uint16_t len) static void friendlist_onMessage(ToxWindow *self, Tox *m, int num, uint8_t *str, uint16_t len)
{ {
if (num >= max_friends_index) if (num >= max_friends_index)
@ -106,7 +117,7 @@ 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(); update_friend_last_online(num, get_unix_time());
store_data(m, DATA_FILE); store_data(m, DATA_FILE);
sort_friendlist_index(); sort_friendlist_index();
} }
@ -154,9 +165,9 @@ 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);
update_friend_last_online(i, tox_get_last_online(m, i));
if (friends[i].namelength == -1 || friends[i].name[0] == '\0') { if (friends[i].namelength == -1 || friends[i].name[0] == '\0') {
strcpy(friends[i].name, (uint8_t *) UNKNOWN_NAME); strcpy(friends[i].name, (uint8_t *) UNKNOWN_NAME);
@ -278,7 +289,7 @@ static void del_friend_deactivate(ToxWindow *self, Tox *m, wint_t key)
if (key == 'y') if (key == 'y')
delete_friend(m, pendingdelete.num); delete_friend(m, pendingdelete.num);
memset(&pendingdelete, 0, sizeof(PendingDel)); memset(&pendingdelete, 0, sizeof(pendingdelete));
delwin(self->popup); delwin(self->popup);
self->popup = NULL; self->popup = NULL;
clear(); clear();
@ -351,7 +362,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); struct tm cur_loc_tm = *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 */
@ -468,20 +479,18 @@ static void friendlist_onDraw(ToxWindow *self, Tox *m)
if (f_selected) if (f_selected)
wattroff(self->window, COLOR_PAIR(YELLOW)); wattroff(self->window, COLOR_PAIR(YELLOW));
uint64_t last_seen = friends[f].last_online; uint64_t last_seen = friends[f].last_online.last_on;
if (last_seen != 0) { if (last_seen != 0) {
uint8_t hour_min[MAX_STR_SIZE]; int day_dist = (cur_loc_tm.tm_yday - friends[f].last_online.tm.tm_yday) % 365;
struct tm last_loc_t = *localtime(&last_seen); const uint8_t *hourmin = friends[f].last_online.hour_min_str;
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) { switch (day_dist) {
case 0: case 0:
wprintw(self->window, " Last seen: Today %s\n", hour_min); wprintw(self->window, " Last seen: Today %s\n", hourmin);
break; break;
case 1: case 1:
wprintw(self->window, " Last seen: Yesterday %s\n", hour_min); wprintw(self->window, " Last seen: Yesterday %s\n", hourmin);
break; break;
default: default:
wprintw(self->window, " Last seen: %d days ago\n", day_dist); wprintw(self->window, " Last seen: %d days ago\n", day_dist);

View File

@ -23,8 +23,17 @@
#ifndef FRIENDLIST_H_53I41IM #ifndef FRIENDLIST_H_53I41IM
#define FRIENDLIST_H_53I41IM #define FRIENDLIST_H_53I41IM
#include <time.h>
#include "toxic_windows.h" #include "toxic_windows.h"
#define TIME_STR_SIZE 16
struct LastOnline {
uint64_t last_on;
struct tm tm;
uint8_t hour_min_str[TIME_STR_SIZE]; /* holds 12-hour time string e.g. "10:43 PM" */
};
typedef struct { typedef struct {
uint8_t name[TOX_MAX_NAME_LENGTH]; uint8_t name[TOX_MAX_NAME_LENGTH];
uint16_t namelength; uint16_t namelength;
@ -38,16 +47,11 @@ typedef struct {
bool online; bool online;
bool is_typing; bool is_typing;
bool logging_on; /* saves preference for friend irrespective of chat windows */ bool logging_on; /* saves preference for friend irrespective of chat windows */
uint64_t last_online;
TOX_USERSTATUS status; TOX_USERSTATUS status;
struct LastOnline last_online;
struct FileReceiver file_receiver; struct FileReceiver file_receiver;
} ToxicFriend; } ToxicFriend;
typedef struct {
int num;
bool active;
} PendingDel;
ToxWindow new_friendlist(void); ToxWindow new_friendlist(void);
void disable_chatwin(int f_num); void disable_chatwin(int f_num);
int get_friendnum(uint8_t *name); int get_friendnum(uint8_t *name);