mirror of
https://github.com/profanity-im/profanity.git
synced 2024-11-03 19:37:16 -05:00
Merge branch 'master' into plugins
Conflicts: src/event/server_events.c src/ui/chatwin.c src/ui/notifier.c
This commit is contained in:
commit
43a1b7b45f
@ -192,23 +192,17 @@ prefs_reset_room_trigger_ac(void)
|
||||
}
|
||||
|
||||
gboolean
|
||||
prefs_do_chat_notify(gboolean current_win, const char *const message)
|
||||
prefs_do_chat_notify(gboolean current_win)
|
||||
{
|
||||
gboolean notify_current = prefs_get_boolean(PREF_NOTIFY_CHAT_CURRENT);
|
||||
gboolean notify_window = FALSE;
|
||||
if (!current_win || (current_win && notify_current) ) {
|
||||
notify_window = TRUE;
|
||||
}
|
||||
if (!notify_window) {
|
||||
if (prefs_get_boolean(PREF_NOTIFY_CHAT) == FALSE) {
|
||||
return FALSE;
|
||||
} else {
|
||||
if ((current_win == FALSE) || ((current_win == TRUE) && prefs_get_boolean(PREF_NOTIFY_CHAT_CURRENT))) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean notify_message = prefs_get_boolean(PREF_NOTIFY_CHAT);
|
||||
if (notify_message) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
GList*
|
||||
@ -234,9 +228,13 @@ prefs_message_get_triggers(const char *const message)
|
||||
}
|
||||
|
||||
gboolean
|
||||
prefs_do_room_notify(gboolean current_win, const char *const roomjid, const char *const nick, const char *const message,
|
||||
gboolean mention, gboolean trigger_found)
|
||||
prefs_do_room_notify(gboolean current_win, const char *const roomjid, const char *const mynick,
|
||||
const char *const theirnick, const char *const message, gboolean mention, gboolean trigger_found)
|
||||
{
|
||||
if (g_strcmp0(mynick, theirnick) == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean notify_current = prefs_get_boolean(PREF_NOTIFY_ROOM_CURRENT);
|
||||
gboolean notify_window = FALSE;
|
||||
if (!current_win || (current_win && notify_current) ) {
|
||||
|
@ -233,9 +233,9 @@ char* prefs_get_string(preference_t pref);
|
||||
void prefs_free_string(char *pref);
|
||||
void prefs_set_string(preference_t pref, char *value);
|
||||
|
||||
gboolean prefs_do_chat_notify(gboolean current_win, const char *const message);
|
||||
gboolean prefs_do_room_notify(gboolean current_win, const char *const roomjid, const char *const nick,
|
||||
const char *const message, gboolean mention, gboolean trigger_found);
|
||||
gboolean prefs_do_chat_notify(gboolean current_win);
|
||||
gboolean prefs_do_room_notify(gboolean current_win, const char *const roomjid, const char *const mynick,
|
||||
const char *const theirnick, const char *const message, gboolean mention, gboolean trigger_found);
|
||||
GList* prefs_message_get_triggers(const char *const message);
|
||||
|
||||
void prefs_set_room_notify(const char *const roomjid, gboolean value);
|
||||
|
@ -267,28 +267,29 @@ sv_ev_room_message(const char *const room_jid, const char *const nick, const cha
|
||||
mucwin_message(mucwin, nick, new_message, mention, triggers != NULL);
|
||||
|
||||
ProfWin *window = (ProfWin*)mucwin;
|
||||
gboolean is_current = wins_is_current(window);
|
||||
int num = wins_get_num(window);
|
||||
gboolean notify = prefs_do_room_notify(is_current, mucwin->roomjid, mynick, new_message, mention, triggers != NULL);
|
||||
gboolean is_current = FALSE;
|
||||
|
||||
// currently in groupchat window
|
||||
if (wins_is_current(window)) {
|
||||
is_current = TRUE;
|
||||
status_bar_active(num);
|
||||
|
||||
if ((g_strcmp0(mynick, nick) != 0) && (prefs_get_boolean(PREF_BEEP))) {
|
||||
beep();
|
||||
}
|
||||
|
||||
// not currently on groupchat window
|
||||
} else {
|
||||
status_bar_new(num);
|
||||
|
||||
cons_show_incoming_room_message(nick, mucwin->roomjid, num, mention, triggers, mucwin->unread);
|
||||
|
||||
if (prefs_get_boolean(PREF_FLASH) && (strcmp(nick, mynick) != 0)) {
|
||||
if ((g_strcmp0(mynick, nick) != 0) && (prefs_get_boolean(PREF_FLASH))) {
|
||||
flash();
|
||||
}
|
||||
|
||||
cons_show_incoming_room_message(nick, mucwin->roomjid, num, mention, triggers, mucwin->unread);
|
||||
|
||||
mucwin->unread++;
|
||||
if (notify) {
|
||||
mucwin->notify = TRUE;
|
||||
}
|
||||
|
||||
if (mention) {
|
||||
mucwin->unread_mentions = TRUE;
|
||||
@ -298,38 +299,18 @@ sv_ev_room_message(const char *const room_jid, const char *const nick, const cha
|
||||
}
|
||||
}
|
||||
|
||||
if (prefs_do_room_notify(is_current, mucwin->roomjid, mynick, nick, message, mention, triggers != NULL)) {
|
||||
Jid *jidp = jid_create(mucwin->roomjid);
|
||||
notify_room_message(nick, jidp->localpart, num, message);
|
||||
jid_destroy(jidp);
|
||||
}
|
||||
|
||||
if (triggers) {
|
||||
g_list_free_full(triggers, free);
|
||||
}
|
||||
|
||||
rosterwin_roster();
|
||||
|
||||
// don't notify self messages
|
||||
if (strcmp(nick, mynick) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (prefs_get_boolean(PREF_BEEP)) {
|
||||
beep();
|
||||
}
|
||||
|
||||
if (!notify) {
|
||||
return;
|
||||
}
|
||||
|
||||
Jid *jidp = jid_create(mucwin->roomjid);
|
||||
int ui_index = num;
|
||||
if (ui_index == 10) {
|
||||
ui_index = 0;
|
||||
}
|
||||
|
||||
if (prefs_get_boolean(PREF_NOTIFY_ROOM_TEXT)) {
|
||||
notify_room_message(nick, jidp->localpart, ui_index, new_message);
|
||||
} else {
|
||||
notify_room_message(nick, jidp->localpart, ui_index, NULL);
|
||||
}
|
||||
jid_destroy(jidp);
|
||||
|
||||
plugins_post_room_message_display(room_jid, nick, new_message);
|
||||
free(new_message);
|
||||
}
|
||||
|
@ -243,7 +243,7 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha
|
||||
char *display_name = roster_get_msg_display_name(chatwin->barejid, resource);
|
||||
|
||||
gboolean is_current = wins_is_current(window);
|
||||
gboolean notify = prefs_do_chat_notify(is_current, message);
|
||||
gboolean notify = prefs_do_chat_notify(is_current);
|
||||
|
||||
// currently viewing chat window with sender
|
||||
if (wins_is_current(window)) {
|
||||
@ -261,9 +261,7 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha
|
||||
}
|
||||
|
||||
chatwin->unread++;
|
||||
if (notify) {
|
||||
chatwin->notify = TRUE;
|
||||
}
|
||||
|
||||
if (prefs_get_boolean(PREF_CHLOG) && prefs_get_boolean(PREF_HISTORY)) {
|
||||
_chatwin_history(chatwin, chatwin->barejid);
|
||||
}
|
||||
@ -283,20 +281,8 @@ chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const cha
|
||||
beep();
|
||||
}
|
||||
|
||||
if (!notify) {
|
||||
free(display_name);
|
||||
return;
|
||||
}
|
||||
|
||||
int ui_index = num;
|
||||
if (ui_index == 10) {
|
||||
ui_index = 0;
|
||||
}
|
||||
|
||||
if (prefs_get_boolean(PREF_NOTIFY_CHAT_TEXT)) {
|
||||
notify_message(display_name, ui_index, plugin_message);
|
||||
} else {
|
||||
notify_message(display_name, ui_index, NULL);
|
||||
if (notify) {
|
||||
notify_message(display_name, num, plugin_message);
|
||||
}
|
||||
|
||||
free(display_name);
|
||||
|
@ -96,11 +96,16 @@ notify_invite(const char *const from, const char *const room, const char *const
|
||||
}
|
||||
|
||||
void
|
||||
notify_message(const char *const name, int win, const char *const text)
|
||||
notify_message(const char *const name, int num, const char *const text)
|
||||
{
|
||||
int ui_index = num;
|
||||
if (ui_index == 10) {
|
||||
ui_index = 0;
|
||||
}
|
||||
|
||||
GString *message = g_string_new("");
|
||||
g_string_append_printf(message, "%s (win %d)", name, win);
|
||||
if (text) {
|
||||
g_string_append_printf(message, "%s (win %d)", name, ui_index);
|
||||
if (text && prefs_get_boolean(PREF_NOTIFY_CHAT_TEXT)) {
|
||||
g_string_append_printf(message, "\n%s", text);
|
||||
}
|
||||
|
||||
@ -109,11 +114,16 @@ notify_message(const char *const name, int win, const char *const text)
|
||||
}
|
||||
|
||||
void
|
||||
notify_room_message(const char *const nick, const char *const room, int win, const char *const text)
|
||||
notify_room_message(const char *const nick, const char *const room, int num, const char *const text)
|
||||
{
|
||||
int ui_index = num;
|
||||
if (ui_index == 10) {
|
||||
ui_index = 0;
|
||||
}
|
||||
|
||||
GString *message = g_string_new("");
|
||||
g_string_append_printf(message, "%s in %s (win %d)", nick, room, win);
|
||||
if (text) {
|
||||
g_string_append_printf(message, "%s in %s (win %d)", nick, room, ui_index);
|
||||
if (text && prefs_get_boolean(PREF_NOTIFY_ROOM_TEXT)) {
|
||||
g_string_append_printf(message, "\n%s", text);
|
||||
}
|
||||
|
||||
@ -137,7 +147,7 @@ notify_remind(void)
|
||||
gdouble elapsed = g_timer_elapsed(remind_timer, NULL);
|
||||
gint remind_period = prefs_get_notify_remind();
|
||||
if (remind_period > 0 && elapsed >= remind_period) {
|
||||
gboolean donotify = wins_get_notify();
|
||||
gboolean donotify = wins_do_notify_remind();
|
||||
gint unread = wins_get_total_unread();
|
||||
gint open = muc_invites_count();
|
||||
gint subs = presence_sub_request_count();
|
||||
|
@ -57,7 +57,7 @@ privwin_incoming_msg(ProfPrivateWin *privatewin, const char *const message, GDat
|
||||
}
|
||||
|
||||
gboolean is_current = wins_is_current(window);
|
||||
gboolean notify = prefs_do_chat_notify(is_current, message);
|
||||
gboolean notify = prefs_do_chat_notify(is_current);
|
||||
|
||||
// currently viewing chat window with sender
|
||||
if (wins_is_current(window)) {
|
||||
@ -72,9 +72,6 @@ privwin_incoming_msg(ProfPrivateWin *privatewin, const char *const message, GDat
|
||||
win_print_incoming_message(window, timestamp, jidp->resourcepart, message, PROF_MSG_PLAIN);
|
||||
|
||||
privatewin->unread++;
|
||||
if (notify) {
|
||||
privatewin->notify = TRUE;
|
||||
}
|
||||
|
||||
if (prefs_get_boolean(PREF_FLASH)) {
|
||||
flash();
|
||||
@ -85,20 +82,8 @@ privwin_incoming_msg(ProfPrivateWin *privatewin, const char *const message, GDat
|
||||
beep();
|
||||
}
|
||||
|
||||
if (!notify) {
|
||||
jid_destroy(jidp);
|
||||
return;
|
||||
}
|
||||
|
||||
int ui_index = num;
|
||||
if (ui_index == 10) {
|
||||
ui_index = 0;
|
||||
}
|
||||
|
||||
if (prefs_get_boolean(PREF_NOTIFY_CHAT_TEXT)) {
|
||||
notify_message(jidp->resourcepart, ui_index, message);
|
||||
} else {
|
||||
notify_message(jidp->resourcepart, ui_index, NULL);
|
||||
if (notify) {
|
||||
notify_message(jidp->resourcepart, num, message);
|
||||
}
|
||||
|
||||
jid_destroy(jidp);
|
||||
|
@ -104,7 +104,6 @@ typedef struct prof_chat_win_t {
|
||||
ProfWin window;
|
||||
char *barejid;
|
||||
int unread;
|
||||
gboolean notify;
|
||||
ChatState *state;
|
||||
gboolean is_otr;
|
||||
gboolean otr_is_trusted;
|
||||
@ -121,7 +120,6 @@ typedef struct prof_muc_win_t {
|
||||
int unread;
|
||||
gboolean unread_mentions;
|
||||
gboolean unread_triggers;
|
||||
gboolean notify;
|
||||
gboolean showjid;
|
||||
unsigned long memcheck;
|
||||
} ProfMucWin;
|
||||
@ -137,7 +135,6 @@ typedef struct prof_private_win_t {
|
||||
ProfWin window;
|
||||
char *fulljid;
|
||||
int unread;
|
||||
gboolean notify;
|
||||
unsigned long memcheck;
|
||||
gboolean occupant_offline;
|
||||
gboolean room_left;
|
||||
|
@ -141,7 +141,6 @@ win_create_chat(const char *const barejid)
|
||||
new_win->pgp_send = FALSE;
|
||||
new_win->history_shown = FALSE;
|
||||
new_win->unread = 0;
|
||||
new_win->notify = FALSE;
|
||||
new_win->state = chat_state_new();
|
||||
|
||||
new_win->memcheck = PROFCHATWIN_MEMCHECK;
|
||||
@ -183,7 +182,6 @@ win_create_muc(const char *const roomjid)
|
||||
new_win->unread = 0;
|
||||
new_win->unread_mentions = FALSE;
|
||||
new_win->unread_triggers = FALSE;
|
||||
new_win->notify = FALSE;
|
||||
if (prefs_get_boolean(PREF_OCCUPANTS_JID)) {
|
||||
new_win->showjid = TRUE;
|
||||
} else {
|
||||
@ -219,7 +217,6 @@ win_create_private(const char *const fulljid)
|
||||
|
||||
new_win->fulljid = strdup(fulljid);
|
||||
new_win->unread = 0;
|
||||
new_win->notify = FALSE;
|
||||
new_win->occupant_offline = FALSE;
|
||||
new_win->room_left = FALSE;
|
||||
|
||||
@ -1341,19 +1338,45 @@ win_has_active_subwin(ProfWin *window)
|
||||
gboolean
|
||||
win_notify(ProfWin *window)
|
||||
{
|
||||
if (window->type == WIN_CHAT) {
|
||||
switch (window->type) {
|
||||
case WIN_CHAT:
|
||||
{
|
||||
ProfChatWin *chatwin = (ProfChatWin*) window;
|
||||
assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
|
||||
return chatwin->notify;
|
||||
} else if (window->type == WIN_MUC) {
|
||||
|
||||
if (prefs_get_boolean(PREF_NOTIFY_CHAT) && chatwin->unread > 0) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
case WIN_MUC:
|
||||
{
|
||||
ProfMucWin *mucwin = (ProfMucWin*) window;
|
||||
assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
|
||||
return mucwin->notify;
|
||||
} else if (window->type == WIN_PRIVATE) {
|
||||
|
||||
if (prefs_get_room_notify(mucwin->roomjid) && mucwin->unread > 0) {
|
||||
return TRUE;
|
||||
} else if (prefs_get_room_notify_mention(mucwin->roomjid) && mucwin->unread_mentions) {
|
||||
return TRUE;
|
||||
} else if (prefs_get_room_notify_trigger(mucwin->roomjid) && mucwin->unread_triggers) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
case WIN_PRIVATE:
|
||||
{
|
||||
ProfPrivateWin *privatewin = (ProfPrivateWin*) window;
|
||||
assert(privatewin->memcheck == PROFPRIVATEWIN_MEMCHECK);
|
||||
return privatewin->notify;
|
||||
} else {
|
||||
|
||||
if (prefs_get_boolean(PREF_NOTIFY_CHAT) && privatewin->unread > 0) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -294,18 +294,15 @@ wins_set_current_by_num(int i)
|
||||
ProfChatWin *chatwin = (ProfChatWin*) window;
|
||||
assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
|
||||
chatwin->unread = 0;
|
||||
chatwin->notify = FALSE;
|
||||
} else if (window->type == WIN_MUC) {
|
||||
ProfMucWin *mucwin = (ProfMucWin*) window;
|
||||
assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
|
||||
mucwin->unread = 0;
|
||||
mucwin->unread_mentions = FALSE;
|
||||
mucwin->unread_triggers = FALSE;
|
||||
mucwin->notify = FALSE;
|
||||
} else if (window->type == WIN_PRIVATE) {
|
||||
ProfPrivateWin *privatewin = (ProfPrivateWin*) window;
|
||||
privatewin->unread = 0;
|
||||
privatewin->notify = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -621,7 +618,7 @@ wins_new_plugin(const char * const tag)
|
||||
}
|
||||
|
||||
gboolean
|
||||
wins_get_notify(void)
|
||||
wins_do_notify_remind(void)
|
||||
{
|
||||
GList *values = g_hash_table_get_values(windows);
|
||||
GList *curr = values;
|
||||
|
@ -74,7 +74,7 @@ int wins_get_current_num(void);
|
||||
void wins_close_current(void);
|
||||
void wins_close_by_num(int i);
|
||||
gboolean wins_is_current(ProfWin *window);
|
||||
gboolean wins_get_notify(void);
|
||||
gboolean wins_do_notify_remind(void);
|
||||
int wins_get_total_unread(void);
|
||||
void wins_resize_all(void);
|
||||
GSList* wins_get_chat_recipients(void);
|
||||
|
Loading…
Reference in New Issue
Block a user