Esempio n. 1
0
gboolean AddBuddy_cb(struct fetion_account_data *sip, struct sipmsg *msg, struct transaction *tc) 
{
	xmlnode *root,*item;
	const gchar *uri, *name ,*group_id;
	struct group_attr *g_attr;
	gchar *buddy_name;
	PurpleBuddy *b;
	PurpleGroup *g = NULL;
	struct fetion_buddy *bs;


	if(msg->response != 522)
	{
		root = xmlnode_from_str(msg->body, msg->bodylen);
		item = xmlnode_get_child(root,"contacts/buddies/buddy");
		g_return_val_if_fail(item!=NULL,FALSE);

		uri = xmlnode_get_attrib(item, "uri");
		name = xmlnode_get_attrib(item, "local-name");
		group_id = xmlnode_get_attrib(item, "buddy-lists");
		buddy_name = g_strdup_printf("%s", uri);
		g_attr = g_hash_table_lookup(sip->group,group_id);
		if(g_attr==NULL)
		{
			g = purple_find_group("未分组");
			if(!g)
				g = purple_group_new("未分组");
		}
		else
		{
			g = purple_find_group(g_attr->name);
			if(!g)
				g = purple_group_new(g_attr->name);
		}

		b = purple_find_buddy(sip->account, buddy_name);
		if(!b){
			b = purple_buddy_new(sip->account, buddy_name, NULL);
		}
		g_free(buddy_name);

		purple_blist_add_buddy(b, NULL, g, NULL);
		if(name!=NULL && *name!='\0')
			purple_blist_alias_buddy(b, name);
		bs = g_new0(struct fetion_buddy, 1);
		bs->name = g_strdup(b->name);
		g_hash_table_insert(sip->buddies, bs->name, bs);
		fetion_subscribe_exp(sip,bs);		
	}
Esempio n. 2
0
static void
lh_migrate_build_lists(void)
{
    PurpleBuddyList *blist = NULL;
    PurpleBlistNode *root = NULL, *g = NULL, *c = NULL, *b = NULL;

    blist = purple_get_blist();
    root = blist->root;

    /* walk the blist tree and build a list of the buddies and a list of
     * the groups corresponding to each buddy */
    /* group level */
    for(g = root; g && PURPLE_BLIST_NODE_IS_GROUP(g); g = g->next)
        /* contact level */
        for(c = g->child; c && PURPLE_BLIST_NODE_IS_CONTACT(c); c = c->next)
            /* buddy level */
            for(b = c->child; b && PURPLE_BLIST_NODE_IS_BUDDY(b); b = b->next) {
                PurpleGroup *tmp_group = purple_group_new(((PurpleGroup *)g)->name);
                PurpleBuddy *tmp_buddy = (PurpleBuddy *)b;

                /* if this buddy is on the source account then add it
                 * to the GLists */
                if(purple_buddy_get_account(tmp_buddy) == source_account) {
                    PurpleBuddy *tmp_buddy_2 = purple_buddy_new(target_account,
                                               purple_buddy_get_name(tmp_buddy),
                                               purple_buddy_get_alias(tmp_buddy));

                    groups = g_list_prepend(groups, tmp_group);
                    buddies = g_list_prepend(buddies, tmp_buddy_2);
                }
            }

    return;
}
Esempio n. 3
0
bool PurpleIMContactList::addContactCbk(void * dataIn)
{
//	Mutex::ScopedLock lock(PurpleIMContactList::_mutex);
	Mutex::ScopedLock lock(PurpleIMContactList::_mutexContact);	//VOXOX - JRT - 2009.07.14 

	PurpleIMContactListCallbackData* cbData = (PurpleIMContactListCallbackData*)dataIn;

	PurpleAccount *gAccount = getPurpleAccount( cbData->getInstance() );

	PurpleGroup *gGroup = NULL;
	PurpleBuddy *gBuddy = NULL;  

	if ((gGroup = purple_find_group(cbData->getGroupName().c_str())) == NULL) 
	{
		gGroup = purple_group_new(cbData->getGroupName().c_str());
		purple_blist_add_group(gGroup, NULL);
	}

	gBuddy = purple_buddy_new(gAccount, cbData->getContactId().c_str(), cbData->getContactId().c_str() );
	purple_blist_add_buddy(gBuddy, NULL, gGroup, NULL);
	purple_account_add_buddy(gAccount, gBuddy);

	timeoutRemove( cbData );

	delete cbData;

	return TRUE;
}
Esempio n. 4
0
bool PurpleIMContactList::moveContactToGroupCbk(void * dataIn)
{
	Mutex::ScopedLock lock(PurpleIMContactList::_mutex);

	PurpleIMContactListCallbackData* cbData = (PurpleIMContactListCallbackData*)dataIn;

	PurpleAccount* gAccount  = getPurpleAccount( cbData->getInstance() );
	PurpleGroup*   gOldGroup = purple_find_group( cbData->getOldGroupName().c_str() );

	if (gOldGroup) 
	{
		PurpleBuddy *gBuddy = purple_find_buddy_in_group(gAccount, cbData->getContactId().c_str(), gOldGroup);
		if (gBuddy) 
		{
			PurpleGroup *gNewGroup = purple_find_group( cbData->getNewGroupName().c_str() );
			if (gNewGroup) 
			{
				gNewGroup = purple_group_new(cbData->getNewGroupName().c_str());
				purple_blist_add_buddy(gBuddy, NULL, gNewGroup, NULL);
			}
		}
	}

	timeoutRemove( cbData );

	delete cbData;

	return TRUE;
}
Esempio n. 5
0
void
gevo_add_buddy(PurpleAccount *account, const char *group_name,
			   const char *buddy_name, const char *alias)
{
	PurpleConversation *conv = NULL;
	PurpleBuddy *buddy;
	PurpleGroup *group;

	conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, buddy_name, account);

	group = purple_find_group(group_name);
	if (group == NULL)
	{
		group = purple_group_new(group_name);
		purple_blist_add_group(group, NULL);
	}

	buddy = purple_find_buddy_in_group(account, buddy_name, group);
	if (buddy == NULL)
	{
		buddy = purple_buddy_new(account, buddy_name, alias);
		purple_blist_add_buddy(buddy, NULL, group, NULL);
	}

	purple_account_add_buddy(account, buddy);

	if (conv != NULL)
	{
		purple_buddy_icon_update(purple_conv_im_get_icon(PURPLE_CONV_IM(conv)));
		purple_conversation_update(conv, PURPLE_CONV_UPDATE_ADD);
	}
}
Esempio n. 6
0
static PurpleGroup *flist_get_group(const gchar *name) {
    PurpleGroup *g;
    if(!(g = purple_find_group(name))) {
        g = purple_group_new(name);
    }
    return g;
}
Esempio n. 7
0
static VALUE remove_buddy(VALUE self, VALUE buddy)
{
  PurpleAccount *account = NULL;
  PurpleConnection *gc = NULL;
  
  Data_Get_Struct(self, PurpleAccount, account);
  gc = purple_account_get_connection( account );
  
	PurpleBuddy* pb = purple_find_buddy(account, RSTRING_PTR(buddy));
	if (NULL == pb) {
	  rb_raise(rb_eRuntimeError, "Failed to remove buddy for %s : %s does not exist", purple_account_get_username(account), RSTRING_PTR(buddy));
	}
	
	char* group = _("Buddies");
  PurpleGroup* grp = purple_find_group(group);
	if (!grp)
	{
		grp = purple_group_new(group);
		purple_blist_add_group(grp, NULL);
	}
	
	purple_blist_remove_buddy(pb);
	purple_account_remove_buddy(account, pb, grp);
  serv_rem_permit( gc, RSTRING_PTR( buddy ) );
	
  return Qtrue;
}
Esempio n. 8
0
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();
}
Esempio n. 9
0
PurpleGroup *tgp_blist_group_init (const char *name) {
  PurpleGroup *grp = purple_find_group (name);
  if (grp == NULL) {
    grp = purple_group_new (name);
    purple_blist_add_group (grp, NULL);
  }
  return grp;
}
Esempio n. 10
0
void
fb_got_groups(FacebookAccount *fba, const gchar *data, gsize data_len, gpointer user_data)
{
	// look for  /home.php?sk=group_ ...
	gchar **splits;
	gint i;
	PurpleGroup *group;
	
	splits = g_strsplit(data, "<a href=\\\"\\/home.php?sk=group_", 0);
	
	if (!splits || !splits[0])
	{
		g_strfreev(splits);
		return;
	}
	
	group = purple_find_group(DEFAULT_GROUP_NAME);
	if (!group)
	{
		group = purple_group_new(DEFAULT_GROUP_NAME);
		purple_blist_add_group(group, NULL);
	}
	
	for(i = 1; splits[i]; i++)
	{
		gchar *eos;
		eos = strchr(splits[i], '\\');
		if (eos != NULL)
		{
			*eos = '\0';
			purple_debug_info("facebook", "searching for %s\n", splits[i]);
			if (!purple_blist_find_chat(fba->account, splits[i]))
			{
				gchar *alias = NULL;
				if (eos[1] == '"' && eos[2] == '>')
				{
					purple_debug_info("facebook", "searching for alias\n");
					gchar *eoa = strchr(&eos[3], '<');
					if (eoa)
					{
						*eoa = '\0';
						alias = &eos[3];
						purple_debug_info("facebook", "found chat alias %s\n", alias);
					}
				}

				purple_debug_info("facebook", "adding chat %s to buddy list...\n", splits[i]);
				// Add the group chat to the buddy list
				GHashTable *components = fb_chat_info_defaults(fba->pc, splits[i]);
				PurpleChat *chat = purple_chat_new(fba->account, alias, components);
				purple_blist_add_chat(chat, group, NULL);
				purple_debug_info("facebook", "done\n");
			}
		}
	}
	
	g_strfreev(splits);
}
Esempio n. 11
0
void BuddyList::add_group_ok_cb(const char *name)
{
  if (!name || !name[0]) {
    LOG->Message(_("No group name specified."));
    purple_blist_request_add_group();
    return;
  }

  PurpleGroup *group = purple_group_new(name);
  purple_blist_add_group(group, NULL);
}
Esempio n. 12
0
static void
stress_login(PurpleAccount *account) {
	PurpleConnection *pc = NULL;
	PurpleGroup *g = NULL;
	gint n_buddies = 0, i = 0, interval = 0, maxevents = 0;

	/* build our possible events from the account settings */
	add_event("trigger_signon", STRESS_EVENT_SIGN_ON, STRESS_EVENT_SIGN_OFF);
	add_event("trigger_idle", STRESS_EVENT_IDLE, STRESS_EVENT_UNIDLE);
	add_event("trigger_away", STRESS_EVENT_AWAY, STRESS_EVENT_BACK);
	add_event("trigger_typing", STRESS_EVENT_TYPING, STRESS_EVENT_STOPPED_TYPING);
	add_event("send_messages", STRESS_EVENT_SEND_MESSAGE, -1);

	nevents = g_list_length(events);

	/* get our connection and set it as online */
	pc = purple_account_get_connection(account);
	purple_connection_set_state(pc, PURPLE_CONNECTED);

	/* grab the account settings we need for buddies */
	n_buddies = purple_account_get_int(account, "nbuddies", 50);
	maxevents = purple_account_get_int(account, "maxevents", 100);
	interval = (guint)purple_account_get_int(account, "interval", 500);
	message_min = purple_account_get_int(account, "message_min", 16);
	message_max = purple_account_get_int(account, "message_max", 128);

	g = purple_group_new("prpl-stress");

	for(i = 0; i < n_buddies; i++) {
		PurpleBuddy *b = NULL;
		StressBuddy *sb = NULL;
		gchar *name = NULL;

		/* create the buddy and it's name */
		name = g_strdup_printf("stress-%04x", i);
		b = purple_buddy_new(account, name, NULL);
		g_free(name);

		/* add our data to the buddy */
		sb = g_new0(StressBuddy, 1);
		sb->buddy = b;
		sb->maxevents = maxevents;
		purple_buddy_set_protocol_data(b, sb);

		/* add the buddy to our list and the purple blist */
		buddies = g_list_prepend(buddies, sb);
		purple_blist_add_buddy(b, NULL, g, NULL);

		/* add our event timer to the buddy */
		sb->timer_id = g_timeout_add(interval, stress_event_cb, sb);
	}
}
Esempio n. 13
0
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);
}
Esempio n. 14
0
PurpleGroup *qq_group_find_or_new(const gchar *group_name)
{
	PurpleGroup *g;

	g_return_val_if_fail(group_name != NULL, NULL);

	g = purple_find_group(group_name);
	if (g == NULL) {
		g = purple_group_new(group_name);
		purple_blist_add_group(g, NULL);
		purple_debug_warning("QQ", "Add new group: %s\n", group_name);
	}

	return g;
}
void rc_pop_contacts(PurpleGroup * grp)
{
  if (!grp) return;

  PurpleBlistNode * gnode = PURPLE_BLIST_NODE(grp);
  PurpleBlistNode * n = NULL;
  PurpleBuddy * b = NULL;
  int total;
  gboolean offline;

  //XXX group->totalsize is unreliable!!!

  for (n=gnode->child, total=0; n!=NULL; total++, n=n->next);
  trace("Total Group Count %d", total);

  while (total > g_size) {

    n = gnode->child;

    if (PURPLE_BLIST_NODE_IS_CONTACT(n)) {
      trace("Child Contact : %s", (PURPLE_CONTACT(n)->priority->name));
      b = PURPLE_CONTACT(n)->priority;
    } else if (PURPLE_BLIST_NODE_IS_BUDDY(n)) {
      trace("Child Buddy : %s", (PURPLE_BUDDY(n)->name));
      b = PURPLE_BUDDY(n);
    }

    n = PURPLE_BLIST_NODE(b);
    const char *name = purple_blist_node_get_string(n, NODE_GROUP_KEY);
    if (!name) {  // if cannot find orig group name, put back to Buddies
      trace("ERROR!!! cannot find original group name"); 
      name = "Buddies"; 
    }
    PurpleGroup * g = purple_find_group(name);
    if (!g) {
      trace("Group %s Not Found. Create one.", name);
      g = purple_group_new(name);
    }
    trace("<<<<<<< Remove %s", b->name);

    offline = purple_blist_node_get_bool(n, NODE_ORIG_OFFLINE_KEY);
    purple_blist_node_set_bool(n, NODE_OFFLINE_KEY, offline);
    purple_blist_add_buddy(b, NULL, g, NULL);

    total--;
  }
  
}
Esempio n. 16
0
static void purple_add_buddy( struct im_connection *ic, char *who, char *group )
{
	PurpleBuddy *pb;
	PurpleGroup *pg = NULL;
	
	if( group && !( pg = purple_find_group( group ) ) )
	{
		pg = purple_group_new( group );
		purple_blist_add_group( pg, NULL );
	}
	
	pb = purple_buddy_new( (PurpleAccount*) ic->proto_data, who, NULL );
	purple_blist_add_buddy( pb, NULL, pg, NULL );
	purple_account_add_buddy( (PurpleAccount*) ic->proto_data, pb );

	purple_gg_buddylist_export( ((PurpleAccount*)ic->proto_data)->gc );
}
Esempio n. 17
0
static void
pb_got_phonebook(PushBulletAccount *pba, JsonNode *node, gpointer user_data)
{
	PurpleAccount *account = pba->account;
	JsonObject *rootobj = json_node_get_object(node);
	JsonArray *phonebook = json_object_get_array_member(rootobj, "phonebook");
	gint i;
	guint len;
	gchar *device = user_data;
	PurpleGroup *pbgroup;
	
	pbgroup = purple_find_group("PushBullet");
	if (!pbgroup)
	{
		pbgroup = purple_group_new("PushBullet");
		purple_blist_add_group(pbgroup, NULL);
	}
	
	for(i = 0, len = json_array_get_length(phonebook); i < len; i++)
	{
		JsonObject *number = json_array_get_object_element(phonebook, i);
		const gchar *name = json_object_get_string_member(number, "name");
		const gchar *phone = json_object_get_string_member(number, "phone");
		const gchar *phone_type = json_object_get_string_member(number, "phone_type");
		PurpleBuddy *pbuddy;
		
		//Only handle the right 'type' of phone number. 
		//home, mobile, work, other
		if (purple_account_get_bool(account, "mobile_contacts_only", FALSE) && phone_type[0] != 'm')
			continue;
		
		pbuddy = purple_find_buddy(account, phone);
		if (!pbuddy)
		{
			pbuddy = purple_buddy_new(account, phone, name);
			purple_blist_add_buddy(pbuddy, NULL, pbgroup, NULL);
			purple_debug_info("pushbullet", "Added buddy %s %s\n", phone, name);
		}
		
		purple_prpl_got_user_status(account, phone, "mobile", NULL);
		purple_prpl_got_user_status(account, phone, purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE), NULL);
	}
	
	g_free(device);
}
Esempio n. 18
0
	void Buddy::SetGroups (const QStringList& groups)
	{
		const auto& newGroup = groups.value (0);

		PurpleGroup *group = 0;
		if (!newGroup.isEmpty ())
		{
			const auto& utf8 = newGroup.toUtf8 ();
			group = purple_find_group (utf8.constData ());
			if (!group)
			{
				group = purple_group_new (utf8.constData ());
				purple_blist_add_group (group, nullptr);
			}
		}

		purple_blist_add_buddy (Buddy_, nullptr, group, nullptr);
	}
