1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

Better !channel support - window items now have "visual_name" and channels

and queries also have "name". Normally they're identical but with !channels
the visible_name contains the short !channel name, while name contains
full !ABCDEchannel name.

The visible_name should be used whenever displaying the channel name, or as
printtext()'s target. So, this breaks a few scripts in !channels, they need
to be modified to use $channel->{visible_name} instead.

Also /LAYOUT SAVE should finally work properly with !channels.


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2797 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2002-05-16 00:34:37 +00:00 committed by cras
parent ee80e7601a
commit d346fbe1a9
44 changed files with 325 additions and 247 deletions

View File

@ -673,14 +673,6 @@ Server::channels_join(channels, automatic)
was requested by user. If channel join is "automatic", irssi doesn't was requested by user. If channel join is "automatic", irssi doesn't
jump to the window where the channel was joined. jump to the window where the channel was joined.
Channel
Server::channel_create(name, automatic)
Create new channel.
Channel
channel_create(chat_type, name, automatic)
Create new channel with specified chat type.
FIXME: should this be removed? is this useful for anything?
Channel::destroy() Channel::destroy()
Destroy channel. Destroy channel.
@ -951,10 +943,6 @@ Ban->{}
setby - Nick of who set the ban setby - Nick of who set the ban
time - Timestamp when ban was set time - Timestamp when ban was set
Channel
Server::channel_create(name, automatic)
Create new channel.
Channel::bans() Channel::bans()
Return a list of bans in channel. Return a list of bans in channel.

View File

@ -10,8 +10,16 @@ servers = (
{ address = "irc.openprojects.net"; chatnet = "OPN"; port = "6667"; }, { address = "irc.openprojects.net"; chatnet = "OPN"; port = "6667"; },
{ address = "irc.gnome.org"; chatnet = "GIMPNet"; port = "6667"; }, { address = "irc.gnome.org"; chatnet = "GIMPNet"; port = "6667"; },
{ address = "irc.ptlink.net"; chatnet = "PTlink"; port = "6667"; }, { address = "irc.ptlink.net"; chatnet = "PTlink"; port = "6667"; },
{ address = "irc.sorcery.net"; chatnet = "SorceryNet"; port = "6667"; }, {
{ address = "irc.hashmark.net"; chatnet = "Hashmark"; port = "6667"; }, address = "irc.sorcery.net";
chatnet = "SorceryNet";
port = "6667";
},
{
address = "irc.hashmark.net";
chatnet = "Hashmark";
port = "6667";
},
{ address = "irc.ptnet.org"; chatnet = "PTnet"; port = "6667"; }, { address = "irc.ptnet.org"; chatnet = "PTnet"; port = "6667"; },
{ address = "silc.pspt.fi"; chatnet = "SILC"; port = "706"; } { address = "silc.pspt.fi"; chatnet = "SILC"; port = "706"; }
); );
@ -25,7 +33,7 @@ chatnets = {
max_whois = "4"; max_whois = "4";
max_query_chans = "5"; max_query_chans = "5";
}; };
EFNet = { EFNet = {
type = "IRC"; type = "IRC";
max_kicks = "4"; max_kicks = "4";
max_modes = "4"; max_modes = "4";
@ -39,7 +47,7 @@ chatnets = {
max_msgs = "3"; max_msgs = "3";
max_whois = "30"; max_whois = "30";
}; };
DALnet = { DALnet = {
type = "IRC"; type = "IRC";
max_kicks = "4"; max_kicks = "4";
max_modes = "6"; max_modes = "6";
@ -160,9 +168,9 @@ statusbar = {
# treated specially .. window is printed with non-empty windows, # treated specially .. window is printed with non-empty windows,
# window_empty is printed with empty windows # window_empty is printed with empty windows
window = "{sb $winref:$T{sbmode $M}}"; window = "{sb $winref:$itemname{sbmode $M}}";
window_empty = "{sb $winref{sbservertag $tag}}"; window_empty = "{sb $winref{sbservertag $tag}}";
prompt = "{prompt $[.15]T}"; prompt = "{prompt $[.15]itemname}";
prompt_empty = "{prompt $winname}"; prompt_empty = "{prompt $winname}";
topic = " $topic"; topic = " $topic";
topic_empty = " Irssi v$J - http://irssi.org/help/"; topic_empty = " Irssi v$J - http://irssi.org/help/";
@ -251,3 +259,10 @@ statusbar = {
}; };
}; };
}; };
settings = {
core = {
real_name = "Timo Sirainen";
user_name = "cras";
nick = "cras";
};
};

View File

@ -2,6 +2,7 @@
#include "window-item-rec.h" #include "window-item-rec.h"
char *name;
char *topic; char *topic;
char *topic_by; char *topic_by;
time_t topic_time; time_t topic_time;

View File

@ -35,24 +35,37 @@ static char *get_join_data(CHANNEL_REC *channel)
return g_strdup(channel->name); return g_strdup(channel->name);
} }
void channel_init(CHANNEL_REC *channel, int automatic) static const char *channel_get_target(WI_ITEM_REC *item)
{
return ((CHANNEL_REC *) item)->name;
}
void channel_init(CHANNEL_REC *channel, SERVER_REC *server, const char *name,
const char *visible_name, int automatic)
{ {
g_return_if_fail(channel != NULL); g_return_if_fail(channel != NULL);
g_return_if_fail(channel->name != NULL); g_return_if_fail(name != NULL);
g_return_if_fail(server != NULL);
channels = g_slist_append(channels, channel); if (visible_name == NULL)
if (channel->server != NULL) { visible_name = name;
channel->server->channels =
g_slist_append(channel->server->channels, channel);
}
MODULE_DATA_INIT(channel); MODULE_DATA_INIT(channel);
channel->type = module_get_uniq_id_str("WINDOW ITEM TYPE", "CHANNEL"); channel->type = module_get_uniq_id_str("WINDOW ITEM TYPE", "CHANNEL");
channel->destroy = (void (*) (WI_ITEM_REC *)) channel_destroy; channel->destroy = (void (*) (WI_ITEM_REC *)) channel_destroy;
channel->mode = g_strdup(""); channel->get_target = channel_get_target;
channel->createtime = time(NULL);
channel->get_join_data = get_join_data; channel->get_join_data = get_join_data;
channel->chat_type = server->chat_type;
channel->server = server;
channel->name = g_strdup(name);
channel->visible_name = g_strdup(visible_name);
channel->mode = g_strdup("");
channel->createtime = time(NULL);
channels = g_slist_append(channels, channel);
server->channels = g_slist_append(server->channels, channel);
signal_emit("channel created", 2, channel, GINT_TO_POINTER(automatic)); signal_emit("channel created", 2, channel, GINT_TO_POINTER(automatic));
} }

View File

@ -19,7 +19,8 @@ struct _CHANNEL_REC {
extern GSList *channels; extern GSList *channels;
/* Create new channel record */ /* Create new channel record */
void channel_init(CHANNEL_REC *channel, int automatic); void channel_init(CHANNEL_REC *channel, SERVER_REC *server, const char *name,
const char *visible_name, int automatic);
void channel_destroy(CHANNEL_REC *channel); void channel_destroy(CHANNEL_REC *channel);
/* find channel by name, if `server' is NULL, search from all servers */ /* find channel by name, if `server' is NULL, search from all servers */

View File

@ -344,9 +344,8 @@ static void cmd_msg(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
target_type = IS_CHANNEL(item) ? target_type = IS_CHANNEL(item) ?
SEND_TARGET_CHANNEL : SEND_TARGET_NICK; SEND_TARGET_CHANNEL : SEND_TARGET_NICK;
target = item->name; target = (char *) window_item_get_target(item);
} } else if (g_hash_table_lookup(optlist, "channel") != NULL)
else if (g_hash_table_lookup(optlist, "channel") != NULL)
target_type = SEND_TARGET_CHANNEL; target_type = SEND_TARGET_CHANNEL;
else if (g_hash_table_lookup(optlist, "nick") != NULL) else if (g_hash_table_lookup(optlist, "nick") != NULL)
target_type = SEND_TARGET_NICK; target_type = SEND_TARGET_NICK;

View File

@ -18,7 +18,8 @@ struct _CHAT_PROTOCOL_REC {
void (*destroy_server_connect) (SERVER_CONNECT_REC *); void (*destroy_server_connect) (SERVER_CONNECT_REC *);
SERVER_REC *(*server_connect) (SERVER_CONNECT_REC *); SERVER_REC *(*server_connect) (SERVER_CONNECT_REC *);
CHANNEL_REC *(*channel_create) (SERVER_REC *, const char *, int); CHANNEL_REC *(*channel_create) (SERVER_REC *, const char *,
const char *, int);
QUERY_REC *(*query_create) (const char *, const char *, int); QUERY_REC *(*query_create) (const char *, const char *, int);
}; };

View File

