parent
a6c9569be2
commit
4d044144b3
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
#include <Cardie.h>
|
#include <Cardie.h>
|
||||||
#include <ChatProtocolMessages.h>
|
#include <ChatProtocolMessages.h>
|
||||||
|
#include <Flags.h>
|
||||||
|
|
||||||
#include "Purple.h"
|
#include "Purple.h"
|
||||||
#include "PurpleMessages.h"
|
#include "PurpleMessages.h"
|
||||||
|
@ -156,7 +157,7 @@ PurpleApp::ImMessage(BMessage* msg)
|
||||||
case IM_SEND_MESSAGE:
|
case IM_SEND_MESSAGE:
|
||||||
{
|
{
|
||||||
BString body;
|
BString body;
|
||||||
if (msg->FindString("body", &body) != B_OK) return;
|
if (msg->FindString("body", &body) != B_OK) break;
|
||||||
|
|
||||||
PurpleConversation* conv = _ConversationFromMessage(msg);
|
PurpleConversation* conv = _ConversationFromMessage(msg);
|
||||||
PurpleConvChat* chat = purple_conversation_get_chat_data(conv);
|
PurpleConvChat* chat = purple_conversation_get_chat_data(conv);
|
||||||
|
@ -217,7 +218,7 @@ PurpleApp::ImMessage(BMessage* msg)
|
||||||
PurpleConversation* conv = _ConversationFromMessage(msg);
|
PurpleConversation* conv = _ConversationFromMessage(msg);
|
||||||
PurpleConvChat* chat = purple_conversation_get_chat_data(conv);
|
PurpleConvChat* chat = purple_conversation_get_chat_data(conv);
|
||||||
PurpleConvIm* im = purple_conversation_get_im_data(conv);
|
PurpleConvIm* im = purple_conversation_get_im_data(conv);
|
||||||
if (chat == NULL && im == NULL) return;
|
if (chat == NULL && im == NULL) break;
|
||||||
|
|
||||||
BStringList user_ids;
|
BStringList user_ids;
|
||||||
if (im != NULL)
|
if (im != NULL)
|
||||||
|
@ -239,11 +240,14 @@ PurpleApp::ImMessage(BMessage* msg)
|
||||||
}
|
}
|
||||||
case IM_GET_CONTACT_LIST:
|
case IM_GET_CONTACT_LIST:
|
||||||
{
|
{
|
||||||
|
PurpleAccount* account = _AccountFromMessage(msg);
|
||||||
|
|
||||||
BStringList user_ids;
|
BStringList user_ids;
|
||||||
GSList* buddies = purple_blist_get_buddies();
|
GSList* buddies = purple_blist_get_buddies();
|
||||||
for (int i = 0; buddies != NULL; buddies = buddies->next) {
|
for (int i = 0; buddies != NULL; buddies = buddies->next) {
|
||||||
PurpleBuddy* buddy = (PurpleBuddy*)buddies->data;
|
PurpleBuddy* buddy = (PurpleBuddy*)buddies->data;
|
||||||
user_ids.Add(BString(purple_buddy_get_name(buddy)));
|
if (purple_buddy_get_account(buddy) == account)
|
||||||
|
user_ids.Add(BString(purple_buddy_get_name(buddy)));
|
||||||
}
|
}
|
||||||
|
|
||||||
BMessage roster(IM_MESSAGE);
|
BMessage roster(IM_MESSAGE);
|
||||||
|
@ -252,6 +256,59 @@ PurpleApp::ImMessage(BMessage* msg)
|
||||||
SendMessage(_AccountFromMessage(msg), roster);
|
SendMessage(_AccountFromMessage(msg), roster);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case IM_CONTACT_LIST_ADD_CONTACT:
|
||||||
|
{
|
||||||
|
PurpleAccount* account = _AccountFromMessage(msg);
|
||||||
|
BString user_id = msg->FindString("user_id");
|
||||||
|
const char* user_name = msg->FindString("user_name");
|
||||||
|
if (user_id.IsEmpty() == true || account == NULL) break;
|
||||||
|
|
||||||
|
PurpleGroup* group = purple_find_group("Buddies");
|
||||||
|
if (group == NULL) {
|
||||||
|
group = purple_group_new("Buddies");
|
||||||
|
purple_blist_add_group(group, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
PurpleBuddy* buddy =
|
||||||
|
purple_buddy_new(account, user_id.String(), user_name);
|
||||||
|
|
||||||
|
purple_blist_add_buddy(buddy, NULL, group, NULL);
|
||||||
|
purple_account_add_buddy_with_invite(account, buddy, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case IM_CONTACT_LIST_REMOVE_CONTACT:
|
||||||
|
{
|
||||||
|
PurpleAccount* account = _AccountFromMessage(msg);
|
||||||
|
BString user_id = msg->FindString("user_id");
|
||||||
|
if (user_id.IsEmpty() == true || account == NULL) break;
|
||||||
|
|
||||||
|
PurpleBuddy* buddy = purple_find_buddy(account, user_id.String());
|
||||||
|
if (buddy == NULL) return;
|
||||||
|
purple_blist_remove_buddy(buddy);
|
||||||
|
purple_account_remove_buddy(account, buddy, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case IM_GET_EXTENDED_CONTACT_INFO:
|
||||||
|
{
|
||||||
|
PurpleAccount* account = _AccountFromMessage(msg);
|
||||||
|
BString user_id = msg->FindString("user_id");
|
||||||
|
if (user_id.IsEmpty() == true || account == NULL) break;
|
||||||
|
|
||||||
|
PurpleBuddy* buddy = purple_find_buddy(account, user_id.String());
|
||||||
|
if (buddy == NULL) return;
|
||||||
|
|
||||||
|
BString user_name = purple_buddy_get_alias(buddy);
|
||||||
|
if (user_name.IsEmpty() == true)
|
||||||
|
user_name = purple_buddy_get_server_alias(buddy);
|
||||||
|
|
||||||
|
BMessage info(IM_MESSAGE);
|
||||||
|
info.AddInt32("im_what", IM_EXTENDED_CONTACT_INFO);
|
||||||
|
info.AddString("user_id", user_id);
|
||||||
|
if (user_name.IsEmpty() == false)
|
||||||
|
info.AddString("user_name", user_name);
|
||||||
|
SendMessage(account, info);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case IM_ROOM_SEND_INVITE:
|
case IM_ROOM_SEND_INVITE:
|
||||||
{
|
{
|
||||||
PurpleAccount* account = _AccountFromMessage(msg);
|
PurpleAccount* account = _AccountFromMessage(msg);
|
||||||
|
|
|
@ -208,6 +208,8 @@ PurpleProtocol::UpdateSettings(BMessage* msg)
|
||||||
BMessage
|
BMessage
|
||||||
PurpleProtocol::SettingsTemplate(const char* name)
|
PurpleProtocol::SettingsTemplate(const char* name)
|
||||||
{
|
{
|
||||||
|
if (strcmp(name, "roster") == 0)
|
||||||
|
return _RosterTemplate();
|
||||||
return fSettingsTemplate;
|
return fSettingsTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,3 +322,24 @@ PurpleProtocol::_SendPrplMessage(BMessage* msg)
|
||||||
if (fPrplMessenger->IsValid())
|
if (fPrplMessenger->IsValid())
|
||||||
fPrplMessenger->SendMessage(msg);
|
fPrplMessenger->SendMessage(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BMessage
|
||||||
|
PurpleProtocol::_RosterTemplate()
|
||||||
|
{
|
||||||
|
BMessage temp;
|
||||||
|
BMessage id;
|
||||||
|
id.AddString("name", "user_id");
|
||||||
|
id.AddString("description", "Username:");
|
||||||
|
id.AddString("error", "You can't friend someone without a nick.");
|
||||||
|
id.AddInt32("type", B_STRING_TYPE);
|
||||||
|
temp.AddMessage("setting", &id);
|
||||||
|
|
||||||
|
BMessage name;
|
||||||
|
name.AddString("name", "user_name");
|
||||||
|
name.AddString("description", "Alias:");
|
||||||
|
name.AddInt32("type", B_STRING_TYPE);
|
||||||
|
temp.AddMessage("setting", &name);
|
||||||
|
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
|
|
@ -81,6 +81,8 @@ public:
|
||||||
private:
|
private:
|
||||||
void _SendPrplMessage(BMessage* msg);
|
void _SendPrplMessage(BMessage* msg);
|
||||||
|
|
||||||
|
BMessage _RosterTemplate();
|
||||||
|
|
||||||
ChatProtocolMessengerInterface* fMessenger;
|
ChatProtocolMessengerInterface* fMessenger;
|
||||||
BMessenger* fPrplMessenger;
|
BMessenger* fPrplMessenger;
|
||||||
thread_id fBirdThread;
|
thread_id fBirdThread;
|
||||||
|
|
Ŝarĝante…
Reference in New Issue