void hon_parse_request(PurpleConnection *gc,gchar* buffer){ gchar *title = NULL,*msg = NULL; guint8 notification_type = read_byte(buffer); guint32 unknown = read_guint32(buffer); switch (notification_type) { case HON_NOTIFICATION_ADDED_AS_BUDDY: title = g_strdup(_("Friendship Request")); msg = g_strdup_printf(_("Sent friendship request to %s"),buffer); purple_notify_info(NULL,title,msg,NULL); break; case HON_NOTIFICATION_BUDDY_ACCEPTED: purple_request_input(gc, NULL, _("Friend Request"), NULL, buffer, TRUE, FALSE, NULL, _("_Accept"), G_CALLBACK(finish_auth_request), _("_Ignore"), NULL, purple_connection_get_account(gc), buffer, NULL, gc); break; default : title = g_strdup_printf(_("Unknown request notification type (%d)"),notification_type); msg = g_strdup(buffer); purple_notify_info(NULL,title,msg,NULL); break; } g_free(title); g_free(msg); }
static void toggle_privacy(PurplePluginAction *action) { privateMode = !privateMode; purple_debug_info("MusicInfo", "privacy mode switched"); if(privateMode) purple_notify_info(NULL, pluginTitle, pModeOn, pModeOn_sub); else purple_notify_info(NULL, pluginTitle, pModeOff, pModeOff_sub); }
/* process group cmd reply "join group" */ void qq_process_group_cmd_join_group(guint8 *data, gint len, PurpleConnection *gc) { gint bytes; guint32 id; guint8 reply; qq_room_data *rmd; gchar *msg; g_return_if_fail(data != NULL && len > 0); if (len < 5) { purple_debug_error("QQ", "Invalid join room reply, expect %d bytes, read %d bytes\n", 5, len); return; } bytes = 0; bytes += qq_get32(&id, data + bytes); bytes += qq_get8(&reply, data + bytes); /* join group OK */ rmd = qq_room_data_find(gc, id); /* need to check if group is NULL or not. */ g_return_if_fail(rmd != NULL); switch (reply) { case QQ_ROOM_JOIN_OK: purple_debug_info("QQ", "Succeeded in joining group \"%s\"\n", rmd->title_utf8); rmd->my_role = QQ_ROOM_ROLE_YES; /* this must be shown before getting online members */ qq_room_conv_open(gc, rmd); break; case QQ_ROOM_JOIN_NEED_AUTH: purple_debug_info("QQ", "Failed to join room ext id %u %s, needs authentication\n", rmd->ext_id, rmd->title_utf8); rmd->my_role = QQ_ROOM_ROLE_NO; do_room_join_request(gc, rmd); break; case QQ_ROOM_JOIN_DENIED: msg = g_strdup_printf(_("Qun %u denied from joining"), rmd->ext_id); purple_notify_info(gc, _("QQ Qun Operation"), _("Failed:"), msg); g_free(msg); break; default: purple_debug_info("QQ", "Failed to join room ext id %u %s, unknown reply: 0x%02x\n", rmd->ext_id, rmd->title_utf8, reply); purple_notify_info(gc, _("QQ Qun Operation"), _("Failed:"), _("Join Qun, Unknown Reply")); } }
static void nullprpl_chat_invite(PurpleConnection *gc, int id, const char *message, const char *who) { const char *username = purple_account_get_username(purple_connection_get_account(gc)); PurpleChatConversation *chat = purple_conversations_find_chat(gc, id); const char *room = purple_conversation_get_name(PURPLE_CONVERSATION(chat)); PurpleAccount *to_acct = purple_accounts_find(who, NULLPRPL_ID); purple_debug_info("nullprpl", "%s is inviting %s to join chat room %s\n", username, who, room); if (to_acct) { PurpleChatConversation *to_conv = purple_conversations_find_chat(purple_account_get_connection(to_acct), id); if (to_conv) { char *tmp = g_strdup_printf("%s is already in chat room %s.", who, room); purple_debug_info("nullprpl", "%s is already in chat room %s; " "ignoring invitation from %s\n", who, room, username); purple_notify_info(gc, _("Chat invitation"), _("Chat invitation"), tmp, purple_request_cpar_from_conversation(PURPLE_CONVERSATION(to_conv))); g_free(tmp); } else { GHashTable *components; components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); g_hash_table_replace(components, "room", g_strdup(room)); g_hash_table_replace(components, "invited_by", g_strdup(username)); purple_serv_got_chat_invite(purple_account_get_connection(to_acct), room, username, message, components); } } }
static void purplemot_chat_invite(PurpleConnection *gc, int id, const char *message, const char *who) { const char *username = gc->account->username; PurpleConversation *conv = purple_find_chat(gc, id); const char *room = conv->name; PurpleAccount *to_acct = purple_accounts_find(who, PURPLEMOT_ID); purple_debug_info("purplemot", "%s is inviting %s to join chat room %s\n", username, who, room); if (to_acct) { PurpleConversation *to_conv = purple_find_chat(to_acct->gc, id); if (to_conv) { char *tmp = g_strdup_printf("%s is already in chat room %s.", who, room); purple_debug_info("purplemot", "%s is already in chat room %s; " "ignoring invitation from %s\n", who, room, username); purple_notify_info(gc, _("Chat invitation"), _("Chat invitation"), tmp); g_free(tmp); } else { GHashTable *components; components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); g_hash_table_replace(components, "room", g_strdup(room)); g_hash_table_replace(components, "invited_by", g_strdup(username)); serv_got_chat_invite(to_acct->gc, room, username, message, components); } } }
static void ycht_connection_error(YchtConn *ycht, const gchar *error) { purple_notify_info(ycht->gc, NULL, _("Connection problem with the YCHT server"), error, purple_request_cpar_from_connection(ycht->gc)); ycht_connection_close(ycht); }
char *gaym_parse_ctcp(struct gaym_conn *gaym, const char *from, const char *to, const char *msg, int notice) { PurpleConnection *gc; const char *cur = msg + 1; char *buf, *ctcp; time_t timestamp; /* Note that this is NOT correct w.r.t. multiple CTCPs in one message and low-level quoting ... but if you want that crap, use a real IRC client. */ if (msg[0] != '\001' || msg[strlen(msg) - 1] != '\001') return g_strdup(msg); if (!strncmp(cur, "ACTION ", 7)) { cur += 7; buf = g_strdup_printf("/me %s", cur); buf[strlen(buf) - 1] = '\0'; return buf; } else if (!strncmp(cur, "PING ", 5)) { if (notice) { /* reply */ sscanf(cur, "PING %lu", ×tamp); gc = purple_account_get_connection(gaym->account); if (!gc) return NULL; buf = g_strdup_printf(_("Reply time from %s: %lu seconds"), from, time(NULL) - timestamp); purple_notify_info(gc, _("PONG"), _("CTCP PING reply"), buf); g_free(buf); return NULL; } else { buf = gaym_format(gaym, "vt:", "NOTICE", from, msg); gaym_send(gaym, buf); g_free(buf); gc = purple_account_get_connection(gaym->account); } } else if (!strncmp(cur, "VERSION", 7) && !notice) { buf = gaym_format(gaym, "vt:", "NOTICE", from, "\001VERSION Purple IRC\001"); gaym_send(gaym, buf); g_free(buf); } else if (!strncmp(cur, "DCC SEND ", 9)) { //gaym_dccsend_recv(gaym, from, msg + 10); return NULL; } ctcp = g_strdup(msg + 1); ctcp[strlen(ctcp) - 1] = '\0'; buf = g_strdup_printf("Received CTCP '%s' (to %s) from %s", ctcp, to, from); g_free(ctcp); return buf; }
static void jabber_chat_room_configure_cb(JabberStream *js, xmlnode *packet, gpointer data) { xmlnode *query, *x; const char *type = xmlnode_get_attrib(packet, "type"); const char *from = xmlnode_get_attrib(packet, "from"); char *msg; JabberChat *chat; JabberID *jid; if(!type || !from) return; if(!strcmp(type, "result")) { jid = jabber_id_new(from); if(!jid) return; chat = jabber_chat_find(js, jid->node, jid->domain); jabber_id_free(jid); if(!chat) return; if(!(query = xmlnode_get_child(packet, "query"))) return; for(x = xmlnode_get_child(query, "x"); x; x = xmlnode_get_next_twin(x)) { const char *xmlns; if(!(xmlns = xmlnode_get_namespace(x))) continue; if(!strcmp(xmlns, "jabber:x:data")) { chat->config_dialog_type = PURPLE_REQUEST_FIELDS; chat->config_dialog_handle = jabber_x_data_request(js, x, jabber_chat_room_configure_x_data_cb, chat); return; } } } else if(!strcmp(type, "error")) { char *msg = jabber_parse_error(js, packet); purple_notify_error(js->gc, _("Configuration error"), _("Configuration error"), msg); if(msg) g_free(msg); return; } msg = g_strdup_printf("Unable to configure room %s", from); purple_notify_info(js->gc, _("Unable to configure"), _("Unable to configure"), msg); g_free(msg); }
static void blist_example_menu_item(PurpleBlistNode *node, gpointer userdata) { purple_debug_info("nullprpl", "example menu item clicked on user %s\n", purple_buddy_get_name(PURPLE_BUDDY(node))); purple_notify_info(NULL, /* plugin handle or PurpleConnection */ _("Primary title"), _("Secondary title"), _("This is the callback for the nullprpl menu item."), NULL); }
/* you are rejected by the person */ static void server_buddy_rejected_me(PurpleConnection *gc, gchar *from, gchar *to, guint8 *data, gint data_len) { guint32 uid; PurpleBuddy *buddy; gchar *msg, *msg_utf8; gint bytes; gchar **segments; gchar *primary, *secondary; qq_buddy_data *bd; g_return_if_fail(from != NULL && to != NULL); qq_show_packet("server_buddy_rejected_me", data, data_len); if (data_len <= 0) { msg = g_strdup( _("No reason given") ); } else { segments = g_strsplit((gchar *)data, "\x1f", 1); if (segments != NULL && segments[0] != NULL) { msg = g_strdup(segments[0]); g_strfreev(segments); bytes = strlen(msg) + 1; if (bytes < data_len) { server_buddy_check_code(gc, from, data + bytes, data_len - bytes); } } else { msg = g_strdup( _("No reason given") ); } } msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT); if (msg_utf8 == NULL) { msg_utf8 = g_strdup( _("Unknown reason") ); } g_free(msg); primary = g_strdup_printf(_("Rejected by %s"), from); secondary = g_strdup_printf(_("Message: %s"), msg_utf8); purple_notify_info(gc, _("QQ Buddy"), primary, secondary); g_free(msg_utf8); g_free(primary); g_free(secondary); uid = strtoul(from, NULL, 10); g_return_if_fail(uid != 0); buddy = qq_buddy_find(gc, uid); if (buddy != NULL && (bd = purple_buddy_get_protocol_data(buddy)) != NULL) { /* Not authorized now, free buddy data */ qq_buddy_data_free(bd); purple_buddy_set_protocol_data(buddy, NULL); } }
static void jabber_chat_register_cb(JabberStream *js, const char *from, JabberIqType type, const char *id, xmlnode *packet, gpointer data) { xmlnode *query, *x; char *msg; JabberChat *chat; JabberID *jid; if (!from) return; if (type == JABBER_IQ_RESULT) { jid = jabber_id_new(from); if(!jid) return; chat = jabber_chat_find(js, jid->node, jid->domain); jabber_id_free(jid); if(!chat) return; if(!(query = xmlnode_get_child(packet, "query"))) return; for(x = xmlnode_get_child(query, "x"); x; x = xmlnode_get_next_twin(x)) { const char *xmlns; if(!(xmlns = xmlnode_get_namespace(x))) continue; if(!strcmp(xmlns, "jabber:x:data")) { jabber_x_data_request(js, x, jabber_chat_register_x_data_cb, chat); return; } } } else if (type == JABBER_IQ_ERROR) { char *msg = jabber_parse_error(js, packet, NULL); purple_notify_error(js->gc, _("Registration error"), _("Registration error"), msg); if(msg) g_free(msg); return; } msg = g_strdup_printf("Unable to configure room %s", from); purple_notify_info(js->gc, _("Unable to configure"), _("Unable to configure"), msg); g_free(msg); }
static void blist_example_menu_item(PurpleBlistNode *node, void *userdata) { purple_debug_info("purplemot", "example menu item clicked on user %s\n", ((PurpleBuddy *)node)->name); purple_notify_info(NULL, /* plugin handle or PurpleConnection */ _("Primary title"), _("Secondary title"), _("This is the callback for the purplemot menu item.")); }
static void dummy_login(PurpleAccount *acct) { purple_debug_info("dummytw", "dummy_login\n"); purple_notify_info(acct->gc, "Attention please", "Please re-add Twitter protocol", "Twitter plug-in from Microblog-Purple has been undergo important upgrades,which makes it incompatible with the old plug-in\n" "\n" "To upgrade, please REMOVE \"OldTwitterIM\", then RE-ADD \"TwitterIM\" back\n" "\n" "Sorry for any inconvenience, and enjoy your twitter-er experience" ); }
static void auto_accept_complete_cb(PurpleXfer *xfer, PurpleXfer *my) { if (xfer == my && purple_prefs_get_bool(PREF_NOTIFY) && !purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, xfer->who, xfer->account)) { char *message = g_strdup_printf(_("Autoaccepted file transfer of \"%s\" from \"%s\" completed."), xfer->filename, xfer->who); purple_notify_info(NULL, _("Autoaccept complete"), message, NULL); g_free(message); } }
void irc_msg_wallops(struct irc_conn *irc, const char *name, const char *from, char **args) { PurpleConnection *gc = purple_account_get_connection(irc->account); char *nick, *msg; if (!args || !args[0] || !gc) return; nick = irc_mask_nick(from); msg = g_strdup_printf (_("Wallops from %s"), nick); g_free(nick); purple_notify_info(gc, NULL, msg, args[0]); g_free(msg); }
/* process the server reply for my request to remove myself from a buddy */ void qq_process_buddy_remove_me(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid) { gchar *msg; g_return_if_fail(data != NULL && data_len != 0); if (data[0] == 0) { purple_debug_info("QQ", "Reply OK for removing me from %u's buddy list\n", uid); return; } msg = g_strdup_printf(_("Failed removing me from %d's buddy list"), uid); purple_notify_info(gc, _("QQ Buddy"), msg, NULL); g_free(msg); }
static void action_show_chat(PurpleBlistNode * node, gpointer flag) { PurpleChat *chat = (PurpleChat *)node; PurpleAccount *account = purple_chat_get_account(chat); PurpleConnection *gc = purple_account_get_connection(account); GHashTable *components = purple_chat_get_components(chat); gchar *num_str; guint32 room_id; qq_room_data *rmd; g_return_if_fail(PURPLE_BLIST_NODE_IS_CHAT(node)); g_return_if_fail(components != NULL); num_str = g_hash_table_lookup(components, QQ_ROOM_KEY_INTERNAL_ID); if (!num_str) { purple_debug_error("QQ", "Cannot find Room! Wait and Retry"); return; } room_id = strtoul(num_str, NULL, 10); g_return_if_fail(room_id != 0); rmd = qq_room_data_find(gc, room_id); g_return_if_fail(rmd != NULL); if (flag) { rmd->is_show_chat = TRUE; g_hash_table_replace(components, g_strdup(QQ_ROOM_KEY_ISSHOW), g_strdup_printf("%u", TRUE)); purple_notify_info(gc, _("QQ Chat Room"), _("Receive and Show QQ Chat Room Message"), num_str); } else { rmd->is_show_chat = FALSE; g_hash_table_replace(components, g_strdup(QQ_ROOM_KEY_ISSHOW), g_strdup_printf("%u", FALSE)); purple_notify_info(gc, _("QQ Chat Room"), _("QQ Chat Room Message Blocked"), num_str); } }
static void system_msg(MsnCmdProc *cmdproc, MsnMessage *msg) { GHashTable *table; const char *type_s; if (strcmp(msg->remote_user, "Hotmail")) { pecan_warning ("unofficial message"); return; } table = msn_message_get_hashtable_from_body(msg); if ((type_s = g_hash_table_lookup(table, "Type")) != NULL) { int type = atoi(type_s); char buf[MSN_BUF_LEN]; int minutes; switch (type) { case 1: minutes = atoi(g_hash_table_lookup(table, "Arg1")); g_snprintf(buf, sizeof(buf), dngettext(PACKAGE, "The MSN server will shut down for maintenance " "in %d minute. You will automatically be " "signed out at that time. Please finish any " "conversations in progress.\n\nAfter the " "maintenance has been completed, you will be " "able to successfully sign in.", "The MSN server will shut down for maintenance " "in %d minutes. You will automatically be " "signed out at that time. Please finish any " "conversations in progress.\n\nAfter the " "maintenance has been completed, you will be " "able to successfully sign in.", minutes), minutes); default: break; } if (*buf != '\0') purple_notify_info(cmdproc->session->account->gc, NULL, buf, NULL); } g_hash_table_destroy(table); }
void upnp_discovery_cb(gboolean success, gpointer data) { purple_notify_info(the_plugin,"Debug","Upnp discovery",success?"Ok!":"Failed!"); if (!success) no_upnp(); char *ip; if (!upnp_get_ip(&ip)) no_upnp(); purple_debug_misc(PLUGIN_ID,"upnp_get_ip()=\"%s\"\n",ip); purple_value_set_string(server_ip,ip); if (!upnp_add_port_mapping(atoi(purple_value_get_string(port)))) no_upnp(); start_direct_connection(); }
void hon_parse_notification(PurpleConnection *gc,gchar* buffer){ PurpleBuddy* buddy; guint32 buddyid; PurpleGroup* buddies; hon_account* hon = gc->proto_data; guint8 notification_type = read_byte(buffer); gchar *title = NULL,*msg = NULL; switch (notification_type) { case HON_NOTIFICATION_ADDED_AS_BUDDY: case HON_NOTIFICATION_BUDDY_ACCEPTED: buddies = purple_find_group(HON_BUDDIES_GROUP); buddyid = read_guint32(buffer); read_guint32(buffer); /* notification id */ g_hash_table_insert(hon->id2nick,GINT_TO_POINTER(buddyid),g_strdup(buffer)); buddy = purple_buddy_new(gc->account,buffer,NULL); purple_blist_add_buddy(buddy,NULL,buddies,NULL); title = g_strdup(_("Friendship Accepted")); if (notification_type == HON_NOTIFICATION_ADDED_AS_BUDDY) msg = g_strdup_printf(_("Accepted friendship request from %s"),buffer); else msg = g_strdup_printf(_("%s accepted your friendship request"),buffer); break; /* case HON_NOTIFICATION_REMOVED_AS_BUDDY: title = g_strdup(_("User removed you as buddy")); break; case HON_NOTIFICATION_BUDDY_REMOVED: title = g_strdup(_("Buddy removed")); break; */ default : title = g_strdup_printf(_("Unknown notification type (%d)"),notification_type); msg = g_strdup(buffer); break; } purple_notify_info(NULL,title,msg,NULL); g_free(title); g_free(msg); }
/* process the server reply for my request to remove a buddy */ void qq_process_remove_buddy(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid) { PurpleBuddy *buddy = NULL; gchar *msg; g_return_if_fail(data != NULL && data_len != 0); g_return_if_fail(uid != 0); buddy = qq_buddy_find(gc, uid); if (data[0] != 0) { msg = g_strdup_printf(_("Failed removing buddy %u"), uid); purple_notify_info(gc, _("QQ Buddy"), msg, NULL); g_free(msg); } purple_debug_info("QQ", "Reply OK for removing buddy\n"); /* remove buddy again */ if (buddy != NULL) { qq_buddy_free(buddy); } }
void irc_msg_pong(struct irc_conn *irc, const char *name, const char *from, char **args) { PurpleConversation *convo; PurpleConnection *gc; char **parts, *msg; time_t oldstamp; if (!args || !args[1]) return; parts = g_strsplit(args[1], " ", 2); if (!parts[0] || !parts[1]) { g_strfreev(parts); return; } if (sscanf(parts[1], "%lu", &oldstamp) != 1) { msg = g_strdup(_("Error: invalid PONG from server")); } else { msg = g_strdup_printf(_("PING reply -- Lag: %lu seconds"), time(NULL) - oldstamp); } convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, parts[0], irc->account); g_strfreev(parts); if (convo) { if (purple_conversation_get_type (convo) == PURPLE_CONV_TYPE_CHAT) purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "PONG", msg, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL)); else purple_conv_im_write(PURPLE_CONV_IM(convo), "PONG", msg, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL)); } else { gc = purple_account_get_connection(irc->account); if (!gc) { g_free(msg); return; } purple_notify_info(gc, NULL, "PONG", msg); } g_free(msg); }
static void nullprpl_join_chat(PurpleConnection *gc, GHashTable *components) { const char *username = purple_account_get_username(purple_connection_get_account(gc)); const char *room = g_hash_table_lookup(components, "room"); int chat_id = g_str_hash(room); purple_debug_info("nullprpl", "%s is joining chat room %s\n", username, room); if (!purple_conversations_find_chat(gc, chat_id)) { purple_serv_got_joined_chat(gc, chat_id, room); /* tell everyone that we joined, and add them if they're already there */ foreach_gc_in_chat(joined_chat, gc, chat_id, NULL); } else { char *tmp = g_strdup_printf(_("%s is already in chat room %s."), username, room); purple_debug_info("nullprpl", "%s is already in chat room %s\n", username, room); purple_notify_info(gc, _("Join chat"), _("Join chat"), tmp, purple_request_cpar_from_connection(gc)); g_free(tmp); } }
static void nullprpl_reject_chat(PurpleConnection *gc, GHashTable *components) { const char *invited_by = g_hash_table_lookup(components, "invited_by"); const char *room = g_hash_table_lookup(components, "room"); const char *username = purple_account_get_username(purple_connection_get_account(gc)); PurpleConnection *invited_by_gc = get_nullprpl_gc(invited_by); char *message = g_strdup_printf( "%s %s %s.", username, _("has rejected your invitation to join the chat room"), room); purple_debug_info("nullprpl", "%s has rejected %s's invitation to join chat room %s\n", username, invited_by, room); purple_notify_info(invited_by_gc, _("Chat invitation rejected"), _("Chat invitation rejected"), message, purple_request_cpar_from_connection(gc)); g_free(message); }
static void purplemot_reject_chat(PurpleConnection *gc, GHashTable *components) { const char *invited_by = g_hash_table_lookup(components, "invited_by"); const char *room = g_hash_table_lookup(components, "room"); const char *username = gc->account->username; PurpleConnection *invited_by_gc = get_purplemot_gc(invited_by); char *message = g_strdup_printf( "%s %s %s.", username, _("has rejected your invitation to join the chat room"), room); purple_debug_info("purplemot", "%s has rejected %s's invitation to join chat room %s\n", username, invited_by, room); purple_notify_info(invited_by_gc, _("Chat invitation rejected"), _("Chat invitation rejected"), message); g_free(message); }
void finch_prefs_show_keyring(void) { PurpleRequestFields *fields; if (pref_request.keyring_window != NULL) { gnt_window_present(pref_request.keyring_window); return; } fields = purple_keyring_read_settings(); if (fields == NULL) { purple_notify_info(NULL, _("Keyring settings"), _("Selected keyring doesn't allow any configuration"), NULL, NULL); return; } pref_request.keyring_window = purple_request_fields(NULL, _("Keyring settings"), NULL, NULL, fields, _("Save"), G_CALLBACK(finch_prefs_keyring_save), _("Cancel"), G_CALLBACK(finch_prefs_keyring_cancel), NULL, NULL); }
// calls motmot_invite (libmotmot) static void purplemot_join_chat(PurpleConnection *gc, GHashTable *components) { // JULIE // to join chat, first call upon almighty paxos // must figure out distinction between *joining* a chat and *creating* a chat const char *username = gc->account->username; const char *room = g_hash_table_lookup(components, "room"); int chat_id = g_str_hash(room); purple_debug_info("purplemot", "%s is joining chat room %s\n", username, room); if (!purple_find_chat(gc, chat_id)) { serv_got_joined_chat(gc, chat_id, room); } else { char *tmp = g_strdup_printf(_("%s is already in chat room %s."), username, room); purple_debug_info("purplemot", "%s is already in chat room %s\n", username, room); purple_notify_info(gc, _("Join chat"), _("Join chat"), tmp); g_free(tmp); } }
void fb_add_buddy(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group) { gchar *postdata; gchar *url; FacebookAccount *fba = pc->proto_data; gchar *buddy_tmp; if (!purple_account_get_bool( fba->account, "facebook_manage_friends", FALSE)) { purple_notify_info(fba->pc, _("Friend not added"), _("Adding Facebook friends via Pidgin is disabled"), _("Either add a friend via Facebook.com or edit your account preferences")); // TODO: Message here return; } if (atoi(buddy->name) == fba->uid) { purple_account_set_bool(fba->account, "facebook_hide_self", FALSE); return; } buddy_tmp = g_strdup(purple_url_encode(buddy->name)); postdata = g_strdup_printf( "confirmed=1&add=Add+Friend&action=follow_up&uid=%s&flids=&flid_name=&source=search&is_from_whitelist=0&message=&failed_captcha=0&post_form_id=%s", buddy_tmp, fba->post_form_id); url = g_strdup_printf("/ajax/addfriend.php?id=%s", buddy_tmp); g_free(buddy_tmp); fb_post_or_get(fba, FB_METHOD_POST, NULL, url, postdata, NULL, NULL, FALSE); g_free(postdata); g_free(url); }
static void configure_plugin_cb(GntWidget *button, gpointer null) { PurplePlugin *plugin; PurplePluginInfo *info; FinchPluginInfoPrivate *priv = NULL; FinchPluginUiData *ui_data; g_return_if_fail(plugins.tree != NULL); plugin = gnt_tree_get_selection_data(GNT_TREE(plugins.tree)); if (!purple_plugin_is_loaded(plugin)) { purple_notify_error(plugin, _("Error"), _("Plugin need to be loaded before you can configure it."), NULL, NULL); return; } info = purple_plugin_get_info(plugin); if (purple_plugin_info_get_ui_data(info)) return; ui_data = g_new0(FinchPluginUiData, 1); purple_plugin_info_set_ui_data(info, ui_data); if (FINCH_IS_PLUGIN_INFO(info)) priv = FINCH_PLUGIN_INFO_GET_PRIVATE(info); if (priv && priv->pref_frame_cb != NULL) { GntWidget *window = gnt_vbox_new(FALSE); GntWidget *box, *button; gnt_box_set_toplevel(GNT_BOX(window), TRUE); gnt_box_set_title(GNT_BOX(window), purple_plugin_info_get_name(info)); gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID); box = priv->pref_frame_cb(); gnt_box_add_widget(GNT_BOX(window), box); box = gnt_hbox_new(FALSE); gnt_box_add_widget(GNT_BOX(window), box); button = gnt_button_new(_("Close")); gnt_box_add_widget(GNT_BOX(box), button); g_signal_connect_swapped(G_OBJECT(button), "activate", G_CALLBACK(gnt_widget_destroy), window); g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(remove_confwin), plugin); gnt_widget_show(window); ui_data->type = FINCH_PLUGIN_UI_DATA_TYPE_WINDOW; ui_data->u.window = window; } else if (purple_plugin_info_get_pref_request_cb(info)) { PurplePluginPrefRequestCb pref_request_cb = purple_plugin_info_get_pref_request_cb(info); gpointer handle; ui_data->type = FINCH_PLUGIN_UI_DATA_TYPE_REQUEST; ui_data->u.request_handle = handle = pref_request_cb(plugin); purple_request_add_close_notify(handle, purple_callback_set_zero, &info->ui_data); purple_request_add_close_notify(handle, g_free, ui_data); } else if (purple_plugin_info_get_pref_frame_cb(info)) { PurplePluginPrefFrameCb pref_frame_cb = purple_plugin_info_get_pref_frame_cb(info); GntWidget *win = process_pref_frame(pref_frame_cb(plugin)); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(remove_confwin), plugin); ui_data->type = FINCH_PLUGIN_UI_DATA_TYPE_WINDOW; ui_data->u.window = win; } else { purple_notify_info(plugin, _("Error"), _("No configuration " "options for this plugin."), NULL, NULL); g_free(ui_data); purple_plugin_info_set_ui_data(info, NULL); } }
static void nap_callback(gpointer data, gint source, PurpleInputCondition condition) { PurpleConnection *gc = data; struct nap_data *ndata = gc->proto_data; PurpleAccount *account = NULL; PurpleConversation *c = NULL; PurpleNotifyUserInfo *pnui = NULL; gchar *buf = NULL, *buf2 = NULL, *buf3 = NULL, **res = NULL; unsigned short header[2] = { 0 , 0 }; int len = 0; int command = 0; int i; account = purple_connection_get_account(gc); if (read(source, (void*)header, 4) != 4) { purple_connection_error(gc, _("Unable to read header from server")); return; } len = header[0]; command = header[1]; buf = (gchar *)g_malloc((len + 1) * sizeof(gchar)); buf[len] = '\0'; i = 0; do { int tmp = read(source, buf + i, len - i); if (tmp <= 0) { g_free(buf); buf = g_strdup_printf(_("Unable to read message from server: %s. Command is %hd, length is %hd."), strerror(errno), len, command); purple_connection_error(gc, buf); g_free(buf); return; } i += tmp; } while (i != len); purple_debug(PURPLE_DEBUG_MISC, "napster", "R %3hd: %s\n", command, buf); switch (command) { case 000: /* MSG_SERVER_ERROR */ purple_notify_error(gc, NULL, buf, NULL); purple_input_remove(gc->inpa); gc->inpa = 0; close(source); purple_connection_error(gc, _("Unknown server error.")); break; case 003: /* MSG_SERVER_EMAIL */ purple_debug(PURPLE_DEBUG_MISC, "napster", "Registered with e-mail address: %s\n", buf); ndata->email = g_strdup(buf); /* Our signon is complete */ purple_connection_set_state(gc, PURPLE_CONNECTED); /* Send the server our buddy list */ nap_send_buddylist(gc); break; case 201: /* MSG_SERVER_SEARCH_RESULT */ res = g_strsplit(buf, " ", 0); purple_prpl_got_user_status(account, res[0], "available", NULL); g_strfreev(res); break; case 202: /* MSG_SERVER_SEARCH_END */ purple_prpl_got_user_status(account, buf, "offline", NULL); break; case 205: /* MSG_CLIENT_PRIVMSG */ res = g_strsplit(buf, " ", 2); buf2 = g_markup_escape_text(res[1], -1); serv_got_im(gc, res[0], buf2, 0, time(NULL)); g_free(buf2); g_strfreev(res); break; case 209: /* MSG_SERVER_USER_SIGNON */ /* USERNAME SPEED */ res = g_strsplit(buf, " ", 2); purple_prpl_got_user_status(account, res[0], "available", NULL); g_strfreev(res); break; case 210: /* MSG_SERVER_USER_SIGNOFF */ /* USERNAME SPEED */ res = g_strsplit(buf, " ", 2); purple_prpl_got_user_status(account, res[0], "offline", NULL); g_strfreev(res); break; case 214: /* MSG_SERVER_STATS */ res = g_strsplit(buf, " ", 3); buf2 = g_strdup_printf(_("users: %s, files: %s, size: %sGB"), res[0], res[1], res[2]); serv_got_im(gc, "server", buf2, 0, time(NULL)); g_free(buf2); g_strfreev(res); break; case 301: /* MSG_SERVER_HOTLIST_ACK */ /* Our buddy was added successfully */ break; case 302: /* MSG_SERVER_HOTLIST_ERROR */ buf2 = g_strdup_printf(_("Unable to add \"%s\" to your Napster hotlist"), buf); purple_notify_error(gc, NULL, buf2, NULL); g_free(buf2); break; case 316: /* MSG_SERVER_DISCONNECTING */ /* we have been kicked off =^( */ purple_connection_error(gc, _("You were disconnected from the server.")); break; case 401: /* MSG_CLIENT_PART */ c = nap_find_chat(gc, buf); if (c) serv_got_chat_left(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(c))); break; case 403: /* MSG_SERVER_PUBLIC */ res = g_strsplit(buf, " ", 3); c = nap_find_chat(gc, res[0]); if (c) serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(c)), res[1], 0, res[2], time((time_t)NULL)); g_strfreev(res); break; case 404: /* MSG_SERVER_NOSUCH */ /* abused by opennap servers to broadcast stuff */ buf2 = g_markup_escape_text(buf, -1); serv_got_im(gc, "server", buf2, 0, time(NULL)); g_free(buf2); break; case 405: /* MSG_SERVER_JOIN_ACK */ c = nap_find_chat(gc, buf); if (!c) serv_got_joined_chat(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(c)), buf); break; case 407: /* MSG_SERVER_PART */ res = g_strsplit(buf, " ", 0); c = nap_find_chat(gc, res[0]); purple_conv_chat_remove_user(PURPLE_CONV_CHAT(c), res[1], NULL); g_strfreev(res); break; case 406: /* MSG_SERVER_JOIN */ case 408: /* MSG_SERVER_CHANNEL_USER_LIST */ res = g_strsplit(buf, " ", 4); c = nap_find_chat(gc, res[0]); purple_conv_chat_add_user(PURPLE_CONV_CHAT(c), res[1], NULL, PURPLE_CBFLAGS_NONE, TRUE); g_strfreev(res); break; case 409: /* MSG_SERVER_CHANNEL_USER_LIST_END */ break; case 410: /* MSG_SERVER_TOPIC */ /* display the topic in the channel */ res = g_strsplit(buf, " ", 2); c = nap_find_chat(gc, res[0]); purple_conv_chat_set_topic(PURPLE_CONV_CHAT(c), res[0], res[1]); g_strfreev(res); break; case 603: /* MSG_CLIENT_WHOIS */ buf2 = g_strdup_printf(_("%s requested your information"), buf); serv_got_im(gc, "server", buf2, 0, time(NULL)); g_free(buf2); break; case 604: /* MSG_SERVER_WHOIS_RESPONSE */ /* XXX - Format is: "Elite" 37 " " "Active" 0 0 0 0 "purple 0.63cvs" 0 0 192.168.1.41 32798 0 unknown flounder */ res = g_strsplit(buf, " ", 2); /* res[0] == username */ pnui = purple_notify_user_info_new(); purple_notify_user_info_add_pair(pnui, _("Napster User Info:"), res[1]); purple_notify_userinfo(gc, res[0], pnui, NULL, NULL); g_strfreev(res); break; case 621: case 622: /* MSG_CLIENT_MOTD */ /* also replaces MSG_SERVER_MOTD, so we should display it */ buf2 = g_markup_escape_text(buf, -1); serv_got_im(gc, "motd", buf2, 0, time(NULL)); g_free(buf2); break; case 627: /* MSG_CLIENT_WALLOP */ /* abused by opennap server maintainers to broadcast stuff */ buf2 = g_markup_escape_text(buf, -1); serv_got_im(gc, "wallop", buf2, 0, time(NULL)); g_free(buf2); break; case 628: /* MSG_CLIENT_ANNOUNCE */ buf2 = g_markup_escape_text(buf, -1); serv_got_im(gc, "announce", buf2, 0, time(NULL)); g_free(buf); break; case 748: /* MSG_SERVER_GHOST */ /* Looks like someone logged in as us! =-O */ purple_connection_error(gc, _("You have signed on from another location.")); break; case 751: /* MSG_CLIENT_PING */ buf2 = g_strdup_printf(_("%s requested a PING"), buf); serv_got_im(gc, "server", buf2, 0, time(NULL)); g_free(buf2); /* send back a pong */ /* MSG_CLIENT_PONG */ nap_write_packet(gc, 752, "%s", buf); break; case 752: /* MSG_CLIENT_PONG */ buf2 = g_strdup_printf("Received pong from %s", buf); purple_notify_info(gc, NULL, buf2, NULL); g_free(buf2); break; case 824: /* MSG_CLIENT_EMOTE */ res = g_strsplit(buf, " ", 3); buf2 = g_strndup(res[2]+1, strlen(res[2]) - 2); /* chomp off the surround quotes */ buf3 = g_strdup_printf("/me %s", buf2); g_free(buf2); if ((c = nap_find_chat(gc, res[0]))) { purple_conv_chat_write(PURPLE_CONV_CHAT(c), res[1], buf3, PURPLE_MESSAGE_NICK, time(NULL)); } g_free(buf3); g_strfreev(res); break; default: purple_debug(PURPLE_DEBUG_MISC, "napster", "Unknown packet %hd: %s\n", command, buf); break; } g_free(buf); }