@ -653,11 +653,12 @@ typedef struct {
GHashTable *options; GHashTable *options;
} CMD_TEMP_REC; } CMD_TEMP_REC;
static char *get_optional_channel(WI_ITEM_REC *active_item, char **data, static const char *
int require_name) get_optional_channel(WI_ITEM_REC *active_item, char **data, int require_name)
{ {
CHANNEL_REC *chanrec; CHANNEL_REC *chanrec;
char *tmp, *origtmp, *channel, *ret; const char *ret;
char *tmp, *origtmp, *channel;
if (active_item == NULL) { if (active_item == NULL) {
/* no active channel in window, channel required */ /* no active channel in window, channel required */
@ -670,10 +671,10 @@ static char *get_optional_channel(WI_ITEM_REC *active_item, char **data,
if (strcmp(channel, "*") == 0 && !require_name) { if (strcmp(channel, "*") == 0 && !require_name) {
/* "*" means active channel */ /* "*" means active channel */
cmd_get_param(data); cmd_get_param(data);
ret = active_item->name; ret = window_item_get_target(active_item);
} else if (!server_ischannel(active_item->server, channel)) { } else if (!server_ischannel(active_item->server, channel)) {
/* we don't have channel parameter - use active channel */ /* we don't have channel parameter - use active channel */
ret = active_item->name; ret = window_item_get_target(active_item);
} else { } else {
/* Find the channel first and use it's name if found. /* Find the channel first and use it's name if found.
This allows automatic !channel -> !XXXXXchannel replaces. */ This allows automatic !channel -> !XXXXXchannel replaces. */
@ -730,7 +731,7 @@ int cmd_get_params(const char *data, gpointer *free_me, int count, ...)
/* optional channel as first parameter */ /* optional channel as first parameter */
require_name = (count & PARAM_FLAG_OPTCHAN_NAME) == require_name = (count & PARAM_FLAG_OPTCHAN_NAME) ==
PARAM_FLAG_OPTCHAN_NAME; PARAM_FLAG_OPTCHAN_NAME;
arg = get_optional_channel(item, &datad, require_name); arg = (char *) get_optional_channel(item, &datad, require_name);
str = (char **) va_arg(args, char **); str = (char **) va_arg(args, char **);
if (str != NULL) *str = arg; if (str != NULL) *str = arg;

View File

@ -358,7 +358,8 @@ static char *expando_serverversion(SERVER_REC *server, void *item, int *free_ret
/* target of current input (channel or QUERY nickname) */ /* target of current input (channel or QUERY nickname) */
static char *expando_target(SERVER_REC *server, void *item, int *free_ret) static char *expando_target(SERVER_REC *server, void *item, int *free_ret)
{ {
return item == NULL ? "" : ((WI_ITEM_REC *) item)->name; return item == NULL ? "" :
(char *) window_item_get_target((WI_ITEM_REC *) item);
} }
/* client release date (in YYYYMMDD format) */ /* client release date (in YYYYMMDD format) */
@ -461,6 +462,12 @@ static char *expando_chatnet(SERVER_REC *server, void *item, int *free_ret)
return server == NULL ? "" : server->connrec->chatnet; return server == NULL ? "" : server->connrec->chatnet;
} }
/* visible_name of current window item */
static char *expando_itemname(SERVER_REC *server, void *item, int *free_ret)
{
return item == NULL ? "" : ((WI_ITEM_REC *) item)->visible_name;
}
static void sig_message_public(SERVER_REC *server, const char *msg, static void sig_message_public(SERVER_REC *server, const char *msg,
const char *nick, const char *address, const char *nick, const char *address,
const char *target) const char *target)
@ -634,6 +641,9 @@ void expandos_init(void)
expando_create("chatnet", expando_chatnet, expando_create("chatnet", expando_chatnet,
"window changed", EXPANDO_ARG_NONE, "window changed", EXPANDO_ARG_NONE,
"window server changed", EXPANDO_ARG_WINDOW, NULL); "window server changed", EXPANDO_ARG_WINDOW, NULL);
expando_create("itemname", expando_itemname,
"window changed", EXPANDO_ARG_NONE,
"window item changed", EXPANDO_ARG_WINDOW, NULL);
read_settings(); read_settings();

View File

@ -27,6 +27,11 @@
GSList *queries; GSList *queries;
static const char *query_get_target(WI_ITEM_REC *item)
{
return ((QUERY_REC *) item)->name;
}
void query_init(QUERY_REC *query, int automatic) void query_init(QUERY_REC *query, int automatic)
{ {
g_return_if_fail(query != NULL); g_return_if_fail(query != NULL);
@ -37,8 +42,10 @@ void query_init(QUERY_REC *query, int automatic)
MODULE_DATA_INIT(query); MODULE_DATA_INIT(query);
query->type = module_get_uniq_id_str("WINDOW ITEM TYPE", "QUERY"); query->type = module_get_uniq_id_str("WINDOW ITEM TYPE", "QUERY");
query->destroy = (void (*) (WI_ITEM_REC *)) query_destroy; query->destroy = (void (*) (WI_ITEM_REC *)) query_destroy;
query->get_target = query_get_target;
query->createtime = time(NULL); query->createtime = time(NULL);
query->last_unread_msg = time(NULL); query->last_unread_msg = time(NULL);
query->visible_name = g_strdup(query->name);
if (query->server_tag != NULL) { if (query->server_tag != NULL) {
query->server = server_find_tag(query->server_tag); query->server = server_find_tag(query->server_tag);
@ -69,6 +76,7 @@ void query_destroy(QUERY_REC *query)
g_free_not_null(query->hilight_color); g_free_not_null(query->hilight_color);
g_free_not_null(query->server_tag); g_free_not_null(query->server_tag);
g_free_not_null(query->address); g_free_not_null(query->address);
g_free(query->visible_name);
g_free(query->name); g_free(query->name);
query->type = 0; query->type = 0;
@ -124,6 +132,10 @@ void query_change_nick(QUERY_REC *query, const char *nick)
oldnick = query->name; oldnick = query->name;
query->name = g_strdup(nick); query->name = g_strdup(nick);
g_free(query->visible_name);
query->visible_name = g_strdup(nick);
signal_emit("query nick changed", 2, query, oldnick); signal_emit("query nick changed", 2, query, oldnick);
signal_emit("window item name changed", 1, query); signal_emit("window item name changed", 1, query);
g_free(oldnick); g_free(oldnick);

View File

@ -2,6 +2,7 @@
#include "window-item-rec.h" #include "window-item-rec.h"
char *name;
char *address; char *address;
char *server_tag; char *server_tag;
time_t last_unread_msg; time_t last_unread_msg;

View File

@ -146,6 +146,7 @@ static void session_save_channel(CHANNEL_REC *channel, CONFIG_REC *config,
node = config_node_section(node, NULL, NODE_TYPE_BLOCK); node = config_node_section(node, NULL, NODE_TYPE_BLOCK);
config_node_set_str(config, node, "name", channel->name); config_node_set_str(config, node, "name", channel->name);
config_node_set_str(config, node, "visible_name", channel->visible_name);
config_node_set_str(config, node, "topic", channel->topic); config_node_set_str(config, node, "topic", channel->topic);
config_node_set_str(config, node, "topic_by", channel->topic_by); config_node_set_str(config, node, "topic_by", channel->topic_by);
config_node_set_int(config, node, "topic_time", channel->topic_time); config_node_set_int(config, node, "topic_time", channel->topic_time);
@ -215,13 +216,14 @@ static void session_restore_channel_nicks(CHANNEL_REC *channel,
static void session_restore_channel(SERVER_REC *server, CONFIG_NODE *node) static void session_restore_channel(SERVER_REC *server, CONFIG_NODE *node)
{ {
CHANNEL_REC *channel; CHANNEL_REC *channel;
const char *name; const char *name, *visible_name;
name = config_node_get_str(node, "name", NULL); name = config_node_get_str(node, "name", NULL);
if (name == NULL) if (name == NULL)
return; return;
channel = CHAT_PROTOCOL(server)->channel_create(server, name, TRUE); visible_name = config_node_get_str(node, "visible_name", NULL);
channel = CHAT_PROTOCOL(server)->channel_create(server, name, visible_name, TRUE);
channel->topic = g_strdup(config_node_get_str(node, "topic", NULL)); channel->topic = g_strdup(config_node_get_str(node, "topic", NULL));
channel->topic_by = g_strdup(config_node_get_str(node, "topic_by", NULL)); channel->topic_by = g_strdup(config_node_get_str(node, "topic_by", NULL));
channel->topic_time = config_node_get_int(node, "topic_time", 0); channel->topic_time = config_node_get_int(node, "topic_time", 0);

View File

@ -6,7 +6,7 @@ GHashTable *module_data;
void *window; void *window;
STRUCT_SERVER_REC *server; STRUCT_SERVER_REC *server;
char *name; char *visible_name;
time_t createtime; time_t createtime;
int data_level; int data_level;
@ -14,4 +14,8 @@ char *hilight_color;
void (*destroy)(WI_ITEM_REC *item); void (*destroy)(WI_ITEM_REC *item);
const char *(*get_target)(WI_ITEM_REC *item);
#define window_item_get_target(item) \
((item)->get_target(item))
#undef STRUCT_SERVER_REC #undef STRUCT_SERVER_REC

View File

@ -501,7 +501,9 @@ GList *completion_get_channels(SERVER_REC *server, const char *word)
for (; tmp != NULL; tmp = tmp->next) { for (; tmp != NULL; tmp = tmp->next) {
CHANNEL_REC *rec = tmp->data; CHANNEL_REC *rec = tmp->data;
if (g_strncasecmp(rec->name, word, len) == 0) if (g_strncasecmp(rec->visible_name, word, len) == 0)
list = g_list_append(list, g_strdup(rec->visible_name));
else if (g_strncasecmp(rec->name, word, len) == 0)
list = g_list_append(list, g_strdup(rec->name)); list = g_list_append(list, g_strdup(rec->name));
} }
@ -861,7 +863,7 @@ static void event_text(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
str = g_strdup_printf(IS_CHANNEL(item) ? "-channel %s %s" : str = g_strdup_printf(IS_CHANNEL(item) ? "-channel %s %s" :
IS_QUERY(item) ? "-nick %s %s" : "%s %s", IS_QUERY(item) ? "-nick %s %s" : "%s %s",
item->name, line); window_item_get_target(item), line);
signal_emit("command msg", 3, str, server, item); signal_emit("command msg", 3, str, server, item);

View File

@ -70,7 +70,7 @@ static void signal_channel_destroyed(CHANNEL_REC *channel)
!channel->server->disconnected) { !channel->server->disconnected) {
/* kicked out from channel */ /* kicked out from channel */
window_bind_add(window, channel->server->tag, window_bind_add(window, channel->server->tag,
channel->name); channel->visible_name);
} else if (!channel->joined || channel->left) } else if (!channel->joined || channel->left)
window_auto_destroy(window); window_auto_destroy(window);
} }
@ -86,7 +86,7 @@ static void sig_disconnected(SERVER_REC *server)
CHANNEL_REC *channel = tmp->data; CHANNEL_REC *channel = tmp->data;
window = window_item_window((WI_ITEM_REC *) channel); window = window_item_window((WI_ITEM_REC *) channel);
window_bind_add(window, server->tag, channel->name); window_bind_add(window, server->tag, channel->visible_name);
} }
} }
@ -96,8 +96,9 @@ static void signal_window_item_changed(WINDOW_REC *window, WI_ITEM_REC *item)
if (item == NULL) return; if (item == NULL) return;
if (g_slist_length(window->items) > 1 && IS_CHANNEL(item)) { if (g_slist_length(window->items) > 1 && IS_CHANNEL(item)) {
printformat(item->server, item->name, MSGLEVEL_CLIENTNOTICE, printformat(item->server, item->visible_name,
TXT_TALKING_IN, item->name); MSGLEVEL_CLIENTNOTICE,
TXT_TALKING_IN, item->visible_name);
signal_stop(); signal_stop();
} }
} }
@ -172,7 +173,8 @@ static void cmd_channel_list_joined(void)
/* print active channel */ /* print active channel */
channel = CHANNEL(active_win->active); channel = CHANNEL(active_win->active);
if (channel != NULL) if (channel != NULL)
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_CURRENT_CHANNEL, channel->name); printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
TXT_CURRENT_CHANNEL, channel->visible_name);
/* print list of all channels, their modes, server tags and nicks */ /* print list of all channels, their modes, server tags and nicks */
printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_CHANLIST_HEADER); printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_CHANLIST_HEADER);
@ -189,7 +191,8 @@ static void cmd_channel_list_joined(void)
if (nicks->len > 1) g_string_truncate(nicks, nicks->len-1); if (nicks->len > 1) g_string_truncate(nicks, nicks->len-1);
printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_CHANLIST_LINE, printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_CHANLIST_LINE,
channel->name, channel->mode, channel->server->tag, nicks->str); channel->visible_name, channel->mode,
channel->server->tag, nicks->str);
g_slist_free(nicklist); g_slist_free(nicklist);
g_string_free(nicks, TRUE); g_string_free(nicks, TRUE);
@ -326,13 +329,13 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
int *columns, cols, rows, last_col_rows, col, row, max_width; int *columns, cols, rows, last_col_rows, col, row, max_width;
int item_extra, linebuf_size, formatnum; int item_extra, linebuf_size, formatnum;
window = window_find_closest(channel->server, channel->name, window = window_find_closest(channel->server, channel->visible_name,
MSGLEVEL_CLIENTCRAP); MSGLEVEL_CLIENTCRAP);
max_width = window->width; max_width = window->width;
/* get the length of item extra stuff ("[ ] ") */ /* get the length of item extra stuff ("[ ] ") */
format = format_get_text(MODULE_NAME, NULL, format = format_get_text(MODULE_NAME, NULL,
channel->server, channel->name, channel->server, channel->visible_name,
TXT_NAMES_NICK, " ", ""); TXT_NAMES_NICK, " ", "");
stripped = strip_codes(format); stripped = strip_codes(format);
item_extra = strlen(stripped); item_extra = strlen(stripped);
@ -344,7 +347,7 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
max_width = settings_get_int("names_max_width"); max_width = settings_get_int("names_max_width");
/* remove width of the timestamp from max_width */ /* remove width of the timestamp from max_width */
format_create_dest(&dest, channel->server, channel->name, format_create_dest(&dest, channel->server, channel->visible_name,
MSGLEVEL_CLIENTCRAP, NULL); MSGLEVEL_CLIENTCRAP, NULL);
format = format_get_line_start(current_theme, &dest, time(NULL)); format = format_get_line_start(current_theme, &dest, time(NULL));
if (format != NULL) { if (format != NULL) {
@ -356,8 +359,9 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
/* remove width of the prefix from max_width */ /* remove width of the prefix from max_width */
prefix_format = format_get_text(MODULE_NAME, NULL, prefix_format = format_get_text(MODULE_NAME, NULL,
channel->server, channel->name, channel->server, channel->visible_name,
TXT_NAMES_PREFIX, channel->name); TXT_NAMES_PREFIX,
channel->visible_name);
if (prefix_format != NULL) { if (prefix_format != NULL) {
stripped = strip_codes(prefix_format); stripped = strip_codes(prefix_format);
max_width -= strlen(stripped); max_width -= strlen(stripped);
@ -410,13 +414,14 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
rec->voice ? TXT_NAMES_NICK_VOICE : rec->voice ? TXT_NAMES_NICK_VOICE :
TXT_NAMES_NICK; TXT_NAMES_NICK;
format = format_get_text(MODULE_NAME, NULL, format = format_get_text(MODULE_NAME, NULL,
channel->server, channel->name, channel->server,
channel->visible_name,
formatnum, nickmode, linebuf); formatnum, nickmode, linebuf);
g_string_append(str, format); g_string_append(str, format);
g_free(format); g_free(format);
if (++col == cols) { if (++col == cols) {
printtext(channel->server, channel->name, printtext(channel->server, channel->visible_name,
MSGLEVEL_CLIENTCRAP, "%s", str->str); MSGLEVEL_CLIENTCRAP, "%s", str->str);
g_string_truncate(str, 0); g_string_truncate(str, 0);
if (prefix_format != NULL) if (prefix_format != NULL)
@ -429,7 +434,7 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
} }
if (str->len > strlen(prefix_format)) { if (str->len > strlen(prefix_format)) {
printtext(channel->server, channel->name, printtext(channel->server, channel->visible_name,
MSGLEVEL_CLIENTCRAP, "%s", str->str); MSGLEVEL_CLIENTCRAP, "%s", str->str);
} }
@ -480,15 +485,17 @@ void fe_channels_nicklist(CHANNEL_REC *channel, int flags)
/* display the nicks */ /* display the nicks */
if ((flags & CHANNEL_NICKLIST_FLAG_COUNT) == 0) { if ((flags & CHANNEL_NICKLIST_FLAG_COUNT) == 0) {
printformat(channel->server, channel->name, printformat(channel->server, channel->visible_name,
MSGLEVEL_CLIENTCRAP, TXT_NAMES, channel->name, nicks, ops, halfops, voices, normal); MSGLEVEL_CLIENTCRAP, TXT_NAMES,
channel->visible_name,
nicks, ops, halfops, voices, normal);
display_sorted_nicks(channel, sorted); display_sorted_nicks(channel, sorted);
} }
g_slist_free(sorted); g_slist_free(sorted);
printformat(channel->server, channel->name, printformat(channel->server, channel->visible_name,
MSGLEVEL_CLIENTNOTICE, TXT_ENDOFNAMES, MSGLEVEL_CLIENTNOTICE, TXT_ENDOFNAMES,
channel->name, nicks, ops, halfops, voices, normal); channel->visible_name, nicks, ops, halfops, voices, normal);
} }
/* SYNTAX: NAMES [-count | -ops -halfops -voices -normal] [<channels> | **] */ /* SYNTAX: NAMES [-count | -ops -halfops -voices -normal] [<channels> | **] */
@ -513,7 +520,7 @@ static void cmd_names(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
if (!IS_CHANNEL(item)) if (!IS_CHANNEL(item))
cmd_param_error(CMDERR_NOT_JOINED); cmd_param_error(CMDERR_NOT_JOINED);
channel = item->name; channel = CHANNEL(item)->name;
} }
flags = 0; flags = 0;
@ -575,7 +582,7 @@ static void cmd_cycle(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
joindata = chanrec->get_join_data(chanrec); joindata = chanrec->get_join_data(chanrec);
window_bind_add(window_item_window(chanrec), window_bind_add(window_item_window(chanrec),
chanrec->server->tag, chanrec->name); chanrec->server->tag, chanrec->visible_name);
/* FIXME: kludgy kludgy... */ /* FIXME: kludgy kludgy... */
signal_emit("command part", 3, data, server, item); signal_emit("command part", 3, data, server, item);

View File

@ -54,7 +54,7 @@ static void exec_wi_destroy(EXEC_WI_REC *rec)
window_item_destroy((WI_ITEM_REC *) rec); window_item_destroy((WI_ITEM_REC *) rec);
MODULE_DATA_DEINIT(rec); MODULE_DATA_DEINIT(rec);
g_free(rec->name); g_free(rec->visible_name);
g_free(rec); g_free(rec);
} }
@ -68,7 +68,7 @@ static EXEC_WI_REC *exec_wi_create(WINDOW_REC *window, PROCESS_REC *rec)
item = g_new0(EXEC_WI_REC, 1); item = g_new0(EXEC_WI_REC, 1);
item->type = module_get_uniq_id_str("WINDOW ITEM TYPE", "EXEC"); item->type = module_get_uniq_id_str("WINDOW ITEM TYPE", "EXEC");
item->destroy = (void (*) (WI_ITEM_REC *)) exec_wi_destroy; item->destroy = (void (*) (WI_ITEM_REC *)) exec_wi_destroy;
item->name = rec->name != NULL ? g_strdup(rec->name) : item->visible_name = rec->name != NULL ? g_strdup(rec->name) :
g_strdup_printf("%%%d", rec->id); g_strdup_printf("%%%d", rec->id);
item->createtime = time(NULL); item->createtime = time(NULL);
@ -411,7 +411,7 @@ static void handle_exec(const char *args, GHashTable *optlist,
/* redirect output to active channel/query */ /* redirect output to active channel/query */
if (item == NULL) if (item == NULL)
cmd_return_error(CMDERR_NOT_JOINED); cmd_return_error(CMDERR_NOT_JOINED);
target = item->name; target = (char *) window_item_get_target(item);
target_channel = IS_CHANNEL(item); target_channel = IS_CHANNEL(item);
target_nick = IS_QUERY(item); target_nick = IS_QUERY(item);
} else if (g_hash_table_lookup(optlist, "msg") != NULL) { } else if (g_hash_table_lookup(optlist, "msg") != NULL) {
@ -589,7 +589,7 @@ static void sig_exec_input(PROCESS_REC *rec, const char *text)
3, str, server, item); 3, str, server, item);
g_free(str); g_free(str);
} else if (rec->target_item != NULL) { } else if (rec->target_item != NULL) {
printtext(NULL, rec->target_item->name, printtext(NULL, rec->target_item->visible_name,
rec->level, "%s", text); rec->level, "%s", text);
} else { } else {
printtext_window(rec->target_win, rec->level, "%s", text); printtext_window(rec->target_win, rec->level, "%s", text);

View File

@ -595,7 +595,7 @@ static void sig_window_item_destroy(WINDOW_REC *window, WI_ITEM_REC *item)
{ {
LOG_REC *log; LOG_REC *log;
log = logs_find_item(LOG_ITEM_TARGET, item->name, log = logs_find_item(LOG_ITEM_TARGET, item->visible_name,
item->server == NULL ? NULL : item->server == NULL ? NULL :
item->server->tag, NULL); item->server->tag, NULL);
if (log != NULL && log->temp) if (log != NULL && log->temp)

View File

@ -347,7 +347,7 @@ static void sig_message_quit(SERVER_REC *server, const char *nick,
if (!nicklist_find(rec, nick)) if (!nicklist_find(rec, nick))
continue; continue;
if (ignore_check(server, nick, address, rec->name, if (ignore_check(server, nick, address, rec->visible_name,
reason, MSGLEVEL_QUITS)) { reason, MSGLEVEL_QUITS)) {
count++; count++;
continue; continue;
@ -355,17 +355,18 @@ static void sig_message_quit(SERVER_REC *server, const char *nick,
if (print_channel == NULL || if (print_channel == NULL ||
active_win->active == (WI_ITEM_REC *) rec) active_win->active == (WI_ITEM_REC *) rec)
print_channel = rec->name; print_channel = rec->visible_name;
if (once) if (once)
g_string_sprintfa(chans, "%s,", rec->name); g_string_sprintfa(chans, "%s,", rec->visible_name);
else { else {
window = window_item_window((WI_ITEM_REC *) rec); window = window_item_window((WI_ITEM_REC *) rec);
if (g_slist_find(windows, window) == NULL) { if (g_slist_find(windows, window) == NULL) {
windows = g_slist_append(windows, window); windows = g_slist_append(windows, window);
printformat(server, rec->name, MSGLEVEL_QUITS, printformat(server, rec->visible_name,
MSGLEVEL_QUITS,
TXT_QUIT, nick, address, reason, TXT_QUIT, nick, address, reason,
rec->name); rec->visible_name);
} }
} }
count++; count++;
@ -441,8 +442,8 @@ static void print_nick_change(SERVER_REC *server, const char *newnick,
continue; continue;
windows = g_slist_append(windows, window); windows = g_slist_append(windows, window);
print_nick_change_channel(server, channel->name, newnick, print_nick_change_channel(server, channel->visible_name,
oldnick, address, ownnick); newnick, oldnick, address, ownnick);
msgprint = TRUE; msgprint = TRUE;
} }

View File

@ -232,12 +232,12 @@ void window_set_immortal(WINDOW_REC *window, int immortal)
} }
/* return active item's name, or if none is active, window's name */ /* return active item's name, or if none is active, window's name */
char *window_get_active_name(WINDOW_REC *window) const char *window_get_active_name(WINDOW_REC *window)
{ {
g_return_val_if_fail(window != NULL, NULL); g_return_val_if_fail(window != NULL, NULL);
if (window->active != NULL) if (window->active != NULL)
return window->active->name; return window->active->visible_name;
return window->name; return window->name;
} }

View File

@ -69,7 +69,7 @@ void window_set_level(WINDOW_REC *window, int level);
void window_set_immortal(WINDOW_REC *window, int immortal); void window_set_immortal(WINDOW_REC *window, int immortal);
/* return active item's name, or if none is active, window's name */ /* return active item's name, or if none is active, window's name */
char *window_get_active_name(WINDOW_REC *window); const char *window_get_active_name(WINDOW_REC *window);
WINDOW_REC *window_find_level(void *server, int level); WINDOW_REC *window_find_level(void *server, int level);
WINDOW_REC *window_find_closest(void *server, const char *name, int level); WINDOW_REC *window_find_closest(void *server, const char *name, int level);

View File

@ -64,7 +64,8 @@ static void window_print_items(WINDOW_REC *win)
type = module_find_id_str("WINDOW ITEM TYPE", item->type); type = module_find_id_str("WINDOW ITEM TYPE", item->type);
printformat_window(win, MSGLEVEL_CLIENTCRAP, printformat_window(win, MSGLEVEL_CLIENTCRAP,
TXT_WINDOW_INFO_ITEM, TXT_WINDOW_INFO_ITEM,
type == NULL ? "??" : type, item->name, type == NULL ? "??" : type,
item->visible_name,
item->server == NULL ? "" : item->server == NULL ? "" :
item->server->tag); item->server->tag);
} }
@ -660,7 +661,7 @@ static void cmd_window_list(void)
levelstr = bits2level(rec->level); levelstr = bits2level(rec->level);
printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_WINDOWLIST_LINE, printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_WINDOWLIST_LINE,
rec->refnum, rec->name == NULL ? "" : rec->name, rec->refnum, rec->name == NULL ? "" : rec->name,
rec->active == NULL ? "" : rec->active->name, rec->active == NULL ? "" : rec->active->visible_name,
rec->active_server == NULL ? "" : ((SERVER_REC *) rec->active_server)->tag, rec->active_server == NULL ? "" : ((SERVER_REC *) rec->active_server)->tag,
levelstr); levelstr);
g_free(levelstr); g_free(levelstr);

