irssi-import / bugs.irssi.org

bugs.irssi.org archive
https://github.com/irssi/irssi/issues
0 stars 0 forks source link

Channels in 'whois' doesnt recoded. #344

Open irssibot opened 18 years ago

irssibot commented 18 years ago

Description: Channels in 'whois; doesnt recoded. Just showing as raw ascii.

Steps to reproduce:

  1. /recode add something ISO2022JP
  2. /server something
  3. /whois someone (he should be joined to channel with non-latin chars in name)

Results: channels : #^[$B%m%7%"^[(B

Expected results: channels : #ロシア

Additional information: Default locale: en_US.UTF-8 Server encoding: ISO2022JP irssi version: irssi 0.8.10-rc7 (20051123 1830)

"recode" output: Target Character set something ISO2022JP

"/set recode" output: recode_autodetect_utf8 = OFF recode_fallback = CP1251 recode = ON recode_out_default_charset = recode_transliterate = OFF

irssibot commented 16 years ago

It should be fixed in irssi-0.8.12, can you confirm it?

irssibot commented 16 years ago

Hello :) I'm Park, Jin Hyung from Korea. in 0.8.12, this bug is not fixed.

SO, I have made some patch for this bug! please test!

My setting: "/set recoded" output: 11:44 [misc] 11:44 recode_autodetect_utf8 = OFF 11:44 recode_fallback = utf8 11:44 recode = ON 11:44 recode_out_default_charset = cp949 11:44 recode_transliterate = ON

"/join #테스트채널" outout: 11:48 -!- channels : #테스트채널

irssibot commented 16 years ago

recoded_channel.patch

diff -urN irssi-0.8.12/src/core/chat-commands.c irssi-0.8.12_patch/src/core/chat-commands.c
--- irssi-0.8.12/src/core/chat-commands.c   2007-10-06 18:38:20.000000000 +0900
+++ irssi-0.8.12_patch/src/core/chat-commands.c 2008-09-25 11:37:32.000000000 +0900
@@ -350,7 +350,7 @@
 static void cmd_msg(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
 {
    GHashTable *optlist;
-   char *target, *origtarget, *msg, *recoded;
+   char *target, *origtarget, *msg, *recoded, *recoded_target;
    void *free_arg;
    int free_ret, target_type = SEND_TARGET_NICK;

@@ -403,8 +403,9 @@
        }
    }
    recoded = recode_out(server, msg, target);
+   recoded_target = recode_out(server, target, target);
    if (target != NULL) {
-       signal_emit("server sendmsg", 4, server, target, recoded,
+       signal_emit("server sendmsg", 4, server, recoded_target, recoded,
                GINT_TO_POINTER(target_type));
    }
    signal_emit(target != NULL && target_type == SEND_TARGET_CHANNEL ?
@@ -412,6 +413,7 @@
            server, recoded, target, origtarget);

    g_free(recoded);
+   g_free(recoded_target);
    if (free_ret && target != NULL) g_free(target);
    cmd_params_free(free_arg);
 }
diff -urN irssi-0.8.12/src/irc/core/irc-channels.c irssi-0.8.12_patch/src/irc/core/irc-channels.c
--- irssi-0.8.12/src/irc/core/irc-channels.c    2007-10-06 18:38:20.000000000 +0900
+++ irssi-0.8.12_patch/src/irc/core/irc-channels.c  2008-09-25 11:38:03.000000000 +0900
@@ -71,6 +71,7 @@
    GString *outchans, *outkeys;
    char *channels, *keys, *key, *space;
    char **chanlist, **keylist, **tmp, **tmpkey, **tmpstr, *channel, *channame;
+   char *recoded_str;
    void *free_arg;
    int use_keys, cmdlen;

@@ -148,9 +149,11 @@
        if (outchans->len > 0) {
            g_string_truncate(outchans, outchans->len-1);
            g_string_truncate(outkeys, outkeys->len-1);
-           irc_send_cmdv(IRC_SERVER(server),
+            recoded_str = recode_out(server, outchans->str, NULL);
+            irc_send_cmdv(IRC_SERVER(server),
                      use_keys ? "JOIN %s %s" : "JOIN %s",
-                     outchans->str, outkeys->str);
+                     recoded_str, outkeys->str);
+            g_free(recoded_str);
        }
        cmdlen = 0;
        g_string_truncate(outchans,0);
irssibot commented 16 years ago

oops. sorry. above comment is for #345. sorry for miss posting.