| 182 |
182 |
| 183 static void jabber_stream_features_parse(JabberStream *js, xmlnode *packet) |
183 static void jabber_stream_features_parse(JabberStream *js, xmlnode *packet) |
| 184 { |
184 { |
| 185 if(xmlnode_get_child(packet, "starttls")) { |
185 if(xmlnode_get_child(packet, "starttls")) { |
| 186 if(jabber_process_starttls(js, packet)) |
186 if(jabber_process_starttls(js, packet)) |
| 187 |
187 |
| 188 return; |
188 return; |
| 189 } else if(purple_account_get_bool(js->gc->account, "require_tls", FALSE) && !js->gsc) { |
189 } else if(purple_account_get_bool(js->gc->account, "require_tls", FALSE) && !js->gsc) { |
| 190 purple_connection_error_reason (js->gc, |
190 purple_connection_error_reason (js->gc, |
| 191 PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR, |
191 PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR, |
| 192 _("You require encryption, but it is not available on this server.")); |
192 _("You require encryption, but it is not available on this server.")); |
| 734 purple_connection_error_reason (gc, |
734 purple_connection_error_reason (gc, |
| 735 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, |
735 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, |
| 736 _("Invalid XMPP ID")); |
736 _("Invalid XMPP ID")); |
| 737 return; |
737 return; |
| 738 } |
738 } |
| 739 |
739 |
| 740 if (!js->user->domain || *(js->user->domain) == '\0') { |
740 if (!js->user->domain || *(js->user->domain) == '\0') { |
| 741 purple_connection_error_reason (gc, |
741 purple_connection_error_reason (gc, |
| 742 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, |
742 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, |
| 743 _("Invalid XMPP ID. Domain must be set.")); |
743 _("Invalid XMPP ID. Domain must be set.")); |
| 744 return; |
744 return; |
| 745 } |
745 } |
| 746 |
746 |
| 747 if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE))) |
747 if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE))) |
| 748 my_jb->subscription |= JABBER_SUB_BOTH; |
748 my_jb->subscription |= JABBER_SUB_BOTH; |
| 749 |
749 |
| 750 jabber_stream_set_state(js, JABBER_STREAM_CONNECTING); |
750 jabber_stream_set_state(js, JABBER_STREAM_CONNECTING); |
| 751 |
751 |
| 1255 static void jabber_unregister_account_iq_cb(JabberStream *js, xmlnode *packet, gpointer data) { |
1255 static void jabber_unregister_account_iq_cb(JabberStream *js, xmlnode *packet, gpointer data) { |
| 1256 PurpleAccount *account = purple_connection_get_account(js->gc); |
1256 PurpleAccount *account = purple_connection_get_account(js->gc); |
| 1257 const char *type = xmlnode_get_attrib(packet,"type"); |
1257 const char *type = xmlnode_get_attrib(packet,"type"); |
| 1258 if(!strcmp(type,"error")) { |
1258 if(!strcmp(type,"error")) { |
| 1259 char *msg = jabber_parse_error(js, packet, NULL); |
1259 char *msg = jabber_parse_error(js, packet, NULL); |
| 1260 |
1260 |
| 1261 purple_notify_error(js->gc, _("Error unregistering account"), |
1261 purple_notify_error(js->gc, _("Error unregistering account"), |
| 1262 _("Error unregistering account"), msg); |
1262 _("Error unregistering account"), msg); |
| 1263 g_free(msg); |
1263 g_free(msg); |
| 1264 if(js->unregistration_cb) |
1264 if(js->unregistration_cb) |
| 1265 js->unregistration_cb(account, FALSE, js->unregistration_user_data); |
1265 js->unregistration_cb(account, FALSE, js->unregistration_user_data); |
| 1289 } |
1289 } |
| 1290 |
1290 |
| 1291 void jabber_unregister_account(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data) { |
1291 void jabber_unregister_account(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data) { |
| 1292 PurpleConnection *gc = purple_account_get_connection(account); |
1292 PurpleConnection *gc = purple_account_get_connection(account); |
| 1293 JabberStream *js; |
1293 JabberStream *js; |
| 1294 |
1294 |
| 1295 if(gc->state != PURPLE_CONNECTED) { |
1295 if(gc->state != PURPLE_CONNECTED) { |
| 1296 if(gc->state != PURPLE_CONNECTING) |
1296 if(gc->state != PURPLE_CONNECTING) |
| 1297 jabber_login(account); |
1297 jabber_login(account); |
| 1298 js = gc->proto_data; |
1298 js = gc->proto_data; |
| 1299 js->unregistration = TRUE; |
1299 js->unregistration = TRUE; |
| 1300 js->unregistration_cb = cb; |
1300 js->unregistration_cb = cb; |
| 1301 js->unregistration_user_data = user_data; |
1301 js->unregistration_user_data = user_data; |
| 1302 return; |
1302 return; |
| 1303 } |
1303 } |
| 1304 |
1304 |
| 1305 js = gc->proto_data; |
1305 js = gc->proto_data; |
| 1306 |
1306 |
| 1307 if (js->unregistration) { |
1307 if (js->unregistration) { |
| 1308 purple_debug_error("jabber", "Unregistration in process; ignoring duplicate request.\n"); |
1308 purple_debug_error("jabber", "Unregistration in process; ignoring duplicate request.\n"); |
| 1309 return; |
1309 return; |
| 1600 |
1600 |
| 1601 feat = g_new0(JabberFeature,1); |
1601 feat = g_new0(JabberFeature,1); |
| 1602 feat->shortname = g_strdup(shortname); |
1602 feat->shortname = g_strdup(shortname); |
| 1603 feat->namespace = g_strdup(namespace); |
1603 feat->namespace = g_strdup(namespace); |
| 1604 feat->is_enabled = cb; |
1604 feat->is_enabled = cb; |
| 1605 |
1605 |
| 1606 /* try to remove just in case it already exists in the list */ |
1606 /* try to remove just in case it already exists in the list */ |
| 1607 jabber_remove_feature(shortname); |
1607 jabber_remove_feature(shortname); |
| 1608 |
1608 |
| 1609 jabber_features = g_list_append(jabber_features, feat); |
1609 jabber_features = g_list_append(jabber_features, feat); |
| 1610 } |
1610 } |
| 1611 |
1611 |
| 1612 void jabber_remove_feature(const char *shortname) { |
1612 void jabber_remove_feature(const char *shortname) { |
| 1613 GList *feature; |
1613 GList *feature; |
| 1614 for(feature = jabber_features; feature; feature = feature->next) { |
1614 for(feature = jabber_features; feature; feature = feature->next) { |
| 1615 JabberFeature *feat = (JabberFeature*)feature->data; |
1615 JabberFeature *feat = (JabberFeature*)feature->data; |
| 1616 if(!strcmp(feat->shortname, shortname)) { |
1616 if(!strcmp(feat->shortname, shortname)) { |
| 1617 g_free(feat->shortname); |
1617 g_free(feat->shortname); |
| 1618 g_free(feat->namespace); |
1618 g_free(feat->namespace); |
| 1619 |
1619 |
| 1620 g_free(feature->data); |
1620 g_free(feature->data); |
| 1621 jabber_features = g_list_delete_link(jabber_features, feature); |
1621 jabber_features = g_list_delete_link(jabber_features, feature); |
| 1622 break; |
1622 break; |
| 1623 } |
1623 } |
| 1624 } |
1624 } |
| 1682 } |
1685 } |
| 1683 |
1686 |
| 1684 void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) |
1687 void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) |
| 1685 { |
1688 { |
| 1686 JabberBuddy *jb; |
1689 JabberBuddy *jb; |
| |
1690 PurpleAccount *account; |
| |
1691 PurpleConnection *gc; |
| 1687 |
1692 |
| 1688 g_return_if_fail(b != NULL); |
1693 g_return_if_fail(b != NULL); |
| 1689 g_return_if_fail(b->account != NULL); |
1694 |
| 1690 g_return_if_fail(b->account->gc != NULL); |
1695 account = purple_buddy_get_account(b); |
| 1691 g_return_if_fail(b->account->gc->proto_data != NULL); |
1696 g_return_if_fail(account != NULL); |
| 1692 |
1697 |
| 1693 jb = jabber_buddy_find(b->account->gc->proto_data, b->name, |
1698 gc = purple_account_get_connection(account); |
| 1694 FALSE); |
1699 g_return_if_fail(gc != NULL); |
| |
1700 g_return_if_fail(gc->proto_data != NULL); |
| |
1701 |
| |
1702 jb = jabber_buddy_find(gc->proto_data, purple_buddy_get_name(b), FALSE); |
| 1695 |
1703 |
| 1696 if(jb) { |
1704 if(jb) { |
| 1697 JabberBuddyResource *jbr = NULL; |
1705 JabberBuddyResource *jbr = NULL; |
| 1698 PurplePresence *presence = purple_buddy_get_presence(b); |
1706 PurplePresence *presence = purple_buddy_get_presence(b); |
| 1699 const char *sub; |
1707 const char *sub; |
| 1817 NULL); |
1825 NULL); |
| 1818 types = g_list_append(types, type); |
1826 types = g_list_append(types, type); |
| 1819 |
1827 |
| 1820 priority_value = purple_value_new(PURPLE_TYPE_INT); |
1828 priority_value = purple_value_new(PURPLE_TYPE_INT); |
| 1821 purple_value_set_int(priority_value, 1); |
1829 purple_value_set_int(priority_value, 1); |
| |
1830 buzz_enabled = purple_value_new(PURPLE_TYPE_BOOLEAN); |
| |
1831 purple_value_set_boolean(buzz_enabled, TRUE); |
| 1822 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, |
1832 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE, |
| 1823 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT), |
1833 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT), |
| 1824 _("Chatty"), TRUE, TRUE, FALSE, |
1834 _("Chatty"), TRUE, TRUE, FALSE, |
| 1825 "priority", _("Priority"), priority_value, |
1835 "priority", _("Priority"), priority_value, |
| 1826 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
1836 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
| 1831 NULL); |
1841 NULL); |
| 1832 types = g_list_append(types, type); |
1842 types = g_list_append(types, type); |
| 1833 |
1843 |
| 1834 priority_value = purple_value_new(PURPLE_TYPE_INT); |
1844 priority_value = purple_value_new(PURPLE_TYPE_INT); |
| 1835 purple_value_set_int(priority_value, 0); |
1845 purple_value_set_int(priority_value, 0); |
| |
1846 buzz_enabled = purple_value_new(PURPLE_TYPE_BOOLEAN); |
| |
1847 purple_value_set_boolean(buzz_enabled, TRUE); |
| 1836 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, |
1848 type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY, |
| 1837 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_AWAY), |
1849 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_AWAY), |
| 1838 NULL, TRUE, TRUE, FALSE, |
1850 NULL, TRUE, TRUE, FALSE, |
| 1839 "priority", _("Priority"), priority_value, |
1851 "priority", _("Priority"), priority_value, |
| 1840 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
1852 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
| 1841 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
1853 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
| 1842 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
1854 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
| 1843 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
1855 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
| 1844 "buzz", _("Allow Buzz"), buzz_enabled, |
1856 "buzz", _("Allow Buzz"), buzz_enabled, |
| 1845 NULL); |
1857 NULL); |
| 1846 types = g_list_append(types, type); |
1858 types = g_list_append(types, type); |
| 1847 |
1859 |
| 1848 priority_value = purple_value_new(PURPLE_TYPE_INT); |
1860 priority_value = purple_value_new(PURPLE_TYPE_INT); |
| 1849 purple_value_set_int(priority_value, 0); |
1861 purple_value_set_int(priority_value, 0); |
| |
1862 buzz_enabled = purple_value_new(PURPLE_TYPE_BOOLEAN); |
| |
1863 purple_value_set_boolean(buzz_enabled, TRUE); |
| 1850 type = purple_status_type_new_with_attrs(PURPLE_STATUS_EXTENDED_AWAY, |
1864 type = purple_status_type_new_with_attrs(PURPLE_STATUS_EXTENDED_AWAY, |
| 1851 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA), |
1865 jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA), |
| 1852 NULL, TRUE, TRUE, FALSE, |
1866 NULL, TRUE, TRUE, FALSE, |
| 1853 "priority", _("Priority"), priority_value, |
1867 "priority", _("Priority"), priority_value, |
| 1854 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
1868 "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), |
| 1855 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
1869 "mood", _("Mood"), purple_value_new(PURPLE_TYPE_STRING), |
| 1856 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
1870 "moodtext", _("Mood Text"), purple_value_new(PURPLE_TYPE_STRING), |
| 1857 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
1871 "nick", _("Nickname"), purple_value_new(PURPLE_TYPE_STRING), |
| 1858 "buzz", _("Allow Buzz"), buzz_enabled, |
1872 "buzz", _("Allow Buzz"), buzz_enabled, |
| 1859 NULL); |
1873 NULL); |
| 1860 types = g_list_append(types, type); |
1874 types = g_list_append(types, type); |
| 1861 |
1875 |
| 1862 priority_value = purple_value_new(PURPLE_TYPE_INT); |
1876 priority_value = purple_value_new(PURPLE_TYPE_INT); |
| 1863 purple_value_set_int(priority_value, 0); |
1877 purple_value_set_int(priority_value, 0); |
| 2027 JabberID *jid; |
2041 JabberID *jid; |
| 2028 |
2042 |
| 2029 if(!(jid = jabber_id_new(name))) |
2043 if(!(jid = jabber_id_new(name))) |
| 2030 return NULL; |
2044 return NULL; |
| 2031 |
2045 |
| 2032 for(gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { |
2046 for(gnode = purple_blist_get_root(); gnode; |
| 2033 for(cnode = gnode->child; cnode; cnode = cnode->next) { |
2047 gnode = purple_blist_node_get_sibling_next(gnode)) { |
| |
2048 for(cnode = purple_blist_node_get_first_child(gnode); |
| |
2049 cnode; |
| |
2050 cnode = purple_blist_node_get_sibling_next(cnode)) { |
| 2034 PurpleChat *chat = (PurpleChat*)cnode; |
2051 PurpleChat *chat = (PurpleChat*)cnode; |
| 2035 const char *room, *server; |
2052 const char *room, *server; |
| |
2053 GHashTable *components; |
| 2036 if(!PURPLE_BLIST_NODE_IS_CHAT(cnode)) |
2054 if(!PURPLE_BLIST_NODE_IS_CHAT(cnode)) |
| 2037 continue; |
2055 continue; |
| 2038 |
2056 |
| 2039 if(chat->account != account) |
2057 if (purple_chat_get_account(chat) != account) |
| 2040 continue; |
2058 continue; |
| 2041 |
2059 |
| 2042 if(!(room = g_hash_table_lookup(chat->components, "room"))) |
2060 components = purple_chat_get_components(chat); |
| |
2061 if(!(room = g_hash_table_lookup(components, "room"))) |
| 2043 continue; |
2062 continue; |
| 2044 if(!(server = g_hash_table_lookup(chat->components, "server"))) |
2063 if(!(server = g_hash_table_lookup(components, "server"))) |
| 2045 continue; |
2064 continue; |
| 2046 |
2065 |
| 2047 if(jid->node && jid->domain && |
2066 if(jid->node && jid->domain && |
| 2048 !g_utf8_collate(room, jid->node) && !g_utf8_collate(server, jid->domain)) { |
2067 !g_utf8_collate(room, jid->node) && !g_utf8_collate(server, jid->domain)) { |
| 2049 jabber_id_free(jid); |
2068 jabber_id_free(jid); |
| 2320 JabberChat *chat = jabber_chat_find_by_conv(conv); |
2339 JabberChat *chat = jabber_chat_find_by_conv(conv); |
| 2321 |
2340 |
| 2322 if (!chat || !args || !args[0] || !args[1]) |
2341 if (!chat || !args || !args[0] || !args[1]) |
| 2323 return PURPLE_CMD_RET_FAILED; |
2342 return PURPLE_CMD_RET_FAILED; |
| 2324 |
2343 |
| 2325 if (strcmp(args[1], "owner") != 0 && |
2344 if (strcmp(args[1], "owner") != 0 && |
| 2326 strcmp(args[1], "admin") != 0 && |
2345 strcmp(args[1], "admin") != 0 && |
| 2327 strcmp(args[1], "member") != 0 && |
2346 strcmp(args[1], "member") != 0 && |
| 2328 strcmp(args[1], "outcast") != 0 && |
2347 strcmp(args[1], "outcast") != 0 && |
| 2329 strcmp(args[1], "none") != 0) { |
2348 strcmp(args[1], "none") != 0) { |
| 2330 *error = g_strdup_printf(_("Unknown affiliation: \"%s\""), args[1]); |
2349 *error = g_strdup_printf(_("Unknown affiliation: \"%s\""), args[1]); |
| 2450 static gboolean _jabber_send_buzz(JabberStream *js, const char *username, char **error) { |
2469 static gboolean _jabber_send_buzz(JabberStream *js, const char *username, char **error) { |
| 2451 |
2470 |
| 2452 JabberBuddy *jb; |
2471 JabberBuddy *jb; |
| 2453 JabberBuddyResource *jbr; |
2472 JabberBuddyResource *jbr; |
| 2454 PurpleConnection *gc = js->gc; |
2473 PurpleConnection *gc = js->gc; |
| 2455 PurpleAccount *account = purple_connection_get_account(gc); |
2474 PurpleBuddy *buddy = |
| 2456 PurpleConversation *conv = |
2475 purple_find_buddy(purple_connection_get_account(gc), username); |
| 2457 purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, username, |
2476 const gchar *alias = |
| 2458 account); |
2477 buddy ? purple_buddy_get_contact_alias(buddy) : username; |
| 2459 gchar *str; |
2478 |
| 2460 |
|
| 2461 if(!username) |
2479 if(!username) |
| 2462 return FALSE; |
2480 return FALSE; |
| 2463 |
2481 |
| 2464 jb = jabber_buddy_find(js, username, FALSE); |
2482 jb = jabber_buddy_find(js, username, FALSE); |
| 2465 if(!jb) { |
2483 if(!jb) { |
| 2466 *error = g_strdup_printf(_("Unable to buzz, because there is nothing known about user %s."), username); |
2484 *error = g_strdup_printf(_("Unable to buzz, because there is nothing " |
| |
2485 "known about %s."), alias); |
| 2467 return FALSE; |
2486 return FALSE; |
| 2468 } |
2487 } |
| 2469 |
2488 |
| 2470 jbr = jabber_buddy_find_resource(jb, NULL); |
2489 jbr = jabber_buddy_find_resource(jb, NULL); |
| 2471 if (!jbr) { |
2490 if (!jbr) { |
| 2472 *error = g_strdup_printf(_("Unable to buzz, because user %s might be offline."), |
2491 *error = g_strdup_printf(_("Unable to buzz, because %s might be offline."), |
| 2473 username); |
2492 alias); |
| 2474 return FALSE; |
2493 return FALSE; |
| 2475 } |
2494 } |
| 2476 |
2495 |
| 2477 if (jabber_resource_has_capability(jbr, XEP_0224_NAMESPACE)) { |
2496 if (jabber_resource_has_capability(jbr, XEP_0224_NAMESPACE)) { |
| 2478 xmlnode *buzz, *msg = xmlnode_new("message"); |
2497 xmlnode *buzz, *msg = xmlnode_new("message"); |
| 2479 gchar *to; |
2498 gchar *to; |
| 2480 |
2499 |
| 2481 to = g_strdup_printf("%s/%s", username, jbr->name); |
2500 to = g_strdup_printf("%s/%s", username, jbr->name); |
| 2489 xmlnode_set_namespace(buzz, XEP_0224_NAMESPACE); |
2508 xmlnode_set_namespace(buzz, XEP_0224_NAMESPACE); |
| 2490 |
2509 |
| 2491 jabber_send(js, msg); |
2510 jabber_send(js, msg); |
| 2492 xmlnode_free(msg); |
2511 xmlnode_free(msg); |
| 2493 |
2512 |
| 2494 str = g_strdup_printf(_("Buzzing %s..."), username); |
|
| 2495 purple_conversation_write(conv, NULL, str, |
|
| 2496 PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, time(NULL)); |
|
| 2497 g_free(str); |
|
| 2498 |
|
| 2499 return TRUE; |
2513 return TRUE; |
| 2500 } else { |
2514 } else { |
| 2501 *error = g_strdup_printf(_("Unable to buzz, because the user %s does not support it."), username); |
2515 *error = g_strdup_printf(_("Unable to buzz, because %s does " |
| |
2516 "not support it or do not wish to receive buzzes now."), alias); |
| 2502 return FALSE; |
2517 return FALSE; |
| 2503 } |
2518 } |
| 2504 } |
2519 } |
| 2505 |
2520 |
| 2506 static PurpleCmdRet jabber_cmd_buzz(PurpleConversation *conv, |
2521 static PurpleCmdRet jabber_cmd_buzz(PurpleConversation *conv, |
| 2507 const char *cmd, char **args, char **error, void *data) |
2522 const char *cmd, char **args, char **error, void *data) |
| 2508 { |
2523 { |
| 2509 JabberStream *js = conv->account->gc->proto_data; |
2524 JabberStream *js = conv->account->gc->proto_data; |
| 2510 const gchar *who; |
2525 const gchar *who; |
| 2511 |
2526 |
| 2512 if (!args || !args[0]) { |
2527 if (!args || !args[0]) { |
| 2513 /* use the buddy from conversation, if it's a one-to-one conversation */ |
2528 /* use the buddy from conversation, if it's a one-to-one conversation */ |
| 2514 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { |
2529 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { |
| 2515 who = purple_conversation_get_name(conv); |
2530 who = purple_conversation_get_name(conv); |
| 2516 } else { |
2531 } else { |
| 2517 return PURPLE_CMD_RET_FAILED; |
2532 return PURPLE_CMD_RET_FAILED; |
| 2518 } |
2533 } |
| 2519 } else { |
2534 } else { |
| 2520 who = args[0]; |
2535 who = args[0]; |
| 2521 } |
2536 } |
| 2522 |
2537 |
| 2523 purple_conversation_attention(conv, who, 0, PURPLE_MESSAGE_SEND, time(NULL)); |
2538 if (_jabber_send_buzz(js, who, error)) { |
| 2524 return _jabber_send_buzz(js, who, error) ? PURPLE_CMD_RET_OK : PURPLE_CMD_RET_FAILED; |
2539 const gchar *alias; |
| |
2540 gchar *str; |
| |
2541 PurpleBuddy *buddy = |
| |
2542 purple_find_buddy(purple_connection_get_account(conv->account->gc), |
| |
2543 who); |
| |
2544 |
| |
2545 if (buddy != NULL) |
| |
2546 alias = purple_buddy_get_contact_alias(buddy); |
| |
2547 else |
| |
2548 alias = who; |
| |
2549 |
| |
2550 str = g_strdup_printf(_("Buzzing %s..."), alias); |
| |
2551 purple_conversation_write(conv, NULL, str, |
| |
2552 PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NOTIFY, time(NULL)); |
| |
2553 g_free(str); |
| |
2554 |
| |
2555 return PURPLE_CMD_RET_OK; |
| |
2556 } else { |
| |
2557 return PURPLE_CMD_RET_FAILED; |
| |
2558 } |
| 2525 } |
2559 } |
| 2526 |
2560 |
| 2527 GList *jabber_attention_types(PurpleAccount *account) |
2561 GList *jabber_attention_types(PurpleAccount *account) |
| 2528 { |
2562 { |
| 2529 static GList *types = NULL; |
2563 static GList *types = NULL; |
| 2639 PURPLE_CMD_FLAG_PRPL_ONLY, |
2667 PURPLE_CMD_FLAG_PRPL_ONLY, |
| 2640 "prpl-jabber", jabber_cmd_ping, |
2668 "prpl-jabber", jabber_cmd_ping, |
| 2641 _("ping <jid>: Ping a user/component/server."), |
2669 _("ping <jid>: Ping a user/component/server."), |
| 2642 NULL); |
2670 NULL); |
| 2643 purple_cmd_register("buzz", "w", PURPLE_CMD_P_PRPL, |
2671 purple_cmd_register("buzz", "w", PURPLE_CMD_P_PRPL, |
| 2644 PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_PRPL_ONLY | |
2672 PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_PRPL_ONLY | |
| 2645 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, |
2673 PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, |
| 2646 "prpl-jabber", jabber_cmd_buzz, |
2674 "prpl-jabber", jabber_cmd_buzz, |
| 2647 _("buzz: Buzz a user to get their attention"), NULL); |
2675 _("buzz: Buzz a user to get their attention"), NULL); |
| 2648 } |
2676 } |
| 2649 |
2677 |