1
0
mirror of https://github.com/Tha14/toxic.git synced 2025-07-01 19:36:45 +02:00

implemented status and connectionstatus callbacks

This commit is contained in:
Jfreegman
2013-09-04 21:25:59 -04:00
parent 2f93081a42
commit f5695a4b3e
6 changed files with 183 additions and 17 deletions

View File

@ -17,6 +17,8 @@ static ToxWindow *active_window;
static ToxWindow *prompt;
static Tox *m;
#define unknown_name "Unknown"
/* CALLBACKS START */
void on_request(uint8_t *public_key, uint8_t *data, uint16_t length, void *userdata)
{
@ -38,6 +40,27 @@ void on_request(uint8_t *public_key, uint8_t *data, uint16_t length, void *userd
}
}
void on_connectionchange(Tox *m, int friendnumber, uint8_t status, void *userdata)
{
uint8_t nick[TOX_MAX_NAME_LENGTH] = {0};
tox_getname(m, friendnumber, (uint8_t *) &nick);
if (!nick[0])
snprintf(nick, sizeof(nick), "%s", unknown_name);
if (status == 1)
wprintw(prompt->window, "\n%s has come online\n", nick, friendnumber);
else
wprintw(prompt->window, "\n%s went offline\n", nick, friendnumber);
int i;
for (i = 0; i < MAX_WINDOWS_NUM; ++i) {
if (windows[i].onConnectionChange != NULL)
windows[i].onConnectionChange(&windows[i], m, friendnumber, status);
}
}
void on_message(Tox *m, int friendnumber, uint8_t *string, uint16_t length, void *userdata)
{
int i;
@ -60,7 +83,6 @@ void on_action(Tox *m, int friendnumber, uint8_t *string, uint16_t length, void
void on_nickchange(Tox *m, int friendnumber, uint8_t *string, uint16_t length, void *userdata)
{
wprintw(prompt->window, "\n(nick change) %d: %s\n", friendnumber, string);
int i;
for (i = 0; i < MAX_WINDOWS_NUM; ++i) {
@ -71,7 +93,17 @@ void on_nickchange(Tox *m, int friendnumber, uint8_t *string, uint16_t length, v
void on_statusmessagechange(Tox *m, int friendnumber, uint8_t *string, uint16_t length, void *userdata)
{
wprintw(prompt->window, "\n(note change) %d: %s\n", friendnumber, string);
/* Don't show default "Online" status message */
if (strncmp(string, "Online", strlen(string))) {
uint8_t nick[TOX_MAX_NAME_LENGTH] = {0};
tox_getname(m, friendnumber, (uint8_t *) &nick);
if (!nick[0])
snprintf(nick, sizeof(nick), "%s", unknown_name);
wprintw(prompt->window, "\n%s set note to: %s\n", nick, string);
}
int i;
for (i = 0; i < MAX_WINDOWS_NUM; ++i) {
@ -80,6 +112,42 @@ void on_statusmessagechange(Tox *m, int friendnumber, uint8_t *string, uint16_t
}
}
void on_statuschange(Tox *m, int friendnumber, TOX_USERSTATUS status, void *userdata)
{
uint8_t nick[TOX_MAX_NAME_LENGTH] = {0};
tox_getname(m, friendnumber, (uint8_t *) &nick);
if (!nick[0])
snprintf(nick, sizeof(nick), "%s", unknown_name);
switch(status) {
case TOX_USERSTATUS_NONE:
/* Disabled because it spams a second messages when user comes online */
break;
case TOX_USERSTATUS_BUSY:
wprintw(prompt->window, "\n%s set status to ", nick);
wattron(prompt->window, COLOR_PAIR(3));
wprintw(prompt->window, "[Busy]\n");
wattroff(prompt->window, COLOR_PAIR(3));
break;
case TOX_USERSTATUS_AWAY:
wprintw(prompt->window, "\n%s set status to ", nick);
wattron(prompt->window, COLOR_PAIR(5));
wprintw(prompt->window, "[Away]\n");
wattroff(prompt->window, COLOR_PAIR(5));
break;
}
int i;
for (i = 0; i < MAX_WINDOWS_NUM; ++i) {
if (windows[i].onStatusChange != NULL)
windows[i].onStatusChange(&windows[i], m, friendnumber, status);
}
}
void on_friendadded(Tox *m, int friendnumber)
{
friendlist_onFriendAdded(m, friendnumber);