void QuetzalAccount::load(Config cfg) { cfg.beginGroup(QLatin1String("general")); QByteArray password = cfg.value(QLatin1String("passwd"), QString(), Config::Crypted).toUtf8(); if (!password.isEmpty()) { purple_account_set_password(m_account, password.constData()); purple_account_set_remember_password(m_account, true); } purple_account_set_alias(m_account, cfg.value(QLatin1String("alias"), QString()).toUtf8().constData()); purple_account_set_user_info(m_account, cfg.value(QLatin1String("userInfo"), QString()).toUtf8().constData()); QMapIterator<QString, QVariant> it(cfg.value(QLatin1String("quetzal_settings")).toMap()); while (it.hasNext()) { it.next(); QByteArray key = it.key().toUtf8(); QVariant::Type type = it.value().type(); if (type == QVariant::Bool) { purple_account_set_bool(m_account, key.constData(), it.value().toBool()); } else if (type == QVariant::Int || type == QVariant::UInt || type == QVariant::LongLong || type == QVariant::ULongLong) { purple_account_set_int(m_account, key.constData(), it.value().toInt()); } else { purple_account_set_string(m_account, key.constData(), it.value().toString().toUtf8()); } } cfg.endGroup(); RosterStorage::instance()->load(this); int size = cfg.beginArray(QLatin1String("chats")); QString name = QLatin1String("name"); QString recent = QLatin1String("recent"); QString data = QLatin1String("data"); for (int i = 0; i < size; i++) { cfg.setArrayIndex(i); QByteArray alias = cfg.value(name, QString()).toUtf8(); PurpleGroup *group = NULL; if (cfg.value(recent, false)) { group = purple_find_group("Recent"); if (!group) { group = purple_group_new("Recent"); purple_blist_add_group(group, NULL); } } GHashTable *comps = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); QMapIterator<QString, QVariant> it(cfg.value(data).toMap()); while (it.hasNext()) { it.next(); QByteArray key = it.key().toUtf8(); QByteArray value = it.value().toString().toUtf8(); g_hash_table_insert(comps, g_strdup(key.constData()), g_strdup(value.constData())); } PurpleChat *pc = purple_chat_new(m_account, alias.constData(), comps); purple_blist_add_chat(pc, NULL, NULL); } _purple_buddy_icons_blist_loaded_cb(); }
/* after getting info or modify myself, refresh the buddy list accordingly */ static void update_buddy_info(PurpleConnection *gc, gchar **segments) { PurpleBuddy *buddy; qq_data *qd; qq_buddy_data *bd; guint32 uid; gchar *who; gchar *alias_utf8; PurpleAccount *account = purple_connection_get_account(gc); qd = (qq_data *) gc->proto_data; uid = strtoul(segments[QQ_INFO_UID], NULL, 10); who = uid_to_purple_name(uid); qq_filter_str(segments[QQ_INFO_NICK]); alias_utf8 = qq_to_utf8(segments[QQ_INFO_NICK], QQ_CHARSET_DEFAULT); if (uid == qd->uid) { /* it is me */ purple_debug_info("QQ", "Got my info\n"); qd->my_icon = strtol(segments[QQ_INFO_FACE], NULL, 10); if (alias_utf8 != NULL) { purple_account_set_alias(account, alias_utf8); } /* add me to buddy list */ buddy = qq_buddy_find_or_new(gc, uid); } else { buddy = purple_find_buddy(gc->account, who); } if (buddy == NULL || buddy->proto_data == NULL) { g_free(who); g_free(alias_utf8); return; } /* update buddy list (including myself, if myself is the buddy) */ bd = (qq_buddy_data *)buddy->proto_data; bd->age = strtol(segments[QQ_INFO_AGE], NULL, 10); bd->gender = strtol(segments[QQ_INFO_GENDER], NULL, 10); bd->face = strtol(segments[QQ_INFO_FACE], NULL, 10); if (alias_utf8 != NULL) { if (bd->nickname) g_free(bd->nickname); bd->nickname = g_strdup(alias_utf8); } bd->last_update = time(NULL); purple_blist_server_alias_buddy(buddy, bd->nickname); /* convert face num from packet (0-299) to local face (1-100) */ qq_update_buddy_icon(gc->account, who, bd->face); g_free(who); g_free(alias_utf8); }
void AccountWindow::StringOption::responseHandler( CppConsUI::InputDialog& activator, AbstractDialog::ResponseType response) { if (response != AbstractDialog::RESPONSE_OK) return; if (type == TYPE_PASSWORD) purple_account_set_password(account, activator.getText()); else if (type == TYPE_ALIAS) purple_account_set_alias(account, activator.getText()); else purple_account_set_string(account, purple_account_option_get_setting(option), activator.getText()); updateValue(); }
void flist_login(PurpleAccount *pa) { PurpleConnection *pc = purple_account_get_connection(pa); FListAccount *fla; gchar **ac_split; fla = g_new0(FListAccount, 1); fla->pa = pa; fla->pc = pc; fla->all_characters = g_hash_table_new_full((GHashFunc)flist_str_hash, (GEqualFunc)flist_str_equal, g_free, (GDestroyNotify)flist_character_free); fla->rx_buf = g_malloc0(256); fla->rx_len = 0; pc->proto_data = fla; ac_split = g_strsplit(purple_account_get_username(pa), ":", 2); fla->username = g_strdup(ac_split[0]); fla->character = g_strdup(ac_split[1]); fla->password = g_strdup(purple_account_get_password(pa)); //we don't want to display the whole username:character thing if(purple_account_get_alias(pa) == NULL || flist_str_equal(purple_account_get_username(pa), purple_account_get_alias(pa))) { purple_account_set_alias(pa, fla->character); } /* login options */ fla->server_address = g_strdup(purple_account_get_string(pa, "server_address", "chat.f-list.net")); fla->server_port = purple_account_get_int(pa, "server_port", FLIST_PORT); fla->sync_bookmarks = purple_account_get_bool(pa, "sync_bookmarks", FALSE); fla->sync_friends = purple_account_get_bool(pa, "sync_friends", TRUE); fla->debug_mode = purple_account_get_bool(pa, "debug_mode", FALSE); flist_channel_subsystem_load(fla); flist_clear_filter(fla); flist_global_kinks_load(pc); flist_profile_load(pc); flist_friends_load(fla); flist_ticket_timer(fla, 0); g_strfreev(ac_split); }