diff options
author | Timo Sirainen <cras@irssi.org> | 2001-02-17 19:44:22 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2001-02-17 19:44:22 +0000 |
commit | be6ba53fa47bc546279a2575523281845fe80da9 (patch) | |
tree | 2f08f6281cfbd38a1df2abe4fe69ccfd6f208f51 /src/fe-common/core | |
parent | 513e140bcebce617d6078a9532ab9976437c3ef6 (diff) | |
download | irssi-be6ba53fa47bc546279a2575523281845fe80da9.zip |
Config file: ircnets -> chatnets, added type = "chat protocol" to
chatnet config. Moved reading chatnets to core. Lots of other
multiprotocol updates.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1237 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-common/core')
-rw-r--r-- | src/fe-common/core/fe-channels.c | 40 | ||||
-rw-r--r-- | src/fe-common/core/fe-common-core.c | 8 | ||||
-rw-r--r-- | src/fe-common/core/fe-log.c | 41 | ||||
-rw-r--r-- | src/fe-common/core/fe-queries.c | 9 | ||||
-rw-r--r-- | src/fe-common/core/fe-server.c | 44 | ||||
-rw-r--r-- | src/fe-common/core/module-formats.c | 1 | ||||
-rw-r--r-- | src/fe-common/core/module-formats.h | 1 | ||||
-rw-r--r-- | src/fe-common/core/window-save.c | 3 |
8 files changed, 97 insertions, 50 deletions
diff --git a/src/fe-common/core/fe-channels.c b/src/fe-common/core/fe-channels.c index e15742d6..e3941b2c 100644 --- a/src/fe-common/core/fe-channels.c +++ b/src/fe-common/core/fe-channels.c @@ -27,6 +27,8 @@ #include "misc.h" #include "settings.h" +#include "chat-protocols.h" +#include "chatnets.h" #include "channels.h" #include "channels-setup.h" #include "nicklist.h" @@ -232,6 +234,7 @@ static void cmd_channel(const char *data, SERVER_REC *server, WI_ITEM_REC *item) static void cmd_channel_add(const char *data) { GHashTable *optlist; + CHATNET_REC *chatnetrec; CHANNEL_SETUP_REC *rec; char *botarg, *botcmdarg, *chatnet, *channel, *password; void *free_arg; @@ -240,14 +243,23 @@ static void cmd_channel_add(const char *data) "channel add", &optlist, &channel, &chatnet, &password)) return; + if (*chatnet == '\0' || *channel == '\0') + cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); + + chatnetrec = chatnet_find(chatnet); + if (chatnetrec == NULL) { + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, + TXT_UNKNOWN_CHATNET, chatnet); + cmd_params_free(free_arg); + return; + } + botarg = g_hash_table_lookup(optlist, "bots"); botcmdarg = g_hash_table_lookup(optlist, "botcmd"); - if (*chatnet == '\0' || *channel == '\0') - cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); - rec = channels_setup_find(channel, chatnet); + rec = channel_setup_find(channel, chatnet); if (rec == NULL) { - rec = g_new0(CHANNEL_SETUP_REC, 1); + rec = CHAT_PROTOCOL(chatnetrec)->create_channel_setup(); rec->name = g_strdup(channel); rec->chatnet = g_strdup(chatnet); } else { @@ -260,8 +272,12 @@ static void cmd_channel_add(const char *data) if (botarg != NULL && *botarg != '\0') rec->botmasks = g_strdup(botarg); if (botcmdarg != NULL && *botcmdarg != '\0') rec->autosendcmd = g_strdup(botcmdarg); if (*password != '\0' && strcmp(password, "-") != 0) rec->password = g_strdup(password); - channels_setup_create(rec); - printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_CHANSETUP_ADDED, channel, chatnet); + + signal_emit("channel add fill", 2, rec, optlist); + + channel_setup_create(rec); + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, + TXT_CHANSETUP_ADDED, channel, chatnet); cmd_params_free(free_arg); } @@ -278,12 +294,12 @@ static void cmd_channel_remove(const char *data) if (*chatnet == '\0' || *channel == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); - rec = channels_setup_find(channel, chatnet); + rec = channel_setup_find(channel, chatnet); if (rec == NULL) printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_CHANSETUP_NOT_FOUND, channel, chatnet); else { printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_CHANSETUP_REMOVED, channel, chatnet); - channels_setup_destroy(rec); + channel_setup_remove(rec); } cmd_params_free(free_arg); } @@ -317,6 +333,10 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist) g_free(stripped); g_free(format); + if (settings_get_int("names_max_width") > 0 && + max_width > settings_get_int("names_max_width")) + max_width = settings_get_int("names_max_width"); + /* remove width of timestamp from max_width */ format_create_dest(&dest, channel->server, channel->name, MSGLEVEL_CLIENTCRAP, NULL); @@ -329,10 +349,6 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist) } /* calculate columns */ - if (settings_get_int("names_max_width") > 0 && - max_width > settings_get_int("names_max_width")) - max_width = settings_get_int("names_max_width"); - cols = get_max_column_count(nicklist, get_nick_length, max_width, settings_get_int("names_max_columns"), item_extra, 3, &columns, &rows); diff --git a/src/fe-common/core/fe-common-core.c b/src/fe-common/core/fe-common-core.c index f01825bd..38de0d65 100644 --- a/src/fe-common/core/fe-common-core.c +++ b/src/fe-common/core/fe-common-core.c @@ -212,8 +212,12 @@ void glog_func(const char *log_domain, GLogLevelFlags log_level, break; } - printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, - TXT_GLIB_ERROR, reason, message); + if (windows == NULL) + fprintf(stderr, "GLib %s: %s", reason, message); + else { + printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, + TXT_GLIB_ERROR, reason, message); + } } void fe_common_core_finish_init(void) diff --git a/src/fe-common/core/fe-log.c b/src/fe-common/core/fe-log.c index a0ea9760..4278f6a9 100644 --- a/src/fe-common/core/fe-log.c +++ b/src/fe-common/core/fe-log.c @@ -48,7 +48,7 @@ static THEME_REC *log_theme; static int skip_next_printtext; static const char *log_theme_name; -static void log_add_targets(LOG_REC *log, const char *targets) +static void log_add_targets(LOG_REC *log, const char *targets, const char *tag) { char **tmp, **items; @@ -58,15 +58,16 @@ static void log_add_targets(LOG_REC *log, const char *targets) items = g_strsplit(targets, " ", -1); for (tmp = items; *tmp != NULL; tmp++) - log_item_add(log, LOG_ITEM_TARGET, *tmp, NULL); + log_item_add(log, LOG_ITEM_TARGET, *tmp, tag); g_strfreev(items); } -/* SYNTAX: LOG OPEN [-noopen] [-autoopen] [-targets <targets>] - [-window] <fname> [<levels>] */ +/* SYNTAX: LOG OPEN [-noopen] [-autoopen] [-window] [-<server tag>] + [-targets <targets>] <fname> [<levels>] */ static void cmd_log_open(const char *data) { + SERVER_REC *server; GHashTable *optlist; char *targetarg, *fname, *levels; void *free_arg; @@ -74,7 +75,8 @@ static void cmd_log_open(const char *data) LOG_REC *log; int level; - if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST, + if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST | + PARAM_FLAG_UNKNOWN_OPTIONS | PARAM_FLAG_OPTIONS, "log open", &optlist, &fname, &levels)) return; if (*fname == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); @@ -82,14 +84,17 @@ static void cmd_log_open(const char *data) level = level2bits(levels); log = log_create_rec(fname, level != 0 ? level : MSGLEVEL_ALL); + /* -<server tag> */ + server = cmd_options_get_server("join", optlist, NULL); + if (g_hash_table_lookup(optlist, "window")) { /* log by window ref# */ ltoa(window, active_win->refnum); - log_item_add(log, LOG_ITEM_WINDOW_REFNUM, window, NULL); + log_item_add(log, LOG_ITEM_WINDOW_REFNUM, window, server->tag); } else { targetarg = g_hash_table_lookup(optlist, "targets"); if (targetarg != NULL && *targetarg != '\0') - log_add_targets(log, targetarg); + log_add_targets(log, targetarg, server->tag); } if (g_hash_table_lookup(optlist, "autoopen")) @@ -217,7 +222,7 @@ static void cmd_log(const char *data, SERVER_REC *server, void *item) } static LOG_REC *logs_find_item(int type, const char *item, - SERVER_REC *server, LOG_ITEM_REC **ret_item) + const char *servertag, LOG_ITEM_REC **ret_item) { LOG_ITEM_REC *logitem; GSList *tmp; @@ -225,7 +230,7 @@ static LOG_REC *logs_find_item(int type, const char *item, for (tmp = logs; tmp != NULL; tmp = tmp->next) { LOG_REC *log = tmp->data; - logitem = log_item_find(log, type, item, server); + logitem = log_item_find(log, type, item, servertag); if (logitem != NULL) { if (ret_item != NULL) *ret_item = logitem; return log; @@ -338,12 +343,13 @@ static void autologs_close_all(void) } } -static void autolog_open(void *server, const char *target) +static void autolog_open(SERVER_REC *server, const char *target) { LOG_REC *log; - char *fname, *dir, *fixed_target; + char *fname, *dir, *fixed_target, *tag; - log = logs_find_item(LOG_ITEM_TARGET, target, server, NULL); + tag = server == NULL ? NULL : server->tag; + log = logs_find_item(LOG_ITEM_TARGET, target, tag, NULL); if (log != NULL && !log->failed) { log_start_logging(log); return; @@ -359,7 +365,7 @@ static void autolog_open(void *server, const char *target) if (log_find(fname) == NULL) { log = log_create_rec(fname, autolog_level); - log_item_add(log, LOG_ITEM_TARGET, target, server); + log_item_add(log, LOG_ITEM_TARGET, target, tag); dir = g_dirname(log->real_fname); mkpath(dir, LOG_DIR_CREATE_MODE); @@ -372,7 +378,8 @@ static void autolog_open(void *server, const char *target) g_free(fname); } -static void autolog_open_check(void *server, const char *target, int level) +static void autolog_open_check(SERVER_REC *server, const char *target, + int level) { char **targets, **tmp; @@ -410,7 +417,7 @@ static void log_single_line(WINDOW_REC *window, void *server, } } -static void log_line(WINDOW_REC *window, void *server, +static void log_line(WINDOW_REC *window, SERVER_REC *server, const char *target, int level, const char *text) { char **lines, **tmp; @@ -513,7 +520,9 @@ static void sig_window_item_destroy(WINDOW_REC *window, WI_ITEM_REC *item) { LOG_REC *log; - log = logs_find_item(LOG_ITEM_TARGET, item->name, item->server, NULL); + log = logs_find_item(LOG_ITEM_TARGET, item->name, + item->server == NULL ? NULL : + item->server->tag, NULL); if (log != NULL && log->temp) log_close(log); } diff --git a/src/fe-common/core/fe-queries.c b/src/fe-common/core/fe-queries.c index 68c67eb8..ce614c89 100644 --- a/src/fe-common/core/fe-queries.c +++ b/src/fe-common/core/fe-queries.c @@ -23,9 +23,10 @@ #include "modules.h" #include "signals.h" #include "commands.h" +#include "levels.h" #include "settings.h" -#include "levels.h" +#include "chat-protocols.h" #include "queries.h" #include "fe-windows.h" @@ -46,8 +47,8 @@ QUERY_REC *privmsg_get_query(SERVER_REC *server, const char *nick, query = query_find(server, nick); if (query == NULL && (querycreate_level & level) != 0 && (!own || settings_get_bool("autocreate_own_query"))) { - query = query_create(server->chat_type, server->tag, - nick, TRUE); + query = CHAT_PROTOCOL(server)-> + query_create(server->tag, nick, TRUE); } return query; @@ -228,7 +229,7 @@ static void cmd_query(const char *data, SERVER_REC *server, WI_ITEM_REC *item) query = query_find(server, nick); if (query == NULL) - query_create(server->chat_type, server->tag, nick, FALSE); + CHAT_PROTOCOL(server)->query_create(server->tag, nick, FALSE); else { /* query already existed - set query active / move it to this window */ diff --git a/src/fe-common/core/fe-server.c b/src/fe-common/core/fe-server.c index 2184bc58..d96dcfe1 100644 --- a/src/fe-common/core/fe-server.c +++ b/src/fe-common/core/fe-server.c @@ -1,7 +1,7 @@ /* fe-server.c : irssi - Copyright (C) 1999 Timo Sirainen + Copyright (C) 1999-2001 Timo Sirainen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,6 +26,7 @@ #include "settings.h" #include "chat-protocols.h" +#include "chatnets.h" #include "servers.h" #include "servers-setup.h" #include "servers-reconnect.h" @@ -80,9 +81,29 @@ static void print_reconnects(void) } } -/* SYNTAX: SERVER ADD [-auto | -noauto] [-host <hostname>] - [-cmdspeed <ms>] [-cmdmax <count>] [-port <port>] - <address> [<port> [<password>]] */ +static SERVER_SETUP_REC *create_server_setup(GHashTable *optlist) +{ + CHAT_PROTOCOL_REC *rec; + SERVER_SETUP_REC *server; + char *chatnet; + + rec = chat_protocol_find_net(optlist); + if (rec == NULL) + rec = chat_protocol_get_default(); + else { + chatnet = g_hash_table_lookup(optlist, rec->chatnet); + if (chatnet_find(chatnet) == NULL) { + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, + TXT_UNKNOWN_CHATNET, chatnet); + return NULL; + } + } + + server = rec->create_server_setup(); + server->chat_type = rec->id; + return server; +} + static void cmd_server_add(const char *data) { GHashTable *optlist; @@ -100,16 +121,10 @@ static void cmd_server_add(const char *data) rec = server_setup_find_port(addr, port); if (rec == NULL) { - signal_emit("server add create", 2, &rec, optlist); + rec = create_server_setup(optlist); if (rec == NULL) { - /* no chatnet option specified, use the first. */ - g_hash_table_insert(optlist, chat_protocol_find_id(1)->name, ""); - signal_emit("server add create", 2, &rec, optlist); - if (rec == NULL) { - /* bug? */ - cmd_params_free(free_arg); - return; - } + cmd_params_free(free_arg); + return; } rec->address = g_strdup(addr); rec->port = port; @@ -137,7 +152,8 @@ static void cmd_server_add(const char *data) signal_emit("server add fill", 2, rec, optlist); server_setup_add(rec); - printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_SETUPSERVER_ADDED, addr, port); + printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, + TXT_SETUPSERVER_ADDED, addr, port); cmd_params_free(free_arg); } diff --git a/src/fe-common/core/module-formats.c b/src/fe-common/core/module-formats.c index 6c1dd5bc..9694b541 100644 --- a/src/fe-common/core/module-formats.c +++ b/src/fe-common/core/module-formats.c @@ -207,6 +207,7 @@ FORMAT_REC fecommon_core_formats[] = { /* ---- */ { NULL, "Misc", 0 }, + { "unknown_chatnet", "Unknown chat network: $0", 1, { 0 } }, { "not_toggle", "Value must be either ON, OFF or TOGGLE", 0 }, { "perl_error", "Perl error: $0", 1, { 0 } }, { "bind_key", "$[10]0 $1 $2", 3, { 0, 0, 0 } }, diff --git a/src/fe-common/core/module-formats.h b/src/fe-common/core/module-formats.h index ae2a80e1..3126ba54 100644 --- a/src/fe-common/core/module-formats.h +++ b/src/fe-common/core/module-formats.h @@ -173,6 +173,7 @@ enum { TXT_FILL_13, + TXT_UNKNOWN_CHATNET, TXT_NOT_TOGGLE, TXT_PERL_ERROR, TXT_BIND_KEY, diff --git a/src/fe-common/core/window-save.c b/src/fe-common/core/window-save.c index 62423719..3626cc83 100644 --- a/src/fe-common/core/window-save.c +++ b/src/fe-common/core/window-save.c @@ -53,8 +53,7 @@ static void sig_window_restore_item(WINDOW_REC *window, const char *type, rec->sticky = TRUE; } else if (g_strcasecmp(type, "QUERY") == 0 && chat_type != NULL) { /* create query immediately */ - query_create(chat_protocol_lookup(chat_type), - tag, name, TRUE); + chat_protocol_find(chat_type)->query_create(tag, name, TRUE); } } |