View File

@ -23,6 +23,7 @@
#include "modules.h" #include "modules.h"
#include "signals.h" #include "signals.h"
#include "servers.h" #include "servers.h"
#include "channels.h"
#include "settings.h" #include "settings.h"
#include "levels.h" #include "levels.h"
@ -195,15 +196,23 @@ void window_item_next(WINDOW_REC *window)
WI_ITEM_REC *window_item_find_window(WINDOW_REC *window, WI_ITEM_REC *window_item_find_window(WINDOW_REC *window,
void *server, const char *name) void *server, const char *name)
{ {
CHANNEL_REC *channel;
GSList *tmp; GSList *tmp;
for (tmp = window->items; tmp != NULL; tmp = tmp->next) { for (tmp = window->items; tmp != NULL; tmp = tmp->next) {
WI_ITEM_REC *rec = tmp->data; WI_ITEM_REC *rec = tmp->data;
if ((server == NULL || rec->server == server) && if ((server == NULL || rec->server == server) &&
g_strcasecmp(name, rec->name) == 0) return rec; g_strcasecmp(name, rec->visible_name) == 0)
return rec;
} }
/* try with channel name too, it's not necessarily
same as visible_name (!channels) */
channel = channel_find(server, name);
if (channel != NULL && window_item_window(channel) == window)
return (WI_ITEM_REC *) channel;
return NULL; return NULL;
} }
@ -259,7 +268,7 @@ void window_item_create(WI_ITEM_REC *item, int automatic)
/* is item bound to this window? */ /* is item bound to this window? */
if (item->server != NULL) { if (item->server != NULL) {
bind = window_bind_find(rec, item->server->tag, bind = window_bind_find(rec, item->server->tag,
item->name); item->visible_name);
if (bind != NULL) { if (bind != NULL) {
if (!bind->sticky) if (!bind->sticky)
window_bind_destroy(rec, bind); window_bind_destroy(rec, bind);
@ -316,8 +325,9 @@ static void signal_window_item_changed(WINDOW_REC *window, WI_ITEM_REC *item)
if (g_slist_length(window->items) > 1) { if (g_slist_length(window->items) > 1) {
/* default to printing "talking with ...", /* default to printing "talking with ...",
you can override it it you wish */ you can override it it you wish */
printformat(item->server, item->name, MSGLEVEL_CLIENTNOTICE, printformat(item->server, item->visible_name,
TXT_TALKING_WITH, item->name); MSGLEVEL_CLIENTNOTICE,
TXT_TALKING_WITH, item->visible_name);
} }
} }

View File

@ -147,7 +147,7 @@ static void sig_layout_save_item(WINDOW_REC *window, WI_ITEM_REC *item,
iconfig_node_set_str(subnode, "type", type); iconfig_node_set_str(subnode, "type", type);
type = chat_protocol_find_id(item->chat_type)->name; type = chat_protocol_find_id(item->chat_type)->name;
iconfig_node_set_str(subnode, "chat_type", type); iconfig_node_set_str(subnode, "chat_type", type);
iconfig_node_set_str(subnode, "name", item->name); iconfig_node_set_str(subnode, "name", item->visible_name);
if (item->server != NULL) if (item->server != NULL)
iconfig_node_set_str(subnode, "tag", item->server->tag); iconfig_node_set_str(subnode, "tag", item->server->tag);

View File

@ -14,7 +14,6 @@ INCLUDES = \
real_sources = \ real_sources = \
fe-irc-channels.c \ fe-irc-channels.c \
fe-irc-commands.c \ fe-irc-commands.c \
fe-irc-layout.c \
fe-irc-messages.c \ fe-irc-messages.c \
fe-irc-queries.c \ fe-irc-queries.c \
fe-irc-server.c \ fe-irc-server.c \
@ -33,6 +32,7 @@ libfe_common_irc_a_SOURCES = \
irc-modules.c irc-modules.c
noinst_HEADERS = \ noinst_HEADERS = \
fe-irc-server.h \
module.h \ module.h \
module-formats.h module-formats.h

View File

@ -27,6 +27,7 @@
#include "settings.h" #include "settings.h"
#include "themes.h" #include "themes.h"
#include "fe-irc-server.h"
void fe_irc_modules_init(void); void fe_irc_modules_init(void);
void fe_irc_modules_deinit(void); void fe_irc_modules_deinit(void);
@ -49,9 +50,6 @@ void fe_irc_commands_deinit(void);
void fe_ircnet_init(void); void fe_ircnet_init(void);
void fe_ircnet_deinit(void); void fe_ircnet_deinit(void);
void fe_irc_server_init(void);
void fe_irc_server_deinit(void);
void fe_ctcp_init(void); void fe_ctcp_init(void);
void fe_ctcp_deinit(void); void fe_ctcp_deinit(void);
@ -78,7 +76,6 @@ void fe_common_irc_init(void)
fe_irc_channels_init(); fe_irc_channels_init();
fe_irc_queries_init(); fe_irc_queries_init();
fe_irc_layout_init();
fe_irc_messages_init(); fe_irc_messages_init();
fe_irc_commands_init(); fe_irc_commands_init();
fe_ircnet_init(); fe_ircnet_init();
@ -102,7 +99,6 @@ void fe_common_irc_deinit(void)
fe_irc_channels_deinit(); fe_irc_channels_deinit();
fe_irc_queries_deinit(); fe_irc_queries_deinit();
fe_irc_layout_deinit();
fe_irc_messages_deinit(); fe_irc_messages_deinit();
fe_irc_commands_deinit(); fe_irc_commands_deinit();
fe_ircnet_deinit(); fe_ircnet_deinit();

View File

@ -32,6 +32,7 @@
#include "../core/module-formats.h" #include "../core/module-formats.h"
#include "printtext.h" #include "printtext.h"
#include "fe-channels.h" #include "fe-channels.h"
#include "fe-irc-server.h"
static void print_event_received(IRC_SERVER_REC *server, const char *data, static void print_event_received(IRC_SERVER_REC *server, const char *data,
const char *nick, int target_param); const char *nick, int target_param);
@ -132,7 +133,8 @@ static void event_end_of_who(IRC_SERVER_REC *server, const char *data)
static void event_ban_list(IRC_SERVER_REC *server, const char *data) static void event_ban_list(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *channel, *ban, *setby, *tims; const char *channel;
char *params, *ban, *setby, *tims;
long secs; long secs;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
@ -142,6 +144,7 @@ static void event_ban_list(IRC_SERVER_REC *server, const char *data)
secs = *tims == '\0' ? 0 : secs = *tims == '\0' ? 0 :
(long) (time(NULL) - atol(tims)); (long) (time(NULL) - atol(tims));
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP, printformat(server, channel, MSGLEVEL_CRAP,
*setby == '\0' ? IRCTXT_BANLIST : IRCTXT_BANLIST_LONG, *setby == '\0' ? IRCTXT_BANLIST : IRCTXT_BANLIST_LONG,
0, channel, ban, setby, secs); 0, channel, ban, setby, secs);
@ -151,7 +154,8 @@ static void event_ban_list(IRC_SERVER_REC *server, const char *data)
static void event_eban_list(IRC_SERVER_REC *server, const char *data) static void event_eban_list(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *channel, *ban, *setby, *tims; const char *channel;
char *params, *ban, *setby, *tims;
long secs; long secs;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
@ -161,6 +165,7 @@ static void event_eban_list(IRC_SERVER_REC *server, const char *data)
secs = *tims == '\0' ? 0 : secs = *tims == '\0' ? 0 :
(long) (time(NULL) - atol(tims)); (long) (time(NULL) - atol(tims));
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP, printformat(server, channel, MSGLEVEL_CRAP,
*setby == '\0' ? IRCTXT_EBANLIST : IRCTXT_EBANLIST_LONG, *setby == '\0' ? IRCTXT_EBANLIST : IRCTXT_EBANLIST_LONG,
channel, ban, setby, secs); channel, ban, setby, secs);
@ -183,11 +188,13 @@ static void event_silence_list(IRC_SERVER_REC *server, const char *data)
static void event_invite_list(IRC_SERVER_REC *server, const char *data) static void event_invite_list(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *channel, *invite; const char *channel;
char *params, *invite;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &channel, &invite); params = event_get_params(data, 3, NULL, &channel, &invite);
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP, printformat(server, channel, MSGLEVEL_CRAP,
IRCTXT_INVITELIST, channel, invite); IRCTXT_INVITELIST, channel, invite);
g_free(params); g_free(params);
@ -210,11 +217,13 @@ static void event_nick_in_use(IRC_SERVER_REC *server, const char *data)
static void event_topic_get(IRC_SERVER_REC *server, const char *data) static void event_topic_get(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *channel, *topic; const char *channel;
char *params, *topic;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &channel, &topic); params = event_get_params(data, 3, NULL, &channel, &topic);
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP, printformat(server, channel, MSGLEVEL_CRAP,
IRCTXT_TOPIC, channel, topic); IRCTXT_TOPIC, channel, topic);
g_free(params); g_free(params);
@ -222,7 +231,8 @@ static void event_topic_get(IRC_SERVER_REC *server, const char *data)
static void event_topic_info(IRC_SERVER_REC *server, const char *data) static void event_topic_info(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *timestr, *channel, *bynick, *byhost, *topictime; const char *channel;
char *params, *timestr, *bynick, *byhost, *topictime;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
@ -235,6 +245,7 @@ static void event_topic_info(IRC_SERVER_REC *server, const char *data)
if (byhost != NULL) if (byhost != NULL)
*byhost++ = '\0'; *byhost++ = '\0';
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP, IRCTXT_TOPIC_INFO, printformat(server, channel, MSGLEVEL_CRAP, IRCTXT_TOPIC_INFO,
bynick, timestr, byhost == NULL ? "" : byhost); bynick, timestr, byhost == NULL ? "" : byhost);
g_free(timestr); g_free(timestr);
@ -243,12 +254,14 @@ static void event_topic_info(IRC_SERVER_REC *server, const char *data)
static void event_channel_mode(IRC_SERVER_REC *server, const char *data) static void event_channel_mode(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *channel, *mode; const char *channel;
char *params, *mode;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
params = event_get_params(data, 3 | PARAM_FLAG_GETREST, params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
NULL, &channel, &mode); NULL, &channel, &mode);
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP, printformat(server, channel, MSGLEVEL_CRAP,
IRCTXT_CHANNEL_MODE, channel, g_strchomp(mode)); IRCTXT_CHANNEL_MODE, channel, g_strchomp(mode));
g_free(params); g_free(params);
@ -256,13 +269,15 @@ static void event_channel_mode(IRC_SERVER_REC *server, const char *data)
static void event_channel_created(IRC_SERVER_REC *server, const char *data) static void event_channel_created(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *channel, *createtime, *timestr; const char *channel;
char *params, *createtime, *timestr;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &channel, &createtime); params = event_get_params(data, 3, NULL, &channel, &createtime);
timestr = my_asctime((time_t) atol(createtime)); timestr = my_asctime((time_t) atol(createtime));
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP, printformat(server, channel, MSGLEVEL_CRAP,
IRCTXT_CHANNEL_CREATED, channel, timestr); IRCTXT_CHANNEL_CREATED, channel, timestr);
g_free(timestr); g_free(timestr);
@ -604,11 +619,13 @@ static void event_end_of_whois(IRC_SERVER_REC *server, const char *data)
static void event_chanserv_url(IRC_SERVER_REC *server, const char *data) static void event_chanserv_url(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *channel, *url; const char *channel;
char *params, *url;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &channel, &url); params = event_get_params(data, 3, NULL, &channel, &url);
channel = get_visible_target(server, channel);
printformat(server, channel, MSGLEVEL_CRAP, printformat(server, channel, MSGLEVEL_CRAP,
IRCTXT_CHANNEL_URL, channel, url); IRCTXT_CHANNEL_URL, channel, url);
g_free(params); g_free(params);

