about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_ac.c2
-rw-r--r--src/command/cmd_defs.c13
-rw-r--r--src/command/cmd_funcs.c28
-rw-r--r--src/xmpp/iq.c17
-rw-r--r--src/xmpp/xmpp.h2
5 files changed, 31 insertions, 31 deletions
diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c
index 5ecdfbe7..069e883e 100644
--- a/src/command/cmd_ac.c
+++ b/src/command/cmd_ac.c
@@ -595,7 +595,7 @@ cmd_ac_init(void)
 
     rooms_ac = autocomplete_new();
     autocomplete_add(rooms_ac, "service");
-    autocomplete_add(rooms_ac, "match");
+    autocomplete_add(rooms_ac, "filter");
 
     affiliation_ac = autocomplete_new();
     autocomplete_add(affiliation_ac, "owner");
diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c
index 8d483fe0..6d4a6ab9 100644
--- a/src/command/cmd_defs.c
+++ b/src/command/cmd_defs.c
@@ -795,20 +795,21 @@ static struct cmd_t command_defs[] =
             CMD_TAG_GROUPCHAT)
         CMD_SYN(
             "/rooms",
-            "/rooms match <glob>",
+            "/rooms filter <glob>",
             "/rooms service <service>",
-            "/rooms service <service> match <glob>")
+            "/rooms service <service> filter <glob>")
         CMD_DESC(
             "List the chat rooms available at the specified conference service. "
             "If no argument is supplied, the account preference 'muc.service' is used, 'conference.<domain-part>' by default. "
-            "The match argument accepts a glob and returns only room names that match.")
+            "The filter argument accepts a glob (including * and ?) and filters the results.")
         CMD_ARGS(
             { "service <service>", "The conference service to query." },
-            { "match <glob>", "The string to match before displaying results."})
+            { "filter <glob>", "The glob to filter results by."})
         CMD_EXAMPLES(
             "/rooms",
-            "/rooms match *development*",
-            "/rooms service conference.jabber.org")
+            "/rooms filter *development*",
+            "/rooms service conference.jabber.org",
+            "/rooms service conference.jabber.org filter *xsf*")
     },
 
     { "/bookmark",
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index 90c4b567..65ac7344 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -4393,8 +4393,8 @@ cmd_rooms(ProfWin *window, const char *const command, gchar **args)
         return TRUE;
     }
 
-    char *service = NULL;
-    char *match = NULL;
+    gchar *service = NULL;
+    gchar *filter = NULL;
     if (args[0] != NULL) {
         if (g_strcmp0(args[0], "service") == 0) {
             if (args[1] == NULL) {
@@ -4403,13 +4403,13 @@ cmd_rooms(ProfWin *window, const char *const command, gchar **args)
                 return TRUE;
             }
             service = g_strdup(args[1]);
-        } else if (g_strcmp0(args[0], "match") == 0) {
+        } else if (g_strcmp0(args[0], "filter") == 0) {
             if (args[1] == NULL) {
                 cons_bad_cmd_usage(command);
                 cons_show("");
                 return TRUE;
             }
-            match = g_strdup(args[1]);
+            filter = g_strdup(args[1]);
         } else {
             cons_bad_cmd_usage(command);
             cons_show("");
@@ -4422,21 +4422,21 @@ cmd_rooms(ProfWin *window, const char *const command, gchar **args)
                 cons_bad_cmd_usage(command);
                 cons_show("");
                 g_free(service);
-                g_free(match);
+                g_free(filter);
                 return TRUE;
             }
             g_free(service);
             service = g_strdup(args[3]);
-        } else if (g_strcmp0(args[2], "match") == 0) {
+        } else if (g_strcmp0(args[2], "filter") == 0) {
             if (args[3] == NULL) {
                 cons_bad_cmd_usage(command);
                 cons_show("");
                 g_free(service);
-                g_free(match);
+                g_free(filter);
                 return TRUE;
             }
-            g_free(match);
-            match = g_strdup(args[3]);
+            g_free(filter);
+            filter = g_strdup(args[3]);
         } else {
             cons_bad_cmd_usage(command);
             cons_show("");
@@ -4444,12 +4444,6 @@ cmd_rooms(ProfWin *window, const char *const command, gchar **args)
         }
     }
 
-    GPatternSpec *glob = NULL;
-    if (match != NULL) {
-        glob = g_pattern_spec_new(match);
-        g_free(match);
-    }
-
     if (service == NULL) {
         ProfAccount *account = accounts_get_account(session_get_account_name());
         if (account->muc_service) {
@@ -4459,12 +4453,12 @@ cmd_rooms(ProfWin *window, const char *const command, gchar **args)
             cons_show("Account MUC service property not found.");
             account_free(account);
             g_free(service);
-            g_free(match);
+            g_free(filter);
             return TRUE;
         }
     }
 
-    iq_room_list_request(service, glob);
+    iq_room_list_request(service, filter);
 
     g_free(service);
 
diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c
index ce163858..0a48dbb7 100644
--- a/src/xmpp/iq.c
+++ b/src/xmpp/iq.c
@@ -297,13 +297,13 @@ iq_set_autoping(const int seconds)
 }
 
 void
-iq_room_list_request(gchar *conferencejid, GPatternSpec *glob)
+iq_room_list_request(gchar *conferencejid, gchar *filter)
 {
     xmpp_ctx_t * const ctx = connection_get_ctx();
     char *id = create_unique_id("confreq");
     xmpp_stanza_t *iq = stanza_create_disco_items_iq(ctx, id, conferencejid);
 
-    iq_id_handler_add(id, _room_list_id_handler, (ProfIdFreeCallback)g_pattern_spec_free, glob);
+    iq_id_handler_add(id, _room_list_id_handler, NULL, filter);
 
     iq_send_stanza(iq);
     xmpp_stanza_release(iq);
@@ -913,14 +913,17 @@ _room_list_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
 
     xmpp_stanza_t *child = xmpp_stanza_get_children(query);
     if (child == NULL) {
+        cons_show("No rooms found for service: %s", from);
         return 0;
     }
 
-    GPatternSpec *glob = (GPatternSpec*)userdata;
-    if (child == NULL) {
-        cons_show("No rooms found for service: %s", from);
-        return 0;
+    GPatternSpec *glob = NULL;
+    gchar *filter = (gchar*)userdata;
+    if (filter != NULL) {
+        glob = g_pattern_spec_new(filter);
+        g_free(filter);
     }
+
     gboolean matched = FALSE;
     cons_show("Chat rooms at: %s", from);
     while (child) {
@@ -952,6 +955,8 @@ _room_list_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
         cons_show("  No rooms found matching pattern.");
     }
 
+    g_pattern_spec_free(glob);
+
     return 0;
 }
 
diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h
index 38364624..9ff1b0c1 100644
--- a/src/xmpp/xmpp.h
+++ b/src/xmpp/xmpp.h
@@ -161,7 +161,7 @@ gboolean presence_sub_request_exists(const char *const bare_jid);
 void iq_enable_carbons(void);
 void iq_disable_carbons(void);
 void iq_send_software_version(const char *const fulljid);
-void iq_room_list_request(gchar *conferencejid, GPatternSpec *glob);
+void iq_room_list_request(gchar *conferencejid, gchar *filter);
 void iq_disco_info_request(gchar *jid);
 void iq_disco_items_request(gchar *jid);
 void iq_last_activity_request(gchar *jid);