1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Presence notifications sent to chat windows

This commit is contained in:
James Booth 2012-02-28 01:10:46 +00:00
parent c447e05081
commit 509888c419
3 changed files with 71 additions and 1 deletions

View File

@ -288,7 +288,7 @@ static int _jabber_presence_handler(xmpp_conn_t * const conn,
xmpp_stanza_t * const stanza, void * const userdata)
{
char *from = xmpp_stanza_get_attribute(stanza, "from");
char *short_from = strtok(from, "@");
char *short_from = strtok(from, "/");
char *type = xmpp_stanza_get_attribute(stanza, "type");
char *show_str, *status_str;
@ -307,8 +307,10 @@ static int _jabber_presence_handler(xmpp_conn_t * const conn,
if (type == NULL) { // online
cons_show_contact_online(short_from, show_str, status_str);
win_show_contact_online(short_from, show_str, status_str);
} else { // offline
cons_show_contact_offline(short_from, show_str, status_str);
win_show_contact_offline(short_from, show_str, status_str);
}
return 1;

View File

@ -125,6 +125,66 @@ void win_show_outgoing_msg(char *from, char *to, char *message)
status_bar_active(win);
}
void win_show_contact_online(char *from, char *show, char *status)
{
// find the chat window for recipient
int i;
for (i = 1; i < 10; i++)
if (strcmp(_wins[i].from, from) == 0)
break;
// if we found a window
if (i != 10) {
_win_show_time(i);
wattron(_wins[i].win, COLOR_PAIR(2));
wattron(_wins[i].win, A_BOLD);
wprintw(_wins[i].win, "++ %s", from);
if (show != NULL)
wprintw(_wins[i].win, " is %s", show);
else
wprintw(_wins[i].win, " is online");
if (status != NULL)
wprintw(_wins[i].win, ", \"%s\"", status);
wprintw(_wins[i].win, "\n");
wattroff(_wins[i].win, COLOR_PAIR(2));
wattroff(_wins[i].win, A_BOLD);
}
}
void win_show_contact_offline(char *from, char *show, char *status)
{
// find the chat window for recipient
int i;
for (i = 1; i < 10; i++)
if (strcmp(_wins[i].from, from) == 0)
break;
// if we found a window
if (i != 10) {
_win_show_time(i);
wattron(_wins[i].win, COLOR_PAIR(5));
wprintw(_wins[i].win, "-- %s", from);
if (show != NULL)
wprintw(_wins[i].win, " is %s", show);
else
wprintw(_wins[i].win, " is offline");
if (status != NULL)
wprintw(_wins[i].win, ", \"%s\"", status);
wprintw(_wins[i].win, "\n");
wattroff(_wins[i].win, COLOR_PAIR(5));
}
}
void cons_help(void)
{
_win_show_time(0);
@ -210,6 +270,9 @@ void cons_show_contact_online(char *from, char *show, char *status)
if (show != NULL)
wprintw(_wins[0].win, " is %s", show);
else
wprintw(_wins[0].win, " is online");
if (status != NULL)
wprintw(_wins[0].win, ", \"%s\"", status);
@ -228,6 +291,9 @@ void cons_show_contact_offline(char *from, char *show, char *status)
if (show != NULL)
wprintw(_wins[0].win, " is %s", show);
else
wprintw(_wins[0].win, " is offline");
if (status != NULL)
wprintw(_wins[0].win, ", \"%s\"", status);

View File

@ -54,6 +54,8 @@ char *win_get_recipient(void);
void win_show_incomming_msg(char *from, char *message);
void win_show_outgoing_msg(char *from, char *to, char *message);
void win_handle_switch(int *ch);
void win_show_contact_online(char *from, char *show, char *status);
void win_show_contact_offline(char *from, char *show, char *status);
// console window actions
void cons_help(void);