View File

@ -39,8 +39,8 @@
#include "printtext.h" #include "printtext.h"
#include "fe-queries.h" #include "fe-queries.h"
#include "fe-windows.h" #include "fe-windows.h"
#include "fe-irc-server.h"
#include "completion.h" //#include "completion.h"
static void event_privmsg(IRC_SERVER_REC *server, const char *data, static void event_privmsg(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr) const char *nick, const char *addr)
@ -56,11 +56,13 @@ static void event_privmsg(IRC_SERVER_REC *server, const char *data,
if (*target == '@' && ischannel(target[1])) { if (*target == '@' && ischannel(target[1])) {
/* Hybrid 6 feature, send msg to all ops in channel */ /* Hybrid 6 feature, send msg to all ops in channel */
signal_emit("message irc op_public", 5, signal_emit("message irc op_public", 5,
server, msg, nick, addr, target+1); server, msg, nick, addr,
get_visible_target(server, target+1));
} else { } else {
signal_emit(ischannel(*target) ? signal_emit(ischannel(*target) ?
"message public" : "message private", 5, "message public" : "message private", 5,
server, msg, nick, addr, target); server, msg, nick, addr,
get_visible_target(server, target));
} }
g_free(params); g_free(params);
@ -73,7 +75,8 @@ static void ctcp_action(IRC_SERVER_REC *server, const char *data,
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
signal_emit("message irc action", 5, signal_emit("message irc action", 5,
server, data, nick, addr, target); server, data, nick, addr,
get_visible_target(server, target));
} }
static void event_notice(IRC_SERVER_REC *server, const char *data, static void event_notice(IRC_SERVER_REC *server, const char *data,
@ -90,15 +93,16 @@ static void event_notice(IRC_SERVER_REC *server, const char *data,
server->real_address; server->real_address;
} }
signal_emit("message irc notice", 5, signal_emit("message irc notice", 5, server, msg, nick, addr,
server, msg, nick, addr, target); get_visible_target(server, target));
g_free(params); g_free(params);
} }
static void event_join(IRC_SERVER_REC *server, const char *data, static void event_join(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr) const char *nick, const char *addr)
{ {
char *params, *channel, *tmp; const char *channel;
char *params, *tmp;
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
@ -106,6 +110,9 @@ static void event_join(IRC_SERVER_REC *server, const char *data,
tmp = strchr(channel, 7); /* ^G does something weird.. */ tmp = strchr(channel, 7); /* ^G does something weird.. */
if (tmp != NULL) *tmp = '\0'; if (tmp != NULL) *tmp = '\0';
if (g_strcasecmp(server->nick, nick) != 0)
channel = get_visible_target(server, channel);
signal_emit("message join", 4, server, channel, nick, addr); signal_emit("message join", 4, server, channel, nick, addr);
g_free(params); g_free(params);
} }
@ -119,7 +126,8 @@ static void event_part(IRC_SERVER_REC *server, const char *data,
params = event_get_params(data, 2 | PARAM_FLAG_GETREST, params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
&channel, &reason); &channel, &reason);
signal_emit("message part", 5, server, channel, nick, addr, reason); signal_emit("message part", 5, server,
get_visible_target(server, channel), nick, addr, reason);
g_free(params); g_free(params);
} }
@ -141,8 +149,9 @@ static void event_kick(IRC_SERVER_REC *server, const char *data,
params = event_get_params(data, 3 | PARAM_FLAG_GETREST, params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
&channel, &nick, &reason); &channel, &nick, &reason);
signal_emit("message kick", 6, server, channel, nick, signal_emit("message kick", 6,
kicker, addr, reason); server, get_visible_target(server, channel),
nick, kicker, addr, reason);
g_free(params); g_free(params);
} }
@ -205,8 +214,9 @@ static void event_mode(IRC_SERVER_REC *server, const char *data,
params = event_get_params(data, 2 | PARAM_FLAG_GETREST, params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
&channel, &mode); &channel, &mode);
signal_emit("message irc mode", 5, server, channel, nick, addr, signal_emit("message irc mode", 5,
g_strchomp(mode)); server, get_visible_target(server, channel),
nick, addr, g_strchomp(mode));
g_free(params); g_free(params);
} }
@ -230,7 +240,8 @@ static void event_invite(IRC_SERVER_REC *server, const char *data,
g_return_if_fail(data != NULL); g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel); params = event_get_params(data, 2, NULL, &channel);
signal_emit("message invite", 4, server, channel, nick, addr); signal_emit("message invite", 4,
server, get_visible_target(server, channel), nick, addr);
g_free(params); g_free(params);
} }
@ -243,7 +254,8 @@ static void event_topic(IRC_SERVER_REC *server, const char *data,
params = event_get_params(data, 2 | PARAM_FLAG_GETREST, params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
&channel, &topic); &channel, &topic);
signal_emit("message topic", 5, server, channel, topic, nick, addr); signal_emit("message topic", 5, server,
get_visible_target(server, channel), topic, nick, addr);
g_free(params); g_free(params);
} }
@ -291,8 +303,10 @@ static void channel_sync(CHANNEL_REC *channel)
{ {
g_return_if_fail(channel != NULL); g_return_if_fail(channel != NULL);
printformat(channel->server, channel->name, MSGLEVEL_CLIENTNOTICE|MSGLEVEL_NO_ACT, printformat(channel->server, channel->visible_name,
IRCTXT_CHANNEL_SYNCED, channel->name, (long) (time(NULL)-channel->createtime)); MSGLEVEL_CLIENTNOTICE|MSGLEVEL_NO_ACT,
IRCTXT_CHANNEL_SYNCED, channel->visible_name,
(long) (time(NULL)-channel->createtime));
} }
static void event_connected(IRC_SERVER_REC *server) static void event_connected(IRC_SERVER_REC *server)

