diff options
author | Timo Sirainen <cras@irssi.org> | 2000-12-17 02:20:22 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2000-12-17 02:20:22 +0000 |
commit | fc491c5f8dd7f4a2ece6eb46feac687b4b0022ef (patch) | |
tree | a88fb52edcabcd7ca82d1007f5497bb45df282b6 /src/fe-common/irc/fe-irc-queries.c | |
parent | 3011d2c01c9df4dc0da2efb2cd33b2956c09fa8d (diff) | |
download | irssi-fc491c5f8dd7f4a2ece6eb46feac687b4b0022ef.zip |
Some minor query fixes. Nick changes are also detected by checking if
query with another nick from same address if found.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@999 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-common/irc/fe-irc-queries.c')
-rw-r--r-- | src/fe-common/irc/fe-irc-queries.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/fe-common/irc/fe-irc-queries.c b/src/fe-common/irc/fe-irc-queries.c new file mode 100644 index 00000000..619cd0f4 --- /dev/null +++ b/src/fe-common/irc/fe-irc-queries.c @@ -0,0 +1,76 @@ +/* + fe-irc-queries.c : irssi + + Copyright (C) 2000 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 "servers.h" +#include "queries.h" + +#include "irc.h" + +static QUERY_REC *query_find_address(SERVER_REC *server, const char *address) +{ + GSList *tmp; + + g_return_val_if_fail(IS_SERVER(server), NULL); + + for (tmp = server->queries; tmp != NULL; tmp = tmp->next) { + QUERY_REC *rec = tmp->data; + + if (g_strcasecmp(address, rec->address) == 0) + return rec; + } + + return NULL; +} + +static void event_privmsg(SERVER_REC *server, const char *data, + const char *nick, const char *address) +{ + QUERY_REC *query; + + g_return_if_fail(data != NULL); + + if (nick == NULL || address == NULL || ischannel(*data)) + return; + + query = query_find(server, nick); + if (query == NULL) { + /* check if there's query with another nick from the same + address. it was probably a nick change or reconnect to + server, so rename the query. */ + query = query_find_address(server, address); + if (query != NULL) { + signal_emit("message nick", 4, query->server, + nick, query->name, query->address); + query_change_nick(query, nick); + } + } +} + +void fe_irc_queries_init(void) +{ + signal_add_first("event privmsg", (SIGNAL_FUNC) event_privmsg); +} + +void fe_irc_queries_deinit(void) +{ + signal_remove("event privmsg", (SIGNAL_FUNC) event_privmsg); +} |