(purple) Load server-side contacts
This commit is contained in:
parent
d883c23d18
commit
140a7f8834
|
@ -207,6 +207,22 @@ PurpleApp::ImMessage(BMessage* msg)
|
|||
SendMessage(purple_conversation_get_account(conv), parts);
|
||||
break;
|
||||
}
|
||||
case IM_GET_CONTACT_LIST:
|
||||
{
|
||||
msg->PrintToStream();
|
||||
BStringList user_ids;
|
||||
GSList* buddies = purple_blist_get_buddies();
|
||||
for (int i = 0; buddies != NULL; buddies = buddies->next) {
|
||||
PurpleBuddy* buddy = (PurpleBuddy*)buddies->data;
|
||||
user_ids.Add(BString(purple_buddy_get_name(buddy)));
|
||||
}
|
||||
|
||||
BMessage roster(IM_MESSAGE);
|
||||
roster.AddInt32("im_what", IM_CONTACT_LIST);
|
||||
roster.AddStrings("user_id", user_ids);
|
||||
SendMessage(_AccountFromMessage(msg), roster);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
std::cout << "IM_MESSAGE unhandled by Purple:\n";
|
||||
msg->PrintToStream();
|
||||
|
@ -498,9 +514,10 @@ init_libpurple()
|
|||
|
||||
purple_util_set_user_dir(purple_cache());
|
||||
|
||||
|
||||
BString cachePlugin = BString(purple_cache()).Append("/plugins/");
|
||||
purple_plugins_add_search_path(cachePlugin.String());
|
||||
purple_plugins_add_finddir(B_USER_LIB_DIRECTORY);
|
||||
purple_plugins_add_finddir(B_SYSTEM_LIB_DIRECTORY);
|
||||
purple_plugins_add_finddir(B_USER_NONPACKAGED_LIB_DIRECTORY);
|
||||
purple_plugins_add_finddir(B_SYSTEM_NONPACKAGED_LIB_DIRECTORY);
|
||||
|
||||
|
@ -535,6 +552,11 @@ init_signals()
|
|||
purple_signal_connect(purple_accounts_get_handle(), "account-status-changed",
|
||||
&handle, PURPLE_CALLBACK(signal_account_status_changed), NULL);
|
||||
|
||||
purple_signal_connect(purple_blist_get_handle(), "blist-node-added",
|
||||
&handle, PURPLE_CALLBACK(signal_blist_node_added), NULL);
|
||||
purple_signal_connect(purple_blist_get_handle(), "blist-node-removed",
|
||||
&handle, PURPLE_CALLBACK(signal_blist_node_removed), NULL);
|
||||
|
||||
purple_signal_connect(purple_conversations_get_handle(), "chat-joined",
|
||||
&handle, PURPLE_CALLBACK(signal_chat_joined), NULL);
|
||||
purple_signal_connect(purple_conversations_get_handle(), "chat-left",
|
||||
|
@ -587,6 +609,53 @@ signal_account_status_changed(PurpleAccount* account, PurpleStatus* old,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
signal_blist_node_added(PurpleBlistNode* node)
|
||||
{
|
||||
PurpleBuddy* buddy;
|
||||
if (PURPLE_BLIST_NODE_IS_BUDDY(node))
|
||||
buddy = PURPLE_BUDDY(node);
|
||||
else if (PURPLE_BLIST_NODE_IS_CONTACT(node))
|
||||
buddy = purple_contact_get_priority_buddy(PURPLE_CONTACT(node));
|
||||
else
|
||||
return;
|
||||
|
||||
BMessage add(IM_MESSAGE);
|
||||
add.AddInt32("im_what", IM_CONTACT_LIST);
|
||||
add.AddString("user_id", purple_buddy_get_name(buddy));
|
||||
((PurpleApp*)be_app)->SendMessage(purple_buddy_get_account(buddy), add);
|
||||
|
||||
BString alias = purple_buddy_get_local_alias(buddy);
|
||||
if (alias.IsEmpty() == true)
|
||||
alias.SetTo(purple_buddy_get_server_alias(buddy));
|
||||
|
||||
BMessage name(IM_MESSAGE);
|
||||
name.AddInt32("im_what", IM_CONTACT_INFO);
|
||||
name.AddString("user_id", purple_buddy_get_name(buddy));
|
||||
if (alias.IsEmpty() == false)
|
||||
name.AddString("user_name", alias);
|
||||
((PurpleApp*)be_app)->SendMessage(purple_buddy_get_account(buddy), name);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
signal_blist_node_removed(PurpleBlistNode* node)
|
||||
{
|
||||
PurpleBuddy* buddy;
|
||||
if (PURPLE_BLIST_NODE_IS_BUDDY(node))
|
||||
buddy = PURPLE_BUDDY(node);
|
||||
else if (PURPLE_BLIST_NODE_IS_CONTACT(node))
|
||||
buddy = purple_contact_get_priority_buddy(PURPLE_CONTACT(node));
|
||||
else
|
||||
return;
|
||||
|
||||
BMessage rem(IM_MESSAGE);
|
||||
rem.AddInt32("im_what", IM_CONTACT_LIST_CONTACT_REMOVED);
|
||||
rem.AddString("user_id", purple_buddy_get_name(buddy));
|
||||
((PurpleApp*)be_app)->SendMessage(purple_buddy_get_account(buddy), rem);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
signal_chat_joined(PurpleConversation* conv)
|
||||
{
|
||||
|
@ -744,7 +813,7 @@ purple_plugins_add_finddir(directory_which finddir)
|
|||
{
|
||||
BPath path;
|
||||
if (find_directory(finddir, &path) == B_OK) {
|
||||
path.Append("purple2");
|
||||
path.Append("purple-2");
|
||||
purple_plugins_add_search_path(path.Path());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,6 +111,10 @@ private:
|
|||
static void signal_account_status_changed(PurpleAccount* account,
|
||||
PurpleStatus* old, PurpleStatus* cur);
|
||||
|
||||
// Buddy-list signals
|
||||
static void signal_blist_node_added(PurpleBlistNode* node);
|
||||
static void signal_blist_node_removed(PurpleBlistNode* node);
|
||||
|
||||
// Conversation signals
|
||||
static void signal_chat_joined(PurpleConversation* conv);
|
||||
static void signal_chat_left(PurpleConversation* conv);
|
||||
|
|
Ŝarĝante…
Reference in New Issue