View File

@ -40,7 +40,7 @@
#include "printtext.h" #include "printtext.h"
#include "keyboard.h" #include "keyboard.h"
static char *skip_target(char *target) static const char *skip_target(const char *target)
{ {
if (*target == '@') { if (*target == '@') {
/* @#channel, @+#channel - Hybrid6 / Bahamut features */ /* @#channel, @+#channel - Hybrid6 / Bahamut features */
@ -63,17 +63,18 @@ static void cmd_me(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item)
if (server == NULL || !server->connected) if (server == NULL || !server->connected)
cmd_return_error(CMDERR_NOT_CONNECTED); cmd_return_error(CMDERR_NOT_CONNECTED);
signal_emit("message irc own_action", 3, server, data, item->name); signal_emit("message irc own_action", 3, server, data,
item->visible_name);
irc_send_cmdv(server, "PRIVMSG %s :\001ACTION %s\001", irc_send_cmdv(server, "PRIVMSG %s :\001ACTION %s\001",
item->name, data); window_item_get_target(item), data);
} }
/* SYNTAX: ACTION [-<server tag>] <target> <message> */ /* SYNTAX: ACTION [-<server tag>] <target> <message> */
static void cmd_action(const char *data, IRC_SERVER_REC *server) static void cmd_action(const char *data, IRC_SERVER_REC *server)
{ {
GHashTable *optlist; GHashTable *optlist;
char *target, *text; const char *target, *text;
void *free_arg; void *free_arg;
CMD_IRC_SERVER(server); CMD_IRC_SERVER(server);
@ -99,7 +100,7 @@ static void cmd_action(const char *data, IRC_SERVER_REC *server)
static void cmd_notice(const char *data, IRC_SERVER_REC *server, static void cmd_notice(const char *data, IRC_SERVER_REC *server,
WI_ITEM_REC *item) WI_ITEM_REC *item)
{ {
char *target, *msg; const char *target, *msg;
void *free_arg; void *free_arg;
CMD_IRC_SERVER(server); CMD_IRC_SERVER(server);
@ -108,7 +109,7 @@ static void cmd_notice(const char *data, IRC_SERVER_REC *server,
&target, &msg)) &target, &msg))
return; return;
if (strcmp(target, "*") == 0) if (strcmp(target, "*") == 0)
target = item == NULL ? "" : item->name; target = item == NULL ? "" : window_item_get_target(item);
if (*target == '\0' || *msg == '\0') if (*target == '\0' || *msg == '\0')
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
@ -121,7 +122,8 @@ static void cmd_notice(const char *data, IRC_SERVER_REC *server,
static void cmd_ctcp(const char *data, IRC_SERVER_REC *server, static void cmd_ctcp(const char *data, IRC_SERVER_REC *server,
WI_ITEM_REC *item) WI_ITEM_REC *item)
{ {
char *target, *ctcpcmd, *ctcpdata; const char *target;
char *ctcpcmd, *ctcpdata;
void *free_arg; void *free_arg;
CMD_IRC_SERVER(server); CMD_IRC_SERVER(server);
@ -130,7 +132,7 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server,
&target, &ctcpcmd, &ctcpdata)) &target, &ctcpcmd, &ctcpdata))
return; return;
if (strcmp(target, "*") == 0) if (strcmp(target, "*") == 0)
target = item == NULL ? "" : item->name; target = item == NULL ? "" : window_item_get_target(item);
if (*target == '\0' || *ctcpcmd == '\0') if (*target == '\0' || *ctcpcmd == '\0')
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
@ -152,7 +154,7 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server,
static void cmd_nctcp(const char *data, IRC_SERVER_REC *server, static void cmd_nctcp(const char *data, IRC_SERVER_REC *server,
WI_ITEM_REC *item) WI_ITEM_REC *item)
{ {
char *target, *text; const char *target, *text;
void *free_arg; void *free_arg;
CMD_IRC_SERVER(server); CMD_IRC_SERVER(server);
@ -161,7 +163,7 @@ static void cmd_nctcp(const char *data, IRC_SERVER_REC *server,
&target, &text)) &target, &text))
return; return;
if (strcmp(target, "*") == 0) if (strcmp(target, "*") == 0)
target = item == NULL ? "" : item->name; target = item == NULL ? "" : window_item_get_target(item);
if (*target == '\0' || *text == '\0') if (*target == '\0' || *text == '\0')
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
@ -174,7 +176,7 @@ static void cmd_wall(const char *data, IRC_SERVER_REC *server,
WI_ITEM_REC *item) WI_ITEM_REC *item)
{ {
IRC_CHANNEL_REC *chanrec; IRC_CHANNEL_REC *chanrec;
char *channame, *msg; const char *channame, *msg;
void *free_arg; void *free_arg;
CMD_IRC_SERVER(server); CMD_IRC_SERVER(server);
@ -187,7 +189,8 @@ static void cmd_wall(const char *data, IRC_SERVER_REC *server,
chanrec = irc_channel_find(server, channame); chanrec = irc_channel_find(server, channame);
if (chanrec == NULL) cmd_param_error(CMDERR_CHAN_NOT_FOUND); if (chanrec == NULL) cmd_param_error(CMDERR_CHAN_NOT_FOUND);
signal_emit("message irc own_wall", 3, server, msg, chanrec->name); signal_emit("message irc own_wall", 3, server, msg,
chanrec->visible_name);
cmd_params_free(free_arg); cmd_params_free(free_arg);
} }
@ -234,8 +237,9 @@ static void bans_show_channel(IRC_CHANNEL_REC *channel, IRC_SERVER_REC *server)
cmd_return_error(CMDERR_CHAN_NOT_SYNCED); cmd_return_error(CMDERR_CHAN_NOT_SYNCED);
if (channel->banlist == NULL) { if (channel->banlist == NULL) {
printformat(server, channel->name, MSGLEVEL_CLIENTNOTICE, printformat(server, channel->visible_name,
IRCTXT_NO_BANS, channel->name); MSGLEVEL_CLIENTNOTICE,
IRCTXT_NO_BANS, channel->visible_name);
return; return;
} }
@ -244,10 +248,11 @@ static void bans_show_channel(IRC_CHANNEL_REC *channel, IRC_SERVER_REC *server)
for (tmp = channel->banlist; tmp != NULL; tmp = tmp->next) { for (tmp = channel->banlist; tmp != NULL; tmp = tmp->next) {
BAN_REC *rec = tmp->data; BAN_REC *rec = tmp->data;
printformat(server, channel->name, MSGLEVEL_CRAP, printformat(server, channel->visible_name, MSGLEVEL_CRAP,
(rec->setby == NULL || *rec->setby == '\0') ? (rec->setby == NULL || *rec->setby == '\0') ?
IRCTXT_BANLIST : IRCTXT_BANLIST_LONG, IRCTXT_BANLIST : IRCTXT_BANLIST_LONG,
counter, channel->name, rec->ban, rec->setby, counter, channel->visible_name,
rec->ban, rec->setby,
(int) (time(NULL)-rec->time)); (int) (time(NULL)-rec->time));
counter++; counter++;
} }
@ -306,7 +311,8 @@ static void cmd_ver(gchar *data, IRC_SERVER_REC *server, WI_ITEM_REC *item)
if (*data == '\0' && !IS_IRC_ITEM(item)) if (*data == '\0' && !IS_IRC_ITEM(item))
cmd_return_error(CMDERR_NOT_JOINED); cmd_return_error(CMDERR_NOT_JOINED);
str = g_strdup_printf("%s VERSION", *data == '\0' ? item->name : data); str = g_strdup_printf("%s VERSION", *data == '\0' ?
window_item_get_target(item) : data);
signal_emit("command ctcp", 3, str, server, item); signal_emit("command ctcp", 3, str, server, item);
g_free(str); g_free(str);
} }
@ -321,9 +327,9 @@ static void cmd_topic(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
channel = *data != '\0' ? channel_find(server, data) : CHANNEL(item); channel = *data != '\0' ? channel_find(server, data) : CHANNEL(item);
if (channel == NULL) return; if (channel == NULL) return;
printformat(server, channel->name, MSGLEVEL_CRAP, printformat(server, channel->visible_name, MSGLEVEL_CRAP,
channel->topic == NULL ? IRCTXT_NO_TOPIC : IRCTXT_TOPIC, channel->topic == NULL ? IRCTXT_NO_TOPIC : IRCTXT_TOPIC,
channel->name, channel->topic); channel->visible_name, channel->topic);
if (channel->topic_time > 0) { if (channel->topic_time > 0) {
byhost = strchr(channel->topic_by, '!'); byhost = strchr(channel->topic_by, '!');
@ -337,7 +343,7 @@ static void cmd_topic(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
} }
timestr = my_asctime(channel->topic_time); timestr = my_asctime(channel->topic_time);
printformat(server, channel->name, MSGLEVEL_CRAP, printformat(server, channel->visible_name, MSGLEVEL_CRAP,
IRCTXT_TOPIC_INFO, bynick, timestr, byhost); IRCTXT_TOPIC_INFO, bynick, timestr, byhost);
g_free(timestr); g_free(timestr);
g_free(bynick); g_free(bynick);
@ -356,7 +362,8 @@ static void cmd_ts(const char *data)
CHANNEL_REC *rec = tmp->data; CHANNEL_REC *rec = tmp->data;
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_TOPIC, printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_TOPIC,
rec->name, rec->topic == NULL ? "" : rec->topic); rec->visible_name,
rec->topic == NULL ? "" : rec->topic);
} }
} }
@ -423,7 +430,7 @@ static void cmd_sethost(const char *data, IRC_SERVER_REC *server)
CHANNEL_REC *channel = tmp->data; CHANNEL_REC *channel = tmp->data;
window_bind_add(window_item_window(channel), window_bind_add(window_item_window(channel),
server->tag, channel->name); server->tag, channel->visible_name);
} }
irc_send_cmdv(server, "SETHOST %s", data); irc_send_cmdv(server, "SETHOST %s", data);

