static gint compare_status(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurplePresence *p1=NULL, *p2=NULL; if(!node1) { return 0; } if(PURPLE_BLIST_NODE_IS_CHAT(node1) && PURPLE_BLIST_NODE_IS_CHAT(node2)) { return 0; } else if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { return 1; } else if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { return -1; } if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { p1 = purple_buddy_get_presence( purple_contact_get_priority_buddy((PurpleContact *)node1) ); } if(node2 && PURPLE_BLIST_NODE_IS_CONTACT(node2)) { p2 = purple_buddy_get_presence( purple_contact_get_priority_buddy((PurpleContact *)node2) ); } return purple_presence_compare(p1, p2); }
static gint compare_protocol(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurpleAccount *acc1=NULL, *acc2=NULL; if(!node1) { return 0; } if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { acc1 = ((PurpleChat *)node1)->account; } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { acc1 = ((PurpleBuddy *)node1)->account; } else if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { acc1 = (purple_contact_get_priority_buddy((PurpleContact *)node1))->account; } if(node2) { if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { acc2 = ((PurpleChat *)node2)->account; } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { acc2 = ((PurpleBuddy *)node2)->account; } else if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { acc2 = (purple_contact_get_priority_buddy((PurpleContact *)node2))->account; } } return purple_utf8_strcasecmp( purple_account_get_protocol_id(acc1), acc2 ? purple_account_get_protocol_id(acc2) : NULL ); }
static gint compare_account(PurpleBlistNode *node1, PurpleBlistNode *node2) { GList *cur; PurpleAccount *acc1=NULL, *acc2=NULL, *account; if(!node1 || !node2) return 0; if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { acc1 = ((PurpleChat *)node1)->account; } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { acc1 = ((PurpleBuddy *)node1)->account; } else if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { acc1 = (purple_contact_get_priority_buddy((PurpleContact *)node1))->account; } if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { acc2 = ((PurpleChat *)node2)->account; } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { acc2 = ((PurpleBuddy *)node2)->account; } else if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { acc2 = (purple_contact_get_priority_buddy((PurpleContact *)node2))->account; } for(cur = purple_accounts_get_all(); cur; cur = cur->next) { account = cur->data; if(account == acc1 && account == acc2) { return 0; } else if(account == acc1) { return -1; } else if(account == acc2) { return 1; } } return 0; }
bool BuddyListContact::lessOrEqual(const BuddyListNode& other) const { const BuddyListContact *o = dynamic_cast<const BuddyListContact*>(&other); if (o) { PurpleBuddy *left = purple_contact_get_priority_buddy(contact); PurpleBuddy *right = purple_contact_get_priority_buddy(o->contact); return lessOrEqualByBuddySort(left, right); } return lessOrEqualByType(other); }
void BuddyListContact::retrieveUserInfo() { PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact); PurpleConnection *gc = purple_account_get_connection( purple_buddy_get_account(buddy)); retrieveUserInfoForName(gc, purple_buddy_get_name(buddy)); }
void purple_events_ui_menu_add(PurpleBlistNode *node, GList **menu, PurpleEventsContext *context) { PurpleBlistNode *group = NULL; node = _purple_events_ui_get_good_node(node); if ( ( node == NULL ) || ( ( purple_blist_node_get_flags(node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE ) > 0 ) ) return; if ( PURPLE_BLIST_NODE_IS_CONTACT(node) ) group = PURPLE_BLIST_NODE(purple_buddy_get_group(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)))); gint current = purple_blist_node_get_int(node, "events"); GList *actions = NULL; PurpleMenuAction *action = NULL; const gchar *label = ""; if ( current != 0 ) { if ( PURPLE_BLIST_NODE_IS_GROUP(node) || ( purple_blist_node_get_int(group, "events") == 0 ) ) label = _("Use global settings"); else label = _("Use group settings"); action = purple_menu_action_new(label, (PurpleCallback)_purple_events_ui_reset_setting, NULL, NULL); actions = g_list_prepend(actions, action); } if ( current >= 0 ) { action = purple_menu_action_new(_("Disable all events"), (PurpleCallback)_purple_events_ui_disable_all_events, NULL, NULL); actions = g_list_prepend(actions, action); } action = purple_menu_action_new(_("Select events"), (PurpleCallback)_purple_events_ui_events_selection_dialog, context, NULL); actions = g_list_prepend(actions, action); switch ( current ) { case -1: label = _("Current events: all disabled"); break; case 0: if ( PURPLE_BLIST_NODE_IS_GROUP(node) || ( purple_blist_node_get_int(group, "events") == 0 ) ) label = _("Current events: global settings"); else label = _("Current events: group settings"); break; case 1: label = _("Current events: selection"); break; } actions = g_list_prepend(actions, NULL); action = purple_menu_action_new(label, NULL, NULL, NULL); actions = g_list_prepend(actions, action); *menu = g_list_append(*menu, NULL); action = purple_menu_action_new(_("Events"), NULL, NULL, actions); *menu = g_list_append(*menu, action); }
void BuddyListContact::onActivate(Button& activator) { PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact); BuddyListNode *bnode = reinterpret_cast<BuddyListNode*>( purple_blist_node_get_ui_data(PURPLE_BLIST_NODE(buddy))); if (bnode) bnode->onActivate(activator); }
static gint compare_onofflinetime(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurpleBuddy *buddy1=NULL, *buddy2=NULL; int t1=0, t2=0; if(!node1) { return 0; } if(PURPLE_BLIST_NODE_IS_CHAT(node1) && PURPLE_BLIST_NODE_IS_CHAT(node2)) { return 0; } else if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { return 1; } else if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { return -1; } if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { buddy1 = purple_contact_get_priority_buddy((PurpleContact *)node1); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { buddy1 = (PurpleBuddy *)node1; } if(PURPLE_BUDDY_IS_ONLINE(buddy1)) { t1 = purple_presence_get_login_time(purple_buddy_get_presence(buddy1)); } else { t1 = purple_blist_node_get_int((PurpleBlistNode *)buddy1, "last_seen"); } if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { buddy2 = purple_contact_get_priority_buddy((PurpleContact *)node2); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { buddy2 = (PurpleBuddy *)node2; } if(PURPLE_BUDDY_IS_ONLINE(buddy2)) { t2 = purple_presence_get_login_time(purple_buddy_get_presence(buddy2)); } else { t2 = purple_blist_node_get_int((PurpleBlistNode *)buddy2, "last_seen"); } if(t1 > t2) { return -1; } if(t2 > t1) { return 1; } return 0; }
static gint compare_onoffline(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurpleBuddy *buddy1=NULL, *buddy2=NULL; if(!node1) { return 0; } if(!node2) { return 0; } if(PURPLE_BLIST_NODE_IS_CHAT(node1) && PURPLE_BLIST_NODE_IS_CHAT(node2)) { return 0; } else if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { return 1; } else if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { return -1; } if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { buddy1 = purple_contact_get_priority_buddy((PurpleContact *)node1); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { buddy1 = (PurpleBuddy *)node1; } if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { buddy2 = purple_contact_get_priority_buddy((PurpleContact *)node2); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { buddy2 = (PurpleBuddy *)node2; } if(PURPLE_BUDDY_IS_ONLINE(buddy1)) { if(PURPLE_BUDDY_IS_ONLINE(buddy2)) { return 0; } else { return -1; } } else { if(PURPLE_BUDDY_IS_ONLINE(buddy2)) { return 1; } else { return 0; } } return 0; }
static gpointer meebo_find_parent(PurpleBlistNode *node) { if (PURPLE_IS_CONTACT(node)) { PurpleBuddy *buddy = purple_contact_get_priority_buddy(PURPLE_CONTACT(node)); if (buddy && !PURPLE_BUDDY_IS_ONLINE(buddy)) { return &meebo; } } return default_manager->find_parent(node); }
static gboolean buddy_click_cb(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { PurpleContact *contact = user_data; PurpleBuddy *b = purple_contact_get_priority_buddy(contact); PurpleConversation *conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, purple_buddy_get_account(b), purple_buddy_get_name(b)); purple_conversation_present(conv); return TRUE; }
static gint compare_priority(PurpleBlistNode *node1, PurpleBlistNode *node2) { int p1, p2; if(!node1) { return 0; } if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { p1 = purple_blist_node_get_int( (PurpleBlistNode *)purple_contact_get_priority_buddy((PurpleContact *)node1), "extended_sort_method_priority" ); } else { p1 = purple_blist_node_get_int(node1, "extended_sort_method_priority"); } if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { p2 = purple_blist_node_get_int( (PurpleBlistNode *)purple_contact_get_priority_buddy((PurpleContact *)node2), "extended_sort_method_priority" ); } else { p2 = purple_blist_node_get_int(node2, "extended_sort_method_priority"); } if(p1 == PRIORITY_UNDEFINED) { p1=PRIORITY_NORMAL; } if(p2 == PRIORITY_UNDEFINED) { p2=PRIORITY_NORMAL; } if(p1 > p2) { return -1; } if(p2 > p1) { return 1; } return 0; }
static void _purple_events_ui_events_selection_dialog(PurpleBlistNode *node, PurpleEventsContext *context) { node = _purple_events_ui_get_good_node(node); if ( node == NULL ) return; PurpleRequestFields *request; PurpleRequestFieldGroup *group; PurpleRequestField *field; group = purple_request_field_group_new(NULL); gint current; guint i; gboolean v; for ( i = 0 ; _purple_events_ui_events[i] != NULL ; ++i ) { current = purple_blist_node_get_int(node, _purple_events_ui_events[i]); if ( current != 0 ) v = ( current > 0 ); else { gchar *pref_name; pref_name = g_strconcat("/plugins/core/events/", _purple_events_ui_events[i], NULL); v = purple_prefs_get_bool(pref_name); g_free(pref_name); } field = purple_request_field_bool_new(_purple_events_ui_events[i], _(_purple_events_ui_events_labels[i]), v); purple_request_field_group_add_field(group, field); } request = purple_request_fields_new(); purple_request_fields_add_group(request, group); purple_request_fields(context->plugin, _("Events selection"), PURPLE_BLIST_NODE_IS_CONTACT(node) ? _("Select events for contact") : _("Select events for group"), NULL, request, PURPLE_BLIST_NODE_IS_CONTACT(node) ? _("_Set events for contact") : _("_Set events for group"), G_CALLBACK(_purple_events_ui_events_selection), _("_Cancel"), NULL, NULL, PURPLE_BLIST_NODE_IS_CONTACT(node) ? purple_buddy_get_name(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))) : NULL, NULL, node); }
static void buddy_ticker_update_contact(PurpleContact *contact) { TickerData *td = buddy_ticker_find_contact(contact); if (!td) return; /* pop up the ticker window again */ buddy_ticker_create_window(); if (purple_contact_get_priority_buddy(contact) == NULL) buddy_ticker_remove(td); else { buddy_ticker_set_pixmap(contact); gtk_label_set_text(GTK_LABEL(td->label), purple_contact_get_alias(contact)); } }
static gpointer on_offline_find_parent(PurpleBlistNode *node) { gpointer ret = NULL; if (PURPLE_IS_CONTACT(node)) { node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))); ret = PURPLE_BUDDY_IS_ONLINE(PURPLE_BUDDY(node)) ? online : offline; } else if (PURPLE_IS_BUDDY(node)) { ret = purple_blist_node_get_parent(node); finch_blist_manager_add_node(ret); } else if (PURPLE_IS_CHAT(node)) { ret = online; } return ret; }
int BuddyListContact::getColorPair(const char *widget, const char *property) const { if (BUDDYLIST->getColorizationMode() != BuddyList::COLOR_BY_ACCOUNT || strcmp(property, "normal")) return Button::getColorPair(widget, property); PurpleAccount *account = purple_buddy_get_account(purple_contact_get_priority_buddy(contact)); int fg = purple_account_get_ui_int(account, "centerim5", "buddylist-foreground-color", CppConsUI::Curses::Color::DEFAULT); int bg = purple_account_get_ui_int(account, "centerim5", "buddylist-background-color", CppConsUI::Curses::Color::DEFAULT); CppConsUI::ColorScheme::Color c(fg,bg); return COLORSCHEME->getColorPair(c); }
void BuddyListContact::update() { BuddyListNode::update(); PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact); if (!buddy) { /* The contact does not have any associated buddy, ignore it until it gets * a buddy assigned. */ setText("*Contact*"); setVisibility(false); return; } // format contact size char *size; if (contact->currentsize > 1) size = g_strdup_printf(" (%d)", contact->currentsize); else size = NULL; // format contact label const char *alias = purple_contact_get_alias(contact); const char *status = getBuddyStatus(buddy); char *text; if (status[0]) text = g_strdup_printf("%s %s%s", status, alias, size ? size : ""); else text = g_strdup_printf("%s%s", alias, size ? size : ""); setText(text); g_free(size); g_free(text); sortIn(); updateColorScheme(); if (!purple_account_is_connected(purple_buddy_get_account(buddy))) { // hide if account is offline setVisibility(false); } else setVisibility(BUDDYLIST->getShowOfflineBuddiesPref() || status[0]); updateFilterVisibility(alias); }
void BuddyListContact::updateColorScheme() { char *new_scheme; PurpleBuddy *buddy; switch (BUDDYLIST->getColorizationMode()) { case BuddyList::COLOR_BY_STATUS: buddy = purple_contact_get_priority_buddy(contact); new_scheme = Utils::getColorSchemeString("buddylistcontact", buddy); setColorScheme(new_scheme); g_free(new_scheme); break; default: // note: COLOR_BY_ACCOUNT case is handled by BuddyListContact::draw() setColorScheme("buddylistcontact"); break; } }
static void translate_action_blist_cb(PurpleBlistNode *node, PurpleKeyValuePair *pair) { PurpleConversation *conv = NULL; gchar *message; PurpleChat *chat; PurpleContact *contact; PurpleBuddy *buddy; if (pair == NULL) purple_blist_node_set_string(node, DEST_LANG_SETTING, NULL); else purple_blist_node_set_string(node, DEST_LANG_SETTING, pair->key); switch(node->type) { case PURPLE_BLIST_CHAT_NODE: chat = (PurpleChat *) node; conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, purple_chat_get_name(chat), chat->account); break; case PURPLE_BLIST_CONTACT_NODE: contact = (PurpleContact *) node; node = (PurpleBlistNode *)purple_contact_get_priority_buddy(contact); //fallthrough intentional case PURPLE_BLIST_BUDDY_NODE: buddy = (PurpleBuddy *) node; conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, purple_buddy_get_name(buddy), purple_buddy_get_account(buddy)); break; default: break; } if (conv != NULL && pair != NULL) { message = g_strdup_printf("Now translating to %s", (const gchar *)pair->value); purple_conversation_write(conv, NULL, message, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LOG, time(NULL)); g_free(message); } }
void BuddyListContact::ContactContextMenu::changeAliasResponseHandler( CppConsUI::InputDialog& activator, CppConsUI::AbstractDialog::ResponseType response) { if (response != CppConsUI::AbstractDialog::RESPONSE_OK) return; PurpleContact *contact = parent_contact->getPurpleContact(); if (contact->alias) purple_blist_alias_contact(contact, activator.getText()); else { PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact); purple_blist_alias_buddy(buddy, activator.getText()); serv_alias_buddy(buddy); } // close context menu close(); }
static void buddy_ticker_set_pixmap(PurpleContact *c) { TickerData *td = buddy_ticker_find_contact(c); PurpleBuddy *buddy; PurplePresence *presence; const char *stock; if(!td) return; buddy = purple_contact_get_priority_buddy(c); presence = purple_buddy_get_presence(buddy); stock = pidgin_stock_id_from_presence(presence); if(!td->icon) { td->icon = gtk_image_new(); g_object_set(G_OBJECT(td->icon), "stock", stock, "icon-size", gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC), NULL); } else { g_object_set(G_OBJECT(td->icon), "stock", stock, NULL); } }