Unified desktop notification preferences

This commit is contained in:
James Booth
2012-10-27 22:05:08 +01:00
parent 7ba66d7edb
commit c71259c322
6 changed files with 122 additions and 104 deletions

View File

@@ -71,12 +71,10 @@ static gboolean _cmd_tiny(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_close(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_set_beep(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_set_notify(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_set_typing(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_set_flash(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_set_showsplash(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_set_chlog(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_set_history(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_set_remind(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_vercheck(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_away(const char * const inp, struct cmd_help_t help);
static gboolean _cmd_online(const char * const inp, struct cmd_help_t help);
@@ -221,40 +219,26 @@ static struct cmd_t setting_commands[] =
{ "/notify",
_cmd_set_notify,
{ "/notify on|off", "Desktop notifications for new messages.",
{ "/notify on|off",
"--------------",
"Switch the message notifications on or off.",
"The notification will appear for all incoming messages.",
"The desktop environment must support desktop notifications.",
{ "/notify type value", "Control various desktop noficiations.",
{ "/notify type value",
"------------------",
"Settings for various desktop notifications where type is one of:",
"message : Notificaitons for messages.",
" : on|off",
"remind : Notification reminders of unread messages.",
" : where value is the reminder period in seconds,",
" : use 0 to disable.",
"typing : Notifications when contacts are typing.",
" : on|off",
"",
"Config file section : [ui]",
"Config file value : notify=true|false",
NULL } } },
{ "/typing",
_cmd_set_typing,
{ "/typing on|off", "Show when contacts typing.",
{ "/typing on|off",
"--------------",
"Switch typing notifications on or off for incoming messages",
"If desktop notifications are also enabled you will receive them",
"for when users are typing a message to you.",
"Example : /notify message on (enable message notifications)",
"Example : /notify remind 10 (remind every 10 seconds)",
"Example : /notify remind 0 (switch off reminders)",
"Example : /notify typing on (enable typing notifications)",
"",
"Config file section : [ui]",
"Config file value : typing=true|false",
NULL } } },
{ "/remind",
_cmd_set_remind,
{ "/remind seconds", "Desktop notification reminder of unread messages.",
{ "/remind seconds",
"--------------",
"Set the period for new message reminders as desktop notifications.",
"The value is in seconds, a setting of 0 will disable the feature.",
"The desktop environment must support desktop notifications.",
"",
"Config file section : [ui]",
"Config file section : [notifications]",
"Config file value : message=on|off",
"Config file value : typing=on|off",
"Config file value : remind=seconds",
NULL } } },
@@ -847,15 +831,76 @@ _cmd_set_beep(const char * const inp, struct cmd_help_t help)
static gboolean
_cmd_set_notify(const char * const inp, struct cmd_help_t help)
{
return _cmd_set_boolean_preference(inp, help, "/notify",
"Desktop notifications", prefs_set_notify);
}
char *kind = NULL;
char *value = NULL;
static gboolean
_cmd_set_typing(const char * const inp, struct cmd_help_t help)
{
return _cmd_set_boolean_preference(inp, help, "/typing",
"Incoming typing notifications", prefs_set_typing);
// copy input
char inp_cpy[strlen(inp) + 1];
strcpy(inp_cpy, inp);
// get kind
strtok(inp_cpy, " ");
kind = strtok(NULL, " ");
if ((kind != NULL) && (strlen(inp) > (8 + strlen(kind) + 1))) {
if ((strcmp(kind, "message") != 0) &&
(strcmp(kind, "typing") != 0) &&
(strcmp(kind, "remind") != 0)) {
cons_show("Usage: %s", help.usage);
return TRUE;
} else {
// get value
value = strndup(inp+8+strlen(kind)+1, strlen(inp)-(8+strlen(kind)+1));
if (value != NULL) {
// set message setting
if (strcmp(kind, "message") == 0) {
if (strcmp(inp, "/notify message on") == 0) {
cons_show("Message notifications enabled.");
prefs_set_notify_message(TRUE);
} else if (strcmp(inp, "/notify message off") == 0) {
cons_show("Message notifications disabled.");
prefs_set_notify_message(FALSE);
} else {
cons_show("Usage: /notify message on|off");
}
// set typing setting
} else if (strcmp(kind, "typing") == 0) {
if (strcmp(inp, "/notify typing on") == 0) {
cons_show("Typing notifications enabled.");
prefs_set_notify_typing(TRUE);
} else if (strcmp(inp, "/notify typing off") == 0) {
cons_show("Typing notifications disabled.");
prefs_set_notify_typing(FALSE);
} else {
cons_show("Usage: /notify typing on|off");
}
} else { // remind
gint period = atoi(value);
prefs_set_notify_remind(period);
if (period == 0) {
cons_show("Message reminders disabled.");
} else if (period == 1) {
cons_show("Message reminder period set to 1 second.");
} else {
cons_show("Message reminder period set to %d seconds.", period);
}
}
return TRUE;
} else {
cons_show("Usage: %s", help.usage);
return TRUE;
}
}
} else {
cons_show("Usage: %s", help.usage);
return TRUE;
}
}
static gboolean
@@ -898,34 +943,6 @@ _cmd_set_history(const char * const inp, struct cmd_help_t help)
"Chat history", prefs_set_history);
}
static gboolean
_cmd_set_remind(const char * const inp, struct cmd_help_t help)
{
if ((strncmp(inp, "/remind ", 8) != 0) || (strlen(inp) < 9)) {
cons_show("Usage: %s", help.usage);
} else {
// copy input
char inp_cpy[strlen(inp) + 1];
strcpy(inp_cpy, inp);
// get period
strtok(inp_cpy, " ");
char *period_str = strtok(NULL, " ");
gint period = atoi(period_str);
prefs_set_remind(period);
if (period == 0) {
cons_show("Message reminders disabled.");
} else if (period == 1) {
cons_show("Message reminder period set to 1 second.");
} else {
cons_show("Message reminder period set to %d seconds.", period);
}
}
return TRUE;
}
static gboolean
_cmd_away(const char * const inp, struct cmd_help_t help)
{