eion/purple-hangouts

Parents e205562e653f
Children f93a2627370c
Add purple2 workaround for setting flags on a PurpleChatUser not triggering signals
--- a/libhangouts.c Thu Sep 22 14:29:26 2016 +1200
+++ b/libhangouts.c Fri Sep 23 11:37:28 2016 +1200
@@ -666,12 +666,23 @@
void _purple_socket_init(void);
void _purple_socket_uninit(void);
+// See workaround for purple_chat_conversation_find_user() in purplecompat.h
+static void
+hangouts_deleting_chat_buddy(PurpleConvChatBuddy *cb)
+{
+ if (g_dataset_get_data(cb, "chat") != NULL) {
+ g_dataset_destroy(cb);
+ }
+}
+
static gboolean
libpurple2_plugin_load(PurplePlugin *plugin)
{
_purple_socket_init();
purple_http_init();
+ purple_signal_connect(purple_conversations_get_handle(), "deleting-chat-buddy", plugin, PURPLE_CALLBACK(hangouts_deleting_chat_buddy), NULL);
+
return plugin_load(plugin, NULL);
}
--- a/purplecompat.h Thu Sep 22 14:29:26 2016 +1200
+++ b/purplecompat.h Fri Sep 23 11:37:28 2016 +1200
@@ -88,7 +88,6 @@
#define PURPLE_IS_IM_CONVERSATION(conv) (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
#define PURPLE_IS_CHAT_CONVERSATION(conv) (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT)
#define purple_chat_conversation_add_user purple_conv_chat_add_user
-#define purple_chat_conversation_find_user purple_conv_chat_cb_find
#define purple_chat_conversation_has_left purple_conv_chat_has_left
#define purple_chat_conversation_remove_user purple_conv_chat_remove_user
@@ -126,8 +125,20 @@
#define PURPLE_CHAT_USER_VOICE PURPLE_CBFLAGS_VOICE
#define PURPLE_CHAT_USER_TYPING PURPLE_CBFLAGS_TYPING
#define PurpleChatUser PurpleConvChatBuddy
-#define purple_chat_user_get_flags(cb) ((cb) == NULL ? PURPLE_CBFLAGS_NONE : (cb)->flags)
-#define purple_chat_user_set_flags(cb, f) ((cb)->flags = (f))
+
+static inline PurpleChatUser *
+purple_chat_conversation_find_user(PurpleChatConversation *chat, const char *name)
+{
+ PurpleChatUser *cb = purple_conv_chat_cb_find(chat, name);
+
+ if (cb != NULL) {
+ g_dataset_set_data(cb, "chat", chat);
+ }
+
+ return cb;
+}
+#define purple_chat_user_get_flags(cb) purple_conv_chat_user_get_flags(g_dataset_get_data((cb), "chat"), (cb)->name)
+#define purple_chat_user_set_flags(cb, f) purple_conv_chat_user_set_flags(g_dataset_get_data((cb), "chat"), (cb)->name, (f))
#define purple_chat_user_set_alias(cb, a) ((cb)->alias = (a))
#define PurpleIMTypingState PurpleTypingState