+Патч руссификации для GAIM

Здесь обсуждаются все вопросы, не попадающие под другие категории
Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

+Патч руссификации для GAIM

Сообщение Llama »

Сие вроде как позволяет нормально работать с русским в GAIM. Автор - Grigory Bakunov. Решил выложить это т.к. в сети ходят только бинари под шапку или српм под нее же...

Код: Выделить всё

diff -ur gaim-0.75.orig/src/protocols/oscar/oscar.c gaim-0.75/src/protocols/oscar/oscar.c
--- gaim-0.75.orig/src/protocols/oscar/oscar.c 2004-01-04 15:59:09.000000000 +0900
+++ gaim-0.75/src/protocols/oscar/oscar.c 2004-04-01 18:08:14.000000000 +0900
@@ -341,7 +341,7 @@
  charset = strstr(enc, "charset=");
  if (charset == NULL) {
  gaim_debug(GAIM_DEBUG_WARNING, "oscar",
- "No charset specified for info, assuming ASCII\n");
+ "No charset specified for info, assuming ASCII or broken\n");
  return 0;
  }
  charset += 8;
@@ -359,13 +359,34 @@
  }
 }
 
-gchar *oscar_encoding_to_utf8(const char *encoding, char *text, int textlen)
+gchar *oscar_try_conv_to_utf8(char *text, int textlen, const char *pref_enc)
+{
+ gchar *result;
+
+ if (!text)
+ return NULL;
+
+ /* first try preffered encoding */
+ if (pref_enc && (result = g_convert(text, textlen, "UTF-8", pref_enc, NULL, NULL, NULL)))
+ return result;
+
+ /* next try locale */
+ if ((result = gaim_utf8_try_convert(text)))
+ return result;
+
+ gaim_debug(GAIM_DEBUG_INFO, "oscar",
+ "Failed to convert text to UTF-8 using preferences or locale encoding\n");
+ return NULL;
+}
+
+gchar *oscar_encoding_to_utf8(const char *encoding, char *text, int textlen, const char* pref_enc)
 {
  gchar *utf8 = NULL;
  int flags = oscar_encoding_parse(encoding);
 
  switch (flags) {
  case 0:
+ if (!(utf8 = oscar_try_conv_to_utf8(text, textlen, pref_enc)))
  utf8 = g_strndup(text, textlen);
  break;
  case AIM_IMFLAGS_ISO_8859_1:
@@ -1809,8 +1830,9 @@
  free(bi->availmsg);
  if (info->avail != NULL)
  if (info->avail_encoding) {
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
  gchar *enc = g_strdup_printf("charset=\"%s\"", info->avail_encoding);
- bi->availmsg = oscar_encoding_to_utf8(enc, info->avail, info->avail_len);
+ bi->availmsg = oscar_encoding_to_utf8(enc, info->avail, info->avail_len, pref_enc);
  g_free(enc);
  } else {
  /* No explicit encoding means utf8. Yay. */
@@ -2165,7 +2187,8 @@
  GError *err = NULL;
  struct buddyinfo *bi;
  const char *iconfile;
-
+ const char *pref_enc;
+ 
  bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(gc->account, userinfo->sn));
  if (!bi) {
  bi = g_new0(struct buddyinfo, 1);
@@ -2245,22 +2268,23 @@
  * ASCII is a strict subset of ISO-8859-1; this should
  * help with compatibility with old, broken versions of
  * gaim (everything before 0.60) and other broken clients
- * that will happily send ISO-8859-1 without marking it as
- * such */
+ * that will happily send ISO-8859-1 or native
+ * encoding without marking it as such we convert it to
+ * pref_enc if it is set or to locale */
  if (args->icbmflags & AIM_IMFLAGS_ISO_8859_1)
  gaim_debug(GAIM_DEBUG_INFO, "oscar",
  "Received ISO-8859-1 IM\n");
+ else
+ gaim_debug(GAIM_DEBUG_INFO, "oscar",
+ "Received non-ISO-8859-1 IM\n");
 
  if (!args->msg || !args->msglen)
  return 1;
 
- tmp = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1", NULL, &convlen, &err);
- if (err) {
- gaim_debug(GAIM_DEBUG_INFO, "oscar",
- "ISO-8859-1 IM conversion: %s\n", err->message);
- tmp = g_strdup(_("(There was an error receiving this message)"));
- g_error_free(err);
- }
+ pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
+ if (!(tmp = oscar_try_conv_to_utf8(args->msg, args->msglen, pref_enc)))
+ tmp = strdup(_("(There was an error receiving this message.\n"
+ "Please set the proper encoding in Account preferences.)"));
  }
 
  /* gaim_str_strip_cr(tmp); */
@@ -2549,8 +2573,8 @@
 static int incomingim_chan4(aim_session_t *sess, aim_conn_t *conn, aim_userinfo_t *userinfo, struct aim_incomingim_ch4_args *args, time_t t) {
  GaimConnection *gc = sess->aux_data;
  gchar **msg1, **msg2;
- GError *err = NULL;
  int i, numtoks;
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
 
  if (!args->type || !args->msg || !args->uin)
  return 1;
@@ -2564,12 +2588,11 @@
  msg2 = (gchar **)g_malloc((numtoks+1)*sizeof(gchar *));
  for (i=0; msg1[i]; i++) {
  gaim_str_strip_cr(msg1[i]);
- msg2[i] = g_convert(msg1[i], strlen(msg1[i]), "UTF-8", "ISO-8859-1", NULL, NULL, &err);
- if (err) {
+ msg2[i] = oscar_try_conv_to_utf8(msg1[i], strlen(msg1[i]), pref_enc);
+ if (!msg2[i]) {
  gaim_debug(GAIM_DEBUG_ERROR, "oscar",
- "Error converting a string from ISO-8859-1 to "
+ "Error converting a string to "
  "UTF-8 in oscar ICBM channel 4 parsing\n");
- g_error_free(err);
  }
  }
  msg2[i] = NULL;
@@ -3158,6 +3181,7 @@
  const char *final = NULL;
  va_list ap;
  aim_userinfo_t *userinfo;
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
 
  va_start(ap, fr);
  userinfo = va_arg(ap, aim_userinfo_t *);
@@ -3183,7 +3207,7 @@
  g_string_append_printf(text, _("Idle: <b>Active</b>"));
 
  if ((userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) {
- away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len);
+ away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len, pref_enc);
  if (away_utf8 != NULL) {
  g_string_append_printf(text, "<hr>%s", away_utf8);
  g_free(away_utf8);
@@ -3191,7 +3215,7 @@
  }
 
  if ((userinfo->info_len > 0) && (userinfo->info != NULL) && (userinfo->info_encoding != NULL)) {
- info_utf8 = oscar_encoding_to_utf8(userinfo->info_encoding, userinfo->info, userinfo->info_len);
+ info_utf8 = oscar_encoding_to_utf8(userinfo->info_encoding, userinfo->info, userinfo->info_len, pref_enc);
  if (info_utf8 != NULL) {
  g_string_append_printf(text, "<hr>%s", info_utf8);
  g_free(info_utf8);
@@ -3950,6 +3974,7 @@
  gchar *primary;
  va_list ap;
  struct aim_icq_info *info;
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
 
  va_start(ap, fr);
  info = va_arg(ap, struct aim_icq_info *);
@@ -3960,27 +3985,27 @@
 
  g_snprintf(who, sizeof(who), "%u", info->uin);
  buf = g_strdup_printf("<b>%s:</b> %s", _("UIN"), who);
- if (info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) {
+ if (info->nick && info->nick[0] && (utf8 = oscar_try_conv_to_utf8(info->nick, strlen(info->nick), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Nick"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->first && info->first[0] && (utf8 = gaim_utf8_try_convert(info->first))) {
+ if (info->first && info->first[0] && (utf8 = oscar_try_conv_to_utf8(info->first, strlen(info->first), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("First Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->last && info->last[0] && (utf8 = gaim_utf8_try_convert(info->last))) {
+ if (info->last && info->last[0] && (utf8 = oscar_try_conv_to_utf8(info->last, strlen(info->last), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Last Name"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->email && info->email[0] && (utf8 = gaim_utf8_try_convert(info->email))) {
+ if (info->email && info->email[0] && (utf8 = oscar_try_conv_to_utf8(info->email, strlen(info->email), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Email Address"), ":</b> <a href=\"mailto:", utf8, "\">", utf8, "</a>", NULL); g_free(tmp); g_free(utf8);
  }
  if (info->numaddresses && info->email2) {
  int i;
  for (i = 0; i < info->numaddresses; i++) {
- if (info->email2[i] && info->email2[i][0] && (utf8 = gaim_utf8_try_convert(info->email2[i]))) {
+ if (info->email2[i] && info->email2[i][0] && (utf8 = oscar_try_conv_to_utf8(info->email2[i], strlen(info->email2[i]), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Email Address"), ":</b> <a href=\"mailto:", utf8, "\">", utf8, "</a>", NULL); g_free(tmp); g_free(utf8);
  }
  }
  }
- if (info->mobile && info->mobile[0] && (utf8 = gaim_utf8_try_convert(info->mobile))) {
+ if (info->mobile && info->mobile[0] && (utf8 = oscar_try_conv_to_utf8(info->mobile, strlen(info->mobile), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Mobile Phone"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
  if (info->gender) {
@@ -4000,57 +4025,57 @@
  snprintf(age, sizeof(age), "%hhd", info->age);
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Age"), ":</b> ", age, NULL); g_free(tmp);
  }
- if (info->personalwebpage && info->personalwebpage[0] && (utf8 = gaim_utf8_try_convert(info->personalwebpage))) {
+ if (info->personalwebpage && info->personalwebpage[0] && (utf8 = oscar_try_conv_to_utf8(info->personalwebpage, strlen(info->personalwebpage), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Personal Web Page"), ":</b> <a href=\"", utf8, "\">", utf8, "</a>", NULL); g_free(tmp); g_free(utf8);
  }
- if (info->info && info->info[0] && (utf8 = gaim_utf8_try_convert(info->info))) {
+ if (info->info && info->info[0] && (utf8 = oscar_try_conv_to_utf8(info->info, strlen(info->info), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "<hr><b>", _("Additional Information"), ":</b><br>", utf8, NULL); g_free(tmp); g_free(utf8);
  }
  tmp = buf; buf = g_strconcat(tmp, "<hr>\n", NULL); g_free(tmp);
  if ((info->homeaddr && (info->homeaddr[0])) || (info->homecity && info->homecity[0]) || (info->homestate && info->homestate[0]) || (info->homezip && info->homezip[0])) {
  tmp = buf; buf = g_strconcat(tmp, "<b>", _("Home Address"), ":</b>", NULL); g_free(tmp);
- if (info->homeaddr && info->homeaddr[0] && (utf8 = gaim_utf8_try_convert(info->homeaddr))) {
+ if (info->homeaddr && info->homeaddr[0] && (utf8 = oscar_try_conv_to_utf8(info->homeaddr, strlen(info->homeaddr), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->homecity && info->homecity[0] && (utf8 = gaim_utf8_try_convert(info->homecity))) {
+ if (info->homecity && info->homecity[0] && (utf8 = oscar_try_conv_to_utf8(info->homecity, strlen(info->homecity), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->homestate && info->homestate[0] && (utf8 = gaim_utf8_try_convert(info->homestate))) {
+ if (info->homestate && info->homestate[0] && (utf8 = oscar_try_conv_to_utf8(info->homestate, strlen(info->homestate), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->homezip && info->homezip[0] && (utf8 = gaim_utf8_try_convert(info->homezip))) {
+ if (info->homezip && info->homezip[0] && (utf8 = oscar_try_conv_to_utf8(info->homezip, strlen(info->homezip), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
  tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp);
  }
  if ((info->workaddr && info->workaddr[0]) || (info->workcity && info->workcity[0]) || (info->workstate && info->workstate[0]) || (info->workzip && info->workzip[0])) {
  tmp = buf; buf = g_strconcat(tmp, "<b>", _("Work Address"), ":</b>", NULL); g_free(tmp);
- if (info->workaddr && info->workaddr[0] && (utf8 = gaim_utf8_try_convert(info->workaddr))) {
+ if (info->workaddr && info->workaddr[0] && (utf8 = oscar_try_conv_to_utf8(info->workaddr, strlen(info->workaddr), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Address"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->workcity && info->workcity[0] && (utf8 = gaim_utf8_try_convert(info->workcity))) {
+ if (info->workcity && info->workcity[0] && (utf8 = oscar_try_conv_to_utf8(info->workcity, strlen(info->workcity), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("City"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->workstate && info->workstate[0] && (utf8 = gaim_utf8_try_convert(info->workstate))) {
+ if (info->workstate && info->workstate[0] && (utf8 = oscar_try_conv_to_utf8(info->workstate, strlen(info->workstate), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("State"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->workzip && info->workzip[0] && (utf8 = gaim_utf8_try_convert(info->workzip))) {
+ if (info->workzip && info->workzip[0] && (utf8 = oscar_try_conv_to_utf8(info->workzip, strlen(info->workzip), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Zip Code"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
  tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp);
  }
  if ((info->workcompany && info->workcompany[0]) || (info->workdivision && info->workdivision[0]) || (info->workposition && info->workposition[0]) || (info->workwebpage && info->workwebpage[0])) {
  tmp = buf; buf = g_strconcat(tmp, "<b>", _("Work Information"), ":</b>", NULL); g_free(tmp);
- if (info->workcompany && info->workcompany[0] && (utf8 = gaim_utf8_try_convert(info->workcompany))) {
+ if (info->workcompany && info->workcompany[0] && (utf8 = oscar_try_conv_to_utf8(info->workcompany, strlen(info->workcompany), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Company"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->workdivision && info->workdivision[0] && (utf8 = gaim_utf8_try_convert(info->workdivision))) {
+ if (info->workdivision && info->workdivision[0] && (utf8 = oscar_try_conv_to_utf8(info->workdivision, strlen(info->workdivision), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Division"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->workposition && info->workposition[0] && (utf8 = gaim_utf8_try_convert(info->workposition))) {
+ if (info->workposition && info->workposition[0] && (utf8 = oscar_try_conv_to_utf8(info->workposition, strlen(info->workposition), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Position"), ":</b> ", utf8, NULL); g_free(tmp); g_free(utf8);
  }
- if (info->workwebpage && info->workwebpage[0] && (utf8 = gaim_utf8_try_convert(info->workwebpage))) {
+ if (info->workwebpage && info->workwebpage[0] && (utf8 = oscar_try_conv_to_utf8(info->workwebpage, strlen(info->workwebpage), pref_enc))) {
  tmp = buf; buf = g_strconcat(tmp, "\n<br><b>", _("Web Page"), ":</b> <a href=\"", utf8, "\">", utf8, "</a>", NULL); g_free(tmp); g_free(utf8);
  }
  tmp = buf; buf = g_strconcat(tmp, "\n<hr>\n", NULL); g_free(tmp);
@@ -4068,6 +4093,7 @@
 static int gaim_icqalias(aim_session_t *sess, aim_frame_t *fr, ...)
 {
  GaimConnection *gc = sess->aux_data;
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
  gchar who[16], *utf8;
  GaimBuddy *b;
  va_list ap;
@@ -4077,7 +4103,7 @@
  info = va_arg(ap, struct aim_icq_info *);
  va_end(ap);
 
- if (info->uin && info->nick && info->nick[0] && (utf8 = gaim_utf8_try_convert(info->nick))) {
+ if (info->uin && info->nick && info->nick[0] && (utf8 = oscar_try_conv_to_utf8(info->nick, strlen(info->nick), pref_enc))) {
  g_snprintf(who, sizeof(who), "%u", info->uin);
  serv_got_alias(gc, who, utf8);
  if ((b = gaim_find_buddy(gc->account, who))) {
@@ -4288,6 +4314,7 @@
  int ret = 0;
  GError *err = NULL;
  const char *iconfile = gaim_account_get_buddy_icon(gaim_connection_get_account(gc));
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
  char *tmpmsg = NULL;
 
  if (dim && dim->connected) {
@@ -4309,6 +4336,9 @@
  g_hash_table_insert(od->buddyinfo, g_strdup(gaim_normalize(gc->account, name)), bi);
  }
 
+ aim_userinfo_t *userinfo;
+ userinfo = aim_locate_finduserinfo(od->sess, gaim_normalize(gc->account, name));
+ 
  args.flags = AIM_IMFLAGS_ACK | AIM_IMFLAGS_CUSTOMFEATURES;
  if (od->icq) {
  args.features = features_icq;
@@ -4370,6 +4400,7 @@
 
  args.flags |= oscar_encoding_check(tmpmsg);
  if (args.flags & AIM_IMFLAGS_UNICODE) {
+ if (userinfo->capabilities & AIM_CAPS_ICQUTF8) {
  gaim_debug(GAIM_DEBUG_INFO, "oscar", "Sending Unicode IM\n");
  args.charset = 0x0002;
  args.charsubset = 0x0000;
@@ -4383,6 +4414,24 @@
  * IM now, but I'm not sure what to do */
  g_error_free(err);
  }
+ }
+ else {
+ gaim_debug(GAIM_DEBUG_INFO, "oscar", "Client does not understand UTF-8, converting to preferred encoding\n");
+ args.charset = 0x0000;
+ args.charsubset = 0x0000;
+ if (pref_enc){
+ args.msg = g_convert(tmpmsg, len, pref_enc, "UTF-8", NULL, &len, &err);
+ if (err) {
+ gaim_debug(GAIM_DEBUG_ERROR, "oscar",
+ "Error converting message to preffered encoding: %s\n", err->message);
+ gaim_debug(GAIM_DEBUG_ERROR, "oscar",
+ "This really shouldn't happen!\n");
+ /* We really shouldn't try to send the
+ * IM now, but I'm not sure what to do */
+ g_error_free(err);
+ }
+ }
+ }
  } else if (args.flags & AIM_IMFLAGS_ISO_8859_1) {
  gaim_debug(GAIM_DEBUG_INFO, "oscar",
  "Sending ISO-8859-1 IM\n");
@@ -4827,6 +4876,7 @@
 
 static int gaim_ssi_parselist(aim_session_t *sess, aim_frame_t *fr, ...) {
  GaimConnection *gc = sess->aux_data;
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
  GaimAccount *account = gaim_connection_get_account(gc);
  OscarData *od = (OscarData *)gc->proto_data;
  struct aim_ssi_item *curitem;
@@ -4855,9 +4905,9 @@
  case 0x0000: { /* Buddy */
  if (curitem->name) {
  char *gname = aim_ssi_itemlist_findparentname(sess->ssi.local, curitem->name);
- char *gname_utf8 = gname ? gaim_utf8_try_convert(gname) : NULL;
+ char *gname_utf8 = gname ? oscar_try_conv_to_utf8(gname, strlen(gname), pref_enc) : NULL;
  char *alias = aim_ssi_getalias(sess->ssi.local, gname, curitem->name);
- char *alias_utf8 = alias ? gaim_utf8_try_convert(alias) : NULL;
+ char *alias_utf8 = alias ? oscar_try_conv_to_utf8(alias, alias ? strlen(alias) : 0, pref_enc) : NULL;
  GaimBuddy *buddy = gaim_find_buddy(gc->account, curitem->name);
  /* Should gname be freed here? -- elb */
  /* Not with the current code, but that might be cleaner -- med */
@@ -5447,6 +5497,7 @@
  struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, gaim_normalize(b->account, b->name));
  aim_userinfo_t *userinfo = aim_locate_finduserinfo(od->sess, b->name);
  gchar *tmp = NULL, *ret = g_strdup("");
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
 
  if (GAIM_BUDDY_IS_ONLINE(b)) {
  if (isdigit(b->name[0])) {
@@ -5497,7 +5548,7 @@
  }
 
  if ((userinfo != NULL) && (userinfo->flags & AIM_FLAG_AWAY) && (userinfo->away_len > 0) && (userinfo->away != NULL) && (userinfo->away_encoding != NULL)) {
- gchar *away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len);
+ gchar *away_utf8 = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len, pref_enc);
  if (away_utf8 != NULL) {
  gchar *tmp1, *tmp2;
  const char *tmp3;
@@ -6179,13 +6230,15 @@
  GaimGroup *g;
  char *comment;
  gchar *comment_utf8;
+ const char *pref_enc = gaim_account_get_string(gaim_connection_get_account(gc), "encoding", NULL);
 
  if (!(b = gaim_find_buddy(gaim_connection_get_account(gc), name)))
  return;
  if (!(g = gaim_find_buddys_group(b)))
  return;
  comment = aim_ssi_getcomment(od->sess->ssi.local, g->name, name);
- comment_utf8 = comment ? gaim_utf8_try_convert(comment) : NULL;
+
+ comment_utf8 = comment ? oscar_try_conv_to_utf8(comment, strlen(comment), pref_enc) : NULL;
 
  data->gc = gc;
  data->name = g_strdup(name);
@@ -6711,6 +6764,9 @@
  option = gaim_account_option_int_new(_("Auth port"), "port", 5190);
  prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
  option);
+ option = gaim_account_option_string_new(_("Encoding(ICQ)"), "encoding", "windows-1251");
+ prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
+ option);
 
  my_protocol = plugin;
 }
Опыт растет прямо пропорционально выведенному из строя оборудованию

dojlid

Сообщение dojlid »

а ў mainstream не спрабаваў даслаць?

dma
Интересующийся
Сообщения: 43
Зарегистрирован: 28 апр 2004, 21:57
Контактная информация:

Сообщение dma »

Интересный патч... У меня русский для ICQ работает с переменным успехом :) Для какой он версии Gaim? По какой ссылке можно слить оригинал? (боюсь, что copy/paste убёт табы)
Кстати, патч затрагивает только протокол ICQ... Для других протоколов русский и так работает?

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Первую строчку патча почитай ;)
Опыт растет прямо пропорционально выведенному из строя оборудованию

dma
Интересующийся
Сообщения: 43
Зарегистрирован: 28 апр 2004, 21:57
Контактная информация:

Сообщение dma »

Llama писал(а):Первую строчку патча почитай ;)
Ой, извини за невнимательность... Я и сам было потом подумал в патч посмотреть, да мессагу уже отправил :)

А всё-таки, вышли мне его на почту dma_k@mail.ru. Потому как табы в патче убиты и он даже близко не накладывается.

Спасибо.

dma
Интересующийся
Сообщения: 43
Зарегистрирован: 28 апр 2004, 21:57
Контактная информация:

Сообщение dma »

Вот, есть что-то похожее:

http://sourceforge.net/tracker/index.ph ... tid=300235

Патч практически чисто накладывается на gaim-0.77 и на последний CVS snapshot.
Единственное, что может оказаться сложным, так это пересобрать gaim :)

Ответить