Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/notification.c @ 31130:1830fa548302
propagate from branch 'im.pidgin.pidgin' (head b0098e2250f135d121960d8152e144e7e344125e)
to branch 'im.pidgin.cpw.qulogic.msnp16' (head 03b7207e3af73e90ff9aea7c633dec9dd9d3ed1a)
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sat, 06 Feb 2010 05:15:35 +0000 |
parents | 4c8bd8efacb8 746bf7d8b34e |
children | 33b4ae796648 |
comparison
equal
deleted
inserted
replaced
31129:b27d2e8f137e | 31130:1830fa548302 |
---|---|
1171 } | 1171 } |
1172 g_free(friendly); | 1172 g_free(friendly); |
1173 | 1173 |
1174 msn_user_set_object(user, msnobj); | 1174 msn_user_set_object(user, msnobj); |
1175 | 1175 |
1176 user->mobile = (clientid & MSN_CLIENT_CAP_MSNMOBILE) || (user->phone.mobile && user->phone.mobile[0] == '+'); | 1176 user->mobile = (clientid & MSN_CLIENT_CAP_MSNMOBILE) || (user->extinfo && user->extinfo->phone_mobile && user->extinfo->phone_mobile[0] == '+'); |
1177 msn_user_set_clientid(user, clientid); | 1177 msn_user_set_clientid(user, clientid); |
1178 msn_user_set_extcaps(user, extcaps); | 1178 msn_user_set_extcaps(user, extcaps); |
1179 msn_user_set_network(user, networkid); | 1179 msn_user_set_network(user, networkid); |
1180 | 1180 |
1181 msn_user_set_state(user, state); | 1181 msn_user_set_state(user, state); |
1352 clientid = strtoul(cmd->params[4], &extcap_str, 10); | 1352 clientid = strtoul(cmd->params[4], &extcap_str, 10); |
1353 if (session->protocol_ver >= 16 && extcap_str && *extcap_str) | 1353 if (session->protocol_ver >= 16 && extcap_str && *extcap_str) |
1354 extcaps = strtoul(extcap_str+1, NULL, 10); | 1354 extcaps = strtoul(extcap_str+1, NULL, 10); |
1355 else | 1355 else |
1356 extcaps = 0; | 1356 extcaps = 0; |
1357 user->mobile = (clientid & MSN_CLIENT_CAP_MSNMOBILE) || (user->phone.mobile && user->phone.mobile[0] == '+'); | 1357 |
1358 user->mobile = (clientid & MSN_CLIENT_CAP_MSNMOBILE) || (user->extinfo && user->extinfo->phone_mobile && user->extinfo->phone_mobile[0] == '+'); | |
1358 | 1359 |
1359 msn_user_set_clientid(user, clientid); | 1360 msn_user_set_clientid(user, clientid); |
1360 msn_user_set_extcaps(user, extcaps); | 1361 msn_user_set_extcaps(user, extcaps); |
1361 msn_user_set_network(user, networkid); | 1362 msn_user_set_network(user, networkid); |
1362 | 1363 |
1707 } | 1708 } |
1708 } | 1709 } |
1709 } | 1710 } |
1710 } | 1711 } |
1711 | 1712 |
1713 static void parse_currentmedia(MsnUser *user, const char *cmedia) | |
1714 { | |
1715 char **cmedia_array; | |
1716 int strings = 0; | |
1717 | |
1718 if (!cmedia || cmedia[0] == '\0') { | |
1719 purple_debug_info("msn", "No currentmedia string\n"); | |
1720 return; | |
1721 } | |
1722 | |
1723 purple_debug_info("msn", "Parsing currentmedia string: \"%s\"\n", cmedia); | |
1724 | |
1725 cmedia_array = g_strsplit(cmedia, "\\0", 0); | |
1726 | |
1727 /* | |
1728 * 0: Application | |
1729 * 1: 'Music'/'Games'/'Office' | |
1730 * 2: '1' if enabled, '0' if not | |
1731 * 3: Format (eg. {0} by {1}) | |
1732 * 4: Title | |
1733 * If 'Music': | |
1734 * 5: Artist | |
1735 * 6: Album | |
1736 * 7: ? | |
1737 */ | |
1738 #if GLIB_CHECK_VERSION(2,6,0) | |
1739 strings = g_strv_length(cmedia_array); | |
1740 #else | |
1741 while (cmedia_array[++strings] != NULL); | |
1742 #endif | |
1743 | |
1744 if (strings >= 4 && !strcmp(cmedia_array[2], "1")) { | |
1745 if (user->extinfo == NULL) | |
1746 user->extinfo = g_new0(MsnUserExtendedInfo, 1); | |
1747 else { | |
1748 g_free(user->extinfo->media_album); | |
1749 g_free(user->extinfo->media_artist); | |
1750 g_free(user->extinfo->media_title); | |
1751 } | |
1752 | |
1753 if (!strcmp(cmedia_array[1], "Music")) | |
1754 user->extinfo->media_type = CURRENT_MEDIA_MUSIC; | |
1755 else if (!strcmp(cmedia_array[1], "Games")) | |
1756 user->extinfo->media_type = CURRENT_MEDIA_GAMES; | |
1757 else if (!strcmp(cmedia_array[1], "Office")) | |
1758 user->extinfo->media_type = CURRENT_MEDIA_OFFICE; | |
1759 else | |
1760 user->extinfo->media_type = CURRENT_MEDIA_UNKNOWN; | |
1761 | |
1762 user->extinfo->media_title = g_strdup(cmedia_array[strings == 4 ? 3 : 4]); | |
1763 user->extinfo->media_artist = strings > 5 ? g_strdup(cmedia_array[5]) : NULL; | |
1764 user->extinfo->media_album = strings > 6 ? g_strdup(cmedia_array[6]) : NULL; | |
1765 } | |
1766 | |
1767 g_strfreev(cmedia_array); | |
1768 } | |
1769 | |
1712 /* | 1770 /* |
1713 * Get the UBX's PSM info | 1771 * Get the UBX's PSM info |
1714 * Post it to the User status | 1772 * Post it to the User status |
1715 * Thanks for Chris <ukdrizzle@yahoo.co.uk>'s code | 1773 * Thanks for Chris <ukdrizzle@yahoo.co.uk>'s code |
1716 */ | 1774 */ |
1722 PurpleAccount *account; | 1780 PurpleAccount *account; |
1723 MsnUser *user; | 1781 MsnUser *user; |
1724 const char *passport; | 1782 const char *passport; |
1725 xmlnode *payloadNode; | 1783 xmlnode *payloadNode; |
1726 char *psm_str, *str; | 1784 char *psm_str, *str; |
1727 CurrentMedia media = {CURRENT_MEDIA_UNKNOWN, NULL, NULL, NULL}; | |
1728 | 1785 |
1729 session = cmdproc->session; | 1786 session = cmdproc->session; |
1730 account = session->account; | 1787 account = session->account; |
1731 | 1788 |
1732 passport = cmd->params[0]; | 1789 passport = cmd->params[0]; |
1740 passport, str); | 1797 passport, str); |
1741 g_free(str); | 1798 g_free(str); |
1742 return; | 1799 return; |
1743 } | 1800 } |
1744 | 1801 |
1802 /* Free any existing media info for this user */ | |
1803 if (user->extinfo) { | |
1804 g_free(user->extinfo->media_album); | |
1805 g_free(user->extinfo->media_artist); | |
1806 g_free(user->extinfo->media_title); | |
1807 user->extinfo->media_album = NULL; | |
1808 user->extinfo->media_artist = NULL; | |
1809 user->extinfo->media_title = NULL; | |
1810 } | |
1811 | |
1745 if (len != 0) { | 1812 if (len != 0) { |
1746 payloadNode = xmlnode_from_str(payload, len); | 1813 payloadNode = xmlnode_from_str(payload, len); |
1747 if (!payloadNode) { | 1814 if (!payloadNode) { |
1748 purple_debug_error("msn", "UBX XML parse Error!\n"); | 1815 purple_debug_error("msn", "UBX XML parse Error!\n"); |
1749 | 1816 |
1750 msn_user_set_statusline(user, NULL); | 1817 msn_user_set_statusline(user, NULL); |
1751 msn_user_set_currentmedia(user, NULL); | |
1752 | 1818 |
1753 msn_user_update(user); | 1819 msn_user_update(user); |
1754 return; | 1820 return; |
1755 } | 1821 } |
1756 | 1822 |
1757 psm_str = msn_get_psm(payloadNode); | 1823 psm_str = msn_get_psm(payloadNode); |
1758 msn_user_set_statusline(user, psm_str); | 1824 msn_user_set_statusline(user, psm_str); |
1759 g_free(psm_str); | 1825 g_free(psm_str); |
1760 | 1826 |
1761 str = msn_get_currentmedia(payloadNode); | 1827 str = msn_get_currentmedia(payloadNode); |
1762 if (msn_parse_currentmedia(str, &media)) | 1828 parse_currentmedia(user, str); |
1763 msn_user_set_currentmedia(user, &media); | |
1764 else | |
1765 msn_user_set_currentmedia(user, NULL); | |
1766 g_free(media.title); | |
1767 g_free(media.album); | |
1768 g_free(media.artist); | |
1769 g_free(str); | 1829 g_free(str); |
1770 | 1830 |
1771 parse_user_endpoints(user, payloadNode); | 1831 parse_user_endpoints(user, payloadNode); |
1772 | 1832 |
1773 xmlnode_free(payloadNode); | 1833 xmlnode_free(payloadNode); |
1774 | 1834 |
1775 } else { | 1835 } else { |
1776 msn_user_set_statusline(user, NULL); | 1836 msn_user_set_statusline(user, NULL); |
1777 msn_user_set_currentmedia(user, NULL); | |
1778 } | 1837 } |
1779 | 1838 |
1780 msn_user_update(user); | 1839 msn_user_update(user); |
1781 } | 1840 } |
1782 | 1841 |