(purple) Joining rooms, receiving chat messages
This commit is contained in:
parent
30e3d6eefd
commit
82cf946bc8
|
@ -55,7 +55,7 @@ PurpleApp::PurpleApp()
|
||||||
|
|
||||||
_GetProtocolsInfo();
|
_GetProtocolsInfo();
|
||||||
new BMessageRunner(this, new BMessage(G_MAIN_LOOP), 100000, -1);
|
new BMessageRunner(this, new BMessage(G_MAIN_LOOP), 100000, -1);
|
||||||
new BMessageRunner(this, new BMessage(CHECK_APP), 60000000, -1);
|
new BMessageRunner(this, new BMessage(CHECK_APP), 30000000, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -230,7 +230,7 @@ PurpleApp::_ParseProtoOptions(PurplePluginProtocolInfo* info)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add any UserSplits (that is, parts of the protocols 'username' format)
|
// Add any UserSplits (that is, parts of the protocol's "username" format)
|
||||||
GList* splitIter = info->user_splits;
|
GList* splitIter = info->user_splits;
|
||||||
for (int i = 0; splitIter != NULL; splitIter = splitIter->next)
|
for (int i = 0; splitIter != NULL; splitIter = splitIter->next)
|
||||||
{
|
{
|
||||||
|
@ -452,24 +452,22 @@ init_signals()
|
||||||
{
|
{
|
||||||
int handle;
|
int handle;
|
||||||
|
|
||||||
purple_signal_connect(purple_connections_get_handle(), "signed-on",
|
|
||||||
&handle, PURPLE_CALLBACK(signal_signed_on), NULL);
|
|
||||||
purple_signal_connect(purple_connections_get_handle(), "connection-error",
|
purple_signal_connect(purple_connections_get_handle(), "connection-error",
|
||||||
&handle, PURPLE_CALLBACK(signal_connection_error), NULL);
|
&handle, PURPLE_CALLBACK(signal_connection_error), NULL);
|
||||||
|
|
||||||
purple_signal_connect(purple_connections_get_handle(), "account-status-changed",
|
purple_signal_connect(purple_accounts_get_handle(), "account-signed-on",
|
||||||
|
&handle, PURPLE_CALLBACK(signal_account_signed_on), NULL);
|
||||||
|
purple_signal_connect(purple_accounts_get_handle(), "account-status-changed",
|
||||||
&handle, PURPLE_CALLBACK(signal_account_status_changed), NULL);
|
&handle, PURPLE_CALLBACK(signal_account_status_changed), NULL);
|
||||||
}
|
|
||||||
|
|
||||||
|
purple_signal_connect(purple_conversations_get_handle(), "chat-joined",
|
||||||
static void
|
&handle, PURPLE_CALLBACK(signal_chat_joined), NULL);
|
||||||
signal_signed_on(PurpleConnection* gc)
|
purple_signal_connect(purple_conversations_get_handle(), "chat-left",
|
||||||
{
|
&handle, PURPLE_CALLBACK(signal_chat_left), NULL);
|
||||||
BMessage readyMsg(IM_MESSAGE);
|
purple_signal_connect(purple_conversations_get_handle(), "received-chat-msg",
|
||||||
readyMsg.AddInt32("im_what", IM_PROTOCOL_READY);
|
&handle, PURPLE_CALLBACK(signal_received_chat_msg), NULL);
|
||||||
|
purple_signal_connect(purple_conversations_get_handle(), "received-im-msg",
|
||||||
PurpleApp* app = (PurpleApp*)be_app;
|
&handle, PURPLE_CALLBACK(signal_received_chat_msg), NULL);
|
||||||
app->SendMessage(purple_connection_get_account(gc), readyMsg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -477,7 +475,23 @@ static void
|
||||||
signal_connection_error(PurpleConnection* gc, PurpleConnectionError err,
|
signal_connection_error(PurpleConnection* gc, PurpleConnectionError err,
|
||||||
const gchar* desc)
|
const gchar* desc)
|
||||||
{
|
{
|
||||||
std::cout << "Connection failed: " << (const char*)desc << std::endl;
|
std::cerr << "Connection failed: " << (const char*)desc << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
signal_account_signed_on(PurpleAccount* account)
|
||||||
|
{
|
||||||
|
BMessage readyMsg(IM_MESSAGE);
|
||||||
|
readyMsg.AddInt32("im_what", IM_PROTOCOL_READY);
|
||||||
|
PurpleApp* app = (PurpleApp*)be_app;
|
||||||
|
((PurpleApp*)be_app)->SendMessage(account, readyMsg);
|
||||||
|
|
||||||
|
BMessage info(IM_MESSAGE);
|
||||||
|
info.AddInt32("im_what", IM_OWN_CONTACT_INFO);
|
||||||
|
info.AddString("user_id", purple_account_get_username(account));
|
||||||
|
info.AddString("user_name", purple_account_get_alias(account));
|
||||||
|
((PurpleApp*)be_app)->SendMessage(account, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -492,6 +506,41 @@ signal_account_status_changed(PurpleAccount* account, PurpleStatus* old,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
signal_chat_joined(PurpleConversation* conv)
|
||||||
|
{
|
||||||
|
BMessage join(IM_MESSAGE);
|
||||||
|
join.AddInt32("im_what", IM_ROOM_JOINED);
|
||||||
|
join.AddString("chat_id", purple_conversation_get_name(conv));
|
||||||
|
((PurpleApp*)be_app)->SendMessage(purple_conversation_get_account(conv),
|
||||||
|
join);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
signal_chat_left(PurpleConversation* conv)
|
||||||
|
{
|
||||||
|
BMessage left(IM_MESSAGE);
|
||||||
|
left.AddInt32("im_what", IM_ROOM_LEFT);
|
||||||
|
left.AddString("chat_id", purple_conversation_get_name(conv));
|
||||||
|
((PurpleApp*)be_app)->SendMessage(purple_conversation_get_account(conv),
|
||||||
|
left);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
signal_received_chat_msg(PurpleAccount* account, char* sender, char* message,
|
||||||
|
PurpleConversation* conv, PurpleMessageFlags flags)
|
||||||
|
{
|
||||||
|
BMessage chat(IM_MESSAGE);
|
||||||
|
chat.AddInt32("im_what", IM_MESSAGE_RECEIVED);
|
||||||
|
chat.AddString("chat_id", purple_conversation_get_name(conv));
|
||||||
|
chat.AddString("user_id", sender);
|
||||||
|
chat.AddString("body", message);
|
||||||
|
((PurpleApp*)be_app)->SendMessage(account, chat);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PurpleStatusPrimitive
|
PurpleStatusPrimitive
|
||||||
cardie_status_to_purple(UserStatus status)
|
cardie_status_to_purple(UserStatus status)
|
||||||
{
|
{
|
||||||
|
|
|
@ -96,25 +96,34 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
status_t init_libpurple();
|
status_t init_libpurple();
|
||||||
void init_ui_ops();
|
void init_ui_ops();
|
||||||
void init_signals();
|
void init_signals();
|
||||||
|
|
||||||
// Connection signals
|
// Connection signals
|
||||||
static void signal_signed_on(PurpleConnection* gc);
|
static void signal_connection_error(PurpleConnection* gc,
|
||||||
static void signal_connection_error(PurpleConnection* gc,
|
|
||||||
PurpleConnectionError err, const gchar* desc);
|
PurpleConnectionError err, const gchar* desc);
|
||||||
|
|
||||||
// Account signals
|
// Account signals
|
||||||
static void signal_account_status_changed(PurpleAccount* account,
|
static void signal_account_signed_on(PurpleAccount* account);
|
||||||
|
static void signal_account_status_changed(PurpleAccount* account,
|
||||||
PurpleStatus* old, PurpleStatus* cur);
|
PurpleStatus* old, PurpleStatus* cur);
|
||||||
|
|
||||||
PurpleStatusPrimitive cardie_status_to_purple(UserStatus status);
|
// Conversation signals
|
||||||
UserStatus purple_status_to_cardie(PurpleStatus* status);
|
static void signal_chat_joined(PurpleConversation* conv);
|
||||||
|
static void signal_chat_left(PurpleConversation* conv);
|
||||||
|
static void signal_received_chat_msg(PurpleAccount* account,
|
||||||
|
char* sender, char* message,
|
||||||
|
PurpleConversation* conv, PurpleMessageFlags flags);
|
||||||
|
|
||||||
static guint _purple_glib_input_add(gint fd, PurpleInputCondition condition,
|
// Util
|
||||||
|
PurpleStatusPrimitive cardie_status_to_purple(UserStatus status);
|
||||||
|
UserStatus purple_status_to_cardie(PurpleStatus* status);
|
||||||
|
|
||||||
|
static guint _purple_glib_input_add(gint fd,
|
||||||
|
PurpleInputCondition condition,
|
||||||
PurpleInputFunction function, gpointer data);
|
PurpleInputFunction function, gpointer data);
|
||||||
static gboolean _purple_glib_io_invoke(GIOChannel *source,
|
static gboolean _purple_glib_io_invoke(GIOChannel *source,
|
||||||
GIOCondition condition, gpointer data);
|
GIOCondition condition, gpointer data);
|
||||||
|
|
||||||
#endif // _PURPLE_APP_H
|
#endif // _PURPLE_APP_H
|
||||||
|
|
Ŝarĝante…
Reference in New Issue