Added /roster show|hide command, only show roster on connect success

This commit is contained in:
James Booth
2014-11-10 23:23:02 +00:00
parent 5d59d17642
commit 497b07c1c3
9 changed files with 77 additions and 4 deletions

View File

@@ -169,11 +169,13 @@ static struct cmd_t command_defs[] =
{ "/roster", { "/roster",
cmd_roster, parse_args_with_freetext, 0, 3, NULL, cmd_roster, parse_args_with_freetext, 0, 3, NULL,
{ "/roster [add|remove|nick|clearnick] [jid] [nickname]", "Manage your roster.", { "/roster [show|hide|add|remove|nick|clearnick] [jid] [nickname]", "Manage your roster.",
{ "/roster [add|remove|nick|clearnick] [jid] [nickname]", { "/roster [show|hide|add|remove|nick|clearnick] [jid] [nickname]",
"----------------------------------------------------", "--------------------------------------------------------------",
"View, add to, and remove from your roster.", "View, add to, and remove from your roster.",
"Passing no arguments lists all contacts in your roster.", "Passing no arguments lists all contacts in your roster.",
"The 'show' command will show the roster panel in the console window.",
"The 'hide' command will hide the roster panel.",
"The 'add' command will add a new item, jid is required, nickname is optional.", "The 'add' command will add a new item, jid is required, nickname is optional.",
"The 'remove' command removes a contact, jid is required.", "The 'remove' command removes a contact, jid is required.",
"The 'nick' command changes a contacts nickname, both jid and nickname are required,", "The 'nick' command changes a contacts nickname, both jid and nickname are required,",
@@ -1230,6 +1232,8 @@ cmd_init(void)
autocomplete_add(roster_ac, "nick"); autocomplete_add(roster_ac, "nick");
autocomplete_add(roster_ac, "clearnick"); autocomplete_add(roster_ac, "clearnick");
autocomplete_add(roster_ac, "remove"); autocomplete_add(roster_ac, "remove");
autocomplete_add(roster_ac, "show");
autocomplete_add(roster_ac, "hide");
group_ac = autocomplete_new(); group_ac = autocomplete_new();
autocomplete_add(group_ac, "show"); autocomplete_add(group_ac, "show");

View File

@@ -1330,6 +1330,18 @@ cmd_roster(gchar **args, struct cmd_help_t help)
cons_show_roster(list); cons_show_roster(list);
return TRUE; return TRUE;
// show/hide roster
} else if (g_strcmp0(args[0], "show") == 0) {
cons_show("Roster enabled.");
prefs_set_boolean(PREF_ROSTER, TRUE);
ui_show_roster();
return TRUE;
} else if (g_strcmp0(args[0], "hide") == 0) {
cons_show("Roster disabled.");
prefs_set_boolean(PREF_ROSTER, FALSE);
ui_hide_roster();
return TRUE;
// add contact // add contact
} else if (strcmp(args[0], "add") == 0) { } else if (strcmp(args[0], "add") == 0) {
char *jid = args[1]; char *jid = args[1];

View File

@@ -453,6 +453,10 @@ _get_group(preference_t pref)
case PREF_MUC_PRIVILEGES: case PREF_MUC_PRIVILEGES:
case PREF_PRESENCE: case PREF_PRESENCE:
case PREF_WRAP: case PREF_WRAP:
case PREF_ROSTER:
case PREF_ROSTER_OFFLINE:
case PREF_ROSTER_RESOURCE:
case PREF_ROSTER_BY:
return PREF_GROUP_UI; return PREF_GROUP_UI;
case PREF_STATES: case PREF_STATES:
case PREF_OUTTYPE: case PREF_OUTTYPE:
@@ -573,6 +577,14 @@ _get_key(preference_t pref)
return "presence"; return "presence";
case PREF_WRAP: case PREF_WRAP:
return "wrap"; return "wrap";
case PREF_ROSTER:
return "roster";
case PREF_ROSTER_OFFLINE:
return "roster.offline";
case PREF_ROSTER_RESOURCE:
return "roster.resource";
case PREF_ROSTER_BY:
return "roster.by";
default: default:
return NULL; return NULL;
} }
@@ -618,6 +630,8 @@ _get_default_string(preference_t pref)
case PREF_STATUSES_CHAT: case PREF_STATUSES_CHAT:
case PREF_STATUSES_MUC: case PREF_STATUSES_MUC:
return "all"; return "all";
case PREF_ROSTER_BY:
return "none";
default: default:
return NULL; return NULL;
} }

View File

@@ -58,6 +58,10 @@ typedef enum {
PREF_HISTORY, PREF_HISTORY,
PREF_MOUSE, PREF_MOUSE,
PREF_OCCUPANTS, PREF_OCCUPANTS,
PREF_ROSTER,
PREF_ROSTER_OFFLINE,
PREF_ROSTER_RESOURCE,
PREF_ROSTER_BY,
PREF_MUC_PRIVILEGES, PREF_MUC_PRIVILEGES,
PREF_PRESENCE, PREF_PRESENCE,
PREF_WRAP, PREF_WRAP,

View File

@@ -122,6 +122,10 @@ handle_login_account_success(char *account_name)
log_info("%s logged in successfully", account->jid); log_info("%s logged in successfully", account->jid);
account_free(account); account_free(account);
if (prefs_get_boolean(PREF_ROSTER)) {
ui_show_roster();
}
} }
void void

View File

@@ -941,6 +941,15 @@ _cons_titlebar_setting(void)
} }
} }
static void
_cons_roster_setting(void)
{
if (prefs_get_boolean(PREF_ROSTER))
cons_show("Roster (/roster) : show");
else
cons_show("Roster (/roster) : hide");
}
static void static void
_cons_show_ui_prefs(void) _cons_show_ui_prefs(void)
{ {
@@ -955,6 +964,7 @@ _cons_show_ui_prefs(void)
cons_mouse_setting(); cons_mouse_setting();
cons_statuses_setting(); cons_statuses_setting();
cons_occupants_setting(); cons_occupants_setting();
cons_roster_setting();
cons_privileges_setting(); cons_privileges_setting();
cons_titlebar_setting(); cons_titlebar_setting();
cons_presence_setting(); cons_presence_setting();
@@ -1573,6 +1583,7 @@ console_init_module(void)
cons_splash_setting = _cons_splash_setting; cons_splash_setting = _cons_splash_setting;
cons_autoconnect_setting = _cons_autoconnect_setting; cons_autoconnect_setting = _cons_autoconnect_setting;
cons_occupants_setting = _cons_occupants_setting; cons_occupants_setting = _cons_occupants_setting;
cons_roster_setting = _cons_roster_setting;
cons_vercheck_setting = _cons_vercheck_setting; cons_vercheck_setting = _cons_vercheck_setting;
cons_mouse_setting = _cons_mouse_setting; cons_mouse_setting = _cons_mouse_setting;
cons_statuses_setting = _cons_statuses_setting; cons_statuses_setting = _cons_statuses_setting;

View File

@@ -2985,6 +2985,25 @@ _ui_room_hide_occupants(const char * const room)
} }
} }
static void
_ui_show_roster(void)
{
ProfWin *window = wins_get_console();
if (window && !window->subwin) {
wins_show_subwin(window);
ui_roster();
}
}
static void
_ui_hide_roster(void)
{
ProfWin *window = wins_get_console();
if (window && window->subwin) {
wins_hide_subwin(window);
}
}
static void static void
_win_handle_switch(const wint_t * const ch) _win_handle_switch(const wint_t * const ch)
{ {
@@ -3291,6 +3310,8 @@ ui_init_module(void)
ui_roster = _ui_roster; ui_roster = _ui_roster;
ui_room_show_occupants = _ui_room_show_occupants; ui_room_show_occupants = _ui_room_show_occupants;
ui_room_hide_occupants = _ui_room_hide_occupants; ui_room_hide_occupants = _ui_room_hide_occupants;
ui_show_roster = _ui_show_roster;
ui_hide_roster = _ui_hide_roster;
ui_room_role_change = _ui_room_role_change; ui_room_role_change = _ui_room_role_change;
ui_room_affiliation_change = _ui_room_affiliation_change; ui_room_affiliation_change = _ui_room_affiliation_change;
ui_switch_to_room = _ui_switch_to_room; ui_switch_to_room = _ui_switch_to_room;

View File

@@ -175,6 +175,8 @@ void (*ui_room_member_presence)(const char * const room,
const char * const nick, const char * const show, const char * const status); const char * const nick, const char * const show, const char * const status);
void (*ui_room_show_occupants)(const char * const room); void (*ui_room_show_occupants)(const char * const room);
void (*ui_room_hide_occupants)(const char * const room); void (*ui_room_hide_occupants)(const char * const room);
void (*ui_show_roster)(void);
void (*ui_hide_roster)(void);
void (*ui_roster_add)(const char * const barejid, const char * const name); void (*ui_roster_add)(const char * const barejid, const char * const name);
void (*ui_roster_remove)(const char * const barejid); void (*ui_roster_remove)(const char * const barejid);
void (*ui_contact_already_in_group)(const char * const contact, const char * const group); void (*ui_contact_already_in_group)(const char * const contact, const char * const group);
@@ -298,6 +300,7 @@ void (*cons_flash_setting)(void);
void (*cons_splash_setting)(void); void (*cons_splash_setting)(void);
void (*cons_vercheck_setting)(void); void (*cons_vercheck_setting)(void);
void (*cons_occupants_setting)(void); void (*cons_occupants_setting)(void);
void (*cons_roster_setting)(void);
void (*cons_presence_setting)(void); void (*cons_presence_setting)(void);
void (*cons_wrap_setting)(void); void (*cons_wrap_setting)(void);
void (*cons_mouse_setting)(void); void (*cons_mouse_setting)(void);

View File

@@ -71,7 +71,7 @@ win_create(const char * const title, win_type_t type)
new_win->from = strdup(title); new_win->from = strdup(title);
int cols = getmaxx(stdscr); int cols = getmaxx(stdscr);
if ((type == WIN_MUC && prefs_get_boolean(PREF_OCCUPANTS)) || (type == WIN_CONSOLE)) { if (type == WIN_MUC && prefs_get_boolean(PREF_OCCUPANTS)) {
int main_cols = win_main_width(); int main_cols = win_main_width();
new_win->win = newpad(PAD_SIZE, main_cols); new_win->win = newpad(PAD_SIZE, main_cols);
wbkgd(new_win->win, COLOUR_TEXT); wbkgd(new_win->win, COLOUR_TEXT);