changeset 1938:26e437e79e60

Fix MUC whois / auto_whois This patch should fix issue #68: https://bitbucket.org/McKael/mcabber-crew/issue/68/
author Mikael Berthe <mikael@lilotux.net>
date Sat, 12 Feb 2011 19:00:59 +0100
parents 118524e9d7b6
children 932d1b250a55
files mcabber/mcabber/commands.c mcabber/mcabber/commands.h mcabber/mcabber/xmpp_muc.c
diffstat 3 files changed, 18 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabber/commands.c	Sat Feb 12 18:31:31 2011 +0100
+++ b/mcabber/mcabber/commands.c	Sat Feb 12 19:00:59 2011 +0100
@@ -2830,9 +2830,11 @@
 
 //  cmd_room_whois(..)
 // If interactive is TRUE, chatmode can be enabled.
-void cmd_room_whois(gpointer bud, char *arg, guint interactive)
+// Please note that usernick is expected in UTF-8 locale iff interactive is FALSE
+// (in order to work correctly with auto_whois).
+void cmd_room_whois(gpointer bud, const char *usernick, guint interactive)
 {
-  char **paramlst;
+  char **paramlst = NULL;
   gchar *nick, *buffer;
   const char *bjid, *realjid;
   const char *rst_msg;
@@ -2843,17 +2845,20 @@
   time_t rst_time;
   guint msg_flag = HBB_PREFIX_INFO;
 
-  paramlst = split_arg(arg, 1, 0); // nickname
-  nick = *paramlst;
+  if (interactive) {
+    paramlst = split_arg(usernick, 1, 0); // nickname
+    nick = to_utf8(*paramlst);
+  } else {
+    nick = g_strdup(usernick);
+  }
 
   if (!nick || !*nick) {
     scr_LogPrint(LPRINT_NORMAL, "Please specify a nickname.");
-    free_arg_lst(paramlst);
+    if (paramlst)
+      free_arg_lst(paramlst);
     return;
   }
 
-  nick = to_utf8(nick);
-
   if (interactive) {
     // Enter chat mode
     scr_set_chatmode(TRUE);
@@ -2866,7 +2871,8 @@
 
   if (rstatus == offline) {
     scr_LogPrint(LPRINT_NORMAL, "No such member: %s", nick);
-    free_arg_lst(paramlst);
+    if (paramlst)
+      free_arg_lst(paramlst);
     g_free(nick);
     return;
   }
@@ -2912,7 +2918,8 @@
 
   g_free(buffer);
   g_free(nick);
-  free_arg_lst(paramlst);
+  if (paramlst)
+    free_arg_lst(paramlst);
 }
 
 static void room_bookmark(gpointer bud, char *arg)
--- a/mcabber/mcabber/commands.h	Sat Feb 12 18:31:31 2011 +0100
+++ b/mcabber/mcabber/commands.h	Sat Feb 12 19:00:59 2011 +0100
@@ -27,7 +27,7 @@
 void cmd_add(const char *name, const char *help, guint flags1, guint flags2, void (*f)(char*), gpointer userdata);
 #endif
 
-void cmd_room_whois(gpointer bud, char *nick_locale, guint interactive);
+void cmd_room_whois(gpointer bud, const char *nick, guint interactive);
 void cmd_room_leave(gpointer bud, char *arg);
 void cmd_setstatus(const char *recipient, const char *arg);
 void say_cmd(char *arg, int parse_flags);
--- a/mcabber/mcabber/xmpp_muc.c	Sat Feb 12 18:31:31 2011 +0100
+++ b/mcabber/mcabber/xmpp_muc.c	Sat Feb 12 19:00:59 2011 +0100
@@ -617,10 +617,7 @@
                  autowhois_on : autowhois_off);
 
   if (new_member && autowhois == autowhois_on) {
-    // FIXME: This will fail for some UTF-8 nicknames.
-    gchar *joiner_nick = from_utf8(rname);
-    cmd_room_whois(room_elt->data, joiner_nick, FALSE);
-    g_free(joiner_nick);
+    cmd_room_whois(room_elt->data, rname, FALSE);
   }
 
   scr_draw_roster();