libpurple/protocols/facebook/data.c

Wed, 26 Oct 2022 02:07:31 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Wed, 26 Oct 2022 02:07:31 -0500
changeset 41839
143c68ca625d
parent 41728
e9b96ef5ea38
child 41879
6009bf441ef5
permissions
-rw-r--r--

Port facebook to libsoup3

Testing Done:
Compiled with libsoup2 and libsoup3.

Reviewed at https://reviews.imfreedom.org/r/1965/

37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
1 /* purple
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
2 *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
5 * source distribution.
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
6 *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
10 * (at your option) any later version.
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
11 *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
15 * GNU General Public License for more details.
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
16 *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
20 */
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
21
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
22 #include <libsoup/soup.h>
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
23 #include <string.h>
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
24
40358
e6fe6fc1f516 move all protocols, purple plugins, and purple tests to use purple.h instead of including files individually
Gary Kramlich <grim@reaperworld.com>
parents: 40195
diff changeset
25 #include <purple.h>
40756
3a58ef28ee44 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 40412
diff changeset
26 #include "libpurple/glibcompat.h"
41839
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
27 #include "libpurple/soupcompat.h"
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
28
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
29 #include "api.h"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
30 #include "data.h"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
31
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
32 /**
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
33 * FbData:
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
34 *
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
35 * Represents the connection data used by #FacebookProtocol.
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
36 */
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
37 struct _FbData {
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
38 GObject parent;
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
39
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
40 FbApi *api;
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
41 SoupSession *cons;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
42 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
43 PurpleRoomlist *roomlist;
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
44 GQueue *msgs;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
45 GHashTable *imgs;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
46 GHashTable *unread;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
47 GHashTable *evs;
39550
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
48 } FbDataPrivate;
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
49
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
50 /**
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
51 * FbDataImage:
39550
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
52 *
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
53 * Represents the data used for fetching images.
39550
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
54 */
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
55 struct _FbDataImage {
39550
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
56 GObject parent;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
57
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
58 FbData *fata;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
59 gchar *url;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
60 FbDataImageFunc func;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
61 gpointer data;
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
62 GDestroyNotify dunc;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
63
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
64 gboolean active;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
65 const guint8 *image;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
66 gsize size;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
67 };
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
68
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
69 static const gchar *fb_props_strs[] = {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
70 "cid",
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
71 "did",
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
72 "stoken",
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
73 "token"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
74 };
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
75
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
76 G_DEFINE_TYPE(FbData, fb_data, G_TYPE_OBJECT);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
77 G_DEFINE_TYPE(FbDataImage, fb_data_image, G_TYPE_OBJECT);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
78
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
79 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
80 fb_data_dispose(GObject *obj)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
81 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
82 FbData *fata = FB_DATA(obj);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
83
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
84 if(fata->cons != NULL) {
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
85 soup_session_abort(fata->cons);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
86 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
87
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
88 if(fata->evs != NULL) {
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
89 GHashTableIter iter;
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
90 gpointer ptr = NULL;
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
91
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
92 g_hash_table_iter_init(&iter, fata->evs);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
93 while (g_hash_table_iter_next(&iter, NULL, &ptr)) {
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
94 g_source_remove(GPOINTER_TO_UINT(ptr));
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
95 }
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
96 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
97
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
98 g_clear_object(&fata->api);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
99
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
100 g_clear_object(&fata->cons);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
101 if(fata->msgs != NULL) {
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
102 g_queue_free_full(fata->msgs, (GDestroyNotify)fb_api_message_free);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
103 fata->msgs = NULL;
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
104 }
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
105
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
106 g_clear_pointer(&fata->imgs, g_hash_table_destroy);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
107 g_clear_pointer(&fata->unread, g_hash_table_destroy);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
108 g_clear_pointer(&fata->evs, g_hash_table_destroy);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
109 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
110
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
111 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
112 fb_data_class_init(FbDataClass *klass)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
113 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
114 GObjectClass *gklass = G_OBJECT_CLASS(klass);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
115
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
116 gklass->dispose = fb_data_dispose;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
117 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
118
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
119 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
120 fb_data_init(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
121 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
122 fata->msgs = g_queue_new();
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
123
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
124 fata->imgs = g_hash_table_new_full(g_direct_hash, g_direct_equal,
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
125 g_object_unref, NULL);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
126 fata->unread = g_hash_table_new_full(fb_id_hash, fb_id_equal,
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
127 g_free, NULL);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
128 fata->evs = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
129 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
130
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
131 static void
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
132 fb_data_image_dispose(GObject *obj)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
133 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
134 FbDataImage *img = FB_DATA_IMAGE(obj);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
135 FbData *fata = img->fata;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
136
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
137 if (img->dunc != NULL && img->data != NULL) {
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
138 img->dunc(img->data);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
139 img->dunc = NULL;
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
140 }
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
141
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
142 g_clear_pointer(&img->url, g_free);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
143 g_hash_table_steal(fata->imgs, img);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
144 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
145
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
146 static void
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
147 fb_data_image_class_init(FbDataImageClass *klass)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
148 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
149 GObjectClass *gklass = G_OBJECT_CLASS(klass);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
150
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
151 gklass->dispose = fb_data_image_dispose;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
152 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
153
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
154 static void
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
155 fb_data_image_init(FbDataImage *img)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
156 {
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
157 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
158
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
159 FbData *
40030
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40029
diff changeset
160 fb_data_new(PurpleConnection *gc, GProxyResolver *resolver)
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
161 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
162 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
163
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
164 fata = g_object_new(FB_TYPE_DATA, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
165
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
166 fata->cons = soup_session_new_with_options("proxy-resolver", resolver,
40819
54b2a95ac176 Cleanup deprecated libsoup usage
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40756
diff changeset
167 NULL);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
168 fata->api = fb_api_new(gc, resolver);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
169 fata->gc = gc;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
170
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
171 return fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
172 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
173
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
174 gboolean
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
175 fb_data_load(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
176 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
177 const gchar *str;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
178 FbId id;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
179 gboolean ret = TRUE;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
180 guint i;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
181 guint64 uint;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
182 GValue val = G_VALUE_INIT;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
183 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
184
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
185 g_return_val_if_fail(FB_IS_DATA(fata), FALSE);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
186 acct = purple_connection_get_account(fata->gc);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
187
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
188 for (i = 0; i < G_N_ELEMENTS(fb_props_strs); i++) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
189 str = purple_account_get_string(acct, fb_props_strs[i], NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
190
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
191 if (str == NULL) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
192 ret = FALSE;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
193 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
194
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
195 g_value_init(&val, G_TYPE_STRING);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
196 g_value_set_string(&val, str);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
197 g_object_set_property(G_OBJECT(fata->api), fb_props_strs[i],
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
198 &val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
199 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
200 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
201
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
202 str = purple_account_get_string(acct, "mid", NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
203
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
204 if (str != NULL) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
205 uint = g_ascii_strtoull(str, NULL, 10);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
206 g_value_init(&val, G_TYPE_UINT64);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
207 g_value_set_uint64(&val, uint);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
208 g_object_set_property(G_OBJECT(fata->api), "mid", &val);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
209 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
210 } else {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
211 ret = FALSE;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
212 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
213
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
214 str = purple_account_get_string(acct, "uid", NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
215
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
216 if (str != NULL) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
217 id = FB_ID_FROM_STR(str);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
218 g_value_init(&val, FB_TYPE_ID);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
219 g_value_set_int64(&val, id);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
220 g_object_set_property(G_OBJECT(fata->api), "uid", &val);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
221 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
222 } else {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
223 ret = FALSE;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
224 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
225
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
226 fb_api_rehash(fata->api);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
227 return ret;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
228 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
229
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
230 void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
231 fb_data_save(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
232 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
233 const gchar *str;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
234 gchar *dup;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
235 guint i;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
236 guint64 uint;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
237 GValue val = G_VALUE_INIT;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
238 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
239
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
240 g_return_if_fail(FB_IS_DATA(fata));
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
241 acct = purple_connection_get_account(fata->gc);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
242
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
243 for (i = 0; i < G_N_ELEMENTS(fb_props_strs); i++) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
244 g_value_init(&val, G_TYPE_STRING);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
245 g_object_get_property(G_OBJECT(fata->api), fb_props_strs[i],
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
246 &val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
247 str = g_value_get_string(&val);
38403
e27755a3a92e facebook: don't save access token if not remembering password
dx <dx@dxzone.com.ar>
parents: 37560
diff changeset
248
e27755a3a92e facebook: don't save access token if not remembering password
dx <dx@dxzone.com.ar>
parents: 37560
diff changeset
249 if (purple_strequal(fb_props_strs[i], "token") && !purple_account_get_remember_password(acct)) {
e27755a3a92e facebook: don't save access token if not remembering password
dx <dx@dxzone.com.ar>
parents: 37560
diff changeset
250 str = "";
e27755a3a92e facebook: don't save access token if not remembering password
dx <dx@dxzone.com.ar>
parents: 37560
diff changeset
251 }
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
252 purple_account_set_string(acct, fb_props_strs[i], str);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
253 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
254 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
255
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
256 g_value_init(&val, G_TYPE_UINT64);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
257 g_object_get_property(G_OBJECT(fata->api), "mid", &val);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
258 uint = g_value_get_uint64(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
259 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
260
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
261 dup = g_strdup_printf("%" G_GINT64_FORMAT, uint);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
262 purple_account_set_string(acct, "mid", dup);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
263 g_free(dup);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
264
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
265 g_value_init(&val, G_TYPE_INT64);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
266 g_object_get_property(G_OBJECT(fata->api), "uid", &val);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
267 uint = g_value_get_int64(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
268 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
269
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
270 dup = g_strdup_printf("%" FB_ID_FORMAT, uint);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
271 purple_account_set_string(acct, "uid", dup);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
272 g_free(dup);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
273 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
274
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
275 void
41295
2f1bed3c4738 Use a source identifier for fb_data_add_timeout
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40819
diff changeset
276 fb_data_save_timeout(FbData *fata, const gchar *name, guint id)
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
277 {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
278 g_return_if_fail(FB_IS_DATA(fata));
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
279
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
280 fb_data_clear_timeout(fata, name, TRUE);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
281
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
282 g_hash_table_replace(fata->evs, g_strdup(name), GUINT_TO_POINTER(id));
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
283 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
284
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
285 void
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
286 fb_data_clear_timeout(FbData *fata, const gchar *name, gboolean remove)
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
287 {
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
288 gpointer ptr;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
289 guint id;
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
290
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
291 g_return_if_fail(FB_IS_DATA(fata));
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
292
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
293 ptr = g_hash_table_lookup(fata->evs, name);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
294 id = GPOINTER_TO_UINT(ptr);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
295
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
296 if ((id > 0) && remove) {
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 38403
diff changeset
297 g_source_remove(id);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
298 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
299
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
300 g_hash_table_remove(fata->evs, name);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
301 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
302
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
303 FbApi *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
304 fb_data_get_api(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
305 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
306
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
307 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
308
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
309 return fata->api;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
310 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
311
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
312 PurpleConnection *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
313 fb_data_get_connection(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
314 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
315 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
316
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
317 return fata->gc;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
318 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
319
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
320 PurpleRoomlist *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
321 fb_data_get_roomlist(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
322 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
323 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
324
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
325 return fata->roomlist;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
326 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
327
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
328 gboolean
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
329 fb_data_get_unread(FbData *fata, FbId id)
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
330 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
331 gpointer *ptr;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
332
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
333 g_return_val_if_fail(FB_IS_DATA(fata), FALSE);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
334 g_return_val_if_fail(id != 0, FALSE);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
335
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
336 ptr = g_hash_table_lookup(fata->unread, &id);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
337 return GPOINTER_TO_INT(ptr);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
338 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
339
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
340 void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
341 fb_data_set_roomlist(FbData *fata, PurpleRoomlist *list)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
342 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
343 g_return_if_fail(FB_IS_DATA(fata));
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
344
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
345 fata->roomlist = list;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
346 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
347
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
348 void
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
349 fb_data_set_unread(FbData *fata, FbId id, gboolean unread)
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
350 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
351 gpointer key;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
352
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
353 g_return_if_fail(FB_IS_DATA(fata));
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
354 g_return_if_fail(id != 0);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
355
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
356 if (!unread) {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
357 g_hash_table_remove(fata->unread, &id);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
358 return;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
359 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
360
40756
3a58ef28ee44 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 40412
diff changeset
361 key = g_memdup2(&id, sizeof id);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
362 g_hash_table_replace(fata->unread, key, GINT_TO_POINTER(unread));
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
363 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
364
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
365 void
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
366 fb_data_add_message(FbData *fata, FbApiMessage *msg)
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
367 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
368 g_return_if_fail(FB_IS_DATA(fata));
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
369
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
370 g_queue_push_tail(fata->msgs, msg);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
371 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
372
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
373 void
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
374 fb_data_remove_message(FbData *fata, FbApiMessage *msg)
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
375 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
376 g_return_if_fail(FB_IS_DATA(fata));
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
377
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
378 g_queue_remove(fata->msgs, msg);
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
379 }
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
380
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
381 GSList *
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
382 fb_data_take_messages(FbData *fata, FbId uid)
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
383 {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
384 FbApiMessage *msg;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
385 GList *l;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
386 GList *prev;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
387 GSList *msgs = NULL;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
388
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
389 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
390 l = fata->msgs->tail;
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
391
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
392 while (l != NULL) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
393 msg = l->data;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
394 prev = l->prev;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
395
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
396 if (msg->uid == uid) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
397 msgs = g_slist_prepend(msgs, msg);
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
398 g_queue_delete_link(fata->msgs, l);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
399 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
400
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
401 l = prev;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
402 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
403
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
404 return msgs;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
405 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
406
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
407 FbDataImage *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
408 fb_data_image_add(FbData *fata, const gchar *url, FbDataImageFunc func,
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
409 gpointer data, GDestroyNotify dunc)
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
410 {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
411 FbDataImage *img;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
412
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
413 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
414 g_return_val_if_fail(url != NULL, NULL);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
415 g_return_val_if_fail(func != NULL, NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
416
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
417 img = g_object_new(FB_TYPE_DATA_IMAGE, NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
418
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
419 img->fata = fata;
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
420 img->url = g_strdup(url);
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
421 img->func = func;
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
422 img->data = data;
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
423 img->dunc = dunc;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
424
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
425 g_hash_table_insert(fata->imgs, img, img);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
426 return img;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
427 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
428
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
429 gboolean
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
430 fb_data_image_get_active(FbDataImage *img)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
431 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
432 g_return_val_if_fail(FB_IS_DATA_IMAGE(img), FALSE);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
433
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
434 return img->active;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
435 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
436
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
437 gpointer
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
438 fb_data_image_get_data(FbDataImage *img)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
439 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
440 g_return_val_if_fail(FB_IS_DATA_IMAGE(img), NULL);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
441
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
442 return img->data;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
443 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
444
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
445 FbData *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
446 fb_data_image_get_fata(FbDataImage *img)
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
447 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
448 g_return_val_if_fail(FB_IS_DATA_IMAGE(img), NULL);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
449
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
450 return img->fata;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
451 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
452
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
453 const guint8 *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
454 fb_data_image_get_image(FbDataImage *img, gsize *size)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
455 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
456 g_return_val_if_fail(FB_IS_DATA_IMAGE(img), NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
457
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
458 if (size != NULL) {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
459 *size = img->size;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
460 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
461
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
462 return img->image;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
463 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
464
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
465 guint8 *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
466 fb_data_image_dup_image(FbDataImage *img, gsize *size)
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
467 {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
468 g_return_val_if_fail(FB_IS_DATA_IMAGE(img), NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
469
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
470 if (size != NULL) {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
471 *size = img->size;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
472 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
473
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
474 if (img->size < 1) {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
475 return NULL;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
476 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
477
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
478 return g_memdup2(img->image, img->size);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
479 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
480
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
481 const gchar *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
482 fb_data_image_get_url(FbDataImage *img)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
483 {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
484 g_return_val_if_fail(FB_IS_DATA_IMAGE(img), NULL);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
485
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
486 return img->url;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
487 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
488
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
489 static void
41839
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
490 fb_data_image_cb(GObject *source, GAsyncResult *result, gpointer data) {
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
491 SoupMessage *msg = data;
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
492 FbDataImage *img = g_object_get_data(G_OBJECT(msg), "facebook-data-image");
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
493 GError *err = NULL;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
494
41839
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
495 if(fb_http_error_chk(msg, &err)) {
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
496 GBytes *bytes = NULL;
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
497
41839
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
498 bytes = soup_session_send_and_read_finish(SOUP_SESSION(source),
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
499 result, &err);
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
500 if(bytes != NULL) {
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
501 img->image = g_bytes_unref_to_data(bytes, &img->size);
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
502 }
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
503 }
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
504
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
505 img->func(img, err);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
506
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
507 if (G_LIKELY(err == NULL)) {
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
508 fb_data_image_queue(img->fata);
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
509 } else {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
510 g_error_free(err);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
511 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
512
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
513 g_object_unref(img);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
514 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
515
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
516 void
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
517 fb_data_image_queue(FbData *fata)
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
518 {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
519 const gchar *url;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
520 FbDataImage *img;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
521 GHashTableIter iter;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
522 guint active = 0;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
523
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
524 g_return_if_fail(FB_IS_DATA(fata));
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
525 g_hash_table_iter_init(&iter, fata->imgs);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
526
37471
32c1e77d0474 facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents: 37433
diff changeset
527 while (g_hash_table_iter_next(&iter, (gpointer *) &img, NULL)) {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
528 if (fb_data_image_get_active(img)) {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
529 active++;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
530 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
531 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
532
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
533 if (active >= FB_DATA_ICON_MAX) {
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
534 return;
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
535 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
536
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
537 g_hash_table_iter_init(&iter, fata->imgs);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
538
37471
32c1e77d0474 facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents: 37433
diff changeset
539 while (g_hash_table_iter_next(&iter, (gpointer *) &img, NULL)) {
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
540 SoupMessage *msg;
39270
267f9e8581df facebook: Allow sizes larger than 1MiB for received images
Mike Ruprecht <cmaiku@gmail.com>
parents: 38433
diff changeset
541
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
542 if (fb_data_image_get_active(img)) {
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
543 continue;
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
544 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
545
41728
e9b96ef5ea38 De-privatize Facebook classes
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41295
diff changeset
546 img->active = TRUE;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
547 url = fb_data_image_get_url(img);
39270
267f9e8581df facebook: Allow sizes larger than 1MiB for received images
Mike Ruprecht <cmaiku@gmail.com>
parents: 38433
diff changeset
548
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
549 msg = soup_message_new("GET", url);
41839
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
550 g_object_set_data(G_OBJECT(msg), "facebook-data-image", img);
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
551 // purple_http_request_set_max_len(req, FB_DATA_ICON_SIZE_MAX);
41839
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
552 soup_session_send_and_read_async(fata->cons, msg, G_PRIORITY_DEFAULT,
143c68ca625d Port facebook to libsoup3
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41728
diff changeset
553 NULL, fb_data_image_cb, msg);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
554
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
555 if (++active >= FB_DATA_ICON_MAX) {
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
556 break;
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
557 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
558 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
559 }

mercurial