comparison src/protocols/oscar/oscar.c @ 6292:6651ecdda5d6

[gaim-migrate @ 6791] This makes umlauts and accents and other suck iso-8859-1 characters show up in available messages--and not crash Gaim. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 24 Jul 2003 02:04:19 +0000
parents 7c7e14d111bf
children 511003c99302
comparison
equal deleted inserted replaced
6291:9287c2897a07 6292:6651ecdda5d6
146 /* Various PRPL-specific buddy info that we want to keep track of */ 146 /* Various PRPL-specific buddy info that we want to keep track of */
147 struct buddyinfo { 147 struct buddyinfo {
148 time_t signon; 148 time_t signon;
149 int caps; 149 int caps;
150 gboolean typingnot; 150 gboolean typingnot;
151 gchar *availablemsg; 151 gchar *availmsg;
152 152
153 unsigned long ico_me_len; 153 unsigned long ico_me_len;
154 unsigned long ico_me_csum; 154 unsigned long ico_me_csum;
155 time_t ico_me_time; 155 time_t ico_me_time;
156 gboolean ico_informed; 156 gboolean ico_informed;
283 g_free(data); 283 g_free(data);
284 } 284 }
285 285
286 static void oscar_free_buddyinfo(void *data) { 286 static void oscar_free_buddyinfo(void *data) {
287 struct buddyinfo *bi = data; 287 struct buddyinfo *bi = data;
288 g_free(bi->availablemsg); 288 g_free(bi->availmsg);
289 g_free(bi->iconcsum); 289 g_free(bi->iconcsum);
290 g_free(bi); 290 g_free(bi);
291 } 291 }
292 292
293 static fu32_t oscar_encoding_check(const char *utf8) 293 static fu32_t oscar_encoding_check(const char *utf8)
1802 bi->signon = info->onlinesince ? info->onlinesince : (info->sessionlen + time(NULL)); 1802 bi->signon = info->onlinesince ? info->onlinesince : (info->sessionlen + time(NULL));
1803 if (caps) 1803 if (caps)
1804 bi->caps = caps; 1804 bi->caps = caps;
1805 bi->typingnot = FALSE; 1805 bi->typingnot = FALSE;
1806 bi->ico_informed = FALSE; 1806 bi->ico_informed = FALSE;
1807 free(bi->availablemsg); 1807 free(bi->availmsg);
1808 if (info->availablemsg) 1808 if (info->availmsg)
1809 bi->availablemsg = g_strdup(info->availablemsg); 1809 if (info->availmsg_encoding) {
1810 gchar *enc = g_strdup_printf("charset=\"%s\"", info->availmsg_encoding);
1811 bi->availmsg = oscar_encoding_to_utf8(enc, info->availmsg, info->availmsg_len);
1812 g_free(enc);
1813 } else {
1814 /* No explicit encoding means utf8. Yay. */
1815 bi->availmsg = g_strdup(info->availmsg);
1816 }
1810 else 1817 else
1811 bi->availablemsg = NULL; 1818 bi->availmsg = NULL;
1812 1819
1813 /* Server stored icon stuff */ 1820 /* Server stored icon stuff */
1814 if (info->iconcsumlen) { 1821 if (info->iconcsumlen) {
1815 char *b16, *saved_b16; 1822 char *b16, *saved_b16;
1816 struct buddy *b; 1823 struct buddy *b;
5405 tmp = yay; 5412 tmp = yay;
5406 yay = g_strconcat(tmp, _("<b>Capabilities:</b> "), caps, "\n", NULL); 5413 yay = g_strconcat(tmp, _("<b>Capabilities:</b> "), caps, "\n", NULL);
5407 free(tmp); 5414 free(tmp);
5408 } 5415 }
5409 5416
5410 if (bi->availablemsg && !(b->uc & UC_UNAVAILABLE)) { 5417 if (bi->availmsg && !(b->uc & UC_UNAVAILABLE)) {
5411 gchar *escaped = g_markup_escape_text(bi->availablemsg, strlen(bi->availablemsg)); 5418 gchar *escaped = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg));
5412 tmp = yay; 5419 tmp = yay;
5413 yay = g_strconcat(tmp, _("<b>Available:</b> "), escaped, "\n", NULL); 5420 yay = g_strconcat(tmp, _("<b>Available:</b> "), escaped, "\n", NULL);
5414 free(tmp); 5421 free(tmp);
5415 g_free(escaped); 5422 g_free(escaped);
5416 } 5423 }
5444 ret = gaim_icq_status((b->uc & 0xffff0000) >> 16); 5451 ret = gaim_icq_status((b->uc & 0xffff0000) >> 16);
5445 else 5452 else
5446 ret = g_strdup(_("Away")); 5453 ret = g_strdup(_("Away"));
5447 } else if (GAIM_BUDDY_IS_ONLINE(b)) { 5454 } else if (GAIM_BUDDY_IS_ONLINE(b)) {
5448 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, normalize(b->name)); 5455 struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, normalize(b->name));
5449 if (bi->availablemsg) 5456 if (bi->availmsg)
5450 ret = g_markup_escape_text(bi->availablemsg, strlen(bi->availablemsg)); 5457 ret = g_markup_escape_text(bi->availmsg, strlen(bi->availmsg));
5451 } else { 5458 } else {
5452 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name); 5459 char *gname = aim_ssi_itemlist_findparentname(od->sess->ssi.local, b->name);
5453 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name)) 5460 if (aim_ssi_waitingforauth(od->sess->ssi.local, gname, b->name))
5454 ret = g_strdup(_("Not Authorized")); 5461 ret = g_strdup(_("Not Authorized"));
5455 else 5462 else