View File

@ -1,63 +0,0 @@
/*
fe-irc-layout.c : irssi
Copyright (C) 2000-2002 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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "module.h"
#include "signals.h"
#include "settings.h"
#include "lib-config/iconfig.h"
#include "irc-servers.h"
#include "irc-channels.h"
#include "fe-windows.h"
static void sig_layout_save_item(WINDOW_REC *window, WI_ITEM_REC *item,
CONFIG_NODE *node)
{
CONFIG_NODE *subnode;
IRC_CHANNEL_REC *channel;
char *name;
channel = IRC_CHANNEL(item);
if (channel == NULL || *channel->name != '!')
return;
/* save !ABCDEchannels using just short name */
subnode = config_node_section(node, NULL, NODE_TYPE_BLOCK);
name = g_strconcat("!", channel->name+6, NULL);
iconfig_node_set_str(subnode, "type", "CHANNEL");
iconfig_node_set_str(subnode, "chat_type", "IRC");
iconfig_node_set_str(subnode, "name", name);
iconfig_node_set_str(subnode, "tag", channel->server->tag);
g_free(name);
signal_stop();
}
void fe_irc_layout_init(void)
{
signal_add("layout save item", (SIGNAL_FUNC) sig_layout_save_item);
}
void fe_irc_layout_deinit(void)
{
signal_remove("layout save item", (SIGNAL_FUNC) sig_layout_save_item);
}

