void BuddyList::add_buddy_ok_cb(PurpleRequestFields *fields) { PurpleAccount *account = purple_request_fields_get_account(fields, "account"); const char *name = purple_request_fields_get_string(fields, "name"); const char *alias = purple_request_fields_get_string(fields, "alias"); int selected = purple_request_fields_get_choice(fields, "group"); GList *list = purple_request_field_choice_get_labels( purple_request_fields_get_field(fields, "group")); const char *group = reinterpret_cast<const char*>(g_list_nth_data(list, selected)); bool err = false; if (!account) { LOG->Message(_("No account specified.")); err = true; } else if (!purple_account_is_connected(account)) { LOG->Message(_("Selected account is not connected.")); err = true; } if (!name || !name[0]) { LOG->Message(_("No buddy name specified.")); err = true; } if (!group || !group[0]) { LOG->Message(_("No group name specified.")); err = true; } if (err) { purple_blist_request_add_buddy(account, name, group, alias); return; } PurpleGroup *g = purple_find_group(group); if (!g) { g = purple_group_new(group); purple_blist_add_group(g, NULL); } PurpleBuddy *b = purple_find_buddy_in_group(account, name, g); if (b) { LOG->Message(_("Specified buddy is already in the list.")); return; } if (alias && !alias[0]) alias = NULL; b = purple_buddy_new(account, name, alias); purple_blist_add_buddy(b, NULL, g, NULL); purple_account_add_buddy(account, b); }
static GntWidget* create_choice_field(PurpleRequestField *field) { int id; GList *list; GntWidget *combo = gnt_combo_box_new(); list = purple_request_field_choice_get_labels(field); for (id = 1; list; list = list->next, id++) { gnt_combo_box_add_data(GNT_COMBO_BOX(combo), GINT_TO_POINTER(id), list->data); } gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), GINT_TO_POINTER(purple_request_field_choice_get_default_value(field))); return combo; }
Request::FieldsDialog::ChoiceField::ChoiceField(PurpleRequestField *field) : field(field) { g_assert(field); char *text = g_strdup_printf("%s%s", purple_request_field_is_required(field) ? "*" : "", purple_request_field_get_label(field)); SetText(text); g_free(text); for (GList *list = purple_request_field_choice_get_labels(field); list; list = list->next) AddOption(reinterpret_cast<const char*>(list->data)); SetSelected(purple_request_field_choice_get_default_value(field)); signal_selection_changed.connect(sigc::mem_fun(this, &ChoiceField::OnSelectionChanged)); }
void BuddyList::add_chat_ok_cb(PurpleRequestFields *fields) { PurpleAccount *account = purple_request_fields_get_account(fields, "account"); const char *name = purple_request_fields_get_string(fields, "name"); const char *alias = purple_request_fields_get_string(fields, "alias"); int selected = purple_request_fields_get_choice(fields, "group"); GList *list = purple_request_field_choice_get_labels( purple_request_fields_get_field(fields, "group")); const char *group = reinterpret_cast<const char*>(g_list_nth_data(list, selected)); bool autojoin = purple_request_fields_get_bool(fields, "autojoin"); bool err = false; if (!account) { LOG->Message(_("No account specified.")); err = true; } else if (!purple_account_is_connected(account)) { LOG->Message(_("Selected account is not connected.")); err = true; } else { PurpleConnection *gc = purple_account_get_connection(account); PurplePluginProtocolInfo *info = PURPLE_PLUGIN_PROTOCOL_INFO( purple_connection_get_prpl(gc)); if (!info->join_chat) { LOG->Message(_("This protocol does not support chat rooms.")); account = NULL; err = true; } } if (!name || !name[0]) { LOG->Message(_("No buddy name specified.")); err = true; } if (!group || !group[0]) { LOG->Message(_("No group name specified.")); err = true; } if (err) { purple_blist_request_add_chat(account, purple_find_group(group), alias, name); return; } PurpleConnection *gc = purple_account_get_connection(account); PurplePluginProtocolInfo *info = PURPLE_PLUGIN_PROTOCOL_INFO( purple_connection_get_prpl(gc)); GHashTable *hash = NULL; if (info->chat_info_defaults) hash = info->chat_info_defaults(gc, name); PurpleChat *chat = purple_chat_new(account, name, hash); if (chat) { PurpleGroup* g = purple_find_group(group); if (!g) { g = purple_group_new(group); purple_blist_add_group(g, NULL); } purple_blist_add_chat(chat, g, NULL); if (alias && alias[0]) purple_blist_alias_chat(chat, alias); purple_blist_node_set_bool(reinterpret_cast<PurpleBlistNode*>(chat), PACKAGE_NAME "-autojoin", autojoin); } }
QuetzalFieldsDialog::QuetzalFieldsDialog(const char *title, const char *primary, const char *secondary, PurpleRequestFields *fields, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, void *user_data, QWidget *parent) : QuetzalRequestDialog(PURPLE_REQUEST_FIELDS, user_data, parent) { m_ok_cb = (PurpleRequestFieldsCb) ok_cb; m_cancel_cb = (PurpleRequestFieldsCb) cancel_cb; m_fields = fields; DataItem root = createItem(title, primary, secondary); GList *group_it = purple_request_fields_get_groups(m_fields); bool useGroupBox = group_it->next; debug() << "useGroupBox" << useGroupBox; for (; group_it; group_it = group_it->next) { PurpleRequestFieldGroup *group = reinterpret_cast<PurpleRequestFieldGroup*>(group_it->data); DataItem groupItem; if (useGroupBox) groupItem = DataItem(purple_request_field_group_get_title(group)); GList *field_it = purple_request_field_group_get_fields(group); for (; field_it; field_it = field_it->next) { PurpleRequestField *field = reinterpret_cast<PurpleRequestField*>(field_it->data); debug() << field->id << purple_request_field_is_visible(field) << purple_request_field_get_type(field); if (!purple_request_field_is_visible(field)) continue; DataItem item(purple_request_field_get_id(field), purple_request_field_get_label(field), QVariant()); switch (purple_request_field_get_type(field)) { case PURPLE_REQUEST_FIELD_STRING: item.setData(QString::fromUtf8(purple_request_field_string_get_default_value(field))); item.setProperty("multiline", purple_request_field_string_is_multiline(field)); item.setProperty("password", bool(purple_request_field_string_is_masked(field))); item.setReadOnly(!purple_request_field_string_is_editable(field)); debug() << item.name() << item.data() << item.property("password") << item.isReadOnly(); break; case PURPLE_REQUEST_FIELD_INTEGER: item.setData(purple_request_field_int_get_default_value(field)); item.setProperty("minValue", G_MININT); item.setProperty("maxValue", G_MAXINT); break; case PURPLE_REQUEST_FIELD_BOOLEAN: item.setData(bool(purple_request_field_bool_get_default_value(field))); break; case PURPLE_REQUEST_FIELD_CHOICE: { GList *labels = purple_request_field_choice_get_labels(field); QStringList alternatives; for (; labels; labels = labels->next) alternatives << QString::fromUtf8(reinterpret_cast<char*>(labels->data)); item.setData(alternatives.value(purple_request_field_choice_get_default_value(field))); item.setProperty("alternatives", alternatives); } break; case PURPLE_REQUEST_FIELD_LIST: break; case PURPLE_REQUEST_FIELD_LABEL: item.setData(purple_request_field_get_label(field)); item.setReadOnly(true); item.setProperty("hideTitle", true); break; case PURPLE_REQUEST_FIELD_IMAGE: { QImageReader reader; QByteArray data = QByteArray::fromRawData(purple_request_field_image_get_buffer(field), purple_request_field_image_get_size(field)); QBuffer buffer(&data); reader.setDevice(&buffer); QSize imageSize = reader.size(); if (imageSize.isValid()) { imageSize.setWidth(imageSize.width() * purple_request_field_image_get_scale_x(field)); imageSize.setHeight(imageSize.height() * purple_request_field_image_get_scale_y(field)); reader.setScaledSize(imageSize); } item.setData(qVariantFromValue(reader.read())); item.setProperty("imageSize", qVariantFromValue(imageSize)); item.setReadOnly(true); } break; case PURPLE_REQUEST_FIELD_ACCOUNT: break; case PURPLE_REQUEST_FIELD_NONE: default: continue; } item.setProperty("mandatory", purple_request_field_is_required(field)); if (useGroupBox) groupItem.addSubitem(item); else root.addSubitem(item); } if (useGroupBox) root.addSubitem(groupItem); } createItem(root, ok_text, cancel_text); return; }