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;
}
Example #4
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);
}
Example #5
0
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));
}
Example #6
0
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);
}
Example #7
0
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;
}
Example #10
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);
}
Example #11
0
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;
}
Example #13
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);

}
Example #14
0
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));
	}
}
Example #15
0
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;
}
Example #16
0
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);
}
Example #17
0
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);
}
Example #18
0
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;
  }
}
Example #19
0
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);
	}
}
Example #20
0
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();
}
Example #21
0
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);
	}
}