View File

@ -29,12 +29,27 @@
#include "levels.h" #include "levels.h"
#include "irc-chatnets.h" #include "irc-chatnets.h"
#include "irc-servers.h" #include "irc-servers.h"
#include "irc-channels.h"
#include "servers-reconnect.h" #include "servers-reconnect.h"
#include "irc-servers-setup.h" #include "irc-servers-setup.h"
#include "fe-windows.h" #include "fe-windows.h"
#include "printtext.h" #include "printtext.h"
const char *get_visible_target(IRC_SERVER_REC *server, const char *target)
{
IRC_CHANNEL_REC *channel;
if (*target == '!') {
/* visible_name of !channels is different - don't bother
checking other types for now, they'll just slow up */
channel = irc_channel_find(server, target);
if (channel != NULL)
return channel->visible_name;
}
return target;
}
/* SYNTAX: SERVER ADD [-4 | -6] [-auto | -noauto] [-ircnet <ircnet>] /* SYNTAX: SERVER ADD [-4 | -6] [-auto | -noauto] [-ircnet <ircnet>]
[-host <hostname>] [-cmdspeed <ms>] [-cmdmax <count>] [-host <hostname>] [-cmdspeed <ms>] [-cmdmax <count>]
[-port <port>] <address> [<port> [<password>]] */ [-port <port>] <address> [<port> [<password>]] */

View File

@ -0,0 +1,9 @@
#ifndef __FE_IRC_SERVER_H
#define __FE_IRC_SERVER_H
const char *get_visible_target(IRC_SERVER_REC *server, const char *target);
void fe_irc_server_init(void);
void fe_irc_server_deinit(void);
#endif

View File

@ -84,9 +84,9 @@ static void print_mode(MODE_REC *rec)
tmp = modes; modes = NULL; tmp = modes; modes = NULL;
nicks = gslist_to_string(rec->nicks, ", "); nicks = gslist_to_string(rec->nicks, ", ");
printformat(rec->channel->server, rec->channel->name, MSGLEVEL_MODES, printformat(rec->channel->server, rec->channel->visible_name,
IRCTXT_CHANMODE_CHANGE, MSGLEVEL_MODES, IRCTXT_CHANMODE_CHANGE,
rec->channel->name, rec->mode, nicks, ""); rec->channel->visible_name, rec->mode, nicks, "");
g_free(nicks); g_free(nicks);
modes = tmp; modes = tmp;

View File

