2012-10-21 15:02:20 -04:00
|
|
|
/*
|
2012-02-20 15:07:38 -05:00
|
|
|
* command.c
|
|
|
|
*
|
2013-01-10 21:05:29 -05:00
|
|
|
* Copyright (C) 2012, 2013 James Booth <boothj5@gmail.com>
|
2012-10-21 15:02:20 -04:00
|
|
|
*
|
2012-02-20 15:07:38 -05:00
|
|
|
* This file is part of Profanity.
|
|
|
|
*
|
|
|
|
* Profanity is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Profanity is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with Profanity. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2013-02-02 15:55:58 -05:00
|
|
|
#include <errno.h>
|
|
|
|
#include <limits.h>
|
2012-02-19 15:57:46 -05:00
|
|
|
#include <stdlib.h>
|
2012-08-25 20:50:50 -04:00
|
|
|
#include <string.h>
|
2012-04-23 20:02:22 -04:00
|
|
|
|
|
|
|
#include <glib.h>
|
|
|
|
|
2012-10-31 17:30:58 -04:00
|
|
|
#include "chat_session.h"
|
2013-02-02 16:43:59 -05:00
|
|
|
#include "command/command.h"
|
|
|
|
#include "command/history.h"
|
|
|
|
#include "command/parser.h"
|
2012-08-25 20:50:50 -04:00
|
|
|
#include "common.h"
|
2013-02-02 16:59:29 -05:00
|
|
|
#include "config/accounts.h"
|
|
|
|
#include "config/preferences.h"
|
|
|
|
#include "config/theme.h"
|
2012-10-04 17:48:41 -04:00
|
|
|
#include "contact.h"
|
2012-08-25 20:50:50 -04:00
|
|
|
#include "contact_list.h"
|
2013-01-12 22:14:36 -05:00
|
|
|
#include "jid.h"
|
2012-08-25 20:50:50 -04:00
|
|
|
#include "log.h"
|
2013-02-02 15:55:58 -05:00
|
|
|
#include "muc.h"
|
2012-11-19 18:15:42 -05:00
|
|
|
#include "profanity.h"
|
2013-02-02 16:43:59 -05:00
|
|
|
#include "tools/autocomplete.h"
|
|
|
|
#include "tools/tinyurl.h"
|
2013-02-02 14:57:46 -05:00
|
|
|
#include "ui/ui.h"
|
2013-02-02 14:47:41 -05:00
|
|
|
#include "xmpp/xmpp.h"
|
2012-02-09 18:15:53 -05:00
|
|
|
|
2012-10-27 20:08:04 -04:00
|
|
|
typedef char*(*autocomplete_func)(char *);
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
/*
|
2012-08-22 18:57:34 -04:00
|
|
|
* Command structure
|
|
|
|
*
|
|
|
|
* cmd - The command string including leading '/'
|
2012-08-11 20:39:51 -04:00
|
|
|
* func - The function to execute for the command
|
2012-11-17 21:40:49 -05:00
|
|
|
* parser - The function used to parse arguments
|
|
|
|
* min_args - Minimum number of arguments
|
|
|
|
* max_args - Maximum number of arguments
|
2012-08-22 18:57:34 -04:00
|
|
|
* help - A help struct containing usage info etc
|
2012-08-11 20:39:51 -04:00
|
|
|
*/
|
|
|
|
struct cmd_t {
|
|
|
|
const gchar *cmd;
|
2012-11-17 21:40:49 -05:00
|
|
|
gboolean (*func)(gchar **args, struct cmd_help_t help);
|
|
|
|
gchar** (*parser)(const char * const inp, int min, int max);
|
|
|
|
int min_args;
|
|
|
|
int max_args;
|
2012-08-11 20:39:51 -04:00
|
|
|
struct cmd_help_t help;
|
|
|
|
};
|
|
|
|
|
2012-08-14 19:42:38 -04:00
|
|
|
static struct cmd_t * _cmd_get_command(const char * const command);
|
2013-02-10 12:13:19 -05:00
|
|
|
static void _update_presence(const resource_presence_t presence,
|
2012-11-17 21:40:49 -05:00
|
|
|
const char * const show, gchar **args);
|
2012-11-30 18:34:14 -05:00
|
|
|
static gboolean _cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
|
2013-02-02 21:51:15 -05:00
|
|
|
const char * const display, preference_t pref);
|
2012-10-27 20:42:26 -04:00
|
|
|
|
|
|
|
static void _cmd_complete_parameters(char *input, int *size);
|
|
|
|
static void _notify_autocomplete(char *input, int *size);
|
2012-12-02 15:53:45 -05:00
|
|
|
static void _titlebar_autocomplete(char *input, int *size);
|
2012-12-08 19:46:14 -05:00
|
|
|
static void _theme_autocomplete(char *input, int *size);
|
2012-12-01 19:38:10 -05:00
|
|
|
static void _autoaway_autocomplete(char *input, int *size);
|
2012-12-09 17:58:45 -05:00
|
|
|
static void _account_autocomplete(char *input, int *size);
|
2012-10-27 20:08:04 -04:00
|
|
|
static void _parameter_autocomplete(char *input, int *size, char *command,
|
|
|
|
autocomplete_func func);
|
2012-12-01 19:38:10 -05:00
|
|
|
static void _parameter_autocomplete_with_ac(char *input, int *size, char *command,
|
2013-01-24 20:11:49 -05:00
|
|
|
Autocomplete ac);
|
2012-08-10 19:18:03 -04:00
|
|
|
|
2012-11-13 17:23:06 -05:00
|
|
|
static int _strtoi(char *str, int *saveptr, int min, int max);
|
|
|
|
|
2012-08-10 19:18:03 -04:00
|
|
|
// command prototypes
|
2012-11-17 21:40:49 -05:00
|
|
|
static gboolean _cmd_quit(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_help(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_about(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_prefs(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_who(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_connect(gchar **args, struct cmd_help_t help);
|
2012-12-09 15:18:38 -05:00
|
|
|
static gboolean _cmd_account(gchar **args, struct cmd_help_t help);
|
2012-11-17 21:40:49 -05:00
|
|
|
static gboolean _cmd_disconnect(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_sub(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_msg(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_tiny(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_close(gchar **args, struct cmd_help_t help);
|
2013-03-02 16:55:55 -05:00
|
|
|
static gboolean _cmd_clear(gchar **args, struct cmd_help_t help);
|
2012-11-17 21:40:49 -05:00
|
|
|
static gboolean _cmd_join(gchar **args, struct cmd_help_t help);
|
2013-04-20 15:18:13 -04:00
|
|
|
static gboolean _cmd_invite(gchar **args, struct cmd_help_t help);
|
2013-03-13 19:38:26 -04:00
|
|
|
static gboolean _cmd_rooms(gchar **args, struct cmd_help_t help);
|
2013-03-14 16:50:09 -04:00
|
|
|
static gboolean _cmd_disco(gchar **args, struct cmd_help_t help);
|
2012-11-17 21:40:49 -05:00
|
|
|
static gboolean _cmd_set_beep(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_set_notify(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_set_log(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_set_priority(gchar **args, struct cmd_help_t help);
|
2012-11-24 21:14:38 -05:00
|
|
|
static gboolean _cmd_set_reconnect(gchar **args, struct cmd_help_t help);
|
2012-11-17 21:40:49 -05:00
|
|
|
static gboolean _cmd_set_intype(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_set_flash(gchar **args, struct cmd_help_t help);
|
2012-12-01 21:21:59 -05:00
|
|
|
static gboolean _cmd_set_splash(gchar **args, struct cmd_help_t help);
|
2012-11-17 21:40:49 -05:00
|
|
|
static gboolean _cmd_set_chlog(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_set_history(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_set_states(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_set_outtype(gchar **args, struct cmd_help_t help);
|
2012-12-19 18:31:25 -05:00
|
|
|
static gboolean _cmd_set_gone(gchar **args, struct cmd_help_t help);
|
2012-11-26 18:58:24 -05:00
|
|
|
static gboolean _cmd_set_autoping(gchar **args, struct cmd_help_t help);
|
2012-12-02 15:53:45 -05:00
|
|
|
static gboolean _cmd_set_titlebar(gchar **args, struct cmd_help_t help);
|
2012-11-30 18:34:14 -05:00
|
|
|
static gboolean _cmd_set_autoaway(gchar **args, struct cmd_help_t help);
|
2013-01-17 14:40:55 -05:00
|
|
|
static gboolean _cmd_set_mouse(gchar **args, struct cmd_help_t help);
|
2013-01-21 19:54:59 -05:00
|
|
|
static gboolean _cmd_set_statuses(gchar **args, struct cmd_help_t help);
|
2012-11-17 21:40:49 -05:00
|
|
|
static gboolean _cmd_vercheck(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_away(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_online(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_dnd(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_chat(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_xa(gchar **args, struct cmd_help_t help);
|
|
|
|
static gboolean _cmd_info(gchar **args, struct cmd_help_t help);
|
2013-02-16 20:04:10 -05:00
|
|
|
static gboolean _cmd_caps(gchar **args, struct cmd_help_t help);
|
2013-02-16 21:10:56 -05:00
|
|
|
static gboolean _cmd_software(gchar **args, struct cmd_help_t help);
|
2012-11-17 21:40:49 -05:00
|
|
|
static gboolean _cmd_wins(gchar **args, struct cmd_help_t help);
|
2012-11-18 13:36:17 -05:00
|
|
|
static gboolean _cmd_nick(gchar **args, struct cmd_help_t help);
|
2012-11-21 17:33:07 -05:00
|
|
|
static gboolean _cmd_theme(gchar **args, struct cmd_help_t help);
|
2013-01-21 18:24:59 -05:00
|
|
|
static gboolean _cmd_status(gchar **args, struct cmd_help_t help);
|
2012-04-23 20:02:22 -04:00
|
|
|
|
2012-08-22 18:57:34 -04:00
|
|
|
/*
|
|
|
|
* The commands are broken down into three groups:
|
|
|
|
* Main commands
|
|
|
|
* Commands to change preferences
|
|
|
|
* Commands to change users status
|
|
|
|
*/
|
2012-10-21 15:02:20 -04:00
|
|
|
static struct cmd_t main_commands[] =
|
2012-08-11 20:39:51 -04:00
|
|
|
{
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/help",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_help, parse_args, 0, 1,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/help [list|area|command]", "Get help on using Profanity",
|
2012-11-11 18:57:02 -05:00
|
|
|
{ "/help [list|area|command]",
|
|
|
|
"-------------------------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"list : List of all commands.",
|
|
|
|
"area : One of 'basic', 'presence', 'settings', 'navigation' for more summary help in that area.",
|
|
|
|
"command : Detailed help on a specific command.",
|
2012-08-14 17:50:38 -04:00
|
|
|
"",
|
2012-11-11 18:57:02 -05:00
|
|
|
"Example : /help list",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Example : /help connect",
|
2012-10-22 18:58:47 -04:00
|
|
|
"Example : /help settings",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
|
|
|
"For more details help, see the user guide at http://www.profanity.im/userguide.html.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-14 17:06:27 -04:00
|
|
|
|
2012-10-22 19:18:28 -04:00
|
|
|
{ "/about",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_about, parse_args, 0, 0,
|
2012-10-22 19:18:28 -04:00
|
|
|
{ "/about", "About Profanity",
|
|
|
|
{ "/about",
|
|
|
|
"------",
|
|
|
|
"Show versioning and license information.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/connect",
|
2012-12-06 15:36:16 -05:00
|
|
|
_cmd_connect, parse_args, 1, 2,
|
2012-12-22 18:48:45 -05:00
|
|
|
{ "/connect account [server]", "Login to a chat service.",
|
|
|
|
{ "/connect account [server]",
|
|
|
|
"-------------------------",
|
|
|
|
"Connect to an XMPP service using the specified account.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Use the server argument for chat services hosted at a different domain to the 'domainpart' of the Jabber ID.",
|
2012-12-22 18:48:45 -05:00
|
|
|
"An account is automatically created if one does not exist. See the /account command for more details.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"",
|
2012-10-21 15:02:20 -04:00
|
|
|
"Example: /connect myuser@gmail.com",
|
2012-12-06 15:36:16 -05:00
|
|
|
"Example: /connect myuser@mycompany.com talk.google.com",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2012-10-27 13:12:04 -04:00
|
|
|
{ "/disconnect",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_disconnect, parse_args, 0, 0,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/disconnect", "Logout of current session.",
|
2012-10-27 13:12:04 -04:00
|
|
|
{ "/disconnect",
|
2013-03-10 15:17:24 -04:00
|
|
|
"-----------",
|
|
|
|
"Disconnect from the current chat service.",
|
2012-10-27 13:12:04 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-12-09 15:18:38 -05:00
|
|
|
{ "/account",
|
2013-02-18 17:51:05 -05:00
|
|
|
_cmd_account, parse_args, 0, 4,
|
|
|
|
{ "/account [command] [account] [property] [value]", "Manage accounts.",
|
|
|
|
{ "/account [command] [account] [property] [value]",
|
2013-03-10 15:17:24 -04:00
|
|
|
"-----------------------------------------------",
|
2012-12-09 15:18:38 -05:00
|
|
|
"Commands for creating and managing accounts.",
|
|
|
|
"list : List all accounts.",
|
|
|
|
"show account : Show information about an account.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"enable account : Enable the account, it will be used for autocomplete.",
|
2012-12-09 15:18:38 -05:00
|
|
|
"disable account : Disable the account.",
|
2012-12-09 20:14:21 -05:00
|
|
|
"add account : Create a new account.",
|
2012-12-09 19:08:03 -05:00
|
|
|
"rename account newname : Rename account to newname.",
|
2012-12-09 15:18:38 -05:00
|
|
|
"set account property value : Set 'property' of 'account' to 'value'.",
|
|
|
|
"",
|
2013-03-10 15:17:24 -04:00
|
|
|
"When connected, the /account command can be called with no arguments, to show current account settings.",
|
2012-12-09 15:18:38 -05:00
|
|
|
"The 'property' may be one of.",
|
2013-01-31 18:49:29 -05:00
|
|
|
"jid : The Jabber ID of the account, the account name will be used if this property is not set.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"server : The chat server, if different to the domainpart of the JID.",
|
2013-01-31 18:49:29 -05:00
|
|
|
"status : The presence status to use on login, use 'last' to use whatever your last status was.",
|
|
|
|
"online|chat|away",
|
|
|
|
"|xa|dnd : Priority for the specified presence.",
|
|
|
|
"resource : The resource to be used.",
|
2012-12-09 15:18:38 -05:00
|
|
|
"",
|
2012-12-09 20:14:21 -05:00
|
|
|
"Example : /account add work",
|
2012-12-09 15:18:38 -05:00
|
|
|
" : /account set work jid myuser@mycompany.com",
|
|
|
|
" : /account set work server talk.google.com",
|
2013-01-27 15:34:56 -05:00
|
|
|
" : /account set work resource desktop",
|
2013-01-30 19:56:29 -05:00
|
|
|
" : /account set work status dnd",
|
2013-03-10 15:17:24 -04:00
|
|
|
" : /account set work dnd -1",
|
|
|
|
" : /account set work online 10",
|
2012-12-09 19:08:03 -05:00
|
|
|
" : /account rename work gtalk",
|
2012-12-09 15:18:38 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/prefs",
|
2012-11-29 18:14:56 -05:00
|
|
|
_cmd_prefs, parse_args, 0, 1,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/prefs [area]", "Show configuration.",
|
|
|
|
{ "/prefs [area]",
|
|
|
|
"-------------",
|
|
|
|
"Area is one of:",
|
|
|
|
"ui : User interface preferences.",
|
|
|
|
"desktop : Desktop notification preferences.",
|
|
|
|
"chat : Chat state preferences.",
|
|
|
|
"log : Logging preferences.",
|
|
|
|
"conn : Connection handling preferences.",
|
|
|
|
"presence : Chat presence preferences.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"",
|
2012-12-09 13:59:11 -05:00
|
|
|
"No argument shows all categories.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-11-21 17:33:07 -05:00
|
|
|
{ "/theme",
|
2012-12-08 19:26:08 -05:00
|
|
|
_cmd_theme, parse_args, 1, 2,
|
|
|
|
{ "/theme command [theme-name]", "Change colour theme.",
|
|
|
|
{ "/theme command [theme-name]",
|
|
|
|
"---------------------------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Change the colour settings used.",
|
2012-11-25 17:08:41 -05:00
|
|
|
"",
|
2012-12-09 13:59:11 -05:00
|
|
|
"command : One of the following,",
|
2012-12-08 19:53:26 -05:00
|
|
|
"list : List all available themes.",
|
|
|
|
"set [theme-name] : Load the named theme.\"default\" will reset to the default colours.",
|
2012-12-08 19:26:08 -05:00
|
|
|
"",
|
|
|
|
"Example : /theme list",
|
2012-12-08 19:53:26 -05:00
|
|
|
"Example : /theme set mycooltheme",
|
2012-11-21 17:33:07 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/msg",
|
2012-11-29 19:19:03 -05:00
|
|
|
_cmd_msg, parse_args_with_freetext, 1, 2,
|
2013-01-15 16:41:17 -05:00
|
|
|
{ "/msg jid|nick [message]", "Start chat with user.",
|
|
|
|
{ "/msg jid|nick [message]",
|
|
|
|
"-----------------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Open a chat window with for the user JID (Jabber ID) and send the message if one is supplied.",
|
2013-01-15 16:41:17 -05:00
|
|
|
"When in a chat room, supply the nickname to start private chat with the room member.",
|
|
|
|
"Use quotes if the nickname includes spaces.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"",
|
2012-11-29 19:19:03 -05:00
|
|
|
"Example : /msg myfriend@server.com Hey, here's a message!",
|
|
|
|
"Example : /msg otherfriend@server.com",
|
2013-01-15 16:41:17 -05:00
|
|
|
"Example : /msg Bob Here is a private message",
|
|
|
|
"Example : /msg \"My Friend\" Hi, how are you?",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-11-13 20:39:26 -05:00
|
|
|
{ "/info",
|
2013-01-17 17:46:50 -05:00
|
|
|
_cmd_info, parse_args, 0, 1,
|
2013-03-10 15:17:24 -04:00
|
|
|
{ "/info [jid|nick]", "Show basic information about a contact, or room member.",
|
2013-01-17 17:46:50 -05:00
|
|
|
{ "/info [jid|nick]",
|
|
|
|
"----------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Show information including current subscription status and summary information for each connected resource.",
|
2013-01-17 17:46:50 -05:00
|
|
|
"If in a chat window the parameter is not required, the current recipient will be used.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
|
|
|
"Example : /info mybuddy@chat.server.org (contact)",
|
|
|
|
"Example : /info kai (room member)",
|
2012-11-13 17:08:46 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-02-16 20:04:10 -05:00
|
|
|
{ "/caps",
|
|
|
|
_cmd_caps, parse_args, 0, 1,
|
2013-02-17 11:59:20 -05:00
|
|
|
{ "/caps [fulljid|nick]", "Find out a contacts client software capabilities.",
|
|
|
|
{ "/caps [fulljid|nick]",
|
|
|
|
"--------------------",
|
|
|
|
"Find out a contact, or room members client software capabilities.",
|
|
|
|
"If in the console window or a regular chat window, a full JID is required.",
|
|
|
|
"If in a chat room, the nickname is required.",
|
|
|
|
"If in private chat, no parameter is required.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
|
|
|
"Example : /caps mybuddy@chat.server.org/laptop (contact's laptop resource)",
|
|
|
|
"Example : /caps mybuddy@chat.server.org/phone (contact's phone resource)",
|
|
|
|
"Example : /caps bruce (room member)",
|
2013-02-16 20:04:10 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-02-16 21:10:56 -05:00
|
|
|
{ "/software",
|
|
|
|
_cmd_software, parse_args, 0, 1,
|
2013-03-10 15:17:24 -04:00
|
|
|
{ "/software [fulljid|nick]", "Find out software version information about a contacts resource.",
|
2013-02-17 11:59:20 -05:00
|
|
|
{ "/software [fulljid|nick]",
|
|
|
|
"------------------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Find out a contact, or room members software version information, if such requests are supported.",
|
2013-02-17 11:59:20 -05:00
|
|
|
"If in the console window or a regular chat window, a full JID is required.",
|
|
|
|
"If in a chat room, the nickname is required.",
|
|
|
|
"If in private chat, no parameter is required.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"If the contacts software does not support software version requests, nothing will be displayed.",
|
|
|
|
"",
|
|
|
|
"Example : /software mybuddy@chat.server.org/laptop (contact's laptop resource)",
|
|
|
|
"Example : /software mybuddy@chat.server.org/phone (contact's phone resource)",
|
|
|
|
"Example : /software bruce (room member)",
|
2013-02-16 21:10:56 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-01-21 18:24:59 -05:00
|
|
|
{ "/status",
|
|
|
|
_cmd_status, parse_args, 0, 1,
|
|
|
|
{ "/status [jid|nick]", "Find out a contacts presence information.",
|
|
|
|
{ "/status [jid|nick]",
|
|
|
|
"------------------",
|
|
|
|
"Find out a contact, or room members presence information.",
|
|
|
|
"If in a chat window the parameter is not required, the current recipient will be used.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"",
|
|
|
|
"Example : /status buddy@server.com (contact)",
|
|
|
|
"Example : /status jon (room member)",
|
2013-01-21 18:24:59 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-11-03 21:27:01 -04:00
|
|
|
{ "/join",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_join, parse_args_with_freetext, 1, 2,
|
2013-04-10 17:47:01 -04:00
|
|
|
{ "/join room[@server] [nick]", "Join a chat room.",
|
|
|
|
{ "/join room[@server] [nick]",
|
|
|
|
"--------------------------",
|
2012-11-03 21:27:01 -04:00
|
|
|
"Join a chat room at the conference server.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"If nick is specified you will join with this nickname.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Otherwise the 'localpart' of your JID (before the @) will be used.",
|
2013-04-10 17:47:01 -04:00
|
|
|
"If no server is supplied, it will default to 'conference.<domain-part>'",
|
2012-12-09 13:59:11 -05:00
|
|
|
"If the room doesn't exist, and the server allows it, a new one will be created.",
|
2012-11-03 21:27:01 -04:00
|
|
|
"",
|
|
|
|
"Example : /join jdev@conference.jabber.org",
|
|
|
|
"Example : /join jdev@conference.jabber.org mynick",
|
2013-04-10 17:47:01 -04:00
|
|
|
"Example : /join jdev (as user@jabber.org will join jdev@conference.jabber.org)",
|
2012-11-03 21:27:01 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2013-04-20 15:18:13 -04:00
|
|
|
{ "/invite",
|
|
|
|
_cmd_invite, parse_args_with_freetext, 1, 2,
|
|
|
|
{ "/invite jid [message]", "Invite contact to chat room.",
|
|
|
|
{ "/invite jid [message]",
|
|
|
|
"--------------------------",
|
|
|
|
"Send a direct invite to the specified contact to the current chat room.",
|
|
|
|
"The jid must be a contact in your roster.",
|
|
|
|
"If a message is supplied it will be send as the reason for the invite.",
|
|
|
|
NULL } } },
|
|
|
|
|
2013-03-13 19:38:26 -04:00
|
|
|
{ "/rooms",
|
|
|
|
_cmd_rooms, parse_args, 0, 1,
|
2013-03-14 16:50:09 -04:00
|
|
|
{ "/rooms [conference-service]", "List chat rooms.",
|
|
|
|
{ "/rooms [conference-service]",
|
|
|
|
"---------------------------",
|
|
|
|
"List the chat rooms available at the specified conference service",
|
2013-03-13 19:38:26 -04:00
|
|
|
"If no argument is supplied, the domainpart of the current logged in JID is used,",
|
|
|
|
"with a prefix of 'conference'.",
|
|
|
|
"",
|
|
|
|
"Example : /rooms conference.jabber.org",
|
|
|
|
"Example : /rooms (if logged in as me@server.org, is equivalent to /rooms conference.server.org)",
|
|
|
|
NULL } } },
|
|
|
|
|
2013-03-14 16:50:09 -04:00
|
|
|
{ "/disco",
|
2013-03-14 17:29:04 -04:00
|
|
|
_cmd_disco, parse_args, 1, 2,
|
2013-03-14 16:50:09 -04:00
|
|
|
{ "/disco command entity", "Service discovery.",
|
|
|
|
{ "/disco command entity",
|
|
|
|
"---------------------",
|
|
|
|
"Find out information about an entities supported services.",
|
|
|
|
"Command may be one of:",
|
|
|
|
"info: List protocols and features supported by an entity.",
|
|
|
|
"items: List items associated with an entity.",
|
|
|
|
"",
|
|
|
|
"The entity must be a Jabber ID.",
|
|
|
|
"",
|
|
|
|
"Example : /disco info myserver.org",
|
|
|
|
"Example : /disco items myserver.org",
|
|
|
|
"Example : /disco items conference.jabber.org",
|
|
|
|
"Example : /disco info myfriend@server.com/laptop",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-18 13:36:17 -05:00
|
|
|
{ "/nick",
|
|
|
|
_cmd_nick, parse_args_with_freetext, 1, 1,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/nick nickname", "Change nickname in chat room.",
|
|
|
|
{ "/nick nickname",
|
|
|
|
"--------------",
|
|
|
|
"Change the name by which other members of a chat room see you.",
|
2012-11-18 13:36:17 -05:00
|
|
|
"This command is only valid when called within a chat room window.",
|
|
|
|
"",
|
|
|
|
"Example : /nick kai hansen",
|
|
|
|
"Example : /nick bob",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-13 19:39:34 -05:00
|
|
|
{ "/wins",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_wins, parse_args, 0, 0,
|
2012-11-13 19:39:34 -05:00
|
|
|
{ "/wins", "List active windows.",
|
|
|
|
{ "/wins",
|
|
|
|
"-----",
|
2012-12-09 13:59:11 -05:00
|
|
|
"List all currently active windows and information about their usage.",
|
2012-11-13 19:39:34 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-28 14:51:13 -04:00
|
|
|
{ "/sub",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_sub, parse_args, 1, 2,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/sub command [jid]", "Manage subscriptions.",
|
|
|
|
{ "/sub command [jid]",
|
|
|
|
"------------------",
|
|
|
|
"command : One of the following,",
|
2012-11-27 19:36:51 -05:00
|
|
|
"request : Send a subscription request to the user to be informed of their",
|
|
|
|
" : presence.",
|
2012-11-27 21:02:59 -05:00
|
|
|
"allow : Approve a contact's subscription reqeust to see your presence.",
|
2012-11-27 19:36:51 -05:00
|
|
|
"deny : Remove subscription for a contact, or deny a request",
|
|
|
|
"show : Show subscriprion status for a contact.",
|
|
|
|
"sent : Show all sent subscription requests pending a response.",
|
|
|
|
"received : Show all received subscription requests awaiting your response.",
|
2012-10-28 14:51:13 -04:00
|
|
|
"",
|
2012-11-27 21:02:59 -05:00
|
|
|
"The optional 'jid' parameter only applys to 'request', 'allow', 'deny' and 'show'",
|
|
|
|
"If it is omitted the contact of the current window is used.",
|
2012-11-11 07:00:21 -05:00
|
|
|
"",
|
2012-11-27 18:43:32 -05:00
|
|
|
"Example: /sub request myfriend@jabber.org",
|
|
|
|
"Example: /sub allow myfriend@jabber.org",
|
|
|
|
"Example: /sub request (whilst in chat with contact)",
|
2012-11-27 19:36:51 -05:00
|
|
|
"Example: /sub sent",
|
2012-10-28 14:51:13 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/tiny",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_tiny, parse_args, 1, 1,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/tiny url", "Send url as tinyurl in current chat.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/tiny url",
|
|
|
|
"---------",
|
|
|
|
"Send the url as a tiny url.",
|
|
|
|
"",
|
|
|
|
"Example : /tiny http://www.google.com",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/who",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_who, parse_args, 0, 1,
|
2013-01-17 18:05:23 -05:00
|
|
|
{ "/who [status]", "Show contacts/room participants with chosen status.",
|
2012-10-04 18:18:48 -04:00
|
|
|
{ "/who [status]",
|
|
|
|
"-------------",
|
|
|
|
"Show contacts with the specified status, no status shows all contacts.",
|
2012-11-11 19:21:49 -05:00
|
|
|
"Possible statuses are: online, offline, away, dnd, xa, chat, available, unavailable.",
|
2013-01-17 18:05:23 -05:00
|
|
|
"If in a chat room, the participants with the supplied status are displayed.",
|
2012-11-11 19:21:49 -05:00
|
|
|
"",
|
2012-12-09 13:59:11 -05:00
|
|
|
"online : Contacts that are connected, i.e. online, chat, away, xa, dnd",
|
|
|
|
"available : Contacts that are available for chat, i.e. online, chat.",
|
|
|
|
"unavailable : Contacts that are not available for chat, i.e. offline, away, xa, dnd.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/close",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_close, parse_args, 0, 0,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/close", "Close current chat window.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/close",
|
|
|
|
"------",
|
|
|
|
"Close the current chat window, no message is sent to the recipient,",
|
|
|
|
"The chat window will become available for new chats.",
|
2012-11-07 19:29:52 -05:00
|
|
|
"If in a chat room, you will leave the room.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-14 17:06:27 -04:00
|
|
|
|
2013-03-02 16:55:55 -05:00
|
|
|
{ "/clear",
|
|
|
|
_cmd_clear, parse_args, 0, 0,
|
|
|
|
{ "/clear", "Clear current window.",
|
|
|
|
{ "/clear",
|
|
|
|
"------",
|
|
|
|
"Clear the current window.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/quit",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_quit, parse_args, 0, 0,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/quit", "Quit Profanity.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/quit",
|
|
|
|
"-----",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Logout of any current session, and quit Profanity.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } }
|
2012-08-11 16:26:24 -04:00
|
|
|
};
|
2012-08-10 19:18:03 -04:00
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
static struct cmd_t setting_commands[] =
|
2012-08-11 20:39:51 -04:00
|
|
|
{
|
|
|
|
{ "/beep",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_beep, parse_args, 1, 1,
|
2012-10-27 14:46:48 -04:00
|
|
|
{ "/beep on|off", "Terminal beep on new messages.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/beep on|off",
|
|
|
|
"------------",
|
|
|
|
"Switch the terminal bell on or off.",
|
|
|
|
"The bell will sound when incoming messages are received.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"If the terminal does not support sounds, it may attempt to flash the screen instead.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-08-11 20:39:51 -04:00
|
|
|
{ "/notify",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_notify, parse_args, 2, 2,
|
2012-10-27 17:05:08 -04:00
|
|
|
{ "/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",
|
2013-04-22 18:48:23 -04:00
|
|
|
"invite : Notifications for chat room invites.",
|
|
|
|
" : on|off",
|
2012-08-15 19:50:32 -04:00
|
|
|
"",
|
2012-10-27 17:05:08 -04:00
|
|
|
"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)",
|
2013-04-22 18:48:23 -04:00
|
|
|
"Example : /notify invite on (enable chat room invite notifications)",
|
2012-09-23 17:24:31 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/flash",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_flash, parse_args, 1, 1,
|
2012-10-27 14:46:48 -04:00
|
|
|
{ "/flash on|off", "Terminal flash on new messages.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/flash on|off",
|
|
|
|
"-------------",
|
|
|
|
"Make the terminal flash when incoming messages are recieved.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"The flash will only occur if you are not in the chat window associated with the user sending the message.",
|
|
|
|
"If the terminal doesn't support flashing, it may attempt to beep.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-10-27 19:33:20 -04:00
|
|
|
{ "/intype",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_intype, parse_args, 1, 1,
|
2012-10-27 19:33:20 -04:00
|
|
|
{ "/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.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-12-01 21:21:59 -05:00
|
|
|
{ "/splash",
|
|
|
|
_cmd_set_splash, parse_args, 1, 1,
|
2013-03-10 15:17:24 -04:00
|
|
|
{ "/splash on|off", "Splash logo on startup and /about command.",
|
2012-12-01 21:21:59 -05:00
|
|
|
{ "/splash on|off",
|
|
|
|
"--------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Switch on or off the ascii logo on start up and when the /about command is called.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-10-27 12:40:17 -04:00
|
|
|
|
2012-10-23 20:35:36 -04:00
|
|
|
{ "/vercheck",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_vercheck, parse_args, 0, 1,
|
2012-10-23 20:35:36 -04:00
|
|
|
{ "/vercheck [on|off]", "Check for a new release.",
|
|
|
|
{ "/vercheck [on|off]",
|
|
|
|
"------------------",
|
|
|
|
"Without a parameter will check for a new release.",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Switching on or off will enable/disable a version check when Profanity starts, and each time the /about command is run.",
|
2012-10-23 20:35:36 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-12-02 15:53:45 -05:00
|
|
|
{ "/titlebar",
|
|
|
|
_cmd_set_titlebar, parse_args, 2, 2,
|
|
|
|
{ "/titlebar property on|off", "Show various properties in the window title bar.",
|
|
|
|
{ "/titlebar property on|off",
|
|
|
|
"-------------------------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Show various properties in the window title bar.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Currently The only supported property is 'version'.",
|
2012-11-29 15:34:52 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2013-01-17 14:40:55 -05:00
|
|
|
{ "/mouse",
|
|
|
|
_cmd_set_mouse, parse_args, 1, 1,
|
|
|
|
{ "/mouse on|off", "Use profanity mouse handling.",
|
|
|
|
{ "/mouse on|off",
|
|
|
|
"-------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"If set to 'on', profanity will handle mouse actions, which enables scrolling the main window with the mouse wheel.",
|
2013-01-17 14:40:55 -05:00
|
|
|
"To select text, use the shift key while selcting an area.",
|
|
|
|
"If set to 'off', profanity leaves mouse handling to the terminal implementation.",
|
2013-03-19 16:04:51 -04:00
|
|
|
"This feature is experimental, certain mouse click events may occasionally freeze",
|
|
|
|
"Profanity until a key is pressed or another mouse event is received",
|
|
|
|
"The default is 'off'.",
|
2013-01-17 14:40:55 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/chlog",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_chlog, parse_args, 1, 1,
|
2012-10-27 14:46:48 -04:00
|
|
|
{ "/chlog on|off", "Chat logging to file",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/chlog on|off",
|
|
|
|
"-------------",
|
|
|
|
"Switch chat logging on or off.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"This setting will be enabled if /history is set to on.",
|
|
|
|
"When disabling this option, /history will also be disabled.",
|
2012-10-31 17:41:00 -04:00
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/states",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_states, parse_args, 1, 1,
|
2012-10-31 17:41:00 -04:00
|
|
|
{ "/states on|off", "Send chat states during a chat session.",
|
|
|
|
{ "/states on|off",
|
|
|
|
"--------------",
|
|
|
|
"Sending of chat state notifications during chat sessions.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Such as whether you have become inactive, or have closed the chat window.",
|
2012-10-14 13:26:08 -04:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-31 20:12:35 -04:00
|
|
|
{ "/outtype",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_outtype, parse_args, 1, 1,
|
2012-10-31 20:12:35 -04:00
|
|
|
{ "/outtype on|off", "Send typing notification to recipient.",
|
|
|
|
{ "/outtype on|off",
|
2013-03-10 15:17:24 -04:00
|
|
|
"---------------",
|
|
|
|
"Send an indication that you are typing to the chat recipient.",
|
|
|
|
"Chat states (/states) will be enabled if this setting is set.",
|
2012-10-31 20:12:35 -04:00
|
|
|
NULL } } },
|
2012-10-31 17:41:00 -04:00
|
|
|
|
2012-12-19 18:31:25 -05:00
|
|
|
{ "/gone",
|
|
|
|
_cmd_set_gone, parse_args, 1, 1,
|
2012-12-19 18:33:10 -05:00
|
|
|
{ "/gone minutes", "Send 'gone' state to recipient after a period.",
|
2012-12-19 18:31:25 -05:00
|
|
|
{ "/gone minutes",
|
2013-03-10 15:17:24 -04:00
|
|
|
"-------------",
|
2012-12-19 18:31:25 -05:00
|
|
|
"Send a 'gone' state to the recipient after the specified number of minutes."
|
|
|
|
"This indicates to the recipient's client that you have left the conversation.",
|
2013-03-10 15:17:24 -04:00
|
|
|
"A value of 0 will disable sending this chat state.",
|
|
|
|
"Chat states (/states) will be enabled if this setting is set.",
|
2012-12-19 18:31:25 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/history",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_history, parse_args, 1, 1,
|
2012-10-27 14:46:48 -04:00
|
|
|
{ "/history on|off", "Chat history in message windows.",
|
2012-10-14 13:26:08 -04:00
|
|
|
{ "/history on|off",
|
2012-11-11 14:32:42 -05:00
|
|
|
"---------------",
|
2013-03-10 15:17:24 -04:00
|
|
|
"Switch chat history on or off, requires /chlog will automatically be enabled when this setting in on.",
|
2012-10-14 13:26:08 -04:00
|
|
|
"When history is enabled, previous messages are shown in chat windows.",
|
2012-11-12 04:13:03 -05:00
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/log",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_log, parse_args, 2, 2,
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/log maxsize value", "Manage system logging settings.",
|
|
|
|
{ "/log maxsize value",
|
|
|
|
"------------------",
|
2012-11-12 04:13:03 -05:00
|
|
|
"maxsize : When log file size exceeds this value it will be automatically",
|
|
|
|
" rotated (file will be renamed). Default value is 1048580 (1MB)",
|
2012-11-13 05:51:28 -05:00
|
|
|
NULL } } },
|
|
|
|
|
2012-11-24 21:14:38 -05:00
|
|
|
{ "/reconnect",
|
|
|
|
_cmd_set_reconnect, parse_args, 1, 1,
|
|
|
|
{ "/reconnect seconds", "Set reconnect interval.",
|
|
|
|
{ "/reconnect seconds",
|
2013-03-10 15:17:24 -04:00
|
|
|
"------------------",
|
2012-11-24 21:14:38 -05:00
|
|
|
"Set the reconnect attempt interval in seconds for when the connection is lost.",
|
|
|
|
"A value of 0 will switch of reconnect attempts.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-26 18:58:24 -05:00
|
|
|
{ "/autoping",
|
|
|
|
_cmd_set_autoping, parse_args, 1, 1,
|
|
|
|
{ "/autoping seconds", "Server ping interval.",
|
|
|
|
{ "/autoping seconds",
|
2012-12-09 13:59:11 -05:00
|
|
|
"-----------------",
|
2012-11-26 18:58:24 -05:00
|
|
|
"Set the number of seconds between server pings, so ensure connection kept alive.",
|
|
|
|
"A value of 0 will switch off autopinging the server.",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-30 18:34:14 -05:00
|
|
|
{ "/autoaway",
|
|
|
|
_cmd_set_autoaway, parse_args_with_freetext, 2, 2,
|
|
|
|
{ "/autoaway setting value", "Set auto idle/away properties.",
|
|
|
|
{ "/autoaway setting value",
|
|
|
|
"-----------------------",
|
|
|
|
"'setting' may be one of 'mode', 'minutes', 'message' or 'check', with the following values:",
|
|
|
|
"",
|
|
|
|
"mode : idle - Sends idle time, whilst your status remains online.",
|
|
|
|
" away - Sends an away presence.",
|
|
|
|
" off - Disabled (default).",
|
|
|
|
"time : Number of minutes before the presence change is sent, the default is 15.",
|
2012-12-01 19:38:10 -05:00
|
|
|
"message : Optional message to send with the presence change.",
|
|
|
|
" : off - Disable message (default).",
|
2012-11-30 18:34:14 -05:00
|
|
|
"check : on|off, when enabled, checks for activity and sends online presence, default is 'on'.",
|
|
|
|
"",
|
|
|
|
"Example: /autoaway mode idle",
|
|
|
|
"Example: /autoaway time 30",
|
|
|
|
"Example: /autoaway message I'm not really doing much",
|
|
|
|
"Example: /autoaway check false",
|
|
|
|
NULL } } },
|
|
|
|
|
2012-11-13 05:51:28 -05:00
|
|
|
{ "/priority",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_priority, parse_args, 1, 1,
|
2013-01-31 17:48:21 -05:00
|
|
|
{ "/priority value", "Set priority for the current account.",
|
2012-12-09 13:59:11 -05:00
|
|
|
{ "/priority value",
|
|
|
|
"---------------",
|
2013-01-31 17:48:21 -05:00
|
|
|
"Set priority for the current account, presence will be sent when calling this command.",
|
|
|
|
"See the /account command for more specific priority settings per presence status.",
|
2012-11-13 05:51:28 -05:00
|
|
|
"value : Number between -128 and 127. Default value is 0.",
|
2013-01-20 20:26:09 -05:00
|
|
|
NULL } } },
|
|
|
|
|
|
|
|
{ "/statuses",
|
|
|
|
_cmd_set_statuses, parse_args, 1, 1,
|
|
|
|
{ "/statuses on|off", "Set notifications for status messages.",
|
|
|
|
{ "/statuses on|off",
|
2013-03-10 15:17:24 -04:00
|
|
|
"----------------",
|
|
|
|
"Show status updates from contacts, such as online/offline/away etc.",
|
|
|
|
"When disabled, status updates are not displayed.",
|
|
|
|
"The default is 'on'.",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } }
|
2012-08-11 16:26:24 -04:00
|
|
|
};
|
2012-08-10 19:18:03 -04:00
|
|
|
|
2012-11-13 17:24:37 -05:00
|
|
|
static struct cmd_t presence_commands[] =
|
2012-08-11 20:39:51 -04:00
|
|
|
{
|
|
|
|
{ "/away",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_away, parse_args_with_freetext, 0, 1,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/away [msg]", "Set status to away.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/away [msg]",
|
|
|
|
"-----------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'away' with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /away Gone for lunch",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
|
|
|
{ "/chat",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_chat, parse_args_with_freetext, 0, 1,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/chat [msg]", "Set status to chat (available for chat).",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/chat [msg]",
|
|
|
|
"-----------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'chat', meaning 'available for chat', with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /chat Please talk to me!",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
|
|
|
{ "/dnd",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_dnd, parse_args_with_freetext, 0, 1,
|
|
|
|
{ "/dnd [msg]", "Set status to dnd (do not disturb).",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/dnd [msg]",
|
|
|
|
"----------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'dnd', meaning 'do not disturb', with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /dnd I'm in the zone",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
{ "/online",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_online, parse_args_with_freetext, 0, 1,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/online [msg]", "Set status to online.",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/online [msg]",
|
|
|
|
"-------------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'online' with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /online Up the Irons!",
|
2012-08-14 18:22:12 -04:00
|
|
|
NULL } } },
|
2012-08-11 20:39:51 -04:00
|
|
|
|
|
|
|
{ "/xa",
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_xa, parse_args_with_freetext, 0, 1,
|
2012-08-14 17:50:38 -04:00
|
|
|
{ "/xa [msg]", "Set status to xa (extended away).",
|
2012-08-14 19:31:24 -04:00
|
|
|
{ "/xa [msg]",
|
|
|
|
"---------",
|
2012-12-09 13:59:11 -05:00
|
|
|
"Set your status to 'xa', meaning 'extended away', with the optional message.",
|
2012-08-14 19:31:24 -04:00
|
|
|
"Your current status can be found in the top right of the screen.",
|
|
|
|
"",
|
|
|
|
"Example : /xa This meeting is going to be a long one",
|
|
|
|
NULL } } },
|
2012-06-04 15:49:18 -04:00
|
|
|
};
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
static Autocomplete commands_ac;
|
|
|
|
static Autocomplete who_ac;
|
|
|
|
static Autocomplete help_ac;
|
|
|
|
static Autocomplete notify_ac;
|
|
|
|
static Autocomplete prefs_ac;
|
|
|
|
static Autocomplete sub_ac;
|
|
|
|
static Autocomplete log_ac;
|
|
|
|
static Autocomplete autoaway_ac;
|
|
|
|
static Autocomplete autoaway_mode_ac;
|
|
|
|
static Autocomplete titlebar_ac;
|
|
|
|
static Autocomplete theme_ac;
|
|
|
|
static Autocomplete theme_load_ac;
|
|
|
|
static Autocomplete account_ac;
|
2013-03-14 16:50:09 -04:00
|
|
|
static Autocomplete disco_ac;
|
2012-08-10 19:18:03 -04:00
|
|
|
|
2012-08-22 18:57:34 -04:00
|
|
|
/*
|
|
|
|
* Initialise command autocompleter and history
|
|
|
|
*/
|
2012-07-24 18:19:48 -04:00
|
|
|
void
|
2012-08-22 19:30:11 -04:00
|
|
|
cmd_init(void)
|
2012-04-30 19:24:31 -04:00
|
|
|
{
|
2012-08-25 19:54:18 -04:00
|
|
|
log_info("Initialising commands");
|
2012-10-27 20:47:57 -04:00
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
commands_ac = autocomplete_new();
|
|
|
|
who_ac = autocomplete_new();
|
|
|
|
|
|
|
|
prefs_ac = autocomplete_new();
|
|
|
|
autocomplete_add(prefs_ac, strdup("ui"));
|
|
|
|
autocomplete_add(prefs_ac, strdup("desktop"));
|
|
|
|
autocomplete_add(prefs_ac, strdup("chat"));
|
|
|
|
autocomplete_add(prefs_ac, strdup("log"));
|
|
|
|
autocomplete_add(prefs_ac, strdup("conn"));
|
|
|
|
autocomplete_add(prefs_ac, strdup("presence"));
|
|
|
|
|
|
|
|
help_ac = autocomplete_new();
|
|
|
|
autocomplete_add(help_ac, strdup("list"));
|
|
|
|
autocomplete_add(help_ac, strdup("basic"));
|
|
|
|
autocomplete_add(help_ac, strdup("presence"));
|
|
|
|
autocomplete_add(help_ac, strdup("settings"));
|
|
|
|
autocomplete_add(help_ac, strdup("navigation"));
|
|
|
|
|
|
|
|
notify_ac = autocomplete_new();
|
|
|
|
autocomplete_add(notify_ac, strdup("message"));
|
|
|
|
autocomplete_add(notify_ac, strdup("typing"));
|
|
|
|
autocomplete_add(notify_ac, strdup("remind"));
|
2013-04-22 18:48:23 -04:00
|
|
|
autocomplete_add(notify_ac, strdup("invite"));
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_add(notify_ac, strdup("status"));
|
|
|
|
|
|
|
|
sub_ac = autocomplete_new();
|
|
|
|
autocomplete_add(sub_ac, strdup("request"));
|
|
|
|
autocomplete_add(sub_ac, strdup("allow"));
|
|
|
|
autocomplete_add(sub_ac, strdup("deny"));
|
|
|
|
autocomplete_add(sub_ac, strdup("show"));
|
|
|
|
autocomplete_add(sub_ac, strdup("sent"));
|
|
|
|
autocomplete_add(sub_ac, strdup("received"));
|
|
|
|
|
|
|
|
titlebar_ac = autocomplete_new();
|
|
|
|
autocomplete_add(titlebar_ac, strdup("version"));
|
|
|
|
|
|
|
|
log_ac = autocomplete_new();
|
|
|
|
autocomplete_add(log_ac, strdup("maxsize"));
|
|
|
|
|
|
|
|
autoaway_ac = autocomplete_new();
|
|
|
|
autocomplete_add(autoaway_ac, strdup("mode"));
|
|
|
|
autocomplete_add(autoaway_ac, strdup("time"));
|
|
|
|
autocomplete_add(autoaway_ac, strdup("message"));
|
|
|
|
autocomplete_add(autoaway_ac, strdup("check"));
|
|
|
|
|
|
|
|
autoaway_mode_ac = autocomplete_new();
|
|
|
|
autocomplete_add(autoaway_mode_ac, strdup("away"));
|
|
|
|
autocomplete_add(autoaway_mode_ac, strdup("idle"));
|
|
|
|
autocomplete_add(autoaway_mode_ac, strdup("off"));
|
|
|
|
|
|
|
|
theme_ac = autocomplete_new();
|
|
|
|
autocomplete_add(theme_ac, strdup("list"));
|
|
|
|
autocomplete_add(theme_ac, strdup("set"));
|
|
|
|
|
2013-03-14 16:50:09 -04:00
|
|
|
disco_ac = autocomplete_new();
|
|
|
|
autocomplete_add(disco_ac, strdup("info"));
|
|
|
|
autocomplete_add(disco_ac, strdup("items"));
|
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
account_ac = autocomplete_new();
|
|
|
|
autocomplete_add(account_ac, strdup("list"));
|
|
|
|
autocomplete_add(account_ac, strdup("show"));
|
|
|
|
autocomplete_add(account_ac, strdup("add"));
|
|
|
|
autocomplete_add(account_ac, strdup("enable"));
|
|
|
|
autocomplete_add(account_ac, strdup("disable"));
|
|
|
|
autocomplete_add(account_ac, strdup("rename"));
|
|
|
|
autocomplete_add(account_ac, strdup("set"));
|
2012-12-09 17:58:45 -05:00
|
|
|
|
2012-12-08 19:46:14 -05:00
|
|
|
theme_load_ac = NULL;
|
|
|
|
|
2012-08-10 18:18:02 -04:00
|
|
|
unsigned int i;
|
2012-08-11 16:26:24 -04:00
|
|
|
for (i = 0; i < ARRAY_SIZE(main_commands); i++) {
|
|
|
|
struct cmd_t *pcmd = main_commands+i;
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_add(commands_ac, (gchar *)strdup(pcmd->cmd));
|
|
|
|
autocomplete_add(help_ac, (gchar *)strdup(pcmd->cmd+1));
|
2012-08-11 16:26:24 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(setting_commands); i++) {
|
|
|
|
struct cmd_t *pcmd = setting_commands+i;
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_add(commands_ac, (gchar *)strdup(pcmd->cmd));
|
|
|
|
autocomplete_add(help_ac, (gchar *)strdup(pcmd->cmd+1));
|
2012-08-11 16:26:24 -04:00
|
|
|
}
|
|
|
|
|
2012-11-13 17:24:37 -05:00
|
|
|
for (i = 0; i < ARRAY_SIZE(presence_commands); i++) {
|
|
|
|
struct cmd_t *pcmd = presence_commands+i;
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_add(commands_ac, (gchar *)strdup(pcmd->cmd));
|
|
|
|
autocomplete_add(help_ac, (gchar *)strdup(pcmd->cmd+1));
|
|
|
|
autocomplete_add(who_ac, (gchar *)strdup(pcmd->cmd+1));
|
2012-06-04 18:59:09 -04:00
|
|
|
}
|
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_add(who_ac, strdup("offline"));
|
|
|
|
autocomplete_add(who_ac, strdup("available"));
|
|
|
|
autocomplete_add(who_ac, strdup("unavailable"));
|
2012-10-27 22:58:12 -04:00
|
|
|
|
2013-01-27 20:35:11 -05:00
|
|
|
cmd_history_init();
|
2012-04-30 19:24:31 -04:00
|
|
|
}
|
|
|
|
|
2012-10-21 19:29:39 -04:00
|
|
|
void
|
|
|
|
cmd_close(void)
|
|
|
|
{
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_free(commands_ac);
|
|
|
|
autocomplete_free(who_ac);
|
|
|
|
autocomplete_free(help_ac);
|
|
|
|
autocomplete_free(notify_ac);
|
|
|
|
autocomplete_free(sub_ac);
|
|
|
|
autocomplete_free(log_ac);
|
|
|
|
autocomplete_free(prefs_ac);
|
|
|
|
autocomplete_free(autoaway_ac);
|
|
|
|
autocomplete_free(autoaway_mode_ac);
|
|
|
|
autocomplete_free(theme_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
if (theme_load_ac != NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_free(theme_load_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
}
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_free(account_ac);
|
2013-03-14 16:50:09 -04:00
|
|
|
autocomplete_free(disco_ac);
|
2012-10-21 19:29:39 -04:00
|
|
|
}
|
|
|
|
|
2012-08-22 19:44:14 -04:00
|
|
|
// Command autocompletion functions
|
2012-07-24 18:19:48 -04:00
|
|
|
void
|
2012-10-27 20:42:26 -04:00
|
|
|
cmd_autocomplete(char *input, int *size)
|
2012-10-21 18:37:20 -04:00
|
|
|
{
|
2012-10-27 20:42:26 -04:00
|
|
|
int i = 0;
|
|
|
|
char *found = NULL;
|
|
|
|
char *auto_msg = NULL;
|
|
|
|
char inp_cpy[*size];
|
2012-10-21 18:37:20 -04:00
|
|
|
|
2012-12-01 19:38:10 -05:00
|
|
|
// autocomplete command
|
2012-10-27 20:42:26 -04:00
|
|
|
if ((strncmp(input, "/", 1) == 0) && (!str_contains(input, *size, ' '))) {
|
|
|
|
for(i = 0; i < *size; i++) {
|
|
|
|
inp_cpy[i] = input[i];
|
|
|
|
}
|
|
|
|
inp_cpy[i] = '\0';
|
2013-01-24 20:11:49 -05:00
|
|
|
found = autocomplete_complete(commands_ac, inp_cpy);
|
2012-10-27 20:42:26 -04:00
|
|
|
if (found != NULL) {
|
|
|
|
auto_msg = (char *) malloc((strlen(found) + 1) * sizeof(char));
|
|
|
|
strcpy(auto_msg, found);
|
|
|
|
inp_replace_input(input, auto_msg, size);
|
|
|
|
free(auto_msg);
|
|
|
|
free(found);
|
|
|
|
}
|
2012-08-22 19:44:14 -04:00
|
|
|
|
2012-12-01 19:38:10 -05:00
|
|
|
// autocomplete parameters
|
|
|
|
} else {
|
|
|
|
_cmd_complete_parameters(input, size);
|
|
|
|
}
|
2012-10-27 17:22:30 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2012-10-27 20:42:26 -04:00
|
|
|
cmd_reset_autocomplete()
|
2012-10-27 17:22:30 -04:00
|
|
|
{
|
2012-10-27 20:42:26 -04:00
|
|
|
contact_list_reset_search_attempts();
|
2012-12-09 19:53:57 -05:00
|
|
|
accounts_reset_all_search();
|
|
|
|
accounts_reset_enabled_search();
|
2012-10-27 20:42:26 -04:00
|
|
|
prefs_reset_boolean_choice();
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(help_ac);
|
|
|
|
autocomplete_reset(notify_ac);
|
|
|
|
autocomplete_reset(sub_ac);
|
2013-01-10 19:48:58 -05:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() == WIN_MUC) {
|
2013-04-21 14:44:31 -04:00
|
|
|
Autocomplete nick_ac = muc_get_roster_ac(ui_current_recipient());
|
2013-01-10 19:48:58 -05:00
|
|
|
if (nick_ac != NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(nick_ac);
|
2013-01-10 19:48:58 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(who_ac);
|
|
|
|
autocomplete_reset(prefs_ac);
|
|
|
|
autocomplete_reset(log_ac);
|
|
|
|
autocomplete_reset(commands_ac);
|
|
|
|
autocomplete_reset(autoaway_ac);
|
|
|
|
autocomplete_reset(autoaway_mode_ac);
|
|
|
|
autocomplete_reset(theme_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
if (theme_load_ac != NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(theme_load_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
theme_load_ac = NULL;
|
|
|
|
}
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_reset(account_ac);
|
2013-03-14 16:50:09 -04:00
|
|
|
autocomplete_reset(disco_ac);
|
2012-10-27 17:22:30 -04:00
|
|
|
}
|
|
|
|
|
2012-08-14 17:06:27 -04:00
|
|
|
GSList *
|
2012-08-22 19:30:11 -04:00
|
|
|
cmd_get_basic_help(void)
|
2012-08-14 17:06:27 -04:00
|
|
|
{
|
|
|
|
GSList *result = NULL;
|
|
|
|
|
|
|
|
unsigned int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(main_commands); i++) {
|
|
|
|
result = g_slist_append(result, &((main_commands+i)->help));
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
GSList *
|
2012-08-22 19:30:11 -04:00
|
|
|
cmd_get_settings_help(void)
|
2012-08-14 17:06:27 -04:00
|
|
|
{
|
|
|
|
GSList *result = NULL;
|
|
|
|
|
|
|
|
unsigned int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(setting_commands); i++) {
|
|
|
|
result = g_slist_append(result, &((setting_commands+i)->help));
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
GSList *
|
2012-11-13 17:24:37 -05:00
|
|
|
cmd_get_presence_help(void)
|
2012-08-14 17:06:27 -04:00
|
|
|
{
|
|
|
|
GSList *result = NULL;
|
|
|
|
|
|
|
|
unsigned int i;
|
2012-11-13 17:24:37 -05:00
|
|
|
for (i = 0; i < ARRAY_SIZE(presence_commands); i++) {
|
|
|
|
result = g_slist_append(result, &((presence_commands+i)->help));
|
2012-08-14 17:06:27 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2012-08-22 19:44:14 -04:00
|
|
|
// Command execution
|
|
|
|
|
2012-08-22 19:41:22 -04:00
|
|
|
gboolean
|
|
|
|
cmd_execute(const char * const command, const char * const inp)
|
2012-08-14 19:42:38 -04:00
|
|
|
{
|
|
|
|
struct cmd_t *cmd = _cmd_get_command(command);
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2012-08-14 19:42:38 -04:00
|
|
|
if (cmd != NULL) {
|
2012-11-17 21:40:49 -05:00
|
|
|
gchar **args = cmd->parser(inp, cmd->min_args, cmd->max_args);
|
|
|
|
if (args == NULL) {
|
|
|
|
cons_show("Usage: %s", cmd->help.usage);
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() == WIN_CHAT) {
|
2012-11-17 21:40:49 -05:00
|
|
|
char usage[strlen(cmd->help.usage) + 8];
|
|
|
|
sprintf(usage, "Usage: %s", cmd->help.usage);
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line(usage);
|
2012-11-17 21:40:49 -05:00
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
} else {
|
|
|
|
gboolean result = cmd->func(args, cmd->help);
|
|
|
|
g_strfreev(args);
|
|
|
|
return result;
|
|
|
|
}
|
2012-08-14 19:42:38 -04:00
|
|
|
} else {
|
2012-08-22 19:41:22 -04:00
|
|
|
return cmd_execute_default(inp);
|
2012-08-14 19:42:38 -04:00
|
|
|
}
|
2012-02-18 18:09:21 -05:00
|
|
|
}
|
|
|
|
|
2012-08-22 19:41:22 -04:00
|
|
|
gboolean
|
|
|
|
cmd_execute_default(const char * const inp)
|
|
|
|
{
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
|
|
|
jabber_conn_status_t status = jabber_get_connection_status();
|
2013-04-21 14:44:31 -04:00
|
|
|
char *recipient = ui_current_recipient();
|
2013-04-21 13:40:22 -04:00
|
|
|
|
|
|
|
switch (win_type)
|
|
|
|
{
|
|
|
|
case WIN_MUC:
|
|
|
|
if (status != JABBER_CONNECTED) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
} else {
|
|
|
|
message_send_groupchat(inp, recipient);
|
|
|
|
free(recipient);
|
|
|
|
}
|
|
|
|
break;
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
case WIN_CHAT:
|
|
|
|
if (status != JABBER_CONNECTED) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
} else {
|
|
|
|
message_send(inp, recipient);
|
|
|
|
|
|
|
|
if (prefs_get_boolean(PREF_CHLOG)) {
|
|
|
|
const char *jid = jabber_get_jid();
|
|
|
|
Jid *jidp = jid_create(jid);
|
|
|
|
chat_log_chat(jidp->barejid, recipient, inp, PROF_OUT_LOG, NULL);
|
|
|
|
jid_destroy(jidp);
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_outgoing_msg("me", recipient, inp);
|
2013-04-21 13:40:22 -04:00
|
|
|
free(recipient);
|
2012-11-19 18:15:42 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
2012-10-02 17:00:05 -04:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
case WIN_PRIVATE:
|
|
|
|
if (status != JABBER_CONNECTED) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
} else {
|
|
|
|
message_send(inp, recipient);
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_outgoing_msg("me", recipient, inp);
|
2013-04-21 13:40:22 -04:00
|
|
|
free(recipient);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case WIN_CONSOLE:
|
|
|
|
cons_show("Unknown command: %s", inp);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
2012-08-22 19:41:22 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-10-27 20:42:26 -04:00
|
|
|
static void
|
|
|
|
_cmd_complete_parameters(char *input, int *size)
|
2012-10-27 20:08:04 -04:00
|
|
|
{
|
|
|
|
_parameter_autocomplete(input, size, "/beep",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
|
|
|
_parameter_autocomplete(input, size, "/intype",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
2012-10-31 20:12:35 -04:00
|
|
|
_parameter_autocomplete(input, size, "/states",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
|
|
|
_parameter_autocomplete(input, size, "/outtype",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
2012-10-27 20:08:04 -04:00
|
|
|
_parameter_autocomplete(input, size, "/flash",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
2012-12-01 21:21:59 -05:00
|
|
|
_parameter_autocomplete(input, size, "/splash",
|
2012-10-27 20:08:04 -04:00
|
|
|
prefs_autocomplete_boolean_choice);
|
|
|
|
_parameter_autocomplete(input, size, "/chlog",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
2013-01-17 14:40:55 -05:00
|
|
|
_parameter_autocomplete(input, size, "/mouse",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
2012-10-27 20:08:04 -04:00
|
|
|
_parameter_autocomplete(input, size, "/history",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
|
|
|
_parameter_autocomplete(input, size, "/vercheck",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
2013-01-21 20:00:31 -05:00
|
|
|
_parameter_autocomplete(input, size, "/statuses",
|
|
|
|
prefs_autocomplete_boolean_choice);
|
2012-10-27 20:08:04 -04:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() == WIN_MUC) {
|
2013-04-21 14:44:31 -04:00
|
|
|
Autocomplete nick_ac = muc_get_roster_ac(ui_current_recipient());
|
2013-01-10 19:48:58 -05:00
|
|
|
if (nick_ac != NULL) {
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/msg", nick_ac);
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/info", nick_ac);
|
2013-02-16 20:04:10 -05:00
|
|
|
_parameter_autocomplete_with_ac(input, size, "/caps", nick_ac);
|
2013-01-21 18:24:59 -05:00
|
|
|
_parameter_autocomplete_with_ac(input, size, "/status", nick_ac);
|
2013-02-16 21:58:03 -05:00
|
|
|
_parameter_autocomplete_with_ac(input, size, "/software", nick_ac);
|
2013-01-10 19:48:58 -05:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
_parameter_autocomplete(input, size, "/msg",
|
|
|
|
contact_list_find_contact);
|
|
|
|
_parameter_autocomplete(input, size, "/info",
|
|
|
|
contact_list_find_contact);
|
2013-02-16 20:04:10 -05:00
|
|
|
_parameter_autocomplete(input, size, "/caps",
|
2013-02-17 11:39:37 -05:00
|
|
|
contact_list_find_resource);
|
2013-01-21 18:24:59 -05:00
|
|
|
_parameter_autocomplete(input, size, "/status",
|
|
|
|
contact_list_find_contact);
|
2013-02-16 21:10:56 -05:00
|
|
|
_parameter_autocomplete(input, size, "/software",
|
|
|
|
contact_list_find_resource);
|
2013-01-10 19:48:58 -05:00
|
|
|
}
|
|
|
|
|
2013-04-20 15:18:13 -04:00
|
|
|
_parameter_autocomplete(input, size, "/invite", contact_list_find_contact);
|
|
|
|
|
2012-10-27 20:08:04 -04:00
|
|
|
_parameter_autocomplete(input, size, "/connect",
|
2012-12-09 19:53:57 -05:00
|
|
|
accounts_find_enabled);
|
2012-12-01 19:38:10 -05:00
|
|
|
_parameter_autocomplete_with_ac(input, size, "/sub", sub_ac);
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/help", help_ac);
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/who", who_ac);
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/prefs", prefs_ac);
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/log", log_ac);
|
2013-03-14 16:50:09 -04:00
|
|
|
_parameter_autocomplete_with_ac(input, size, "/disco", disco_ac);
|
2012-10-27 20:42:26 -04:00
|
|
|
|
|
|
|
_notify_autocomplete(input, size);
|
2012-12-01 19:38:10 -05:00
|
|
|
_autoaway_autocomplete(input, size);
|
2012-12-02 15:53:45 -05:00
|
|
|
_titlebar_autocomplete(input, size);
|
2012-12-08 19:46:14 -05:00
|
|
|
_theme_autocomplete(input, size);
|
2012-12-09 17:58:45 -05:00
|
|
|
_account_autocomplete(input, size);
|
2012-10-27 20:08:04 -04:00
|
|
|
}
|
|
|
|
|
2012-08-22 19:44:14 -04:00
|
|
|
// The command functions
|
2012-08-22 19:41:22 -04:00
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_connect(gchar **args, struct cmd_help_t help)
|
2012-02-18 18:09:21 -05:00
|
|
|
{
|
2012-04-23 20:02:22 -04:00
|
|
|
gboolean result = FALSE;
|
2012-02-18 18:09:21 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
|
|
|
|
|
|
|
if ((conn_status != JABBER_DISCONNECTED) && (conn_status != JABBER_STARTED)) {
|
|
|
|
cons_show("You are either connected already, or a login is in process.");
|
2012-02-19 20:42:29 -05:00
|
|
|
result = TRUE;
|
2012-02-18 18:09:21 -05:00
|
|
|
} else {
|
2012-11-17 21:40:49 -05:00
|
|
|
char *user = args[0];
|
2012-12-06 15:36:16 -05:00
|
|
|
char *altdomain = args[1];
|
2012-11-17 21:40:49 -05:00
|
|
|
char *lower = g_utf8_strdown(user, -1);
|
2012-12-09 17:14:38 -05:00
|
|
|
char *jid;
|
2012-11-17 21:40:49 -05:00
|
|
|
|
|
|
|
status_bar_get_password();
|
|
|
|
status_bar_refresh();
|
|
|
|
char passwd[21];
|
|
|
|
inp_block();
|
|
|
|
inp_get_password(passwd);
|
|
|
|
inp_non_block();
|
|
|
|
|
2012-12-09 17:14:38 -05:00
|
|
|
ProfAccount *account = accounts_get_account(lower);
|
|
|
|
if (account != NULL) {
|
2013-01-26 21:24:02 -05:00
|
|
|
if (account->resource != NULL) {
|
|
|
|
jid = create_fulljid(account->jid, account->resource);
|
|
|
|
} else {
|
|
|
|
jid = strdup(account->jid);
|
|
|
|
}
|
|
|
|
cons_show("Connecting with account %s as %s", account->name, jid);
|
2012-12-09 17:14:38 -05:00
|
|
|
conn_status = jabber_connect_with_account(account, passwd);
|
|
|
|
} else {
|
|
|
|
jid = strdup(lower);
|
2013-01-26 21:24:02 -05:00
|
|
|
cons_show("Connecting as %s", jid);
|
2013-01-27 15:23:42 -05:00
|
|
|
conn_status = jabber_connect_with_details(jid, passwd, altdomain);
|
2012-12-09 17:14:38 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
|
|
|
|
if (conn_status == JABBER_DISCONNECTED) {
|
2013-04-20 21:49:23 -04:00
|
|
|
cons_show_error("Connection attempt for %s failed.", jid);
|
2013-01-26 21:24:02 -05:00
|
|
|
log_debug("Connection attempt for %s failed", jid);
|
2012-11-17 21:40:49 -05:00
|
|
|
}
|
|
|
|
|
2012-12-09 17:14:38 -05:00
|
|
|
accounts_free_account(account);
|
|
|
|
free(jid);
|
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
result = TRUE;
|
2012-02-18 18:09:21 -05:00
|
|
|
}
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2012-02-18 18:09:21 -05:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2012-12-09 15:18:38 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_account(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
char *command = args[0];
|
|
|
|
|
2013-02-18 17:51:05 -05:00
|
|
|
if (command == NULL) {
|
|
|
|
if (jabber_get_connection_status() != JABBER_CONNECTED) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
} else {
|
|
|
|
ProfAccount *account = accounts_get_account(jabber_get_account_name());
|
|
|
|
cons_show_account(account);
|
|
|
|
accounts_free_account(account);
|
|
|
|
}
|
|
|
|
} else if (strcmp(command, "list") == 0) {
|
2012-12-09 15:18:38 -05:00
|
|
|
gchar **accounts = accounts_get_list();
|
2013-02-18 17:07:17 -05:00
|
|
|
cons_show_account_list(accounts);
|
|
|
|
g_strfreev(accounts);
|
2012-12-09 17:58:45 -05:00
|
|
|
} else if (strcmp(command, "show") == 0) {
|
|
|
|
char *account_name = args[1];
|
|
|
|
if (account_name == NULL) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
} else {
|
|
|
|
ProfAccount *account = accounts_get_account(account_name);
|
|
|
|
if (account == NULL) {
|
|
|
|
cons_show("No such account.");
|
2012-12-09 19:08:03 -05:00
|
|
|
cons_show("");
|
2012-12-09 17:58:45 -05:00
|
|
|
} else {
|
|
|
|
cons_show_account(account);
|
|
|
|
accounts_free_account(account);
|
|
|
|
}
|
|
|
|
}
|
2012-12-09 20:14:21 -05:00
|
|
|
} else if (strcmp(command, "add") == 0) {
|
2012-12-09 19:08:03 -05:00
|
|
|
char *account_name = args[1];
|
|
|
|
if (account_name == NULL) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
} else {
|
2013-01-27 13:10:30 -05:00
|
|
|
accounts_add(account_name, NULL);
|
2012-12-09 19:08:03 -05:00
|
|
|
cons_show("Account created.");
|
|
|
|
cons_show("");
|
|
|
|
}
|
|
|
|
} else if (strcmp(command, "enable") == 0) {
|
|
|
|
char *account_name = args[1];
|
|
|
|
if (account_name == NULL) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
} else {
|
|
|
|
if (accounts_enable(account_name)) {
|
|
|
|
cons_show("Account enabled.");
|
|
|
|
cons_show("");
|
|
|
|
} else {
|
|
|
|
cons_show("No such account: %s", account_name);
|
|
|
|
cons_show("");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (strcmp(command, "disable") == 0) {
|
|
|
|
char *account_name = args[1];
|
|
|
|
if (account_name == NULL) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
} else {
|
|
|
|
if (accounts_disable(account_name)) {
|
|
|
|
cons_show("Account disabled.");
|
|
|
|
cons_show("");
|
|
|
|
} else {
|
|
|
|
cons_show("No such account: %s", account_name);
|
|
|
|
cons_show("");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (strcmp(command, "rename") == 0) {
|
|
|
|
if (g_strv_length(args) != 3) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
} else {
|
|
|
|
char *account_name = args[1];
|
|
|
|
char *new_name = args[2];
|
|
|
|
|
|
|
|
if (accounts_rename(account_name, new_name)) {
|
|
|
|
cons_show("Account renamed.");
|
|
|
|
cons_show("");
|
|
|
|
} else {
|
|
|
|
cons_show("Either account %s doesn't exist, or account %s already exists.", account_name, new_name);
|
|
|
|
cons_show("");
|
|
|
|
}
|
|
|
|
}
|
2012-12-09 19:23:55 -05:00
|
|
|
} else if (strcmp(command, "set") == 0) {
|
|
|
|
if (g_strv_length(args) != 4) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
} else {
|
|
|
|
char *account_name = args[1];
|
|
|
|
char *property = args[2];
|
|
|
|
char *value = args[3];
|
|
|
|
|
|
|
|
if (!accounts_account_exists(account_name)) {
|
|
|
|
cons_show("Account %s doesn't exist");
|
|
|
|
cons_show("");
|
|
|
|
} else {
|
|
|
|
if (strcmp(property, "jid") == 0) {
|
2013-01-26 19:02:28 -05:00
|
|
|
Jid *jid = jid_create(args[3]);
|
|
|
|
if (jid == NULL) {
|
|
|
|
cons_show("Malformed jid: %s", value);
|
|
|
|
} else {
|
|
|
|
accounts_set_jid(account_name, jid->barejid);
|
|
|
|
cons_show("Updated jid for account %s: %s", account_name, jid->barejid);
|
|
|
|
if (jid->resourcepart != NULL) {
|
2013-01-27 15:34:56 -05:00
|
|
|
accounts_set_resource(account_name, jid->resourcepart);
|
2013-01-26 19:02:28 -05:00
|
|
|
cons_show("Updated resource for account %s: %s", account_name, jid->resourcepart);
|
|
|
|
}
|
|
|
|
cons_show("");
|
|
|
|
}
|
|
|
|
jid_destroy(jid);
|
2012-12-09 19:23:55 -05:00
|
|
|
} else if (strcmp(property, "server") == 0) {
|
|
|
|
accounts_set_server(account_name, value);
|
|
|
|
cons_show("Updated server for account %s: %s", account_name, value);
|
|
|
|
cons_show("");
|
2013-01-27 15:34:56 -05:00
|
|
|
} else if (strcmp(property, "resource") == 0) {
|
|
|
|
accounts_set_resource(account_name, value);
|
|
|
|
cons_show("Updated resource for account %s: %s", account_name, value);
|
|
|
|
cons_show("");
|
2013-01-30 17:45:35 -05:00
|
|
|
} else if (strcmp(property, "status") == 0) {
|
2013-02-10 12:13:19 -05:00
|
|
|
if (!valid_resource_presence_string(value) && (strcmp(value, "last") != 0)) {
|
2013-01-30 17:45:35 -05:00
|
|
|
cons_show("Invalud status: %s", value);
|
|
|
|
} else {
|
|
|
|
accounts_set_login_presence(account_name, value);
|
|
|
|
cons_show("Updated login status for account %s: %s", account_name, value);
|
|
|
|
}
|
|
|
|
cons_show("");
|
2013-02-10 12:13:19 -05:00
|
|
|
} else if (valid_resource_presence_string(property)) {
|
2013-01-31 18:49:29 -05:00
|
|
|
int intval;
|
|
|
|
|
|
|
|
if (_strtoi(value, &intval, -128, 127) == 0) {
|
2013-02-10 12:13:19 -05:00
|
|
|
resource_presence_t presence_type = resource_presence_from_string(property);
|
2013-01-31 18:49:29 -05:00
|
|
|
switch (presence_type)
|
|
|
|
{
|
2013-02-10 12:13:19 -05:00
|
|
|
case (RESOURCE_ONLINE):
|
2013-01-31 18:49:29 -05:00
|
|
|
accounts_set_priority_online(account_name, intval);
|
|
|
|
break;
|
2013-02-10 12:13:19 -05:00
|
|
|
case (RESOURCE_CHAT):
|
2013-01-31 18:49:29 -05:00
|
|
|
accounts_set_priority_chat(account_name, intval);
|
|
|
|
break;
|
2013-02-10 12:13:19 -05:00
|
|
|
case (RESOURCE_AWAY):
|
2013-01-31 18:49:29 -05:00
|
|
|
accounts_set_priority_away(account_name, intval);
|
|
|
|
break;
|
2013-02-10 12:13:19 -05:00
|
|
|
case (RESOURCE_XA):
|
2013-01-31 18:49:29 -05:00
|
|
|
accounts_set_priority_xa(account_name, intval);
|
|
|
|
break;
|
2013-02-10 12:13:19 -05:00
|
|
|
case (RESOURCE_DND):
|
2013-01-31 18:49:29 -05:00
|
|
|
accounts_set_priority_dnd(account_name, intval);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-02-10 12:13:19 -05:00
|
|
|
resource_presence_t last_presence = accounts_get_last_presence(jabber_get_account_name());
|
2013-02-10 08:36:11 -05:00
|
|
|
if (conn_status == JABBER_CONNECTED && presence_type == last_presence) {
|
|
|
|
presence_update(last_presence, jabber_get_presence_message(), 0);
|
2013-01-31 18:49:29 -05:00
|
|
|
}
|
|
|
|
cons_show("Updated %s priority for account %s: %s", property, account_name, value);
|
|
|
|
cons_show("");
|
|
|
|
}
|
2012-12-09 19:23:55 -05:00
|
|
|
} else {
|
|
|
|
cons_show("Invalid property: %s", property);
|
|
|
|
cons_show("");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-12-09 17:58:45 -05:00
|
|
|
} else {
|
|
|
|
cons_show("");
|
2012-12-09 15:18:38 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-10-28 14:51:13 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_sub(gchar **args, struct cmd_help_t help)
|
2012-10-28 14:51:13 -04:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
2012-11-17 21:40:49 -05:00
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are currently not connected.");
|
2012-11-27 16:20:00 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
2012-11-11 07:00:21 -05:00
|
|
|
|
2012-11-27 16:20:00 -05:00
|
|
|
char *subcmd, *jid, *bare_jid;
|
|
|
|
subcmd = args[0];
|
|
|
|
jid = args[1];
|
2012-11-14 21:31:31 -05:00
|
|
|
|
2012-11-27 16:20:00 -05:00
|
|
|
if (subcmd == NULL) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
return TRUE;
|
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
|
2012-11-27 19:36:51 -05:00
|
|
|
if (strcmp(subcmd, "sent") == 0) {
|
2012-11-27 20:36:04 -05:00
|
|
|
if (contact_list_has_pending_subscriptions()) {
|
|
|
|
cons_show("Awaiting subscription responses from:");
|
|
|
|
GSList *contacts = get_contact_list();
|
|
|
|
while (contacts != NULL) {
|
|
|
|
PContact contact = (PContact) contacts->data;
|
|
|
|
if (p_contact_pending_out(contact)) {
|
2013-02-09 18:50:41 -05:00
|
|
|
cons_show(p_contact_barejid(contact));
|
2012-11-27 20:36:04 -05:00
|
|
|
}
|
|
|
|
contacts = g_slist_next(contacts);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
cons_show("No pending requests sent.");
|
|
|
|
}
|
|
|
|
|
2012-11-27 19:36:51 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (strcmp(subcmd, "received") == 0) {
|
2013-01-28 17:24:47 -05:00
|
|
|
GList *received = presence_get_subscription_requests();
|
2012-11-27 19:36:51 -05:00
|
|
|
|
|
|
|
if (received == NULL) {
|
|
|
|
cons_show("No outstanding subscription requests.");
|
|
|
|
} else {
|
2012-11-27 20:36:04 -05:00
|
|
|
cons_show("Outstanding subscription requests from:",
|
2012-11-27 19:36:51 -05:00
|
|
|
g_list_length(received));
|
|
|
|
while (received != NULL) {
|
|
|
|
cons_show(received->data);
|
|
|
|
received = g_list_next(received);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
if ((win_type != WIN_CHAT) && (jid == NULL)) {
|
2012-11-27 16:53:56 -05:00
|
|
|
cons_show("You must specify a contact.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-11-27 16:20:00 -05:00
|
|
|
if (jid != NULL) {
|
|
|
|
jid = strdup(jid);
|
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
jid = ui_current_recipient();
|
2012-10-28 14:51:13 -04:00
|
|
|
}
|
|
|
|
|
2012-11-27 16:20:00 -05:00
|
|
|
bare_jid = strtok(jid, "/");
|
|
|
|
|
2012-11-27 18:43:32 -05:00
|
|
|
if (strcmp(subcmd, "allow") == 0) {
|
2013-01-28 17:24:47 -05:00
|
|
|
presence_subscription(bare_jid, PRESENCE_SUBSCRIBED);
|
2012-11-27 16:20:00 -05:00
|
|
|
cons_show("Accepted subscription for %s", bare_jid);
|
|
|
|
log_info("Accepted subscription for %s", bare_jid);
|
2012-11-27 18:43:32 -05:00
|
|
|
} else if (strcmp(subcmd, "deny") == 0) {
|
2013-01-28 17:24:47 -05:00
|
|
|
presence_subscription(bare_jid, PRESENCE_UNSUBSCRIBED);
|
2012-11-27 18:43:32 -05:00
|
|
|
cons_show("Deleted/denied subscription for %s", bare_jid);
|
|
|
|
log_info("Deleted/denied subscription for %s", bare_jid);
|
|
|
|
} else if (strcmp(subcmd, "request") == 0) {
|
2013-01-28 17:24:47 -05:00
|
|
|
presence_subscription(bare_jid, PRESENCE_SUBSCRIBE);
|
2012-11-27 16:20:00 -05:00
|
|
|
cons_show("Sent subscription request to %s.", bare_jid);
|
|
|
|
log_info("Sent subscription request to %s.", bare_jid);
|
|
|
|
} else if (strcmp(subcmd, "show") == 0) {
|
2012-11-27 16:53:56 -05:00
|
|
|
PContact contact = contact_list_get_contact(bare_jid);
|
2012-11-27 17:26:42 -05:00
|
|
|
if ((contact == NULL) || (p_contact_subscription(contact) == NULL)) {
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type == WIN_CHAT) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("No subscription information for %s.", bare_jid);
|
2012-11-27 16:53:56 -05:00
|
|
|
} else {
|
|
|
|
cons_show("No subscription information for %s.", bare_jid);
|
|
|
|
}
|
|
|
|
} else {
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type == WIN_CHAT) {
|
2012-11-27 17:26:42 -05:00
|
|
|
if (p_contact_pending_out(contact)) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("%s subscription status: %s, request pending.",
|
2012-11-27 17:26:42 -05:00
|
|
|
bare_jid, p_contact_subscription(contact));
|
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("%s subscription status: %s.", bare_jid,
|
2012-11-27 17:26:42 -05:00
|
|
|
p_contact_subscription(contact));
|
|
|
|
}
|
2012-11-27 16:53:56 -05:00
|
|
|
} else {
|
2012-11-27 17:26:42 -05:00
|
|
|
if (p_contact_pending_out(contact)) {
|
|
|
|
cons_show("%s subscription status: %s, request pending.",
|
|
|
|
bare_jid, p_contact_subscription(contact));
|
|
|
|
} else {
|
|
|
|
cons_show("%s subscription status: %s.", bare_jid,
|
|
|
|
p_contact_subscription(contact));
|
|
|
|
}
|
2012-11-27 16:53:56 -05:00
|
|
|
}
|
|
|
|
}
|
2012-11-27 16:20:00 -05:00
|
|
|
} else {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
}
|
|
|
|
|
|
|
|
free(jid);
|
|
|
|
return TRUE;
|
2012-10-28 14:51:13 -04:00
|
|
|
}
|
|
|
|
|
2012-10-27 13:12:04 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_disconnect(gchar **args, struct cmd_help_t help)
|
2012-10-27 13:12:04 -04:00
|
|
|
{
|
2012-10-27 13:26:57 -04:00
|
|
|
if (jabber_get_connection_status() == JABBER_CONNECTED) {
|
|
|
|
char *jid = strdup(jabber_get_jid());
|
2012-11-19 17:23:48 -05:00
|
|
|
prof_handle_disconnect(jid);
|
2012-10-27 13:26:57 -04:00
|
|
|
free(jid);
|
|
|
|
} else {
|
|
|
|
cons_show("You are not currently connected.");
|
2012-10-27 13:12:04 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_quit(gchar **args, struct cmd_help_t help)
|
2012-02-09 18:15:53 -05:00
|
|
|
{
|
2012-09-23 14:26:07 -04:00
|
|
|
log_info("Profanity is shutting down...");
|
|
|
|
exit(0);
|
2012-09-11 17:55:59 -04:00
|
|
|
return FALSE;
|
2012-02-09 18:15:53 -05:00
|
|
|
}
|
|
|
|
|
2012-11-13 19:39:34 -05:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_wins(gchar **args, struct cmd_help_t help)
|
2012-11-13 19:39:34 -05:00
|
|
|
{
|
2012-11-25 19:01:34 -05:00
|
|
|
cons_show_wins();
|
2012-11-13 19:39:34 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_help(gchar **args, struct cmd_help_t help)
|
2012-02-09 18:15:53 -05:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
int num_args = g_strv_length(args);
|
|
|
|
if (num_args == 0) {
|
|
|
|
cons_help();
|
|
|
|
} else if (strcmp(args[0], "list") == 0) {
|
|
|
|
cons_show("");
|
|
|
|
cons_show("Basic commands:");
|
|
|
|
cons_show_time();
|
|
|
|
unsigned int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(main_commands); i++) {
|
|
|
|
cons_show_word( (main_commands+i)->cmd );
|
|
|
|
if (i < ARRAY_SIZE(main_commands) - 1) {
|
|
|
|
cons_show_word(", ");
|
2012-11-11 18:57:02 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
}
|
|
|
|
cons_show_word("\n");
|
2012-12-09 13:59:11 -05:00
|
|
|
cons_show("Presence commands:");
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show_time();
|
2012-12-09 13:59:11 -05:00
|
|
|
for (i = 0; i < ARRAY_SIZE(presence_commands); i++) {
|
|
|
|
cons_show_word( (presence_commands+i)->cmd );
|
|
|
|
if (i < ARRAY_SIZE(presence_commands) - 1) {
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show_word(", ");
|
2012-11-11 18:57:02 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
}
|
|
|
|
cons_show_word("\n");
|
2012-12-09 13:59:11 -05:00
|
|
|
cons_show("Settings commands:");
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show_time();
|
2012-12-09 13:59:11 -05:00
|
|
|
for (i = 0; i < ARRAY_SIZE(setting_commands); i++) {
|
|
|
|
cons_show_word( (setting_commands+i)->cmd );
|
|
|
|
if (i < ARRAY_SIZE(setting_commands) - 1) {
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show_word(", ");
|
2012-11-11 18:57:02 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
}
|
|
|
|
cons_show_word("\n");
|
|
|
|
} else if (strcmp(args[0], "basic") == 0) {
|
|
|
|
cons_basic_help();
|
|
|
|
} else if (strcmp(args[0], "presence") == 0) {
|
|
|
|
cons_presence_help();
|
|
|
|
} else if (strcmp(args[0], "settings") == 0) {
|
|
|
|
cons_settings_help();
|
|
|
|
} else if (strcmp(args[0], "navigation") == 0) {
|
|
|
|
cons_navigation_help();
|
|
|
|
} else {
|
|
|
|
char *cmd = args[0];
|
|
|
|
char cmd_with_slash[1 + strlen(cmd) + 1];
|
|
|
|
sprintf(cmd_with_slash, "/%s", cmd);
|
2012-08-14 18:22:12 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
const gchar **help_text = NULL;
|
|
|
|
struct cmd_t *command = _cmd_get_command(cmd_with_slash);
|
2012-08-14 18:22:12 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
if (command != NULL) {
|
|
|
|
help_text = command->help.long_help;
|
|
|
|
}
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show("");
|
2012-08-14 18:22:12 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
if (help_text != NULL) {
|
|
|
|
int i;
|
|
|
|
for (i = 0; help_text[i] != NULL; i++) {
|
|
|
|
cons_show(help_text[i]);
|
2012-08-14 18:22:12 -04:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
} else {
|
|
|
|
cons_show("No such command.");
|
2012-08-14 18:22:12 -04:00
|
|
|
}
|
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show("");
|
2012-08-14 18:22:12 -04:00
|
|
|
}
|
2012-02-09 18:15:53 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
return TRUE;
|
2012-02-09 18:15:53 -05:00
|
|
|
}
|
|
|
|
|
2012-10-22 19:18:28 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_about(gchar **args, struct cmd_help_t help)
|
2012-10-22 19:18:28 -04:00
|
|
|
{
|
2012-10-23 20:39:52 -04:00
|
|
|
cons_show("");
|
2012-10-22 19:18:28 -04:00
|
|
|
cons_about();
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() != WIN_CONSOLE) {
|
2013-04-20 18:39:17 -04:00
|
|
|
status_bar_new(0);
|
|
|
|
}
|
2012-10-22 19:18:28 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_prefs(gchar **args, struct cmd_help_t help)
|
2012-07-19 18:43:50 -04:00
|
|
|
{
|
2012-11-29 18:14:56 -05:00
|
|
|
if (args[0] == NULL) {
|
|
|
|
cons_prefs();
|
|
|
|
} else if (strcmp(args[0], "ui") == 0) {
|
|
|
|
cons_show("");
|
|
|
|
cons_show_ui_prefs();
|
|
|
|
cons_show("");
|
|
|
|
} else if (strcmp(args[0], "desktop") == 0) {
|
|
|
|
cons_show("");
|
|
|
|
cons_show_desktop_prefs();
|
|
|
|
cons_show("");
|
|
|
|
} else if (strcmp(args[0], "chat") == 0) {
|
|
|
|
cons_show("");
|
|
|
|
cons_show_chat_prefs();
|
|
|
|
cons_show("");
|
|
|
|
} else if (strcmp(args[0], "log") == 0) {
|
|
|
|
cons_show("");
|
|
|
|
cons_show_log_prefs();
|
|
|
|
cons_show("");
|
2012-11-30 18:34:14 -05:00
|
|
|
} else if (strcmp(args[0], "conn") == 0) {
|
2012-11-29 18:14:56 -05:00
|
|
|
cons_show("");
|
2012-11-30 18:34:14 -05:00
|
|
|
cons_show_connection_prefs();
|
|
|
|
cons_show("");
|
|
|
|
} else if (strcmp(args[0], "presence") == 0) {
|
|
|
|
cons_show("");
|
|
|
|
cons_show_presence_prefs();
|
2012-11-29 18:14:56 -05:00
|
|
|
cons_show("");
|
|
|
|
} else {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
}
|
2012-07-19 18:43:50 -04:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-11-21 17:33:07 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_theme(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
2012-12-08 19:21:33 -05:00
|
|
|
// list themes
|
|
|
|
if (strcmp(args[0], "list") == 0) {
|
|
|
|
GSList *themes = theme_list();
|
|
|
|
cons_show_themes(themes);
|
|
|
|
g_slist_free_full(themes, g_free);
|
|
|
|
|
|
|
|
// load a theme
|
2012-12-08 19:53:26 -05:00
|
|
|
} else if (strcmp(args[0], "set") == 0) {
|
2012-12-08 19:46:14 -05:00
|
|
|
if (args[1] == NULL) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
} else if (theme_load(args[1])) {
|
2012-12-08 19:29:17 -05:00
|
|
|
ui_load_colours();
|
2013-02-02 22:24:13 -05:00
|
|
|
prefs_set_string(PREF_THEME, args[1]);
|
2012-12-08 19:29:17 -05:00
|
|
|
cons_show("Loaded theme: %s", args[1]);
|
|
|
|
} else {
|
|
|
|
cons_show("Couldn't find theme: %s", args[1]);
|
|
|
|
}
|
2012-11-21 17:33:07 -05:00
|
|
|
} else {
|
2012-12-08 19:29:17 -05:00
|
|
|
cons_show("Usage: %s", help.usage);
|
2012-11-21 17:33:07 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_who(gchar **args, struct cmd_help_t help)
|
2012-03-07 19:46:24 -05:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
2012-03-08 18:14:35 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
2012-03-08 18:14:35 -05:00
|
|
|
} else {
|
2012-11-17 21:40:49 -05:00
|
|
|
char *presence = args[0];
|
|
|
|
|
|
|
|
// bad arg
|
|
|
|
if ((presence != NULL)
|
|
|
|
&& (strcmp(presence, "online") != 0)
|
|
|
|
&& (strcmp(presence, "available") != 0)
|
|
|
|
&& (strcmp(presence, "unavailable") != 0)
|
|
|
|
&& (strcmp(presence, "offline") != 0)
|
|
|
|
&& (strcmp(presence, "away") != 0)
|
|
|
|
&& (strcmp(presence, "chat") != 0)
|
|
|
|
&& (strcmp(presence, "xa") != 0)
|
|
|
|
&& (strcmp(presence, "dnd") != 0)) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
2012-10-04 17:48:41 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
// valid arg
|
2012-10-04 17:48:41 -04:00
|
|
|
} else {
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type == WIN_MUC) {
|
2013-04-21 14:44:31 -04:00
|
|
|
char *room = ui_current_recipient();
|
2013-01-15 18:17:07 -05:00
|
|
|
GList *list = muc_get_roster(room);
|
|
|
|
|
|
|
|
// no arg, show all contacts
|
|
|
|
if (presence == NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_room_roster(room, list, NULL);
|
2013-01-15 18:17:07 -05:00
|
|
|
|
|
|
|
// available
|
|
|
|
} else if (strcmp("available", presence) == 0) {
|
|
|
|
GList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
2013-02-14 18:24:00 -05:00
|
|
|
if (p_contact_is_available(contact)) {
|
2013-01-15 18:17:07 -05:00
|
|
|
filtered = g_list_append(filtered, contact);
|
|
|
|
}
|
|
|
|
list = g_list_next(list);
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_room_roster(room, filtered, "available");
|
2013-01-15 18:17:07 -05:00
|
|
|
|
|
|
|
// unavailable
|
|
|
|
} else if (strcmp("unavailable", presence) == 0) {
|
|
|
|
GList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
2013-02-14 18:24:00 -05:00
|
|
|
if (!p_contact_is_available(contact)) {
|
2013-01-15 18:17:07 -05:00
|
|
|
filtered = g_list_append(filtered, contact);
|
|
|
|
}
|
|
|
|
list = g_list_next(list);
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_room_roster(room, filtered, "unavailable");
|
2013-01-15 18:17:07 -05:00
|
|
|
|
2013-02-16 19:05:57 -05:00
|
|
|
// online, available resources
|
2013-01-15 18:17:07 -05:00
|
|
|
} else if (strcmp("online", presence) == 0) {
|
|
|
|
GList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
2013-02-14 18:24:00 -05:00
|
|
|
if (p_contact_has_available_resource(contact)) {
|
2013-01-15 18:17:07 -05:00
|
|
|
filtered = g_list_append(filtered, contact);
|
|
|
|
}
|
|
|
|
list = g_list_next(list);
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_room_roster(room, filtered, "online");
|
2013-01-15 18:17:07 -05:00
|
|
|
|
2013-02-16 19:05:57 -05:00
|
|
|
// offline, no available resources
|
2013-02-14 18:24:00 -05:00
|
|
|
} else if (strcmp("offline", presence) == 0) {
|
|
|
|
GList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
|
|
|
if (!p_contact_has_available_resource(contact)) {
|
|
|
|
filtered = g_list_append(filtered, contact);
|
|
|
|
}
|
|
|
|
list = g_list_next(list);
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_room_roster(room, filtered, "offline");
|
2013-02-14 18:24:00 -05:00
|
|
|
|
2013-01-15 18:17:07 -05:00
|
|
|
// show specific status
|
|
|
|
} else {
|
|
|
|
GList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
|
|
|
if (strcmp(p_contact_presence(contact), presence) == 0) {
|
|
|
|
filtered = g_list_append(filtered, contact);
|
|
|
|
}
|
|
|
|
list = g_list_next(list);
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_room_roster(room, filtered, presence);
|
2013-01-15 18:17:07 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
// not in groupchat window
|
2012-11-07 19:22:15 -05:00
|
|
|
} else {
|
2013-01-19 22:32:51 -05:00
|
|
|
cons_show("");
|
2012-11-17 21:40:49 -05:00
|
|
|
GSList *list = get_contact_list();
|
|
|
|
|
|
|
|
// no arg, show all contacts
|
|
|
|
if (presence == NULL) {
|
|
|
|
cons_show("All contacts:");
|
|
|
|
cons_show_contacts(list);
|
|
|
|
|
|
|
|
// available
|
|
|
|
} else if (strcmp("available", presence) == 0) {
|
|
|
|
cons_show("Contacts (%s):", presence);
|
|
|
|
GSList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
2013-02-16 19:05:57 -05:00
|
|
|
if (p_contact_is_available(contact)) {
|
2012-11-17 21:40:49 -05:00
|
|
|
filtered = g_slist_append(filtered, contact);
|
2012-11-11 19:21:49 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
list = g_slist_next(list);
|
|
|
|
}
|
2012-11-11 19:21:49 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show_contacts(filtered);
|
|
|
|
|
|
|
|
// unavailable
|
|
|
|
} else if (strcmp("unavailable", presence) == 0) {
|
|
|
|
cons_show("Contacts (%s):", presence);
|
|
|
|
GSList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
2013-02-16 19:05:57 -05:00
|
|
|
if (!p_contact_is_available(contact)) {
|
2012-11-17 21:40:49 -05:00
|
|
|
filtered = g_slist_append(filtered, contact);
|
2012-11-11 19:21:49 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
list = g_slist_next(list);
|
|
|
|
}
|
2012-11-11 19:21:49 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show_contacts(filtered);
|
|
|
|
|
2013-02-16 19:05:57 -05:00
|
|
|
// online, available resources
|
2012-11-17 21:40:49 -05:00
|
|
|
} else if (strcmp("online", presence) == 0) {
|
|
|
|
cons_show("Contacts (%s):", presence);
|
|
|
|
GSList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
2013-02-16 19:05:57 -05:00
|
|
|
if (p_contact_has_available_resource(contact)) {
|
|
|
|
filtered = g_slist_append(filtered, contact);
|
|
|
|
}
|
|
|
|
list = g_slist_next(list);
|
|
|
|
}
|
|
|
|
|
|
|
|
cons_show_contacts(filtered);
|
|
|
|
|
|
|
|
// offline, no available resources
|
|
|
|
} else if (strcmp("online", presence) == 0) {
|
|
|
|
cons_show("Contacts (%s):", presence);
|
|
|
|
GSList *filtered = NULL;
|
|
|
|
|
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
|
|
|
if (!p_contact_has_available_resource(contact)) {
|
2012-11-17 21:40:49 -05:00
|
|
|
filtered = g_slist_append(filtered, contact);
|
2012-11-07 19:22:15 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
list = g_slist_next(list);
|
|
|
|
}
|
2012-10-04 17:48:41 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show_contacts(filtered);
|
2012-10-04 17:48:41 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
// show specific status
|
|
|
|
} else {
|
|
|
|
cons_show("Contacts (%s):", presence);
|
|
|
|
GSList *filtered = NULL;
|
2012-10-04 17:48:41 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
while (list != NULL) {
|
|
|
|
PContact contact = list->data;
|
|
|
|
if (strcmp(p_contact_presence(contact), presence) == 0) {
|
|
|
|
filtered = g_slist_append(filtered, contact);
|
2012-11-07 19:22:15 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
list = g_slist_next(list);
|
2012-11-17 19:54:39 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
|
|
|
|
cons_show_contacts(filtered);
|
2012-11-07 19:22:15 -05:00
|
|
|
}
|
2012-10-04 17:48:41 -04:00
|
|
|
}
|
|
|
|
}
|
2012-03-08 18:14:35 -05:00
|
|
|
}
|
2012-03-07 19:46:24 -05:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type != WIN_CONSOLE) {
|
2013-04-20 18:39:17 -04:00
|
|
|
status_bar_new(0);
|
|
|
|
}
|
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
return TRUE;
|
2012-03-07 19:46:24 -05:00
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_msg(gchar **args, struct cmd_help_t help)
|
2012-02-09 18:15:53 -05:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
char *usr = args[0];
|
|
|
|
char *msg = args[1];
|
2012-02-19 20:42:29 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
2012-11-17 19:54:39 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
2012-11-29 19:19:03 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ui_windows_full()) {
|
2013-04-20 21:49:23 -04:00
|
|
|
cons_show_error("Windows all used, close a window and try again.");
|
2012-11-29 19:19:03 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type == WIN_MUC) {
|
2013-04-21 14:44:31 -04:00
|
|
|
char *room_name = ui_current_recipient();
|
2013-01-11 20:34:09 -05:00
|
|
|
if (muc_nick_in_roster(room_name, usr)) {
|
2013-01-10 20:35:25 -05:00
|
|
|
GString *full_jid = g_string_new(room_name);
|
|
|
|
g_string_append(full_jid, "/");
|
|
|
|
g_string_append(full_jid, usr);
|
|
|
|
|
2013-01-15 14:41:48 -05:00
|
|
|
if (msg != NULL) {
|
2013-01-28 19:21:04 -05:00
|
|
|
message_send(msg, full_jid->str);
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_outgoing_msg("me", full_jid->str, msg);
|
2013-01-15 14:41:48 -05:00
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_new_chat_win(full_jid->str);
|
2013-01-10 20:35:25 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
g_string_free(full_jid, TRUE);
|
2012-11-17 19:54:39 -05:00
|
|
|
|
2013-01-10 20:35:25 -05:00
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("No such participant \"%s\" in room.", usr);
|
2012-02-09 18:15:53 -05:00
|
|
|
}
|
|
|
|
|
2012-11-29 19:19:03 -05:00
|
|
|
return TRUE;
|
2013-01-10 20:35:25 -05:00
|
|
|
|
2012-11-29 19:19:03 -05:00
|
|
|
} else {
|
2013-01-10 20:35:25 -05:00
|
|
|
if (msg != NULL) {
|
2013-01-28 19:21:04 -05:00
|
|
|
message_send(msg, usr);
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_outgoing_msg("me", usr, msg);
|
2013-01-10 20:35:25 -05:00
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
if ((win_type == WIN_CHAT) && prefs_get_boolean(PREF_CHLOG)) {
|
2013-01-10 20:35:25 -05:00
|
|
|
const char *jid = jabber_get_jid();
|
2013-01-29 18:01:15 -05:00
|
|
|
Jid *jidp = jid_create(jid);
|
|
|
|
chat_log_chat(jidp->barejid, usr, msg, PROF_OUT_LOG, NULL);
|
|
|
|
jid_destroy(jidp);
|
2013-01-10 20:35:25 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_new_chat_win(usr);
|
2013-01-10 20:35:25 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
2012-11-29 19:19:03 -05:00
|
|
|
}
|
2012-02-09 18:15:53 -05:00
|
|
|
}
|
|
|
|
|
2013-01-21 18:24:59 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_status(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
char *usr = args[0];
|
|
|
|
|
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
2013-01-21 18:24:59 -05:00
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (win_type)
|
|
|
|
{
|
|
|
|
case WIN_MUC:
|
2013-01-21 18:24:59 -05:00
|
|
|
if (usr != NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_status_room(usr);
|
2013-01-21 18:24:59 -05:00
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("You must specify a nickname.");
|
2013-01-21 18:24:59 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_CHAT:
|
2013-01-21 18:24:59 -05:00
|
|
|
if (usr != NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("No parameter required when in chat.");
|
2013-01-21 18:24:59 -05:00
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_status();
|
2013-01-21 18:24:59 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_PRIVATE:
|
2013-01-21 18:24:59 -05:00
|
|
|
if (usr != NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("No parameter required when in chat.");
|
2013-01-21 18:24:59 -05:00
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_status_private();
|
2013-01-21 18:24:59 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_CONSOLE:
|
2013-01-21 18:24:59 -05:00
|
|
|
if (usr != NULL) {
|
|
|
|
cons_show_status(usr);
|
|
|
|
} else {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
2013-01-21 18:24:59 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-11-13 17:08:46 -05:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_info(gchar **args, struct cmd_help_t help)
|
2012-11-13 17:08:46 -05:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
char *usr = args[0];
|
2012-11-14 21:31:31 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
|
|
|
PContact pcontact = NULL;
|
2012-11-14 21:31:31 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (win_type)
|
|
|
|
{
|
|
|
|
case WIN_MUC:
|
2013-01-17 17:46:50 -05:00
|
|
|
if (usr != NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
pcontact = muc_get_participant(ui_current_recipient(), usr);
|
2013-01-21 18:48:57 -05:00
|
|
|
if (pcontact != NULL) {
|
|
|
|
cons_show_info(pcontact);
|
|
|
|
} else {
|
|
|
|
cons_show("No such participant \"%s\" in room.", usr);
|
|
|
|
}
|
2013-01-17 17:46:50 -05:00
|
|
|
} else {
|
2013-01-21 18:48:57 -05:00
|
|
|
cons_show("No nickname supplied to /info in chat room.");
|
2013-01-17 17:46:50 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_CHAT:
|
2013-01-17 17:46:50 -05:00
|
|
|
if (usr != NULL) {
|
2013-01-21 18:48:57 -05:00
|
|
|
cons_show("No parameter required for /info in chat.");
|
2013-01-17 17:46:50 -05:00
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
pcontact = contact_list_get_contact(ui_current_recipient());
|
2013-01-21 18:48:57 -05:00
|
|
|
if (pcontact != NULL) {
|
|
|
|
cons_show_info(pcontact);
|
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
cons_show("No such contact \"%s\" in roster.", ui_current_recipient());
|
2013-01-21 18:48:57 -05:00
|
|
|
}
|
2013-01-17 17:46:50 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_PRIVATE:
|
2013-01-17 17:46:50 -05:00
|
|
|
if (usr != NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_print_line("No parameter required when in chat.");
|
2013-01-17 17:46:50 -05:00
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
Jid *jid = jid_create(ui_current_recipient());
|
2013-04-21 13:40:22 -04:00
|
|
|
pcontact = muc_get_participant(jid->barejid, jid->resourcepart);
|
2013-01-21 18:48:57 -05:00
|
|
|
if (pcontact != NULL) {
|
|
|
|
cons_show_info(pcontact);
|
|
|
|
} else {
|
|
|
|
cons_show("No such participant \"%s\" in room.", jid->resourcepart);
|
|
|
|
}
|
|
|
|
jid_destroy(jid);
|
2013-01-17 17:46:50 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_CONSOLE:
|
2013-01-17 17:46:50 -05:00
|
|
|
if (usr != NULL) {
|
2013-04-21 13:40:22 -04:00
|
|
|
pcontact = contact_list_get_contact(usr);
|
2013-01-21 18:48:57 -05:00
|
|
|
if (pcontact != NULL) {
|
|
|
|
cons_show_info(pcontact);
|
|
|
|
} else {
|
|
|
|
cons_show("No such contact \"%s\" in roster.", usr);
|
2013-02-16 20:04:10 -05:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
2013-02-16 20:04:10 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
_cmd_caps(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
|
|
|
PContact pcontact = NULL;
|
2013-02-16 20:04:10 -05:00
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (win_type)
|
|
|
|
{
|
|
|
|
case WIN_MUC:
|
2013-02-17 11:39:37 -05:00
|
|
|
if (args[0] != NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
pcontact = muc_get_participant(ui_current_recipient(), args[0]);
|
2013-02-16 20:04:10 -05:00
|
|
|
if (pcontact != NULL) {
|
2013-02-17 11:39:37 -05:00
|
|
|
Resource *resource = p_contact_get_resource(pcontact, args[0]);
|
|
|
|
cons_show_caps(args[0], resource);
|
2013-02-16 20:04:10 -05:00
|
|
|
} else {
|
2013-02-17 11:39:37 -05:00
|
|
|
cons_show("No such participant \"%s\" in room.", args[0]);
|
2013-02-16 20:04:10 -05:00
|
|
|
}
|
|
|
|
} else {
|
2013-02-17 11:39:37 -05:00
|
|
|
cons_show("No nickname supplied to /caps in chat room.");
|
2013-02-16 20:04:10 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_CHAT:
|
|
|
|
case WIN_CONSOLE:
|
2013-02-17 11:39:37 -05:00
|
|
|
if (args[0] != NULL) {
|
|
|
|
Jid *jid = jid_create(args[0]);
|
2013-02-16 20:04:10 -05:00
|
|
|
|
2013-02-17 11:39:37 -05:00
|
|
|
if (jid->fulljid == NULL) {
|
|
|
|
cons_show("You must provide a full jid to the /caps command.");
|
2013-02-16 20:04:10 -05:00
|
|
|
} else {
|
2013-04-21 13:40:22 -04:00
|
|
|
pcontact = contact_list_get_contact(jid->barejid);
|
2013-02-17 14:28:25 -05:00
|
|
|
if (pcontact == NULL) {
|
|
|
|
cons_show("Contact not found in roster: %s", jid->barejid);
|
|
|
|
} else {
|
|
|
|
Resource *resource = p_contact_get_resource(pcontact, jid->resourcepart);
|
|
|
|
if (resource == NULL) {
|
|
|
|
cons_show("Could not find resource %s, for contact %s", jid->barejid, jid->resourcepart);
|
|
|
|
} else {
|
|
|
|
cons_show_caps(jid->fulljid, resource);
|
|
|
|
}
|
|
|
|
}
|
2013-02-16 20:04:10 -05:00
|
|
|
}
|
2013-02-17 11:39:37 -05:00
|
|
|
} else {
|
|
|
|
cons_show("You must provide a jid to the /caps command.");
|
2013-02-16 20:04:10 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_PRIVATE:
|
2013-02-17 11:39:37 -05:00
|
|
|
if (args[0] != NULL) {
|
|
|
|
cons_show("No parameter needed to /caps when in private chat.");
|
2013-02-16 20:04:10 -05:00
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
Jid *jid = jid_create(ui_current_recipient());
|
2013-04-21 13:40:22 -04:00
|
|
|
pcontact = muc_get_participant(jid->barejid, jid->resourcepart);
|
2013-02-17 11:39:37 -05:00
|
|
|
Resource *resource = p_contact_get_resource(pcontact, jid->resourcepart);
|
|
|
|
cons_show_caps(jid->resourcepart, resource);
|
2013-01-17 17:46:50 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
2012-11-13 17:08:46 -05:00
|
|
|
}
|
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
return TRUE;
|
2012-11-13 17:08:46 -05:00
|
|
|
}
|
|
|
|
|
2013-02-17 11:39:37 -05:00
|
|
|
|
2013-02-16 21:10:56 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_software(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
|
|
|
PContact pcontact = NULL;
|
2013-02-16 21:10:56 -05:00
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
2013-04-21 13:40:22 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (win_type)
|
|
|
|
{
|
|
|
|
case WIN_MUC:
|
2013-02-16 21:58:03 -05:00
|
|
|
if (args[0] != NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
pcontact = muc_get_participant(ui_current_recipient(), args[0]);
|
2013-02-16 21:58:03 -05:00
|
|
|
if (pcontact != NULL) {
|
2013-04-21 14:44:31 -04:00
|
|
|
Jid *jid = jid_create_from_bare_and_resource(ui_current_recipient(), args[0]);
|
2013-02-16 21:58:03 -05:00
|
|
|
iq_send_software_version(jid->fulljid);
|
|
|
|
jid_destroy(jid);
|
|
|
|
} else {
|
|
|
|
cons_show("No such participant \"%s\" in room.", args[0]);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
cons_show("No nickname supplied to /software in chat room.");
|
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_CHAT:
|
|
|
|
case WIN_CONSOLE:
|
2013-02-16 21:58:03 -05:00
|
|
|
if (args[0] != NULL) {
|
|
|
|
Jid *jid = jid_create(args[0]);
|
|
|
|
|
|
|
|
if (jid->fulljid == NULL) {
|
|
|
|
cons_show("You must provide a full jid to the /software command.");
|
|
|
|
} else {
|
|
|
|
iq_send_software_version(jid->fulljid);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
cons_show("You must provide a jid to the /software command.");
|
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
case WIN_PRIVATE:
|
2013-02-16 21:58:03 -05:00
|
|
|
if (args[0] != NULL) {
|
|
|
|
cons_show("No parameter needed to /software when in private chat.");
|
|
|
|
} else {
|
2013-04-21 14:44:31 -04:00
|
|
|
iq_send_software_version(ui_current_recipient());
|
2013-02-16 21:58:03 -05:00
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
2013-02-16 21:10:56 -05:00
|
|
|
}
|
2013-02-16 21:58:03 -05:00
|
|
|
|
|
|
|
return TRUE;
|
2013-02-16 21:10:56 -05:00
|
|
|
}
|
|
|
|
|
2012-11-03 21:27:01 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_join(gchar **args, struct cmd_help_t help)
|
2012-11-03 21:27:01 -04:00
|
|
|
{
|
2013-01-12 22:14:36 -05:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-01-13 12:58:25 -05:00
|
|
|
|
2013-01-12 22:14:36 -05:00
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ui_windows_full()) {
|
2013-04-20 21:49:23 -04:00
|
|
|
cons_show_error("Windows all used, close a window and try again.");
|
2013-01-12 22:14:36 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-04-10 17:47:01 -04:00
|
|
|
int num_args = g_strv_length(args);
|
|
|
|
char *room = NULL;
|
2012-11-17 21:40:49 -05:00
|
|
|
char *nick = NULL;
|
2013-04-10 17:47:01 -04:00
|
|
|
Jid *room_arg = jid_create(args[0]);
|
|
|
|
GString *room_str = g_string_new("");
|
|
|
|
Jid *my_jid = jid_create(jabber_get_jid());
|
2012-11-03 21:27:01 -04:00
|
|
|
|
2013-04-10 17:47:01 -04:00
|
|
|
// full room jid supplied (room@server)
|
|
|
|
if (room_arg->localpart != NULL) {
|
|
|
|
room = args[0];
|
|
|
|
|
|
|
|
// server not supplied (room), guess conference.<users-domain-part>
|
|
|
|
} else {
|
|
|
|
g_string_append(room_str, args[0]);
|
|
|
|
g_string_append(room_str, "@conference.");
|
|
|
|
g_string_append(room_str, strdup(my_jid->domainpart));
|
|
|
|
room = room_str->str;
|
|
|
|
}
|
|
|
|
|
|
|
|
// nick supplied
|
2012-11-17 21:40:49 -05:00
|
|
|
if (num_args == 2) {
|
|
|
|
nick = args[1];
|
2013-04-10 17:47:01 -04:00
|
|
|
|
|
|
|
// use localpart for nick
|
2013-01-12 22:14:36 -05:00
|
|
|
} else {
|
2013-04-10 17:47:01 -04:00
|
|
|
nick = my_jid->localpart;
|
2012-11-17 21:40:49 -05:00
|
|
|
}
|
2012-11-03 21:27:01 -04:00
|
|
|
|
2013-01-26 20:14:59 -05:00
|
|
|
Jid *room_jid = jid_create_from_bare_and_resource(room, nick);
|
2012-11-03 21:27:01 -04:00
|
|
|
|
2013-01-12 22:14:36 -05:00
|
|
|
if (!muc_room_is_active(room_jid)) {
|
2013-01-28 17:55:26 -05:00
|
|
|
presence_join_room(room_jid);
|
2012-11-03 21:27:01 -04:00
|
|
|
}
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_room_join(room_jid);
|
2012-11-03 21:27:01 -04:00
|
|
|
|
2013-04-10 17:47:01 -04:00
|
|
|
jid_destroy(room_jid);
|
|
|
|
jid_destroy(my_jid);
|
|
|
|
g_string_free(room_str, TRUE);
|
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
return TRUE;
|
2012-11-03 21:27:01 -04:00
|
|
|
}
|
|
|
|
|
2013-04-20 15:18:13 -04:00
|
|
|
static gboolean
|
|
|
|
_cmd_invite(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
char *contact = args[0];
|
|
|
|
char *reason = args[1];
|
|
|
|
char *room = NULL;
|
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() != WIN_MUC) {
|
2013-04-20 15:18:13 -04:00
|
|
|
cons_show("You must be in a chat room to send an invite.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
room = ui_current_recipient();
|
2013-04-20 15:18:13 -04:00
|
|
|
message_send_invite(room, contact, reason);
|
|
|
|
if (reason != NULL) {
|
|
|
|
cons_show("Room invite sent, contact: %s, room: %s, reason: \"%s\".",
|
|
|
|
contact, room, reason);
|
|
|
|
} else {
|
|
|
|
cons_show("Room invite sent, contact: %s, room: %s.",
|
|
|
|
contact, room);
|
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-03-13 19:38:26 -04:00
|
|
|
static gboolean
|
|
|
|
_cmd_rooms(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are currenlty connect.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (args[0] == NULL) {
|
|
|
|
Jid *jid = jid_create(jabber_get_jid());
|
|
|
|
GString *conference_node = g_string_new("conference.");
|
2013-03-14 17:29:04 -04:00
|
|
|
g_string_append(conference_node, strdup(jid->domainpart));
|
|
|
|
jid_destroy(jid);
|
2013-03-13 19:38:26 -04:00
|
|
|
iq_room_list_request(conference_node->str);
|
|
|
|
g_string_free(conference_node, TRUE);
|
|
|
|
} else {
|
|
|
|
iq_room_list_request(args[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-03-14 16:50:09 -04:00
|
|
|
static gboolean
|
|
|
|
_cmd_disco(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are currenlty connect.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-03-14 17:29:04 -04:00
|
|
|
GString *jid = g_string_new("");
|
|
|
|
if (args[1] != NULL) {
|
|
|
|
jid = g_string_append(jid, args[1]);
|
|
|
|
} else {
|
|
|
|
Jid *jidp = jid_create(jabber_get_jid());
|
|
|
|
jid = g_string_append(jid, strdup(jidp->domainpart));
|
|
|
|
jid_destroy(jidp);
|
|
|
|
}
|
|
|
|
|
2013-03-14 16:50:09 -04:00
|
|
|
if (g_strcmp0(args[0], "info") == 0) {
|
2013-03-14 17:29:04 -04:00
|
|
|
iq_disco_info_request(jid->str);
|
2013-03-14 16:50:09 -04:00
|
|
|
} else {
|
2013-03-14 17:29:04 -04:00
|
|
|
iq_disco_items_request(jid->str);
|
2013-03-14 16:50:09 -04:00
|
|
|
}
|
|
|
|
|
2013-03-14 17:29:04 -04:00
|
|
|
g_string_free(jid, TRUE);
|
|
|
|
|
2013-03-14 16:50:09 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-11-18 13:36:17 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_nick(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
2013-04-21 13:40:22 -04:00
|
|
|
if (ui_current_win_type() != WIN_MUC) {
|
2012-11-18 13:36:17 -05:00
|
|
|
cons_show("You can only change your nickname in a chat room window.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
char *room = ui_current_recipient();
|
2012-11-18 13:36:17 -05:00
|
|
|
char *nick = args[0];
|
2013-01-28 17:55:26 -05:00
|
|
|
presence_change_room_nick(room, nick);
|
2012-11-18 13:36:17 -05:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-27 20:36:08 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_tiny(gchar **args, struct cmd_help_t help)
|
2012-07-27 20:36:08 -04:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
char *url = args[0];
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
2012-11-14 21:31:31 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
if (!tinyurl_valid(url)) {
|
|
|
|
GString *error = g_string_new("/tiny, badly formed URL: ");
|
|
|
|
g_string_append(error, url);
|
2013-04-20 21:49:23 -04:00
|
|
|
cons_show_error(error->str);
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type != WIN_CONSOLE) {
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_current_error_line(error->str);
|
2012-10-24 06:43:25 -04:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
g_string_free(error, TRUE);
|
2013-04-21 13:40:22 -04:00
|
|
|
} else if (win_type != WIN_CONSOLE) {
|
2012-11-17 21:40:49 -05:00
|
|
|
char *tiny = tinyurl_get(url);
|
2012-07-29 16:32:04 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
if (tiny != NULL) {
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type == WIN_CHAT) {
|
2013-04-21 14:44:31 -04:00
|
|
|
char *recipient = ui_current_recipient();
|
2013-01-28 19:21:04 -05:00
|
|
|
message_send(tiny, recipient);
|
2012-10-02 17:00:05 -04:00
|
|
|
|
2013-02-02 21:35:04 -05:00
|
|
|
if (prefs_get_boolean(PREF_CHLOG)) {
|
2013-01-15 16:58:41 -05:00
|
|
|
const char *jid = jabber_get_jid();
|
2013-01-29 18:01:15 -05:00
|
|
|
Jid *jidp = jid_create(jid);
|
|
|
|
chat_log_chat(jidp->barejid, recipient, tiny, PROF_OUT_LOG, NULL);
|
|
|
|
jid_destroy(jidp);
|
2013-01-15 16:58:41 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_outgoing_msg("me", recipient, tiny);
|
2013-01-15 16:58:41 -05:00
|
|
|
free(recipient);
|
2013-04-21 13:40:22 -04:00
|
|
|
} else if (win_type == WIN_PRIVATE) {
|
2013-04-21 14:44:31 -04:00
|
|
|
char *recipient = ui_current_recipient();
|
2013-01-28 19:21:04 -05:00
|
|
|
message_send(tiny, recipient);
|
2013-04-21 14:44:31 -04:00
|
|
|
ui_outgoing_msg("me", recipient, tiny);
|
2013-01-15 16:58:41 -05:00
|
|
|
free(recipient);
|
|
|
|
} else { // groupchat
|
2013-04-21 14:44:31 -04:00
|
|
|
char *recipient = ui_current_recipient();
|
2013-01-28 19:37:50 -05:00
|
|
|
message_send_groupchat(tiny, recipient);
|
2013-01-15 16:58:41 -05:00
|
|
|
free(recipient);
|
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
free(tiny);
|
2012-07-29 16:32:04 -04:00
|
|
|
} else {
|
2013-04-20 21:49:23 -04:00
|
|
|
cons_show_error("Couldn't get tinyurl.");
|
2012-07-29 16:32:04 -04:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
} else {
|
|
|
|
cons_show("/tiny can only be used in chat windows");
|
2012-07-27 20:36:08 -04:00
|
|
|
}
|
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
return TRUE;
|
2012-07-27 20:36:08 -04:00
|
|
|
}
|
|
|
|
|
2013-03-02 16:55:55 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_clear(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
2013-04-21 12:35:57 -04:00
|
|
|
ui_clear_current();
|
2013-03-02 16:55:55 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_close(gchar **args, struct cmd_help_t help)
|
2012-02-09 18:15:53 -05:00
|
|
|
{
|
2013-01-10 19:48:58 -05:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2013-04-21 13:40:22 -04:00
|
|
|
win_type_t win_type = ui_current_win_type();
|
2012-10-31 17:30:58 -04:00
|
|
|
|
2013-01-10 19:48:58 -05:00
|
|
|
// cannot close console window
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type == WIN_CONSOLE) {
|
2013-01-10 19:48:58 -05:00
|
|
|
cons_show("Cannot close console window.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
2012-10-31 18:08:00 -04:00
|
|
|
|
2013-01-10 19:48:58 -05:00
|
|
|
// handle leaving rooms, or chat
|
|
|
|
if (conn_status == JABBER_CONNECTED) {
|
2013-04-21 13:40:22 -04:00
|
|
|
if (win_type == WIN_MUC) {
|
2013-04-21 14:44:31 -04:00
|
|
|
char *room_jid = ui_current_recipient();
|
2013-01-28 17:55:26 -05:00
|
|
|
presence_leave_chat_room(room_jid);
|
2013-04-21 13:40:22 -04:00
|
|
|
} else if ((win_type == WIN_CHAT) || (win_type == WIN_PRIVATE)) {
|
2013-01-10 19:48:58 -05:00
|
|
|
|
2013-02-02 21:35:04 -05:00
|
|
|
if (prefs_get_boolean(PREF_STATES)) {
|
2013-04-21 14:44:31 -04:00
|
|
|
char *recipient = ui_current_recipient();
|
2013-01-10 19:48:58 -05:00
|
|
|
|
|
|
|
// send <gone/> chat state before closing
|
|
|
|
if (chat_session_get_recipient_supports(recipient)) {
|
|
|
|
chat_session_set_gone(recipient);
|
2013-01-28 19:37:50 -05:00
|
|
|
message_send_gone(recipient);
|
2013-01-10 19:48:58 -05:00
|
|
|
chat_session_end(recipient);
|
|
|
|
}
|
2012-10-31 18:08:00 -04:00
|
|
|
}
|
2012-10-31 17:30:58 -04:00
|
|
|
}
|
|
|
|
}
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2013-01-10 19:48:58 -05:00
|
|
|
// close the window
|
2013-04-21 12:35:57 -04:00
|
|
|
ui_close_current();
|
2013-01-10 19:48:58 -05:00
|
|
|
|
2012-02-09 18:15:53 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_beep(gchar **args, struct cmd_help_t help)
|
2012-04-23 20:24:54 -04:00
|
|
|
{
|
2013-02-02 21:51:15 -05:00
|
|
|
return _cmd_set_boolean_preference(args[0], help, "Sound", PREF_BEEP);
|
2012-04-23 20:24:54 -04:00
|
|
|
}
|
|
|
|
|
2012-10-31 17:41:00 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_states(gchar **args, struct cmd_help_t help)
|
2012-10-31 17:41:00 -04:00
|
|
|
{
|
2013-03-10 15:36:08 -04:00
|
|
|
gboolean result = _cmd_set_boolean_preference(args[0], help, "Sending chat states",
|
2013-02-02 21:51:15 -05:00
|
|
|
PREF_STATES);
|
2013-03-10 15:36:08 -04:00
|
|
|
|
|
|
|
// if disabled, disable outtype and gone
|
|
|
|
if (result == TRUE && (strcmp(args[0], "off") == 0)) {
|
|
|
|
prefs_set_boolean(PREF_OUTTYPE, FALSE);
|
|
|
|
prefs_set_gone(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
2012-10-31 17:41:00 -04:00
|
|
|
}
|
|
|
|
|
2012-11-29 15:34:52 -05:00
|
|
|
static gboolean
|
2012-12-02 15:53:45 -05:00
|
|
|
_cmd_set_titlebar(gchar **args, struct cmd_help_t help)
|
2012-11-29 15:34:52 -05:00
|
|
|
{
|
2012-12-02 15:53:45 -05:00
|
|
|
if (strcmp(args[0], "version") != 0) {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
return TRUE;
|
|
|
|
} else {
|
|
|
|
return _cmd_set_boolean_preference(args[1], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Show version in window title", PREF_TITLEBARVERSION);
|
2012-12-02 15:53:45 -05:00
|
|
|
}
|
2012-11-29 15:34:52 -05:00
|
|
|
}
|
|
|
|
|
2012-10-31 20:12:35 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_outtype(gchar **args, struct cmd_help_t help)
|
2012-10-31 20:12:35 -04:00
|
|
|
{
|
2013-03-10 15:36:08 -04:00
|
|
|
gboolean result = _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Sending typing notifications", PREF_OUTTYPE);
|
2013-03-10 15:36:08 -04:00
|
|
|
|
|
|
|
// if enabled, enable states
|
|
|
|
if (result == TRUE && (strcmp(args[0], "on") == 0)) {
|
|
|
|
prefs_set_boolean(PREF_STATES, TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
2012-10-31 20:12:35 -04:00
|
|
|
}
|
|
|
|
|
2012-12-19 18:31:25 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_set_gone(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
char *value = args[0];
|
|
|
|
|
|
|
|
gint period = atoi(value);
|
|
|
|
prefs_set_gone(period);
|
|
|
|
if (period == 0) {
|
|
|
|
cons_show("Automatic leaving conversations after period disabled.");
|
|
|
|
} else if (period == 1) {
|
|
|
|
cons_show("Leaving conversations after 1 minute of inactivity.");
|
|
|
|
} else {
|
|
|
|
cons_show("Leaving conversations after %d minutes of inactivity.", period);
|
|
|
|
}
|
|
|
|
|
2013-03-10 15:36:08 -04:00
|
|
|
// if enabled, enable states
|
|
|
|
if (period > 0) {
|
|
|
|
prefs_set_boolean(PREF_STATES, TRUE);
|
|
|
|
}
|
|
|
|
|
2012-12-19 18:31:25 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_notify(gchar **args, struct cmd_help_t help)
|
2012-06-28 18:45:37 -04:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
char *kind = args[0];
|
|
|
|
char *value = args[1];
|
2012-10-27 17:05:08 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
// bad kind
|
|
|
|
if ((strcmp(kind, "message") != 0) && (strcmp(kind, "typing") != 0) &&
|
2013-04-22 18:48:23 -04:00
|
|
|
(strcmp(kind, "remind") != 0) && (strcmp(kind, "invite") != 0)) {
|
2012-11-14 21:31:31 -05:00
|
|
|
cons_show("Usage: %s", help.usage);
|
2012-10-27 17:05:08 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
// set message setting
|
|
|
|
} else if (strcmp(kind, "message") == 0) {
|
|
|
|
if (strcmp(value, "on") == 0) {
|
|
|
|
cons_show("Message notifications enabled.");
|
2013-02-02 21:51:15 -05:00
|
|
|
prefs_set_boolean(PREF_NOTIFY_MESSAGE, TRUE);
|
2012-11-17 21:40:49 -05:00
|
|
|
} else if (strcmp(value, "off") == 0) {
|
|
|
|
cons_show("Message notifications disabled.");
|
2013-02-02 21:51:15 -05:00
|
|
|
prefs_set_boolean(PREF_NOTIFY_MESSAGE, FALSE);
|
2012-11-17 21:40:49 -05:00
|
|
|
} else {
|
|
|
|
cons_show("Usage: /notify message on|off");
|
|
|
|
}
|
2012-10-27 17:05:08 -04:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
// set typing setting
|
|
|
|
} else if (strcmp(kind, "typing") == 0) {
|
|
|
|
if (strcmp(value, "on") == 0) {
|
|
|
|
cons_show("Typing notifications enabled.");
|
2013-02-02 21:51:15 -05:00
|
|
|
prefs_set_boolean(PREF_NOTIFY_TYPING, TRUE);
|
2012-11-17 21:40:49 -05:00
|
|
|
} else if (strcmp(value, "off") == 0) {
|
|
|
|
cons_show("Typing notifications disabled.");
|
2013-02-02 21:51:15 -05:00
|
|
|
prefs_set_boolean(PREF_NOTIFY_TYPING, FALSE);
|
2012-11-17 21:40:49 -05:00
|
|
|
} else {
|
|
|
|
cons_show("Usage: /notify typing on|off");
|
2012-10-27 17:05:08 -04:00
|
|
|
}
|
2012-11-14 21:31:31 -05:00
|
|
|
|
2013-04-22 18:48:23 -04:00
|
|
|
// set invite setting
|
|
|
|
} else if (strcmp(kind, "invite") == 0) {
|
|
|
|
if (strcmp(value, "on") == 0) {
|
|
|
|
cons_show("Chat room invite notifications enabled.");
|
|
|
|
prefs_set_boolean(PREF_NOTIFY_INVITE, TRUE);
|
|
|
|
} else if (strcmp(value, "off") == 0) {
|
|
|
|
cons_show("Chat room invite notifications disabled.");
|
|
|
|
prefs_set_boolean(PREF_NOTIFY_INVITE, FALSE);
|
|
|
|
} else {
|
|
|
|
cons_show("Usage: /notify invite on|off");
|
|
|
|
}
|
|
|
|
|
2013-01-14 04:51:37 -05:00
|
|
|
// set remind setting
|
|
|
|
} else if (strcmp(kind, "remind") == 0) {
|
2012-11-17 21:40:49 -05:00
|
|
|
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);
|
|
|
|
}
|
2013-01-14 04:51:37 -05:00
|
|
|
|
|
|
|
} else {
|
|
|
|
cons_show("Unknown command: %s.", kind);
|
2012-10-27 17:05:08 -04:00
|
|
|
}
|
2012-11-14 21:31:31 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
return TRUE;
|
2012-08-15 19:50:32 -04:00
|
|
|
}
|
|
|
|
|
2012-11-12 04:13:03 -05:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_log(gchar **args, struct cmd_help_t help)
|
2012-11-12 04:13:03 -05:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
char *subcmd = args[0];
|
|
|
|
char *value = args[1];
|
|
|
|
int intval;
|
|
|
|
|
|
|
|
if (strcmp(subcmd, "maxsize") == 0) {
|
|
|
|
if (_strtoi(value, &intval, PREFS_MIN_LOG_SIZE, INT_MAX) == 0) {
|
|
|
|
prefs_set_max_log_size(intval);
|
|
|
|
cons_show("Log maxinum size set to %d bytes", intval);
|
2012-11-12 04:13:03 -05:00
|
|
|
}
|
2012-11-17 21:40:49 -05:00
|
|
|
} else {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
2012-11-12 04:13:03 -05:00
|
|
|
}
|
2012-11-13 17:23:06 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
/* TODO: make 'level' subcommand for debug level */
|
|
|
|
|
|
|
|
return TRUE;
|
2012-11-12 04:13:03 -05:00
|
|
|
}
|
|
|
|
|
2012-11-24 21:14:38 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_set_reconnect(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
char *value = args[0];
|
|
|
|
int intval;
|
|
|
|
|
|
|
|
if (_strtoi(value, &intval, 0, INT_MAX) == 0) {
|
|
|
|
prefs_set_reconnect(intval);
|
|
|
|
if (intval == 0) {
|
|
|
|
cons_show("Reconnect disabled.", intval);
|
|
|
|
} else {
|
|
|
|
cons_show("Reconnect interval set to %d seconds.", intval);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
}
|
|
|
|
|
2012-11-26 18:58:24 -05:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
_cmd_set_autoping(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
char *value = args[0];
|
|
|
|
int intval;
|
|
|
|
|
|
|
|
if (_strtoi(value, &intval, 0, INT_MAX) == 0) {
|
|
|
|
prefs_set_autoping(intval);
|
|
|
|
jabber_set_autoping(intval);
|
|
|
|
if (intval == 0) {
|
|
|
|
cons_show("Autoping disabled.", intval);
|
|
|
|
} else {
|
|
|
|
cons_show("Autoping interval set to %d seconds.", intval);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
cons_show("Usage: %s", help.usage);
|
|
|
|
}
|
2012-11-24 21:14:38 -05:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-11-30 18:34:14 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_set_autoaway(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
char *setting = args[0];
|
|
|
|
char *value = args[1];
|
|
|
|
int minutesval;
|
|
|
|
|
|
|
|
if ((strcmp(setting, "mode") != 0) && (strcmp(setting, "time") != 0) &&
|
|
|
|
(strcmp(setting, "message") != 0) && (strcmp(setting, "check") != 0)) {
|
|
|
|
cons_show("Setting must be one of 'mode', 'time', 'message' or 'check'");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (strcmp(setting, "mode") == 0) {
|
|
|
|
if ((strcmp(value, "idle") != 0) && (strcmp(value, "away") != 0) &&
|
|
|
|
(strcmp(value, "off") != 0)) {
|
|
|
|
cons_show("Mode must be one of 'idle', 'away' or 'off'");
|
|
|
|
} else {
|
2013-02-02 22:24:13 -05:00
|
|
|
prefs_set_string(PREF_AUTOAWAY_MODE, value);
|
2012-11-30 18:34:14 -05:00
|
|
|
cons_show("Auto away mode set to: %s.", value);
|
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (strcmp(setting, "time") == 0) {
|
|
|
|
if (_strtoi(value, &minutesval, 1, INT_MAX) == 0) {
|
|
|
|
prefs_set_autoaway_time(minutesval);
|
|
|
|
cons_show("Auto away time set to: %d minutes.", minutesval);
|
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (strcmp(setting, "message") == 0) {
|
2012-12-01 12:46:25 -05:00
|
|
|
if (strcmp(value, "off") == 0) {
|
2013-02-02 22:24:13 -05:00
|
|
|
prefs_set_string(PREF_AUTOAWAY_MESSAGE, NULL);
|
2012-12-01 12:46:25 -05:00
|
|
|
cons_show("Auto away message cleared.");
|
|
|
|
} else {
|
2013-02-02 22:24:13 -05:00
|
|
|
prefs_set_string(PREF_AUTOAWAY_MESSAGE, value);
|
2012-12-01 12:46:25 -05:00
|
|
|
cons_show("Auto away message set to: \"%s\".", value);
|
|
|
|
}
|
2012-11-30 18:34:14 -05:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (strcmp(setting, "check") == 0) {
|
|
|
|
return _cmd_set_boolean_preference(value, help, "Online check",
|
2013-02-02 21:51:15 -05:00
|
|
|
PREF_AUTOAWAY_CHECK);
|
2012-11-30 18:34:14 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-11-13 05:51:28 -05:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_priority(gchar **args, struct cmd_help_t help)
|
2012-11-13 05:51:28 -05:00
|
|
|
{
|
2013-01-31 17:48:21 -05:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
|
|
|
|
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
char *value = args[0];
|
|
|
|
int intval;
|
|
|
|
|
|
|
|
if (_strtoi(value, &intval, -128, 127) == 0) {
|
2013-01-31 17:48:21 -05:00
|
|
|
accounts_set_priority_all(jabber_get_account_name(), intval);
|
2013-02-10 12:13:19 -05:00
|
|
|
resource_presence_t last_presence = accounts_get_last_presence(jabber_get_account_name());
|
2013-02-10 08:36:11 -05:00
|
|
|
presence_update(last_presence, jabber_get_presence_message(), 0);
|
2012-11-17 21:40:49 -05:00
|
|
|
cons_show("Priority set to %d.", intval);
|
2012-11-12 04:13:03 -05:00
|
|
|
}
|
2012-11-14 21:31:31 -05:00
|
|
|
|
2012-11-17 21:40:49 -05:00
|
|
|
return TRUE;
|
2012-11-12 04:13:03 -05:00
|
|
|
}
|
|
|
|
|
2013-01-20 20:26:09 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_set_statuses(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
return _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Status notifications", PREF_STATUSES);
|
2013-01-20 20:26:09 -05:00
|
|
|
}
|
|
|
|
|
2012-10-23 20:35:36 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_vercheck(gchar **args, struct cmd_help_t help)
|
2012-10-23 20:35:36 -04:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
int num_args = g_strv_length(args);
|
|
|
|
|
|
|
|
if (num_args == 0) {
|
2012-10-23 20:35:36 -04:00
|
|
|
cons_check_version(TRUE);
|
|
|
|
return TRUE;
|
|
|
|
} else {
|
2012-11-30 18:34:14 -05:00
|
|
|
return _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Version checking", PREF_VERCHECK);
|
2012-10-23 20:35:36 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_flash(gchar **args, struct cmd_help_t help)
|
2012-04-23 20:39:23 -04:00
|
|
|
{
|
2012-11-30 18:34:14 -05:00
|
|
|
return _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Screen flash", PREF_FLASH);
|
2012-04-23 20:39:23 -04:00
|
|
|
}
|
|
|
|
|
2012-10-27 19:33:20 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_intype(gchar **args, struct cmd_help_t help)
|
2012-10-27 19:33:20 -04:00
|
|
|
{
|
2012-11-30 18:34:14 -05:00
|
|
|
return _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Show contact typing", PREF_INTYPE);
|
2012-10-27 19:33:20 -04:00
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-12-01 21:21:59 -05:00
|
|
|
_cmd_set_splash(gchar **args, struct cmd_help_t help)
|
2012-06-03 18:02:13 -04:00
|
|
|
{
|
2012-11-30 18:34:14 -05:00
|
|
|
return _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Splash screen", PREF_SPLASH);
|
2012-06-03 18:02:13 -04:00
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_chlog(gchar **args, struct cmd_help_t help)
|
2012-07-22 18:07:34 -04:00
|
|
|
{
|
2013-03-10 15:36:08 -04:00
|
|
|
gboolean result = _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Chat logging", PREF_CHLOG);
|
2013-03-10 15:36:08 -04:00
|
|
|
|
|
|
|
// if set to off, disable history
|
|
|
|
if (result == TRUE && (strcmp(args[0], "off") == 0)) {
|
|
|
|
prefs_set_boolean(PREF_HISTORY, FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
2012-07-22 18:07:34 -04:00
|
|
|
}
|
|
|
|
|
2013-01-17 14:40:55 -05:00
|
|
|
static gboolean
|
|
|
|
_cmd_set_mouse(gchar **args, struct cmd_help_t help)
|
|
|
|
{
|
|
|
|
return _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Mouse handling", PREF_MOUSE);
|
2013-01-17 14:40:55 -05:00
|
|
|
}
|
|
|
|
|
2012-10-14 13:26:08 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_set_history(gchar **args, struct cmd_help_t help)
|
2012-10-14 13:26:08 -04:00
|
|
|
{
|
2013-03-10 15:36:08 -04:00
|
|
|
gboolean result = _cmd_set_boolean_preference(args[0], help,
|
2013-02-02 21:51:15 -05:00
|
|
|
"Chat history", PREF_HISTORY);
|
2013-03-10 15:36:08 -04:00
|
|
|
|
|
|
|
// if set to on, set chlog
|
|
|
|
if (result == TRUE && (strcmp(args[0], "on") == 0)) {
|
|
|
|
prefs_set_boolean(PREF_CHLOG, TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
2012-10-14 13:26:08 -04:00
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_away(gchar **args, struct cmd_help_t help)
|
2012-05-27 14:53:16 -04:00
|
|
|
{
|
2013-02-10 12:13:19 -05:00
|
|
|
_update_presence(RESOURCE_AWAY, "away", args);
|
2012-05-27 14:53:16 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_online(gchar **args, struct cmd_help_t help)
|
2012-05-27 15:36:31 -04:00
|
|
|
{
|
2013-02-10 12:13:19 -05:00
|
|
|
_update_presence(RESOURCE_ONLINE, "online", args);
|
2012-05-27 15:36:31 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_dnd(gchar **args, struct cmd_help_t help)
|
2012-05-27 18:00:04 -04:00
|
|
|
{
|
2013-02-10 12:13:19 -05:00
|
|
|
_update_presence(RESOURCE_DND, "dnd", args);
|
2012-05-27 18:00:04 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_chat(gchar **args, struct cmd_help_t help)
|
2012-05-27 18:00:04 -04:00
|
|
|
{
|
2013-02-10 12:13:19 -05:00
|
|
|
_update_presence(RESOURCE_CHAT, "chat", args);
|
2012-05-27 18:00:04 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static gboolean
|
2012-11-17 21:40:49 -05:00
|
|
|
_cmd_xa(gchar **args, struct cmd_help_t help)
|
2012-05-27 18:00:04 -04:00
|
|
|
{
|
2013-02-10 12:13:19 -05:00
|
|
|
_update_presence(RESOURCE_XA, "xa", args);
|
2012-05-27 18:00:04 -04:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-08-22 19:44:14 -04:00
|
|
|
// helper function for status change commands
|
|
|
|
|
2012-07-24 18:19:48 -04:00
|
|
|
static void
|
2013-02-10 12:13:19 -05:00
|
|
|
_update_presence(const resource_presence_t resource_presence,
|
2012-11-17 21:40:49 -05:00
|
|
|
const char * const show, gchar **args)
|
2012-05-28 16:51:05 -04:00
|
|
|
{
|
2012-11-17 21:40:49 -05:00
|
|
|
char *msg = NULL;
|
|
|
|
int num_args = g_strv_length(args);
|
|
|
|
if (num_args == 1) {
|
|
|
|
msg = args[0];
|
2012-05-28 18:40:11 -04:00
|
|
|
}
|
|
|
|
|
2012-10-02 16:37:55 -04:00
|
|
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
2012-10-21 15:02:20 -04:00
|
|
|
|
2012-05-28 16:51:05 -04:00
|
|
|
if (conn_status != JABBER_CONNECTED) {
|
|
|
|
cons_show("You are not currently connected.");
|
|
|
|
} else {
|
2013-02-10 12:13:19 -05:00
|
|
|
presence_update(resource_presence, msg, 0);
|
|
|
|
|
|
|
|
contact_presence_t contact_presence = contact_presence_from_resource_presence(resource_presence);
|
|
|
|
title_bar_set_status(contact_presence);
|
|
|
|
|
|
|
|
gint priority = accounts_get_priority_for_presence_type(jabber_get_account_name(), resource_presence);
|
2012-05-28 18:40:11 -04:00
|
|
|
if (msg != NULL) {
|
2013-01-31 18:49:29 -05:00
|
|
|
cons_show("Status set to %s (priority %d), \"%s\".", show, priority, msg);
|
2012-05-28 18:40:11 -04:00
|
|
|
} else {
|
2013-01-31 18:49:29 -05:00
|
|
|
cons_show("Status set to %s (priority %d).", show, priority);
|
2012-05-28 18:40:11 -04:00
|
|
|
}
|
2012-05-28 16:51:05 -04:00
|
|
|
}
|
2012-05-28 18:40:11 -04:00
|
|
|
|
2012-10-21 15:02:20 -04:00
|
|
|
}
|
2012-08-22 19:30:11 -04:00
|
|
|
|
2012-08-22 19:44:14 -04:00
|
|
|
// helper function for boolean preference commands
|
|
|
|
|
2012-08-22 19:30:11 -04:00
|
|
|
static gboolean
|
2012-11-30 18:34:14 -05:00
|
|
|
_cmd_set_boolean_preference(gchar *arg, struct cmd_help_t help,
|
2013-02-02 21:51:15 -05:00
|
|
|
const char * const display, preference_t pref)
|
2012-08-22 19:30:11 -04:00
|
|
|
{
|
|
|
|
GString *enabled = g_string_new(display);
|
|
|
|
g_string_append(enabled, " enabled.");
|
|
|
|
|
|
|
|
GString *disabled = g_string_new(display);
|
|
|
|
g_string_append(disabled, " disabled.");
|
|
|
|
|
2012-11-30 18:34:14 -05:00
|
|
|
if (strcmp(arg, "on") == 0) {
|
2012-08-22 19:30:11 -04:00
|
|
|
cons_show(enabled->str);
|
2013-02-02 21:51:15 -05:00
|
|
|
prefs_set_boolean(pref, TRUE);
|
2012-11-30 18:34:14 -05:00
|
|
|
} else if (strcmp(arg, "off") == 0) {
|
2012-08-22 19:30:11 -04:00
|
|
|
cons_show(disabled->str);
|
2013-02-02 21:51:15 -05:00
|
|
|
prefs_set_boolean(pref, FALSE);
|
2012-08-22 19:30:11 -04:00
|
|
|
} else {
|
2012-11-16 06:49:26 -05:00
|
|
|
char usage[strlen(help.usage) + 8];
|
2012-08-22 19:30:11 -04:00
|
|
|
sprintf(usage, "Usage: %s", help.usage);
|
|
|
|
cons_show(usage);
|
2012-10-21 15:02:20 -04:00
|
|
|
}
|
2012-08-22 19:30:11 -04:00
|
|
|
|
|
|
|
g_string_free(enabled, TRUE);
|
|
|
|
g_string_free(disabled, TRUE);
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2012-08-22 19:44:14 -04:00
|
|
|
// helper to get command by string
|
|
|
|
|
2012-08-22 19:41:22 -04:00
|
|
|
static struct cmd_t *
|
|
|
|
_cmd_get_command(const char * const command)
|
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(main_commands); i++) {
|
|
|
|
struct cmd_t *pcmd = main_commands+i;
|
|
|
|
if (strcmp(pcmd->cmd, command) == 0) {
|
|
|
|
return pcmd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(setting_commands); i++) {
|
|
|
|
struct cmd_t *pcmd = setting_commands+i;
|
|
|
|
if (strcmp(pcmd->cmd, command) == 0) {
|
|
|
|
return pcmd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-11-13 17:24:37 -05:00
|
|
|
for (i = 0; i < ARRAY_SIZE(presence_commands); i++) {
|
|
|
|
struct cmd_t *pcmd = presence_commands+i;
|
2012-08-22 19:41:22 -04:00
|
|
|
if (strcmp(pcmd->cmd, command) == 0) {
|
|
|
|
return pcmd;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
2012-10-27 20:08:04 -04:00
|
|
|
|
|
|
|
static void
|
|
|
|
_parameter_autocomplete(char *input, int *size, char *command,
|
|
|
|
autocomplete_func func)
|
|
|
|
{
|
|
|
|
char *found = NULL;
|
|
|
|
char *auto_msg = NULL;
|
|
|
|
char inp_cpy[*size];
|
|
|
|
int i;
|
|
|
|
char *command_cpy = malloc(strlen(command) + 2);
|
|
|
|
sprintf(command_cpy, "%s ", command);
|
|
|
|
int len = strlen(command_cpy);
|
|
|
|
if ((strncmp(input, command_cpy, len) == 0) && (*size > len)) {
|
|
|
|
for(i = len; i < *size; i++) {
|
|
|
|
inp_cpy[i-len] = input[i];
|
|
|
|
}
|
|
|
|
inp_cpy[(*size) - len] = '\0';
|
|
|
|
found = func(inp_cpy);
|
|
|
|
if (found != NULL) {
|
|
|
|
auto_msg = (char *) malloc((len + (strlen(found) + 1)) * sizeof(char));
|
|
|
|
strcpy(auto_msg, command_cpy);
|
|
|
|
strcat(auto_msg, found);
|
|
|
|
inp_replace_input(input, auto_msg, size);
|
|
|
|
free(auto_msg);
|
|
|
|
free(found);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
free(command_cpy);
|
|
|
|
}
|
|
|
|
|
2012-12-01 19:38:10 -05:00
|
|
|
static void
|
|
|
|
_parameter_autocomplete_with_ac(char *input, int *size, char *command,
|
2013-01-24 20:11:49 -05:00
|
|
|
Autocomplete ac)
|
2012-12-01 19:38:10 -05:00
|
|
|
{
|
|
|
|
char *found = NULL;
|
|
|
|
char *auto_msg = NULL;
|
|
|
|
char inp_cpy[*size];
|
|
|
|
int i;
|
|
|
|
char *command_cpy = malloc(strlen(command) + 2);
|
|
|
|
sprintf(command_cpy, "%s ", command);
|
|
|
|
int len = strlen(command_cpy);
|
|
|
|
if ((strncmp(input, command_cpy, len) == 0) && (*size > len)) {
|
|
|
|
for(i = len; i < *size; i++) {
|
|
|
|
inp_cpy[i-len] = input[i];
|
|
|
|
}
|
|
|
|
inp_cpy[(*size) - len] = '\0';
|
2013-01-24 20:11:49 -05:00
|
|
|
found = autocomplete_complete(ac, inp_cpy);
|
2012-12-01 19:38:10 -05:00
|
|
|
if (found != NULL) {
|
|
|
|
auto_msg = (char *) malloc((len + (strlen(found) + 1)) * sizeof(char));
|
|
|
|
strcpy(auto_msg, command_cpy);
|
|
|
|
strcat(auto_msg, found);
|
|
|
|
inp_replace_input(input, auto_msg, size);
|
|
|
|
free(auto_msg);
|
|
|
|
free(found);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
free(command_cpy);
|
|
|
|
}
|
|
|
|
|
2012-10-27 20:42:26 -04:00
|
|
|
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);
|
|
|
|
inp_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);
|
|
|
|
inp_replace_input(input, auto_msg, size);
|
|
|
|
free(auto_msg);
|
|
|
|
free(found);
|
|
|
|
}
|
|
|
|
} else if ((strncmp(input, "/notify ", 8) == 0) && (*size > 8)) {
|
2012-12-01 19:38:10 -05:00
|
|
|
_parameter_autocomplete_with_ac(input, size, "/notify", notify_ac);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-12-02 15:53:45 -05:00
|
|
|
static void
|
|
|
|
_titlebar_autocomplete(char *input, int *size)
|
|
|
|
{
|
|
|
|
char *found = NULL;
|
|
|
|
char *auto_msg = NULL;
|
|
|
|
char inp_cpy[*size];
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if ((strncmp(input, "/titlebar version ", 18) == 0) && (*size > 18)) {
|
|
|
|
for(i = 18; i < *size; i++) {
|
|
|
|
inp_cpy[i-18] = input[i];
|
|
|
|
}
|
|
|
|
inp_cpy[(*size) - 18] = '\0';
|
|
|
|
found = prefs_autocomplete_boolean_choice(inp_cpy);
|
|
|
|
if (found != NULL) {
|
|
|
|
auto_msg = (char *) malloc((18 + (strlen(found) + 1)) * sizeof(char));
|
|
|
|
strcpy(auto_msg, "/titlebar version ");
|
|
|
|
strcat(auto_msg, found);
|
|
|
|
inp_replace_input(input, auto_msg, size);
|
|
|
|
free(auto_msg);
|
|
|
|
free(found);
|
|
|
|
}
|
|
|
|
} else if ((strncmp(input, "/titlebar ", 10) == 0) && (*size > 10)) {
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/titlebar", titlebar_ac);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-12-01 19:38:10 -05:00
|
|
|
static void
|
|
|
|
_autoaway_autocomplete(char *input, int *size)
|
|
|
|
{
|
|
|
|
char *found = NULL;
|
|
|
|
char *auto_msg = NULL;
|
|
|
|
char inp_cpy[*size];
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if ((strncmp(input, "/autoaway mode ", 15) == 0) && (*size > 15)) {
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/autoaway mode", autoaway_mode_ac);
|
|
|
|
} else if ((strncmp(input, "/autoaway check ", 16) == 0) && (*size > 16)) {
|
|
|
|
for(i = 16; i < *size; i++) {
|
|
|
|
inp_cpy[i-16] = input[i];
|
2012-10-27 20:42:26 -04:00
|
|
|
}
|
2012-12-01 19:38:10 -05:00
|
|
|
inp_cpy[(*size) - 16] = '\0';
|
|
|
|
found = prefs_autocomplete_boolean_choice(inp_cpy);
|
2012-10-27 20:42:26 -04:00
|
|
|
if (found != NULL) {
|
2012-12-01 19:38:10 -05:00
|
|
|
auto_msg = (char *) malloc((16 + (strlen(found) + 1)) * sizeof(char));
|
|
|
|
strcpy(auto_msg, "/autoaway check ");
|
2012-10-27 20:42:26 -04:00
|
|
|
strcat(auto_msg, found);
|
|
|
|
inp_replace_input(input, auto_msg, size);
|
|
|
|
free(auto_msg);
|
|
|
|
free(found);
|
|
|
|
}
|
2012-12-01 19:38:10 -05:00
|
|
|
} else if ((strncmp(input, "/autoaway ", 10) == 0) && (*size > 10)) {
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/autoaway", autoaway_ac);
|
2012-10-27 20:42:26 -04:00
|
|
|
}
|
|
|
|
}
|
2012-11-13 17:23:06 -05:00
|
|
|
|
2012-12-08 19:46:14 -05:00
|
|
|
static void
|
|
|
|
_theme_autocomplete(char *input, int *size)
|
|
|
|
{
|
2012-12-08 19:53:26 -05:00
|
|
|
if ((strncmp(input, "/theme set ", 11) == 0) && (*size > 11)) {
|
2012-12-08 19:46:14 -05:00
|
|
|
if (theme_load_ac == NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
theme_load_ac = autocomplete_new();
|
2012-12-08 19:46:14 -05:00
|
|
|
GSList *themes = theme_list();
|
|
|
|
while (themes != NULL) {
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_add(theme_load_ac, strdup(themes->data));
|
2012-12-08 19:46:14 -05:00
|
|
|
themes = g_slist_next(themes);
|
|
|
|
}
|
|
|
|
g_slist_free(themes);
|
2013-01-24 20:11:49 -05:00
|
|
|
autocomplete_add(theme_load_ac, "default");
|
2012-12-08 19:46:14 -05:00
|
|
|
}
|
2012-12-08 19:53:26 -05:00
|
|
|
_parameter_autocomplete_with_ac(input, size, "/theme set", theme_load_ac);
|
2012-12-08 19:46:14 -05:00
|
|
|
} else if ((strncmp(input, "/theme ", 7) == 0) && (*size > 7)) {
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/theme", theme_ac);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-12-09 17:58:45 -05:00
|
|
|
static void
|
|
|
|
_account_autocomplete(char *input, int *size)
|
|
|
|
{
|
2012-12-09 19:28:08 -05:00
|
|
|
if ((strncmp(input, "/account set ", 13) == 0) && (*size > 13)) {
|
2012-12-09 19:53:57 -05:00
|
|
|
_parameter_autocomplete(input, size, "/account set", accounts_find_all);
|
2012-12-09 19:28:08 -05:00
|
|
|
} else if ((strncmp(input, "/account show ", 14) == 0) && (*size > 14)) {
|
2012-12-09 19:53:57 -05:00
|
|
|
_parameter_autocomplete(input, size, "/account show", accounts_find_all);
|
2012-12-09 19:08:03 -05:00
|
|
|
} else if ((strncmp(input, "/account enable ", 16) == 0) && (*size > 16)) {
|
2012-12-09 19:53:57 -05:00
|
|
|
_parameter_autocomplete(input, size, "/account enable", accounts_find_all);
|
2012-12-09 19:08:03 -05:00
|
|
|
} else if ((strncmp(input, "/account disable ", 17) == 0) && (*size > 17)) {
|
2012-12-09 19:53:57 -05:00
|
|
|
_parameter_autocomplete(input, size, "/account disable", accounts_find_all);
|
2012-12-09 19:08:03 -05:00
|
|
|
} else if ((strncmp(input, "/account rename ", 16) == 0) && (*size > 16)) {
|
2012-12-09 19:53:57 -05:00
|
|
|
_parameter_autocomplete(input, size, "/account rename", accounts_find_all);
|
2012-12-09 17:58:45 -05:00
|
|
|
} else if ((strncmp(input, "/account ", 9) == 0) && (*size > 9)) {
|
|
|
|
_parameter_autocomplete_with_ac(input, size, "/account", account_ac);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-11-13 17:23:06 -05:00
|
|
|
static int
|
|
|
|
_strtoi(char *str, int *saveptr, int min, int max)
|
|
|
|
{
|
|
|
|
char *ptr;
|
|
|
|
int val;
|
|
|
|
|
|
|
|
errno = 0;
|
|
|
|
val = (int)strtol(str, &ptr, 0);
|
|
|
|
if (*str == '\0' || *ptr != '\0') {
|
|
|
|
cons_show("Illegal character. Must be a number.");
|
|
|
|
return -1;
|
|
|
|
} else if (errno == ERANGE || val < min || val > max) {
|
|
|
|
cons_show("Value out of range. Must be in %d..%d.", min, max);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
*saveptr = val;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|