facebook: use persistent chat identifiers facebook

Thu, 09 Jul 2015 18:01:25 -0400

author
James Geboski <jgeboski@gmail.com>
date
Thu, 09 Jul 2015 18:01:25 -0400
branch
facebook
changeset 37291
ccd151aed9f9
parent 37290
a34b993324e4
child 37292
ac1d2fdaab42

facebook: use persistent chat identifiers

libpurple/protocols/facebook/data.c file | annotate | diff | comparison | revisions
libpurple/protocols/facebook/data.h file | annotate | diff | comparison | revisions
libpurple/protocols/facebook/facebook.c file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/facebook/data.c	Mon Jul 06 20:03:34 2015 -0400
+++ b/libpurple/protocols/facebook/data.c	Thu Jul 09 18:01:25 2015 -0400
@@ -29,7 +29,6 @@
 	FbApi *api;
 	PurpleConnection *gc;
 	PurpleRoomlist *roomlist;
-	gint chatid;
 	GHashTable *icons;
 	GHashTable *icona;
 };
@@ -215,17 +214,6 @@
 	return priv->api;
 }
 
-gint
-fb_data_get_chatid(FbData *fata)
-{
-	FbDataPrivate *priv;
-
-	g_return_val_if_fail(FB_IS_DATA(fata), 0);
-	priv = fata->priv;
-
-	return priv->chatid++;
-}
-
 PurpleConnection *
 fb_data_get_connection(FbData *fata)
 {
--- a/libpurple/protocols/facebook/data.h	Mon Jul 06 20:03:34 2015 -0400
+++ b/libpurple/protocols/facebook/data.h	Thu Jul 09 18:01:25 2015 -0400
@@ -75,9 +75,6 @@
 FbApi *
 fb_data_get_api(FbData *fata);
 
-gint
-fb_data_get_chatid(FbData *fata);
-
 PurpleConnection *
 fb_data_get_connection(FbData *fata);
 
--- a/libpurple/protocols/facebook/facebook.c	Mon Jul 06 20:03:34 2015 -0400
+++ b/libpurple/protocols/facebook/facebook.c	Thu Jul 09 18:01:25 2015 -0400
@@ -275,7 +275,7 @@
 	PurpleConnection *gc;
 
 	gc = fb_data_get_connection(fata);
-	id = fb_data_get_chatid(fata);
+	id = fb_id_hash(&thrd->tid);
 	FB_ID_TO_STR(thrd->tid, tid);
 
 	chat = purple_serv_got_joined_chat(gc, id, tid);
@@ -618,14 +618,23 @@
 	FbApi *api;
 	FbData *fata;
 	FbId tid;
+	gint id;
+	PurpleChatConversation *chat;
 
 	name = g_hash_table_lookup(data, "name");
 	g_return_if_fail(name != NULL);
 
+	tid = FB_ID_FROM_STR(name);
+	id = fb_id_hash(&tid);
+	chat = purple_conversations_find_chat(gc, id);
+
+	if (chat != NULL) {
+		purple_conversation_present(PURPLE_CONVERSATION(chat));
+		return;
+	}
+
 	fata = purple_connection_get_protocol_data(gc);
 	api = fb_data_get_api(fata);
-	tid = FB_ID_FROM_STR(name);
-
 	fb_api_thread_info(api, tid);
 }
 

mercurial