static void plainprpl_add_buddy_by_contact_request_ok(void *ptr, PurpleRequestFields *fields) { PurpleBuddy *buddy = (PurpleBuddy *) ptr; PurpleAccount *account = buddy->account; plain_plugin_state *pstate; plain_buddy_state *bstate; char *addr_str; const char *name; IP addr; name = purple_request_fields_get_string(fields, "name"); //invite_msg = purple_request_fields_get_string(fields, "invite_msg"); if (name == NULL && strlen(name) == 0) { purple_notify_error(ptr, "Invalid Name", _("Name was empty."), _("You need to enter a name.")); purple_blist_remove_buddy(buddy); } else { addr_str = g_strdup(buddy->name); purple_blist_node_set_string(PURPLE_BLIST_NODE(buddy), "addr_str", addr_str); assert(purple_blist_node_get_string(PURPLE_BLIST_NODE(buddy), "addr_str") != NULL); purple_blist_rename_buddy(buddy, name); g_free(addr_str); pstate = purple_connection_get_protocol_data(buddy->account->gc); bstate = add_buddy_sdata(buddy, pstate); assert(addr_parse_full(&addr, addr_str, PLAIN_DEFAULT_PORT_STR, pstate->sockaf) == 0); addr_parse_full(&addr, addr_str, PLAIN_DEFAULT_PORT_STR, pstate->sockaf); memcpy(&bstate->addr, &addr, sizeof(IP)); purple_prpl_got_user_status(account, buddy->name, PLAIN_STATUS_ONLINE, NULL); } pstate->block_unknown = FALSE; }
static PurpleBuddy* spin_sync_buddy(SpinData* spin, GSList* buddies,const gchar* id, const gchar* name,guint online, const gchar* away,const gchar* photo) { PurpleAccount* account = purple_connection_get_account(spin->gc); /* gchar* lower_name = g_utf8_strdown(name,-1); */ PurpleBuddy* buddy = spin_find_buddy_in_list(buddies,id); if(!buddy) { purple_debug_info("spin","adding buddy: %s\n",/*lower_*/name); buddy = purple_buddy_new(account,/*lower_*/name,NULL); purple_blist_add_buddy(buddy,NULL,NULL,NULL); purple_blist_node_set_string(&buddy->node,"spin-id",id); } /* purple_normalize here? */ if(g_strcmp0(purple_buddy_get_name(buddy),name) != 0) { spin_notify_nick_changed(spin,purple_buddy_get_name(buddy),name); purple_blist_rename_buddy(buddy,name); } spin_sync_photo(spin,buddy,photo); /* do not set status if we got a status after the HTTP request */ if(g_hash_table_lookup(spin->updated_status_list, purple_normalize(account,name))) return buddy; if(online && *away) purple_prpl_got_user_status(account,/*lower_*/name,"away", "message",away,NULL); else if(online) purple_prpl_got_user_status(account,/*lower_*/name,"available",NULL); else purple_prpl_got_user_status(account,/*lower_*/name,"offline",NULL); return buddy; /* g_free(lower_name); */ }
void jabber_roster_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) { JabberStream *js = gc->proto_data; char *who; JabberID *jid; JabberBuddy *jb; JabberBuddyResource *jbr; const char *name; /* If we haven't received the roster yet, ignore any adds */ if (js->state != JABBER_STREAM_CONNECTED) return; name = purple_buddy_get_name(buddy); jid = jabber_id_new(name); if (jid == NULL) { /* TODO: Remove the buddy from the list? */ return; } /* Adding a chat room or a chat buddy to the roster is *not* supported. */ if (jid->node && jabber_chat_find(js, jid->node, jid->domain) != NULL) { /* * This is the same thing Bonjour does. If it causes problems, move * it to an idle callback. */ purple_debug_warning("jabber", "Cowardly refusing to add a MUC user " "to your buddy list and removing the buddy. " "Buddies can only be added by real (non-MUC) " "JID\n"); purple_blist_remove_buddy(buddy); jabber_id_free(jid); return; } who = jabber_id_get_bare_jid(jid); if (jid->resource != NULL) { /* * If the buddy name added contains a resource, strip that off and * rename the buddy. */ purple_blist_rename_buddy(buddy, who); } jb = jabber_buddy_find(js, who, FALSE); purple_debug_info("jabber", "jabber_roster_add_buddy(): Adding %s\n", who); jabber_roster_update(js, who, NULL); if (jb == js->user_jb) { jabber_presence_fake_to_self(js, NULL); } else if(!jb || !(jb->subscription & JABBER_SUB_TO)) { jabber_presence_subscription_set(js, who, "subscribe"); } else if((jbr =jabber_buddy_find_resource(jb, NULL))) { purple_prpl_got_user_status(gc->account, who, jabber_buddy_state_get_status_id(jbr->state), "priority", jbr->priority, jbr->status ? "message" : NULL, jbr->status, NULL); } g_free(who); }