mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Moved input processing to profanity.c
This commit is contained in:
parent
b3f6023278
commit
33bb82b4aa
135
src/command.c
135
src/command.c
@ -51,8 +51,6 @@ struct cmd_t {
|
||||
};
|
||||
|
||||
static struct cmd_t * _cmd_get_command(const char * const command);
|
||||
static gboolean _handle_command(const char * const command,
|
||||
const char * const inp);
|
||||
static void _update_presence(const jabber_presence_t presence,
|
||||
const char * const show, const char * const inp);
|
||||
static gboolean
|
||||
@ -81,7 +79,6 @@ static gboolean _cmd_online(const char * const inp, struct cmd_help_t help);
|
||||
static gboolean _cmd_dnd(const char * const inp, struct cmd_help_t help);
|
||||
static gboolean _cmd_chat(const char * const inp, struct cmd_help_t help);
|
||||
static gboolean _cmd_xa(const char * const inp, struct cmd_help_t help);
|
||||
static gboolean _cmd_default(const char * const inp);
|
||||
|
||||
/*
|
||||
* The commands are broken down into three groups:
|
||||
@ -337,45 +334,6 @@ static struct cmd_t status_commands[] =
|
||||
|
||||
static PAutocomplete commands_ac;
|
||||
|
||||
/*
|
||||
* Take a line of input and process it, return TRUE if profanity is to
|
||||
* continue, FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
process_input(char *inp)
|
||||
{
|
||||
log_msg(PROF_LEVEL_DEBUG, PROF, "Input recieved: %s", inp);
|
||||
gboolean result = FALSE;
|
||||
g_strstrip(inp);
|
||||
|
||||
// add line to history if something typed
|
||||
if (strlen(inp) > 0) {
|
||||
history_append(inp);
|
||||
}
|
||||
|
||||
// just carry on if no input
|
||||
if (strlen(inp) == 0) {
|
||||
result = TRUE;
|
||||
|
||||
// habdle command if input starts with a '/'
|
||||
} else if (inp[0] == '/') {
|
||||
char inp_cpy[strlen(inp) + 1];
|
||||
strcpy(inp_cpy, inp);
|
||||
char *command = strtok(inp_cpy, " ");
|
||||
result = _handle_command(command, inp);
|
||||
|
||||
// call a default handler if input didn't start with '/'
|
||||
} else {
|
||||
result = _cmd_default(inp);
|
||||
}
|
||||
|
||||
inp_clear();
|
||||
reset_search_attempts();
|
||||
win_page_off();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialise command autocompleter and history
|
||||
*/
|
||||
@ -455,47 +413,34 @@ cmd_get_status_help(void)
|
||||
return result;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(status_commands); i++) {
|
||||
struct cmd_t *pcmd = status_commands+i;
|
||||
if (strcmp(pcmd->cmd, command) == 0) {
|
||||
return pcmd;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
_handle_command(const char * const command, const char * const inp)
|
||||
gboolean
|
||||
cmd_execute(const char * const command, const char * const inp)
|
||||
{
|
||||
struct cmd_t *cmd = _cmd_get_command(command);
|
||||
|
||||
if (cmd != NULL) {
|
||||
return (cmd->func(inp, cmd->help));
|
||||
} else {
|
||||
return _cmd_default(inp);
|
||||
return cmd_execute_default(inp);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
cmd_execute_default(const char * const inp)
|
||||
{
|
||||
if (win_in_chat()) {
|
||||
char *recipient = win_get_recipient();
|
||||
jabber_send(inp, recipient);
|
||||
win_show_outgoing_msg("me", recipient, inp);
|
||||
free(recipient);
|
||||
} else {
|
||||
cons_bad_command(inp);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
_cmd_connect(const char * const inp, struct cmd_help_t help)
|
||||
{
|
||||
@ -783,21 +728,6 @@ _cmd_xa(const char * const inp, struct cmd_help_t help)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_cmd_default(const char * const inp)
|
||||
{
|
||||
if (win_in_chat()) {
|
||||
char *recipient = win_get_recipient();
|
||||
jabber_send(inp, recipient);
|
||||
win_show_outgoing_msg("me", recipient, inp);
|
||||
free(recipient);
|
||||
} else {
|
||||
cons_bad_command(inp);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_update_presence(const jabber_presence_t presence,
|
||||
const char * const show, const char * const inp)
|
||||
@ -867,3 +797,30 @@ _cmd_set_boolean_preference(const char * const inp, struct cmd_help_t help,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(status_commands); i++) {
|
||||
struct cmd_t *pcmd = status_commands+i;
|
||||
if (strcmp(pcmd->cmd, command) == 0) {
|
||||
return pcmd;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -31,9 +31,10 @@ struct cmd_help_t {
|
||||
};
|
||||
|
||||
void cmd_init(void);
|
||||
gboolean process_input(char *inp);
|
||||
char * cmd_complete(char *inp);
|
||||
void cmd_reset_completer(void);
|
||||
gboolean cmd_execute(const char * const command, const char * const inp);
|
||||
gboolean cmd_execute_default(const char * const inp);
|
||||
|
||||
// command help
|
||||
GSList * cmd_get_basic_help(void);
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "profanity.h"
|
||||
#include "log.h"
|
||||
#include "chat_log.h"
|
||||
#include "history.h"
|
||||
#include "ui.h"
|
||||
#include "jabber.h"
|
||||
#include "command.h"
|
||||
@ -38,6 +39,7 @@
|
||||
#include "tinyurl.h"
|
||||
|
||||
static log_level_t _get_log_level(char *log_level);
|
||||
gboolean _process_input(char *inp);
|
||||
static void _profanity_shutdown(void);
|
||||
|
||||
void
|
||||
@ -67,7 +69,7 @@ profanity_run(void)
|
||||
}
|
||||
|
||||
inp[size++] = '\0';
|
||||
cmd_result = process_input(inp);
|
||||
cmd_result = _process_input(inp);
|
||||
}
|
||||
|
||||
}
|
||||
@ -113,3 +115,42 @@ _get_log_level(char *log_level)
|
||||
return PROF_LEVEL_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Take a line of input and process it, return TRUE if profanity is to
|
||||
* continue, FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
_process_input(char *inp)
|
||||
{
|
||||
log_msg(PROF_LEVEL_DEBUG, PROF, "Input recieved: %s", inp);
|
||||
gboolean result = FALSE;
|
||||
g_strstrip(inp);
|
||||
|
||||
// add line to history if something typed
|
||||
if (strlen(inp) > 0) {
|
||||
history_append(inp);
|
||||
}
|
||||
|
||||
// just carry on if no input
|
||||
if (strlen(inp) == 0) {
|
||||
result = TRUE;
|
||||
|
||||
// habdle command if input starts with a '/'
|
||||
} else if (inp[0] == '/') {
|
||||
char inp_cpy[strlen(inp) + 1];
|
||||
strcpy(inp_cpy, inp);
|
||||
char *command = strtok(inp_cpy, " ");
|
||||
result = cmd_execute(command, inp);
|
||||
|
||||
// call a default handler if input didn't start with '/'
|
||||
} else {
|
||||
result = cmd_execute_default(inp);
|
||||
}
|
||||
|
||||
inp_clear();
|
||||
reset_search_attempts();
|
||||
win_page_off();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user