@ -254,7 +254,7 @@ static void event_join(IRC_SERVER_REC *server, const char *data, const char *nic
chanrec = channel_find_unjoined(server, channel); chanrec = channel_find_unjoined(server, channel);
if (chanrec == NULL) { if (chanrec == NULL) {
/* didn't get here with /join command.. */ /* didn't get here with /join command.. */
chanrec = irc_channel_create(server, channel, TRUE); chanrec = irc_channel_create(server, channel, NULL, TRUE);
} }
chanrec->joined = TRUE; chanrec->joined = TRUE;
if (strcmp(chanrec->name, channel) != 0) { if (strcmp(chanrec->name, channel) != 0) {

View File

@ -44,21 +44,37 @@ void irc_channels_setup_deinit(void);
void massjoin_init(void); void massjoin_init(void);
void massjoin_deinit(void); void massjoin_deinit(void);
IRC_CHANNEL_REC *irc_channel_create(IRC_SERVER_REC *server, IRC_CHANNEL_REC *irc_channel_create(IRC_SERVER_REC *server, const char *name,
const char *name, int automatic) const char *visible_name, int automatic)
{ {
IRC_CHANNEL_REC *rec; IRC_CHANNEL_REC *rec;
char *new_name;
g_return_val_if_fail(server == NULL || IS_IRC_SERVER(server), NULL); g_return_val_if_fail(server == NULL || IS_IRC_SERVER(server), NULL);
g_return_val_if_fail(name != NULL, NULL); g_return_val_if_fail(name != NULL, NULL);
rec = g_new0(IRC_CHANNEL_REC, 1); rec = g_new0(IRC_CHANNEL_REC, 1);
rec->chat_type = IRC_PROTOCOL;
rec->name = g_strdup(name);
rec->server = server;
if (*name == '+') rec->no_modes = TRUE; if (*name == '+') rec->no_modes = TRUE;
channel_init((CHANNEL_REC *) rec, automatic); new_name = NULL;
if (visible_name == NULL) {
/* !?????channel -> !channel */
new_name = *name == '!' && strlen(name) >= 1+5 ?
g_strconcat("!", name+1+5, NULL) :
g_strdup(name);
if (irc_channel_find(server, new_name) != NULL) {
/* this was second !channel with same name,
show the channel id after all */
g_free_and_null(new_name);
}
visible_name = new_name;
}
channel_init((CHANNEL_REC *) rec, (SERVER_REC *) server,
name, visible_name, automatic);
g_free(new_name);
return rec; return rec;
} }
@ -112,7 +128,7 @@ static void irc_channels_join(IRC_SERVER_REC *server, const char *data,
g_string_sprintfa(outkeys, "%s,", get_join_key(key)); g_string_sprintfa(outkeys, "%s,", get_join_key(key));
channame = channel + (channel[0] == '!' && channame = channel + (channel[0] == '!' &&
channel[1] == '!'); channel[1] == '!');
chanrec = irc_channel_create(server, channame, chanrec = irc_channel_create(server, channame, NULL,
automatic); automatic);
if (key != NULL) chanrec->key = g_strdup(key); if (key != NULL) chanrec->key = g_strdup(key);
} }

View File

@ -26,8 +26,8 @@ void irc_channels_init(void);
void irc_channels_deinit(void); void irc_channels_deinit(void);
/* Create new IRC channel record */ /* Create new IRC channel record */
IRC_CHANNEL_REC *irc_channel_create(IRC_SERVER_REC *server, IRC_CHANNEL_REC *irc_channel_create(IRC_SERVER_REC *server, const char *name,
const char *name, int automatic); const char *visible_name, int automatic);
#define irc_channel_find(server, name) \ #define irc_channel_find(server, name) \
IRC_CHANNEL(channel_find(SERVER(server), name)) IRC_CHANNEL(channel_find(SERVER(server), name))

View File

@ -62,7 +62,7 @@ static int knockout_tag;
static void cmd_notice(const char *data, IRC_SERVER_REC *server, static void cmd_notice(const char *data, IRC_SERVER_REC *server,
WI_ITEM_REC *item) WI_ITEM_REC *item)
{ {
char *target, *msg; const char *target, *msg;
void *free_arg; void *free_arg;
CMD_IRC_SERVER(server); CMD_IRC_SERVER(server);
@ -71,7 +71,7 @@ static void cmd_notice(const char *data, IRC_SERVER_REC *server,
&target, &msg)) &target, &msg))
return; return;
if (strcmp(target, "*") == 0) if (strcmp(target, "*") == 0)
target = item == NULL ? NULL : item->name; target = item == NULL ? NULL : window_item_get_target(item);
if (*target == '\0' || *msg == '\0') if (*target == '\0' || *msg == '\0')
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
@ -85,7 +85,8 @@ static void cmd_notice(const char *data, IRC_SERVER_REC *server,
static void cmd_ctcp(const char *data, IRC_SERVER_REC *server, static void cmd_ctcp(const char *data, IRC_SERVER_REC *server,
WI_ITEM_REC *item) WI_ITEM_REC *item)
{ {
char *target, *ctcpcmd, *ctcpdata; const char *target;
char *ctcpcmd, *ctcpdata;
void *free_arg; void *free_arg;
CMD_IRC_SERVER(server); CMD_IRC_SERVER(server);
@ -94,7 +95,7 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server,
&target, &ctcpcmd, &ctcpdata)) &target, &ctcpcmd, &ctcpdata))
return; return;
if (strcmp(target, "*") == 0) if (strcmp(target, "*") == 0)
target = item == NULL ? NULL : item->name; target = item == NULL ? NULL : window_item_get_target(item);
if (*target == '\0' || *ctcpcmd == '\0') if (*target == '\0' || *ctcpcmd == '\0')
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
@ -112,7 +113,8 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server,
static void cmd_nctcp(const char *data, IRC_SERVER_REC *server, static void cmd_nctcp(const char *data, IRC_SERVER_REC *server,
WI_ITEM_REC *item) WI_ITEM_REC *item)
{ {
char *target, *ctcpcmd, *ctcpdata; const char *target;
char *ctcpcmd, *ctcpdata;
void *free_arg; void *free_arg;
CMD_IRC_SERVER(server); CMD_IRC_SERVER(server);
@ -121,7 +123,7 @@ static void cmd_nctcp(const char *data, IRC_SERVER_REC *server,
&target, &ctcpcmd, &ctcpdata)) &target, &ctcpcmd, &ctcpdata))
return; return;
if (strcmp(target, "*") == 0) if (strcmp(target, "*") == 0)
target = item == NULL ? NULL : item->name; target = item == NULL ? NULL : window_item_get_target(item);
if (*target == '\0' || *ctcpcmd == '\0') if (*target == '\0' || *ctcpcmd == '\0')
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
@ -216,7 +218,7 @@ static void cmd_invite(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *it
if (!IS_IRC_CHANNEL(item)) if (!IS_IRC_CHANNEL(item))
cmd_param_error(CMDERR_NOT_JOINED); cmd_param_error(CMDERR_NOT_JOINED);
channame = item->name; channame = IRC_CHANNEL(item)->name;
} }
irc_send_cmdv(server, "INVITE %s %s", nick, channame); irc_send_cmdv(server, "INVITE %s %s", nick, channame);
@ -262,7 +264,7 @@ static void cmd_who(const char *data, IRC_SERVER_REC *server,
if (!IS_IRC_CHANNEL(item)) if (!IS_IRC_CHANNEL(item))
cmd_param_error(CMDERR_NOT_JOINED); cmd_param_error(CMDERR_NOT_JOINED);
channel = item->name; channel = IRC_CHANNEL(item)->name;
} }
if (strcmp(channel, "**") == 0) { if (strcmp(channel, "**") == 0) {
/* ** displays all nicks.. */ /* ** displays all nicks.. */
@ -291,7 +293,7 @@ static void cmd_names(const char *data, IRC_SERVER_REC *server,
if (!IS_IRC_CHANNEL(item)) if (!IS_IRC_CHANNEL(item))
cmd_param_error(CMDERR_NOT_JOINED); cmd_param_error(CMDERR_NOT_JOINED);
channel = item->name; channel = IRC_CHANNEL(item)->name;
} }
if (strcmp(channel, "**") == 0) { if (strcmp(channel, "**") == 0) {
@ -480,7 +482,7 @@ static void cmd_ping(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item
if (!IS_IRC_ITEM(item)) if (!IS_IRC_ITEM(item))
cmd_return_error(CMDERR_NOT_JOINED); cmd_return_error(CMDERR_NOT_JOINED);
data = item->name; data = window_item_get_target(item);
} }
g_get_current_time(&tv); g_get_current_time(&tv);

View File

@ -94,7 +94,8 @@ void irc_core_init(void)
rec->server_connect = (SERVER_REC *(*) (SERVER_CONNECT_REC *)) rec->server_connect = (SERVER_REC *(*) (SERVER_CONNECT_REC *))
irc_server_connect; irc_server_connect;
rec->channel_create = rec->channel_create =
(CHANNEL_REC *(*) (SERVER_REC *, const char *, int)) (CHANNEL_REC *(*) (SERVER_REC *, const char *,
const char *, int))
irc_channel_create; irc_channel_create;
rec->query_create = rec->query_create =
(QUERY_REC *(*) (const char *, const char *, int)) (QUERY_REC *(*) (const char *, const char *, int))

View File

@ -490,8 +490,9 @@ void channel_set_singlemode(IRC_CHANNEL_REC *channel, const char *nicks,
void channel_set_mode(IRC_SERVER_REC *server, const char *channel, void channel_set_mode(IRC_SERVER_REC *server, const char *channel,
const char *mode) const char *mode)
{ {
char *modestr, *curmode, *orig, type, prevtype; IRC_CHANNEL_REC *chanrec;
GString *tmode, *targs; GString *tmode, *targs;
char *modestr, *curmode, *orig, type, prevtype;
int count; int count;
g_return_if_fail(IS_IRC_SERVER(server)); g_return_if_fail(IS_IRC_SERVER(server));
@ -501,6 +502,10 @@ void channel_set_mode(IRC_SERVER_REC *server, const char *channel,
targs = g_string_new(NULL); targs = g_string_new(NULL);
count = 0; count = 0;
chanrec = irc_channel_find(server, channel);
if (chanrec != NULL)
channel = chanrec->name;
orig = modestr = g_strdup(mode); orig = modestr = g_strdup(mode);
type = '+'; prevtype = '\0'; type = '+'; prevtype = '\0';

View File

@ -131,7 +131,7 @@ static NETSPLIT_REC *netsplit_add(IRC_SERVER_REC *server, const char *nick,
continue; continue;
splitchan = g_new0(NETSPLIT_CHAN_REC, 1); splitchan = g_new0(NETSPLIT_CHAN_REC, 1);
splitchan->name = g_strdup(channel->name); splitchan->name = g_strdup(channel->visible_name);
splitchan->op = nickrec->op; splitchan->op = nickrec->op;
splitchan->halfop = nickrec->halfop; splitchan->halfop = nickrec->halfop;
splitchan->voice = nickrec->voice; splitchan->voice = nickrec->voice;

View File

@ -42,14 +42,6 @@ channels_join(server, channels, automatic)
CODE: CODE:
server->channels_join(server, channels, automatic); server->channels_join(server, channels, automatic);
Irssi::Channel
channel_create(server, name, automatic)
Irssi::Server server
char *name
int automatic
CODE:
CHAT_PROTOCOL(server)->channel_create(server, name, automatic);
Irssi::Channel Irssi::Channel
channel_find(server, name) channel_find(server, name)
Irssi::Server server Irssi::Server server

View File

@ -61,11 +61,3 @@ CODE:
RETVAL = irc_nicklist_insert(channel, nick, op, halfop, voice, send_massjoin); RETVAL = irc_nicklist_insert(channel, nick, op, halfop, voice, send_massjoin);
OUTPUT: OUTPUT:
RETVAL RETVAL
MODULE = Irssi::Irc::Channel PACKAGE = Irssi::Irc::Server PREFIX = irc_
Irssi::Irc::Channel
irc_channel_create(server, name, automatic)
Irssi::Irc::Server server
char *name
int automatic

View File

@ -326,7 +326,7 @@ void perl_window_item_fill_hash(HV *hv, WI_ITEM_REC *item)
if (item->server != NULL) { if (item->server != NULL) {
hv_store(hv, "server", 6, iobject_bless(item->server), 0); hv_store(hv, "server", 6, iobject_bless(item->server), 0);
} }
hv_store(hv, "name", 4, new_pv(item->name), 0); hv_store(hv, "visible_name", 12, new_pv(item->visible_name), 0);
hv_store(hv, "createtime", 10, newSViv(item->createtime), 0); hv_store(hv, "createtime", 10, newSViv(item->createtime), 0);
hv_store(hv, "data_level", 10, newSViv(item->data_level), 0); hv_store(hv, "data_level", 10, newSViv(item->data_level), 0);
@ -343,6 +343,7 @@ void perl_channel_fill_hash(HV *hv, CHANNEL_REC *channel)
if (channel->ownnick != NULL) if (channel->ownnick != NULL)
hv_store(hv, "ownnick", 7, iobject_bless(channel->ownnick), 0); hv_store(hv, "ownnick", 7, iobject_bless(channel->ownnick), 0);
hv_store(hv, "name", 4, new_pv(channel->name), 0);
hv_store(hv, "topic", 5, new_pv(channel->topic), 0); hv_store(hv, "topic", 5, new_pv(channel->topic), 0);
hv_store(hv, "topic_by", 8, new_pv(channel->topic_by), 0); hv_store(hv, "topic_by", 8, new_pv(channel->topic_by), 0);
hv_store(hv, "topic_time", 10, newSViv(channel->topic_time), 0); hv_store(hv, "topic_time", 10, newSViv(channel->topic_time), 0);
@ -369,6 +370,7 @@ void perl_query_fill_hash(HV *hv, QUERY_REC *query)
perl_window_item_fill_hash(hv, (WI_ITEM_REC *) query); perl_window_item_fill_hash(hv, (WI_ITEM_REC *) query);
hv_store(hv, "name", 4, new_pv(query->name), 0);
hv_store(hv, "last_unread_msg", 15, newSViv(query->last_unread_msg), 0); hv_store(hv, "last_unread_msg", 15, newSViv(query->last_unread_msg), 0);
hv_store(hv, "address", 7, new_pv(query->address), 0); hv_store(hv, "address", 7, new_pv(query->address), 0);
hv_store(hv, "server_tag", 10, new_pv(query->server_tag), 0); hv_store(hv, "server_tag", 10, new_pv(query->server_tag), 0);

View File

@ -195,7 +195,7 @@ PREINIT:
char *arglist[MAX_FORMAT_PARAMS+1]; char *arglist[MAX_FORMAT_PARAMS+1];
int n; int n;
CODE: CODE:
format_create_dest(&dest, item->server, item->name, level, NULL); format_create_dest(&dest, item->server, item->visible_name, level, NULL);
memset(arglist, 0, sizeof(arglist)); memset(arglist, 0, sizeof(arglist));
for (n = 3; n < items && n < MAX_FORMAT_PARAMS+3; n++) { for (n = 3; n < items && n < MAX_FORMAT_PARAMS+3; n++) {
arglist[n-3] = SvPV(ST(n), PL_na); arglist[n-3] = SvPV(ST(n), PL_na);

View File

@ -225,6 +225,10 @@ window_activity(window, data_level, hilight_color=NULL)
char * char *
window_get_active_name(window) window_get_active_name(window)
Irssi::UI::Window window Irssi::UI::Window window
CODE:
RETVAL = (char *) window_get_active_name(window);
OUTPUT:
RETVAL
Irssi::Windowitem Irssi::Windowitem
window_item_find(window, server, name) window_item_find(window, server, name)
@ -246,7 +250,7 @@ print(item, str, level=MSGLEVEL_CLIENTNOTICE)
int level int level
char *str char *str
CODE: CODE:
printtext_string(item->server, item->name, level, str); printtext_string(item->server, item->visible_name, level, str);
Irssi::UI::Window Irssi::UI::Window
window_create(item, automatic) window_create(item, automatic)