Added SILC Thread Queue API
[crypto.git] / apps / irssi / src / fe-common / core / fe-queries.c
index c6bfaef24fd1e1e00cf757d2a07356159ef54579..f1763814103ea11576770e23172623ab19df8872 100644 (file)
@@ -30,6 +30,7 @@
 #include "servers.h"
 #include "queries.h"
 
+#include "fe-core-commands.h"
 #include "fe-windows.h"
 #include "window-items.h"
 #include "printtext.h"
@@ -46,7 +47,8 @@ QUERY_REC *privmsg_get_query(SERVER_REC *server, const char *nick,
         g_return_val_if_fail(nick != NULL, NULL);
 
        query = query_find(server, nick);
-       if (query == NULL && (querycreate_level & level) != 0 &&
+       if (query == NULL && !command_hide_output &&
+           (querycreate_level & level) != 0 &&
            (!own || settings_get_bool("autocreate_own_query"))) {
                query = CHAT_PROTOCOL(server)->
                        query_create(server->tag, nick, TRUE);
@@ -100,7 +102,7 @@ static void signal_query_destroyed(QUERY_REC *query)
                window_auto_destroy(window);
        else {
                /* eg. connection lost to dcc chat */
-               window_bind_add(window, query->server->tag, query->name);
+               window_bind_add(window, query->server_tag, query->name);
        }
 }
 
@@ -192,23 +194,29 @@ static void cmd_window_server(const char *data)
 static void cmd_unquery(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
 {
        QUERY_REC *query;
+       char *nick;
+       void *free_arg;
 
        g_return_if_fail(data != NULL);
 
-       if (*data == '\0') {
+       if (!cmd_get_params(data, &free_arg, 1, &nick))
+               return;
+
+       if (*nick == '\0') {
                /* remove current query */
                query = QUERY(item);
-               if (query == NULL) return;
        } else {
-               query = query_find(server, data);
+               query = query_find(server, nick);
                if (query == NULL) {
                        printformat(server, NULL, MSGLEVEL_CLIENTERROR,
-                                   TXT_NO_QUERY, data);
-                       return;
+                                   TXT_NO_QUERY, nick);
                }
        }
 
-       query_destroy(query);
+       if (query != NULL)
+               query_destroy(query);
+
+       cmd_params_free(free_arg);
 }
 
 /* SYNTAX: QUERY [-window] [-<server tag>] <nick> [<message>] */
@@ -314,7 +322,7 @@ static int sig_query_autoclose(void)
                    now-rec->last_unread_msg > query_auto_close)
                        query_destroy(rec);
        }
-        return 1;
+     return 1;
 }
 
 static void sig_message_private(SERVER_REC *server, const char *msg,
@@ -332,8 +340,8 @@ static void sig_message_private(SERVER_REC *server, const char *msg,
 
 static void read_settings(void)
 {
-       querycreate_level = level2bits(settings_get_str("autocreate_query_level"));
-       query_auto_close = settings_get_int("autoclose_query");
+       querycreate_level = settings_get_level("autocreate_query_level");
+       query_auto_close = settings_get_time("autoclose_query")/1000;
        if (query_auto_close > 0 && queryclose_tag == -1)
                queryclose_tag = g_timeout_add(5000, (GSourceFunc) sig_query_autoclose, NULL);
        else if (query_auto_close <= 0 && queryclose_tag != -1) {
@@ -344,9 +352,9 @@ static void read_settings(void)
 
 void fe_queries_init(void)
 {
-       settings_add_str("lookandfeel", "autocreate_query_level", "MSGS DCCMSGS");
+       settings_add_level("lookandfeel", "autocreate_query_level", "MSGS DCCMSGS");
        settings_add_bool("lookandfeel", "autocreate_own_query", TRUE);
-       settings_add_int("lookandfeel", "autoclose_query", 0);
+       settings_add_time("lookandfeel", "autoclose_query", "0");
 
        queryclose_tag = -1;
        read_settings();