Mercurial > pidgin
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 |