diff options
author | James Booth <boothj5@gmail.com> | 2012-10-28 00:37:01 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2012-10-28 00:37:01 +0100 |
commit | 44f64bea64f940719cdb66782ff52d6ee92fe8c7 (patch) | |
tree | 1e1a0cd69bf5431296cddb57961f2e76211935a4 /src | |
parent | d4fb72f6c9fd4d646afff94db86b7345d6a96d71 (diff) | |
parent | 8258e7a3ef13aae1c0c5ee9d77670c827895d4b5 (diff) | |
download | profani-tty-44f64bea64f940719cdb66782ff52d6ee92fe8c7.tar.gz |
Merge branch 'master' into chatstates
Diffstat (limited to 'src')
-rw-r--r-- | src/command.c | 207 | ||||
-rw-r--r-- | src/command.h | 2 | ||||
-rw-r--r-- | src/input_win.c | 61 | ||||
-rw-r--r-- | src/jabber.c | 2 | ||||
-rw-r--r-- | src/preferences.c | 55 | ||||
-rw-r--r-- | src/preferences.h | 15 | ||||
-rw-r--r-- | src/profanity.c | 2 | ||||
-rw-r--r-- | src/windows.c | 89 |
8 files changed, 284 insertions, 149 deletions
diff --git a/src/command.c b/src/command.c index 361f53b4..3252fdda 100644 --- a/src/command.c +++ b/src/command.c @@ -71,12 +71,11 @@ 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_intype(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); @@ -207,7 +206,7 @@ static struct cmd_t setting_commands[] = { { "/beep", _cmd_set_beep, - { "/beep on|off", "Enable/disable sound notifications.", + { "/beep on|off", "Terminal beep on new messages.", { "/beep on|off", "------------", "Switch the terminal bell on or off.", @@ -221,46 +220,32 @@ static struct cmd_t setting_commands[] = { "/notify", _cmd_set_notify, - { "/notify on|off", "Enable/disable message notifications.", - { "/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", "Enable/disable typing notifications.", - { "/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", "Set message reminder period in seconds.", - { "/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 } } }, { "/flash", _cmd_set_flash, - { "/flash on|off", "Enable/disable screen flash notifications.", + { "/flash on|off", "Terminal flash on new messages.", { "/flash on|off", "-------------", "Make the terminal flash when incoming messages are recieved.", @@ -272,9 +257,20 @@ static struct cmd_t setting_commands[] = "Config file value : flash=true|false", NULL } } }, + { "/intype", + _cmd_set_intype, + { "/intype on|off", "Show when contact is typing.", + { "/intype on|off", + "--------------", + "Show when a contact is typing in the console, and in active message window.", + "", + "Config file section : [ui]", + "Config file value : intype=true|false", + NULL } } }, + { "/showsplash", _cmd_set_showsplash, - { "/showsplash on|off", "Enable/disable splash logo on startup.", + { "/showsplash on|off", "Splash logo on startup.", { "/showsplash on|off", "------------------", "Switch on or off the ascii logo on start up.", @@ -295,7 +291,7 @@ static struct cmd_t setting_commands[] = { "/chlog", _cmd_set_chlog, - { "/chlog on|off", "Enable/disable chat logging.", + { "/chlog on|off", "Chat logging to file", { "/chlog on|off", "-------------", "Switch chat logging on or off.", @@ -311,7 +307,7 @@ static struct cmd_t setting_commands[] = { "/history", _cmd_set_history, - { "/history on|off", "Enable/disable chat history.", + { "/history on|off", "Chat history in message windows.", { "/history on|off", "-------------", "Switch chat history on or off, requires chlog to be enabled.", @@ -385,6 +381,7 @@ static struct cmd_t status_commands[] = static PAutocomplete commands_ac; static PAutocomplete help_ac; +static PAutocomplete notify_ac; /* * Initialise command autocompleter and history @@ -399,6 +396,10 @@ cmd_init(void) p_autocomplete_add(help_ac, strdup("status")); p_autocomplete_add(help_ac, strdup("settings")); p_autocomplete_add(help_ac, strdup("navigation")); + notify_ac = p_autocomplete_new(); + p_autocomplete_add(notify_ac, strdup("message")); + p_autocomplete_add(notify_ac, strdup("typing")); + p_autocomplete_add(notify_ac, strdup("remind")); unsigned int i; for (i = 0; i < ARRAY_SIZE(main_commands); i++) { @@ -427,6 +428,7 @@ cmd_close(void) { p_autocomplete_clear(commands_ac); p_autocomplete_clear(help_ac); + p_autocomplete_clear(notify_ac); } // Command autocompletion functions @@ -443,7 +445,7 @@ cmd_reset_completer(void) p_autocomplete_reset(commands_ac); } -// Command help +// Command help autocomplete char * cmd_help_complete(char *inp) { @@ -456,6 +458,19 @@ cmd_help_reset_completer(void) p_autocomplete_reset(help_ac); } +// Command notify autcomplete +char * +cmd_notify_complete(char *inp) +{ + return p_autocomplete_complete(notify_ac, inp); +} + +void +cmd_notify_reset_completer(void) +{ + p_autocomplete_reset(notify_ac); +} + GSList * cmd_get_basic_help(void) { @@ -847,15 +862,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; + + // 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); -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); + 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 @@ -878,6 +954,13 @@ _cmd_set_flash(const char * const inp, struct cmd_help_t help) } static gboolean +_cmd_set_intype(const char * const inp, struct cmd_help_t help) +{ + return _cmd_set_boolean_preference(inp, help, "/intype", + "Show contact typing", prefs_set_intype); +} + +static gboolean _cmd_set_showsplash(const char * const inp, struct cmd_help_t help) { return _cmd_set_boolean_preference(inp, help, "/showsplash", @@ -899,34 +982,6 @@ _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) -{ - 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) { _update_presence(PRESENCE_AWAY, "away", inp); diff --git a/src/command.h b/src/command.h index c15b6bd5..a7c37fcf 100644 --- a/src/command.h +++ b/src/command.h @@ -41,7 +41,9 @@ gboolean cmd_execute_default(const char * const inp); // command help char * cmd_help_complete(char *inp); +char * cmd_notify_complete(char *inp); void cmd_help_reset_completer(void); +void cmd_notify_reset_completer(void); GSList * cmd_get_basic_help(void); GSList * cmd_get_settings_help(void); GSList * cmd_get_status_help(void); diff --git a/src/input_win.c b/src/input_win.c index 3cb903e1..724b3a25 100644 --- a/src/input_win.c +++ b/src/input_win.c @@ -68,6 +68,7 @@ static int _printable(const int ch); static void _replace_input(char *input, const char * const new_input, int *size); static void _parameter_autocomplete(char *input, int *size, char *command, autocomplete_func func); +static void _notify_autocomplete(char *input, int *size); void create_input_window(void) @@ -174,6 +175,7 @@ inp_get_char(int *ch, char *input, int *size) prefs_reset_login_search(); prefs_reset_boolean_choice(); cmd_help_reset_completer(); + cmd_notify_reset_completer(); cmd_reset_completer(); } } @@ -360,9 +362,7 @@ _handle_edit(const int ch, char *input, int *size) cmd_help_complete); _parameter_autocomplete(input, size, "/beep", prefs_autocomplete_boolean_choice); - _parameter_autocomplete(input, size, "/notify", - prefs_autocomplete_boolean_choice); - _parameter_autocomplete(input, size, "/typing", + _parameter_autocomplete(input, size, "/intype", prefs_autocomplete_boolean_choice); _parameter_autocomplete(input, size, "/flash", prefs_autocomplete_boolean_choice); @@ -375,6 +375,8 @@ _handle_edit(const int ch, char *input, int *size) _parameter_autocomplete(input, size, "/vercheck", prefs_autocomplete_boolean_choice); + _notify_autocomplete(input, size); + return 1; default: @@ -434,3 +436,56 @@ _parameter_autocomplete(char *input, int *size, char *command, } free(command_cpy); } + +static void +_notify_autocomplete(char *input, int *size) +{ + char *found = NULL; + char *auto_msg = NULL; + char inp_cpy[*size]; + int i; + + if ((strncmp(input, "/notify message ", 16) == 0) && (*size > 16)) { + for(i = 16; i < *size; i++) { + inp_cpy[i-16] = input[i]; + } + inp_cpy[(*size) - 16] = '\0'; + found = prefs_autocomplete_boolean_choice(inp_cpy); + if (found != NULL) { + auto_msg = (char *) malloc((16 + (strlen(found) + 1)) * sizeof(char)); + strcpy(auto_msg, "/notify message "); + strcat(auto_msg, found); + _replace_input(input, auto_msg, size); + free(auto_msg); + free(found); + } + } else if ((strncmp(input, "/notify typing ", 15) == 0) && (*size > 15)) { + for(i = 15; i < *size; i++) { + inp_cpy[i-15] = input[i]; + } + inp_cpy[(*size) - 15] = '\0'; + found = prefs_autocomplete_boolean_choice(inp_cpy); + if (found != NULL) { + auto_msg = (char *) malloc((15 + (strlen(found) + 1)) * sizeof(char)); + strcpy(auto_msg, "/notify typing "); + strcat(auto_msg, found); + _replace_input(input, auto_msg, size); + free(auto_msg); + free(found); + } + } else if ((strncmp(input, "/notify ", 8) == 0) && (*size > 8)) { + for(i = 8; i < *size; i++) { + inp_cpy[i-8] = input[i]; + } + inp_cpy[(*size) - 8] = '\0'; + found = cmd_notify_complete(inp_cpy); + if (found != NULL) { + auto_msg = (char *) malloc((8 + (strlen(found) + 1)) * sizeof(char)); + strcpy(auto_msg, "/notify "); + strcat(auto_msg, found); + _replace_input(input, auto_msg, size); + free(auto_msg); + free(found); + } + } +} diff --git a/src/jabber.c b/src/jabber.c index e6436f91..4913618e 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -290,7 +290,7 @@ _message_handler(xmpp_conn_t * const conn, // if no message, check for chatstates if (body == NULL) { - if (prefs_get_typing()) { + if (prefs_get_notify_typing() || prefs_get_intype()) { if (xmpp_stanza_get_child_by_name(stanza, "active") != NULL) { // active } else if (xmpp_stanza_get_child_by_name(stanza, "composing") != NULL) { diff --git a/src/preferences.c b/src/preferences.c index 706ad4d3..78044fcc 100644 --- a/src/preferences.c +++ b/src/preferences.c @@ -236,28 +236,41 @@ prefs_set_beep(gboolean value) } gboolean -prefs_get_notify(void) +prefs_get_notify_typing(void) { - return g_key_file_get_boolean(prefs, "ui", "notify", NULL); + return g_key_file_get_boolean(prefs, "notifications", "typing", NULL); } void -prefs_set_notify(gboolean value) +prefs_set_notify_typing(gboolean value) { - g_key_file_set_boolean(prefs, "ui", "notify", value); + g_key_file_set_boolean(prefs, "notifications", "typing", value); _save_prefs(); } gboolean -prefs_get_typing(void) +prefs_get_notify_message(void) { - return g_key_file_get_boolean(prefs, "ui", "typing", NULL); + return g_key_file_get_boolean(prefs, "notifications", "message", NULL); } void -prefs_set_typing(gboolean value) +prefs_set_notify_message(gboolean value) { - g_key_file_set_boolean(prefs, "ui", "typing", value); + g_key_file_set_boolean(prefs, "notifications", "message", value); + _save_prefs(); +} + +gint +prefs_get_notify_remind(void) +{ + return g_key_file_get_integer(prefs, "notifications", "remind", NULL); +} + +void +prefs_set_notify_remind(gint value) +{ + g_key_file_set_integer(prefs, "notifications", "remind", value); _save_prefs(); } @@ -288,41 +301,41 @@ prefs_set_flash(gboolean value) } gboolean -prefs_get_chlog(void) +prefs_get_intype(void) { - return g_key_file_get_boolean(prefs, "ui", "chlog", NULL); + return g_key_file_get_boolean(prefs, "ui", "intype", NULL); } void -prefs_set_chlog(gboolean value) +prefs_set_intype(gboolean value) { - g_key_file_set_boolean(prefs, "ui", "chlog", value); + g_key_file_set_boolean(prefs, "ui", "intype", value); _save_prefs(); } gboolean -prefs_get_history(void) +prefs_get_chlog(void) { - return g_key_file_get_boolean(prefs, "ui", "history", NULL); + return g_key_file_get_boolean(prefs, "ui", "chlog", NULL); } void -prefs_set_history(gboolean value) +prefs_set_chlog(gboolean value) { - g_key_file_set_boolean(prefs, "ui", "history", value); + g_key_file_set_boolean(prefs, "ui", "chlog", value); _save_prefs(); } -gint -prefs_get_remind(void) +gboolean +prefs_get_history(void) { - return g_key_file_get_integer(prefs, "ui", "remind", NULL); + return g_key_file_get_boolean(prefs, "ui", "history", NULL); } void -prefs_set_remind(gint value) +prefs_set_history(gboolean value) { - g_key_file_set_integer(prefs, "ui", "remind", value); + g_key_file_set_boolean(prefs, "ui", "history", value); _save_prefs(); } diff --git a/src/preferences.h b/src/preferences.h index 885b895d..6ccdf461 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -44,10 +44,6 @@ void prefs_reset_boolean_choice(void); gboolean prefs_get_beep(void); void prefs_set_beep(gboolean value); -gboolean prefs_get_notify(void); -void prefs_set_notify(gboolean value); -gboolean prefs_get_typing(void); -void prefs_set_typing(gboolean value); gboolean prefs_get_flash(void); void prefs_set_flash(gboolean value); gboolean prefs_get_chlog(void); @@ -56,10 +52,17 @@ gboolean prefs_get_history(void); void prefs_set_history(gboolean value); gboolean prefs_get_showsplash(void); void prefs_set_showsplash(gboolean value); -gint prefs_get_remind(void); -void prefs_set_remind(gint value); gboolean prefs_get_vercheck(void); void prefs_set_vercheck(gboolean value); +gboolean prefs_get_intype(void); +void prefs_set_intype(gboolean value); + +void prefs_set_notify_message(gboolean value); +gboolean prefs_get_notify_message(void); +void prefs_set_notify_typing(gboolean value); +gboolean prefs_get_notify_typing(void); +void prefs_set_notify_remind(gint period); +gint prefs_get_notify_remind(void); void prefs_add_login(const char *jid); diff --git a/src/profanity.c b/src/profanity.c index 3d8235a0..4dd618cb 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -65,7 +65,7 @@ prof_run(const int disable_tls, char *log_level) gdouble elapsed = g_timer_elapsed(timer, NULL); - gint remind_period = prefs_get_remind(); + gint remind_period = prefs_get_notify_remind(); // 0 means to not remind if (remind_period > 0 && elapsed >= remind_period) { diff --git a/src/windows.c b/src/windows.c index 957e90f5..b7486c92 100644 --- a/src/windows.c +++ b/src/windows.c @@ -222,26 +222,28 @@ win_show_typing(const char * const from) int win_index = _find_prof_win_index(short_from); - // no chat window for user - if (win_index == NUM_WINS) { - _cons_show_typing(short_from); - - // have chat window but not currently in it - } else if (win_index != _curr_prof_win) { - _cons_show_typing(short_from); - dirty = TRUE; + if (prefs_get_intype()) { + // no chat window for user + if (win_index == NUM_WINS) { + _cons_show_typing(short_from); + + // have chat window but not currently in it + } else if (win_index != _curr_prof_win) { + _cons_show_typing(short_from); + dirty = TRUE; - // in chat window with user - } else { - title_bar_set_typing(TRUE); - title_bar_draw(); + // in chat window with user + } else { + title_bar_set_typing(TRUE); + title_bar_draw(); - status_bar_active(win_index); - dirty = TRUE; - } + status_bar_active(win_index); + dirty = TRUE; + } + } #ifdef HAVE_LIBNOTIFY - if (prefs_get_notify()) + if (prefs_get_notify_typing()) _win_notify_typing(short_from); #endif } @@ -300,7 +302,7 @@ win_show_incomming_msg(const char * const from, const char * const message) if (prefs_get_beep()) beep(); #ifdef HAVE_LIBNOTIFY - if (prefs_get_notify()) + if (prefs_get_notify_message()) _win_notify_message(short_from); #endif } @@ -509,52 +511,57 @@ cons_prefs(void) cons_show(""); if (prefs_get_beep()) - cons_show("Terminal beep : ON"); + cons_show("Terminal beep : ON"); else - cons_show("Terminal beep : OFF"); + cons_show("Terminal beep : OFF"); if (prefs_get_flash()) - cons_show("Terminal flash : ON"); - else - cons_show("Terminal flash : OFF"); - - if (prefs_get_notify()) - cons_show("Message notifications : ON"); + cons_show("Terminal flash : ON"); else - cons_show("Message notifications : OFF"); + cons_show("Terminal flash : OFF"); - if (prefs_get_typing()) - cons_show("Typing notifications : ON"); + if (prefs_get_intype()) + cons_show("Show typing : ON"); else - cons_show("Typing notifications : OFF"); + cons_show("Show typing : OFF"); if (prefs_get_showsplash()) - cons_show("Splash screen : ON"); + cons_show("Splash screen : ON"); else - cons_show("Splash screen : OFF"); + cons_show("Splash screen : OFF"); if (prefs_get_chlog()) - cons_show("Chat logging : ON"); + cons_show("Chat logging : ON"); else - cons_show("Chat logging : OFF"); + cons_show("Chat logging : OFF"); if (prefs_get_history()) - cons_show("Chat history : ON"); + cons_show("Chat history : ON"); else - cons_show("Chat history : OFF"); + cons_show("Chat history : OFF"); if (prefs_get_vercheck()) - cons_show("Version checking : ON"); + cons_show("Version checking : ON"); + else + cons_show("Version checking : OFF"); + + if (prefs_get_notify_message()) + cons_show("Message notifications : ON"); + else + cons_show("Message notifications : OFF"); + + if (prefs_get_notify_typing()) + cons_show("Typing notifications : ON"); else - cons_show("Version checking : OFF"); + cons_show("Typing notifications : OFF"); - gint remind_period = prefs_get_remind(); + gint remind_period = prefs_get_notify_remind(); if (remind_period == 0) { - cons_show("Message reminder period : OFF"); + cons_show("Reminder notification period : OFF"); } else if (remind_period == 1) { - cons_show("Message reminder period : 1 second"); + cons_show("Reminder notification period : 1 second"); } else { - cons_show("Message reminder period : %d seconds", remind_period); + cons_show("Reminder notification period : %d seconds", remind_period); } cons_show(""); |