mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Merge pull request #1697 from cockroach/feature/offline-muc-notifications
Add support for offline MUC notifications
This commit is contained in:
commit
066df7f741
@ -35,6 +35,7 @@ typing=true
|
|||||||
typing.current=false
|
typing.current=false
|
||||||
message.text=true
|
message.text=true
|
||||||
room.text=true
|
room.text=true
|
||||||
|
room.offline=true
|
||||||
|
|
||||||
[alias]
|
[alias]
|
||||||
colour=/color
|
colour=/color
|
||||||
|
@ -146,6 +146,7 @@ static Autocomplete notify_chat_ac;
|
|||||||
static Autocomplete notify_room_ac;
|
static Autocomplete notify_room_ac;
|
||||||
static Autocomplete notify_typing_ac;
|
static Autocomplete notify_typing_ac;
|
||||||
static Autocomplete notify_mention_ac;
|
static Autocomplete notify_mention_ac;
|
||||||
|
static Autocomplete notify_offline_ac;
|
||||||
static Autocomplete notify_trigger_ac;
|
static Autocomplete notify_trigger_ac;
|
||||||
static Autocomplete prefs_ac;
|
static Autocomplete prefs_ac;
|
||||||
static Autocomplete sub_ac;
|
static Autocomplete sub_ac;
|
||||||
@ -344,6 +345,7 @@ cmd_ac_init(void)
|
|||||||
autocomplete_add(notify_room_ac, "on");
|
autocomplete_add(notify_room_ac, "on");
|
||||||
autocomplete_add(notify_room_ac, "off");
|
autocomplete_add(notify_room_ac, "off");
|
||||||
autocomplete_add(notify_room_ac, "mention");
|
autocomplete_add(notify_room_ac, "mention");
|
||||||
|
autocomplete_add(notify_room_ac, "offline");
|
||||||
autocomplete_add(notify_room_ac, "current");
|
autocomplete_add(notify_room_ac, "current");
|
||||||
autocomplete_add(notify_room_ac, "text");
|
autocomplete_add(notify_room_ac, "text");
|
||||||
autocomplete_add(notify_room_ac, "trigger");
|
autocomplete_add(notify_room_ac, "trigger");
|
||||||
@ -361,6 +363,10 @@ cmd_ac_init(void)
|
|||||||
autocomplete_add(notify_mention_ac, "word_whole");
|
autocomplete_add(notify_mention_ac, "word_whole");
|
||||||
autocomplete_add(notify_mention_ac, "word_part");
|
autocomplete_add(notify_mention_ac, "word_part");
|
||||||
|
|
||||||
|
notify_offline_ac = autocomplete_new();
|
||||||
|
autocomplete_add(notify_offline_ac, "on");
|
||||||
|
autocomplete_add(notify_offline_ac, "off");
|
||||||
|
|
||||||
notify_trigger_ac = autocomplete_new();
|
notify_trigger_ac = autocomplete_new();
|
||||||
autocomplete_add(notify_trigger_ac, "add");
|
autocomplete_add(notify_trigger_ac, "add");
|
||||||
autocomplete_add(notify_trigger_ac, "remove");
|
autocomplete_add(notify_trigger_ac, "remove");
|
||||||
@ -2341,6 +2347,11 @@ _notify_autocomplete(ProfWin* window, const char* const input, gboolean previous
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = autocomplete_param_with_ac(input, "/notify room offline", notify_offline_ac, TRUE, previous);
|
||||||
|
if (result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
result = autocomplete_param_with_ac(input, "/notify room trigger", notify_trigger_ac, TRUE, previous);
|
result = autocomplete_param_with_ac(input, "/notify room trigger", notify_trigger_ac, TRUE, previous);
|
||||||
if (result) {
|
if (result) {
|
||||||
return result;
|
return result;
|
||||||
|
@ -1436,6 +1436,7 @@ static struct cmd_t command_defs[] = {
|
|||||||
"/notify room mention on|off",
|
"/notify room mention on|off",
|
||||||
"/notify room mention case_sensitive|case_insensitive",
|
"/notify room mention case_sensitive|case_insensitive",
|
||||||
"/notify room mention word_whole|word_part",
|
"/notify room mention word_whole|word_part",
|
||||||
|
"/notify room offline on|off",
|
||||||
"/notify room current on|off",
|
"/notify room current on|off",
|
||||||
"/notify room text on|off",
|
"/notify room text on|off",
|
||||||
"/notify room trigger add <text>",
|
"/notify room trigger add <text>",
|
||||||
@ -1464,6 +1465,7 @@ static struct cmd_t command_defs[] = {
|
|||||||
{ "room mention case_insensitive", "Set room mention notifications as case insensitive." },
|
{ "room mention case_insensitive", "Set room mention notifications as case insensitive." },
|
||||||
{ "room mention word_whole", "Set room mention notifications only on whole word match, i.e. when nickname is not part of a larger word." },
|
{ "room mention word_whole", "Set room mention notifications only on whole word match, i.e. when nickname is not part of a larger word." },
|
||||||
{ "room mention word_part", "Set room mention notifications on partial word match, i.e. nickname may be part of a larger word." },
|
{ "room mention word_part", "Set room mention notifications on partial word match, i.e. nickname may be part of a larger word." },
|
||||||
|
{ "room offline on|off", "Notifications for chat room messages that were sent while you were offline." },
|
||||||
{ "room current on|off", "Whether to show all chat room messages notifications when the window is focused." },
|
{ "room current on|off", "Whether to show all chat room messages notifications when the window is focused." },
|
||||||
{ "room text on|off", "Show message text in chat room message notifications." },
|
{ "room text on|off", "Show message text in chat room message notifications." },
|
||||||
{ "room trigger add <text>", "Notify when specified text included in all chat room messages." },
|
{ "room trigger add <text>", "Notify when specified text included in all chat room messages." },
|
||||||
@ -1483,6 +1485,7 @@ static struct cmd_t command_defs[] = {
|
|||||||
"/notify chat on",
|
"/notify chat on",
|
||||||
"/notify chat text on",
|
"/notify chat text on",
|
||||||
"/notify room mention on",
|
"/notify room mention on",
|
||||||
|
"/notify room offline on",
|
||||||
"/notify room trigger add beer",
|
"/notify room trigger add beer",
|
||||||
"/notify room trigger on",
|
"/notify room trigger on",
|
||||||
"/notify room current off",
|
"/notify room current off",
|
||||||
|
@ -5775,6 +5775,16 @@ cmd_notify(ProfWin* window, const char* const command, gchar** args)
|
|||||||
} else {
|
} else {
|
||||||
cons_show("Usage: /notify room mention on|off");
|
cons_show("Usage: /notify room mention on|off");
|
||||||
}
|
}
|
||||||
|
} else if (g_strcmp0(args[1], "offline") == 0) {
|
||||||
|
if (g_strcmp0(args[2], "on") == 0) {
|
||||||
|
cons_show("Room notifications for offline messages enabled.");
|
||||||
|
prefs_set_boolean(PREF_NOTIFY_ROOM_OFFLINE, TRUE);
|
||||||
|
} else if (g_strcmp0(args[2], "off") == 0) {
|
||||||
|
cons_show("Room notifications for offline messages disabled.");
|
||||||
|
prefs_set_boolean(PREF_NOTIFY_ROOM_OFFLINE, FALSE);
|
||||||
|
} else {
|
||||||
|
cons_show("Usage: /notify room offline on|off");
|
||||||
|
}
|
||||||
} else if (g_strcmp0(args[1], "current") == 0) {
|
} else if (g_strcmp0(args[1], "current") == 0) {
|
||||||
if (g_strcmp0(args[2], "on") == 0) {
|
if (g_strcmp0(args[2], "on") == 0) {
|
||||||
cons_show("Current window chat room message notifications enabled.");
|
cons_show("Current window chat room message notifications enabled.");
|
||||||
|
@ -1828,6 +1828,7 @@ _get_group(preference_t pref)
|
|||||||
case PREF_NOTIFY_CHAT_TEXT:
|
case PREF_NOTIFY_CHAT_TEXT:
|
||||||
case PREF_NOTIFY_ROOM:
|
case PREF_NOTIFY_ROOM:
|
||||||
case PREF_NOTIFY_ROOM_MENTION:
|
case PREF_NOTIFY_ROOM_MENTION:
|
||||||
|
case PREF_NOTIFY_ROOM_OFFLINE:
|
||||||
case PREF_NOTIFY_ROOM_TRIGGER:
|
case PREF_NOTIFY_ROOM_TRIGGER:
|
||||||
case PREF_NOTIFY_ROOM_CURRENT:
|
case PREF_NOTIFY_ROOM_CURRENT:
|
||||||
case PREF_NOTIFY_ROOM_TEXT:
|
case PREF_NOTIFY_ROOM_TEXT:
|
||||||
@ -1964,6 +1965,8 @@ _get_key(preference_t pref)
|
|||||||
return "room.trigger";
|
return "room.trigger";
|
||||||
case PREF_NOTIFY_ROOM_MENTION:
|
case PREF_NOTIFY_ROOM_MENTION:
|
||||||
return "room.mention";
|
return "room.mention";
|
||||||
|
case PREF_NOTIFY_ROOM_OFFLINE:
|
||||||
|
return "room.offline";
|
||||||
case PREF_NOTIFY_ROOM_CURRENT:
|
case PREF_NOTIFY_ROOM_CURRENT:
|
||||||
return "room.current";
|
return "room.current";
|
||||||
case PREF_NOTIFY_ROOM_TEXT:
|
case PREF_NOTIFY_ROOM_TEXT:
|
||||||
|
@ -176,6 +176,7 @@ typedef enum {
|
|||||||
PREF_URL_SAVE_CMD,
|
PREF_URL_SAVE_CMD,
|
||||||
PREF_COMPOSE_EDITOR,
|
PREF_COMPOSE_EDITOR,
|
||||||
PREF_SILENCE_NON_ROSTER,
|
PREF_SILENCE_NON_ROSTER,
|
||||||
|
PREF_NOTIFY_ROOM_OFFLINE,
|
||||||
} preference_t;
|
} preference_t;
|
||||||
|
|
||||||
typedef struct prof_alias_t
|
typedef struct prof_alias_t
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
#include "config/cafile.h"
|
#include "config/cafile.h"
|
||||||
#include "config/scripts.h"
|
#include "config/scripts.h"
|
||||||
#include "event/client_events.h"
|
#include "event/client_events.h"
|
||||||
|
#include "event/server_events.h"
|
||||||
#include "event/common.h"
|
#include "event/common.h"
|
||||||
#include "plugins/plugins.h"
|
#include "plugins/plugins.h"
|
||||||
#include "ui/window_list.h"
|
#include "ui/window_list.h"
|
||||||
@ -272,6 +273,33 @@ sv_ev_room_subject(const char* const room, const char* const nick, const char* c
|
|||||||
void
|
void
|
||||||
sv_ev_room_history(ProfMessage* message)
|
sv_ev_room_history(ProfMessage* message)
|
||||||
{
|
{
|
||||||
|
if (prefs_get_boolean(PREF_NOTIFY_ROOM_OFFLINE)) {
|
||||||
|
// check if this message was sent while we were offline.
|
||||||
|
// if so, treat it as a new message rather than a history event.
|
||||||
|
char* account_name = session_get_account_name();
|
||||||
|
char* last_activity = accounts_get_last_activity(account_name);
|
||||||
|
int msg_is_new = 0;
|
||||||
|
|
||||||
|
if (last_activity) {
|
||||||
|
GTimeVal lasttv;
|
||||||
|
|
||||||
|
if (g_time_val_from_iso8601(last_activity, &lasttv)) {
|
||||||
|
GDateTime* lastdt = g_date_time_new_from_timeval_utc(&lasttv);
|
||||||
|
GDateTime* msgdt = message->timestamp;
|
||||||
|
GTimeSpan time_diff = g_date_time_difference(msgdt, lastdt);
|
||||||
|
|
||||||
|
msg_is_new = (time_diff > 0);
|
||||||
|
g_date_time_unref(lastdt);
|
||||||
|
}
|
||||||
|
g_free(last_activity);
|
||||||
|
|
||||||
|
if (msg_is_new) {
|
||||||
|
sv_ev_room_message(message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ProfMucWin* mucwin = wins_get_muc(message->from_jid->barejid);
|
ProfMucWin* mucwin = wins_get_muc(message->from_jid->barejid);
|
||||||
if (mucwin) {
|
if (mucwin) {
|
||||||
// if this is the first successful connection
|
// if this is the first successful connection
|
||||||
|
@ -55,7 +55,7 @@ void sv_ev_delayed_private_message(ProfMessage* message);
|
|||||||
void sv_ev_typing(char* barejid, char* resource);
|
void sv_ev_typing(char* barejid, char* resource);
|
||||||
void sv_ev_paused(char* barejid, char* resource);
|
void sv_ev_paused(char* barejid, char* resource);
|
||||||
void sv_ev_inactive(char* barejid, char* resource);
|
void sv_ev_inactive(char* barejid, char* resource);
|
||||||
void sv_ev_activity(char* barejid, char* resource, gboolean send_states);
|
void sv_ev_activity(const char* barejid, const char* resource, gboolean send_states);
|
||||||
void sv_ev_gone(const char* const barejid, const char* const resource);
|
void sv_ev_gone(const char* const barejid, const char* const resource);
|
||||||
void sv_ev_subscription(const char* from, jabber_subscr_t type);
|
void sv_ev_subscription(const char* from, jabber_subscr_t type);
|
||||||
void sv_ev_message_receipt(const char* const barejid, const char* const id);
|
void sv_ev_message_receipt(const char* const barejid, const char* const id);
|
||||||
|
@ -1717,6 +1717,11 @@ cons_notify_setting(void)
|
|||||||
else
|
else
|
||||||
cons_show("Room mention (/notify room) : OFF");
|
cons_show("Room mention (/notify room) : OFF");
|
||||||
|
|
||||||
|
if (prefs_get_boolean(PREF_NOTIFY_ROOM_OFFLINE))
|
||||||
|
cons_show("Room offline messages (/notify room): ON");
|
||||||
|
else
|
||||||
|
cons_show("Room offline messages (/notify room): OFF");
|
||||||
|
|
||||||
if (prefs_get_boolean(PREF_NOTIFY_MENTION_CASE_SENSITIVE))
|
if (prefs_get_boolean(PREF_NOTIFY_MENTION_CASE_SENSITIVE))
|
||||||
cons_show("Room mention case (/notify room) : Case sensitive");
|
cons_show("Room mention case (/notify room) : Case sensitive");
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user