Esempio n. 19
0
static VALUE add_buddy(VALUE self, VALUE buddy)
{
  PurpleAccount *account;
  Data_Get_Struct(self, PurpleAccount, account);

  PurpleBuddy* pb = purple_buddy_new(account, StringValueCStr(buddy), NULL);

  char* group = _("Buddies");
  PurpleGroup* grp = purple_find_group(group);
  if (!grp)
  {
    grp = purple_group_new(group);
    purple_blist_add_group(grp, NULL);
  }

  purple_blist_add_buddy(pb, NULL, grp, NULL);
  purple_account_add_buddy(account, pb);
  return Qtrue;
}
Esempio n. 20
0
bool PurpleIMContactList::addGroupCbk(void * dataIn)
{
	Mutex::ScopedLock lock(PurpleIMContactList::_mutex);

	PurpleIMContactListCallbackData* cbData = (PurpleIMContactListCallbackData*)dataIn;

	PurpleGroup *gGroup = purple_find_group( cbData->getGroupName().c_str() );

	if (!gGroup) 
	{
		gGroup = purple_group_new( cbData->getGroupName().c_str() );
		purple_blist_add_group(gGroup, NULL);
	}

	timeoutRemove( cbData );

	delete cbData;

	return TRUE;
}
void rc_push_contact(PurpleAccount *acct,
    const char * buddyname)
{
  PurpleGroup * grp = purple_find_group(GROUP_NAME);
  if (!grp) {
    trace("Group %s Not Found. Create one.", GROUP_NAME);
    grp = purple_group_new(GROUP_NAME);
  }

  PurpleBuddy * buddy;
  // if we can find it in 'Recent Contacts', skip
  if ((buddy = purple_find_buddy_in_group(acct, buddyname, grp)) != NULL) {
    trace("Buddy %s is already in %s", buddyname, GROUP_NAME);
    purple_blist_add_buddy(buddy, NULL, grp, NULL);
    return;
  }

  buddy = purple_find_buddy(acct, buddyname);
  if (!buddy) {
    trace("Buddy %s Not Found. You SUCK!", buddyname);
    return;
  }

  PurpleBlistNode * node = PURPLE_BLIST_NODE(buddy); 

  // back up group info
  PurpleGroup * orig_grp = 	purple_buddy_get_group(buddy);
  purple_blist_node_set_string(node, NODE_GROUP_KEY, orig_grp->name);

  // back up offline info
  gboolean offline = purple_blist_node_get_bool(node, NODE_OFFLINE_KEY);
  purple_blist_node_set_bool(node, NODE_ORIG_OFFLINE_KEY, offline);
  purple_blist_node_set_bool(node, NODE_OFFLINE_KEY, TRUE);

  // Add to Recent Contacts Group
  trace(">>>>>>> Add %s", buddyname);
  purple_blist_add_buddy(buddy, NULL, grp, NULL);

  // Clean up old group if needed
  rc_pop_contacts(grp);
}
Esempio n. 22
0
Contact *QuetzalContactsFactory::addContact(const QString &id, const QVariantMap &data)
{
	QByteArray group = data.value(QLatin1String("group")).toString().toUtf8();
	if (group.isEmpty()) {
		// For compatibility with other implementations
		// Looks like libpurple doesn't support multiple groups
		// Or does it at some unknown way
		group = data.value(QLatin1String("tags")).toStringList().value(0).toUtf8();
	}
	QString name = data.value(QLatin1String("name")).toString();
	
	const char *groupName = group.isEmpty() ? "Buddies" : group.constData();
	PurpleGroup *pg = purple_find_group(groupName);
	if (!pg) {
		pg = purple_group_new(groupName);
		purple_blist_add_group(pg, quetzal_blist_get_last_sibling(purple_blist_get_root()));
	}
	PurpleContact *pc = purple_contact_new();
	purple_blist_add_contact(pc, pg, quetzal_blist_get_last_child(PURPLE_BLIST_NODE(pg)));
	PurpleBuddy *buddy = purple_buddy_new(m_account->purple(), id.toUtf8().constData(),
										  name.toUtf8().constData());
	PurpleBlistNode *node = PURPLE_BLIST_NODE(buddy);
	purple_blist_add_buddy(buddy, pc, pg, quetzal_blist_get_last_child(PURPLE_BLIST_NODE(pc)));
	QMapIterator<QString, QVariant> it(data.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_blist_node_set_bool(node, key.constData(), it.value().toBool());
		} else if (type == QVariant::Int || type == QVariant::UInt
				 || type == QVariant::LongLong || type == QVariant::ULongLong) {
			purple_blist_node_set_int(node, key.constData(), it.value().toInt());
		} else {
			purple_blist_node_set_string(node, key.constData(), it.value().toString().toUtf8());
		}
	}
	QuetzalContact *contact = reinterpret_cast<QuetzalContact*>(node->ui_data);
	contact->update(buddy);
	return contact;
}
Esempio n. 23
0
void on_ready (struct tgl_state *TLS) {
  debug ("on_ready().\n");
  telegram_conn *conn = TLS->ev_base;
  
  purple_connection_set_state(conn->gc, PURPLE_CONNECTED);
  purple_connection_set_display_name(conn->gc, purple_account_get_username(conn->pa));
  purple_blist_add_account(conn->pa);
  tggroup = purple_find_group("Telegram");
  if (tggroup == NULL) {
    debug ("PurpleGroup = NULL, creating");
    tggroup = purple_group_new ("Telegram");
    purple_blist_add_group (tggroup, NULL);
  }
  
  debug ("seq = %d, pts = %d\n", TLS->seq, TLS->pts);
  tgl_do_get_difference (TLS, 0, 0, 0);
  tgl_do_get_dialog_list (TLS, 0, 0);
  tgl_do_update_contact_list (TLS, 0, 0);
  
  conn->timer = purple_timeout_add (5000, queries_timerfunc, conn);
}
Esempio n. 24
0
static void
lsg_cmd (MsnCmdProc *cmdproc,
         MsnCommand *cmd)
{
    MsnSession *session = cmdproc->session;
    char *name;
    const gchar *group_guid;

    name = pn_url_decode (cmd->params[0]);
    group_guid = cmd->params[1];

    if (strcmp(name, MSN_NULL_GROUP_NAME) == 0) {
        pn_error("Invalid group name, ignoring");
        goto leave;
    }

    pn_group_new (session->contactlist, name, group_guid);

    if (!purple_find_group (name))
    {
        PurpleGroup *g = purple_group_new (name);
        purple_blist_add_group (g, NULL);
    }

    /* Group of ungroupped buddies */
    if (!group_guid)
    {
        if (session->sync->total_users == 0)
        {
            cmdproc->cbs_table = session->sync->old_cbs_table;

            msn_session_finish_login (session);

            msn_sync_destroy (session->sync);
            session->sync = NULL;
        }
    }
leave:
    g_free (name);
}
Esempio n. 25
0
/*add group id to User object*/
void
msn_user_add_group_id(MsnUser *user, const char* group_id)
{
	MsnUserList *userlist;
	PurpleAccount *account;
	PurpleBuddy *b;
	PurpleGroup *g;
	const char *passport;
	const char *group_name;

	g_return_if_fail(user != NULL);
	g_return_if_fail(group_id != NULL);

	user->group_ids = g_list_append(user->group_ids, g_strdup(group_id));

	userlist = user->userlist;
	account = userlist->session->account;
	passport = msn_user_get_passport(user);

	group_name = msn_userlist_find_group_name(userlist, group_id);

	purple_debug_info("msn", "User: group id:%s,name:%s,user:%s\n", group_id, group_name, passport);

	g = purple_find_group(group_name);

	if ((group_id == NULL) && (g == NULL))
	{
		g = purple_group_new(group_name);
		purple_blist_add_group(g, NULL);
	}

	b = purple_find_buddy_in_group(account, passport, g);
	if (b == NULL)
	{
		b = purple_buddy_new(account, passport, NULL);
		purple_blist_add_buddy(b, NULL, g, NULL);
	}
	purple_buddy_set_protocol_data(b, user);
	/*Update the blist Node info*/
}
Esempio n. 26
0
static VALUE remove_buddy(VALUE self, VALUE buddy)
{
  PurpleAccount *account;
  Data_Get_Struct(self, PurpleAccount, account);

  PurpleBuddy* pb = purple_find_buddy(account, StringValueCStr(buddy));
  if (NULL == pb) {
    rb_raise(rb_eRuntimeError, "Failed to remove buddy for %s : %s does not exist", purple_account_get_username(account), StringValueCStr(buddy));
  }

  char* group = _("Buddies");
  PurpleGroup* grp = purple_find_group(group);
  if (!grp)
    {
      grp = purple_group_new(group);
      purple_blist_add_group(grp, NULL);
    }

  purple_blist_remove_buddy(pb);
  purple_account_remove_buddy(account, pb, grp);

  return Qtrue;
}
Esempio n. 27
0
static void
lsg_cmd (MsnCmdProc *cmdproc,
         MsnCommand *cmd)
{
    MsnSession *session = cmdproc->session;
    char *name;
    const gchar *group_guid;

    name = pn_url_decode (cmd->params[0]);
    group_guid = cmd->params[1];

    pn_group_new (session->contactlist, name, group_guid);

    if (!purple_find_group (name))
    {
        PurpleGroup *g = purple_group_new (name);
        purple_blist_add_group (g, NULL);
    }

    g_free (name);

    /* Group of ungroupped buddies */
    if (!group_guid)
    {
        if (session->sync->total_users == 0)
        {
            cmdproc->cbs_table = session->sync->old_cbs_table;

            msn_session_finish_login (session);

            msn_sync_destroy (session->sync);
            session->sync = NULL;
        }
        return;
    }
}
Esempio n. 28
0
static VALUE add_buddy(VALUE self, VALUE buddy)
{
  PurpleAccount *account = NULL;
  PurpleConnection *gc = NULL;
  
  Data_Get_Struct(self, PurpleAccount, account);
  gc = purple_account_get_connection( account );
  
	PurpleBuddy* pb = purple_buddy_new(account, RSTRING_PTR(buddy), NULL);
  
  char* group = _("Buddies");
  PurpleGroup* grp = purple_find_group(group);
	if (!grp)
	{
		grp = purple_group_new(group);
		purple_blist_add_group(grp, NULL);
	}
  
  purple_blist_add_buddy(pb, NULL, grp, NULL);
  purple_account_add_buddy(account, pb);
  serv_add_permit( gc, RSTRING_PTR(buddy) );
  
  return Qtrue;
}
Esempio n. 29
0
static PurpleBuddy *add_buddy(FacebookAccount *fba,
	const gchar *friend_list_id, const gchar *uid, GHashTable *cur_groups)
{
	const gchar *group_name;
	PurpleGroup *fb_group;
	PurpleBuddy *buddy;

	group_name = g_hash_table_lookup(fba->friend_lists, purple_normalize_nocase(NULL, friend_list_id));
	if (!group_name || group_name[0] == '\0') {
		purple_debug_info("facebook",
				"did not find name of list %s\n",
				friend_list_id);
		group_name = DEFAULT_GROUP_NAME;
	}

	// Initialize group as necessary.
	fb_group = purple_find_group(group_name);
	if (fb_group == NULL)
	{
		purple_debug_info("facebook", "adding friend list %s\n",
				group_name);
		fb_group = purple_group_new(group_name);
		purple_blist_add_group(fb_group, NULL);
	} 

	buddy = (PurpleBuddy *)g_hash_table_lookup(cur_groups, purple_normalize_nocase(NULL, group_name));
	if (!buddy) {
		purple_debug_info("facebook", "adding %s to %s\n",
				uid, group_name);
		buddy = purple_buddy_new(fba->account, uid, NULL);
		purple_blist_add_buddy(buddy, NULL, fb_group, NULL);
		g_hash_table_remove(cur_groups, purple_normalize_nocase(NULL, group_name));
	}

	return buddy;
}
Esempio n. 30
0
GList *fb_get_buddies_friend_list (FacebookAccount *fba,
		const gchar *uid, JsonArray *friend_list_ids)
{
	GSList *buddies;
	GSList *cur;       
	GHashTable *cur_groups;
	int i;
	GList *final_buddies, *cur_buddy;
	PurpleGroup *fb_group;
	PurpleBuddy *buddy;

	final_buddies = NULL;
	buddies = purple_find_buddies(fba->account, uid);

	// If we're already in the buddy list, stop.  Ignore FB info because
	// it will be incorrect.
	if (atoll(uid) == fba->uid && buddies != NULL) {
		purple_debug_info("facebook",
			"already have buddies for self, not adding\n");
		for (cur = buddies; cur != NULL; cur = cur->next)
		{
			final_buddies = g_list_append(
				final_buddies, cur->data);
		}
		g_slist_free(buddies);
		return final_buddies;
	}
	
	//Do we want to ignore groups?
	if (!purple_account_get_bool(fba->account, "facebook_use_groups", TRUE))
	{
		if (buddies != NULL) {
			//Copy the slist into the list
			for (cur = buddies; cur != NULL; cur = cur->next)
			{
				final_buddies = g_list_append(
					final_buddies, cur->data);
			}
			g_slist_free(buddies);
			return final_buddies;
		} else {
			buddy = purple_buddy_new(fba->account, uid, NULL);
			fb_group = purple_find_group(DEFAULT_GROUP_NAME);
			if (fb_group == NULL)
			{
				fb_group = purple_group_new(DEFAULT_GROUP_NAME);
				purple_blist_add_group(fb_group, NULL);
			}
			purple_blist_add_buddy(buddy, NULL, fb_group, NULL);
			final_buddies = g_list_append(final_buddies, buddy);
			return final_buddies;
		}
	}
	
	// Determine what buddies exist and what groups they are in.
	cur_groups = g_hash_table_new_full(g_str_hash, g_str_equal,
		g_free, NULL);
	for (cur = buddies; cur != NULL; cur = cur->next)
	{
		const gchar *group_name;

		group_name = purple_group_get_name(purple_buddy_get_group(
					(PurpleBuddy *)cur->data));
		group_name = purple_normalize_nocase(NULL, group_name);
		
		g_hash_table_insert(cur_groups, g_strdup(group_name), cur->data);
	}
	g_slist_free(buddies);

	// Create/insert necessary buddies
	if (friend_list_ids) {
		for (i = 0; i < json_array_get_length(friend_list_ids); i++)
		{
			const gchar *friend_list_id;

			friend_list_id = json_node_get_string(
				json_array_get_element(friend_list_ids, i));

			buddy = add_buddy(fba, friend_list_id, uid, cur_groups);

			final_buddies = g_list_append(final_buddies, buddy);
		}
	} else {
		// No friend list data, so we use the default group.
		final_buddies = g_list_append(final_buddies,
			add_buddy(fba, "-1", uid, cur_groups));
	}

	// Figure out which groups/buddies are not represented.
	for (cur_buddy = final_buddies; cur_buddy != NULL;
	     cur_buddy = cur_buddy->next)
	{
		const gchar *group_name = purple_group_get_name(purple_buddy_get_group(
					(PurpleBuddy *)cur_buddy->data));
		g_hash_table_remove(cur_groups, purple_normalize_nocase(NULL, group_name));
	}

	// Delete remaining buddies to maintain sync state with server.
	g_hash_table_foreach(cur_groups, destroy_buddy, fba);

	// Cleanup!
	g_hash_table_destroy(cur_groups);

	return final_buddies;
}