libpurple/protocols/facebook/data.c

Thu, 10 Oct 2019 02:38:04 -0400

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Thu, 10 Oct 2019 02:38:04 -0400
changeset 40030
1827a7e715e0
parent 40029
70a9571132e4
child 40195
fb4b0ae193c0
permissions
-rw-r--r--

Pass correct proxy resolver to Facebook soup session.

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
37310
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
25 #include "account.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
26 #include "glibcompat.h"
a1a5f0ac39f2 facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents: 37309
diff changeset
27
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
28 #include "api.h"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
29 #include "data.h"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
30
39556
622bf98df0ac Remove unnecessary struct tags.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39550
diff changeset
31 typedef struct
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
32 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
33 FbApi *api;
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
34 SoupSession *cons;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
35 PurpleConnection *gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
36 PurpleRoomlist *roomlist;
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
37 GQueue *msgs;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
38 GHashTable *imgs;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
39 GHashTable *unread;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
40 GHashTable *evs;
39550
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
41 } FbDataPrivate;
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
42
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
43 /**
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
44 * FbData:
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
45 *
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
46 * Represents the connection data used by #FacebookProtocol.
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
47 */
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
48 struct _FbData
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 GObject parent;
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
51 FbDataPrivate *priv;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
52 };
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
53
39556
622bf98df0ac Remove unnecessary struct tags.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39550
diff changeset
54 typedef struct
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
55 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
56 FbData *fata;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
57 gchar *url;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
58 FbDataImageFunc func;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
59 gpointer data;
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
60 GDestroyNotify dunc;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
61
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
62 gboolean active;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
63 const guint8 *image;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
64 gsize size;
39550
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
65 } FbDataImagePrivate;
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
66
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
67 /**
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
68 * FbDataImage:
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
69 *
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
70 * Represents the data used for fetching images.
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
71 */
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
72 struct _FbDataImage
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
73 {
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
74 GObject parent;
808e0a11eb9f Use G_DECLARE* in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39431
diff changeset
75 FbDataImagePrivate *priv;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
76 };
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
77
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
78 static const gchar *fb_props_strs[] = {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
79 "cid",
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
80 "did",
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
81 "stoken",
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
82 "token"
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
83 };
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
84
39431
86688eb3f593 Use G_DEFINE_TYPE_WITH_PRIVATE in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39271
diff changeset
85 G_DEFINE_TYPE_WITH_PRIVATE(FbData, fb_data, G_TYPE_OBJECT);
86688eb3f593 Use G_DEFINE_TYPE_WITH_PRIVATE in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39271
diff changeset
86 G_DEFINE_TYPE_WITH_PRIVATE(FbDataImage, fb_data_image, G_TYPE_OBJECT);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
87
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
88 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
89 fb_data_dispose(GObject *obj)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
90 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
91 FbDataPrivate *priv = FB_DATA(obj)->priv;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
92 GHashTableIter iter;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
93 gpointer ptr;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
94
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
95 soup_session_abort(priv->cons);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
96 g_hash_table_iter_init(&iter, priv->evs);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
97
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
98 while (g_hash_table_iter_next(&iter, NULL, &ptr)) {
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 38403
diff changeset
99 g_source_remove(GPOINTER_TO_UINT(ptr));
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
100 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
101
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
102 if (G_LIKELY(priv->api != NULL)) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
103 g_object_unref(priv->api);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
104 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
105
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
106 g_object_unref(priv->cons);
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
107 g_queue_free_full(priv->msgs, (GDestroyNotify) fb_api_message_free);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
108
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
109 g_hash_table_destroy(priv->imgs);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
110 g_hash_table_destroy(priv->unread);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
111 g_hash_table_destroy(priv->evs);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
112 }
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 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
115 fb_data_class_init(FbDataClass *klass)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
116 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
117 GObjectClass *gklass = G_OBJECT_CLASS(klass);
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 gklass->dispose = fb_data_dispose;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
120 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
121
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
122 static void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
123 fb_data_init(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
124 {
39431
86688eb3f593 Use G_DEFINE_TYPE_WITH_PRIVATE in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39271
diff changeset
125 FbDataPrivate *priv = fb_data_get_instance_private(fata);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
126 fata->priv = priv;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
127
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
128 priv->msgs = g_queue_new();
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
129
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
130 priv->imgs = g_hash_table_new_full(g_direct_hash, g_direct_equal,
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
131 g_object_unref, NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
132 priv->unread = g_hash_table_new_full(fb_id_hash, fb_id_equal,
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
133 g_free, NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
134 priv->evs = g_hash_table_new_full(g_str_hash, g_str_equal,
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
135 g_free, NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
136 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
137
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
138 static void
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
139 fb_data_image_dispose(GObject *obj)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
140 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
141 FbDataImage *img = FB_DATA_IMAGE(obj);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
142 FbDataImagePrivate *priv = img->priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
143 FbData *fata = priv->fata;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
144
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
145 if ((priv->dunc != NULL) && (priv->data != NULL)) {
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
146 priv->dunc(priv->data);
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
147 }
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
148
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
149 g_free(priv->url);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
150 g_hash_table_steal(fata->priv->imgs, img);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
151 }
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 static void
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
154 fb_data_image_class_init(FbDataImageClass *klass)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
155 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
156 GObjectClass *gklass = G_OBJECT_CLASS(klass);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
157
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
158 gklass->dispose = fb_data_image_dispose;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
159 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
160
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
161 static void
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
162 fb_data_image_init(FbDataImage *img)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
163 {
39431
86688eb3f593 Use G_DEFINE_TYPE_WITH_PRIVATE in facebook prpl.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39271
diff changeset
164 FbDataImagePrivate *priv = fb_data_image_get_instance_private(img);
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
165 img->priv = priv;
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
166 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
167
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
168 FbData *
40030
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40029
diff changeset
169 fb_data_new(PurpleConnection *gc, GProxyResolver *resolver)
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 FbData *fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
172 FbDataPrivate *priv;
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 fata = g_object_new(FB_TYPE_DATA, NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
175 priv = fata->priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
176
40030
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40029
diff changeset
177 priv->cons = soup_session_new_with_options(SOUP_SESSION_PROXY_RESOLVER,
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40029
diff changeset
178 resolver, NULL);
1827a7e715e0 Pass correct proxy resolver to Facebook soup session.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40029
diff changeset
179 priv->api = fb_api_new(gc, resolver);
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
180 priv->gc = gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
181
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
182 return fata;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
183 }
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 gboolean
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
186 fb_data_load(FbData *fata)
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 const gchar *str;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
189 FbDataPrivate *priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
190 FbId id;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
191 gboolean ret = TRUE;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
192 guint i;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
193 guint64 uint;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
194 GValue val = G_VALUE_INIT;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
195 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
196
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
197 g_return_val_if_fail(FB_IS_DATA(fata), FALSE);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
198 priv = fata->priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
199 acct = purple_connection_get_account(priv->gc);
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 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
202 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
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 ret = FALSE;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
206 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
207
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
208 g_value_init(&val, G_TYPE_STRING);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
209 g_value_set_string(&val, str);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
210 g_object_set_property(G_OBJECT(priv->api), fb_props_strs[i],
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
211 &val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
212 g_value_unset(&val);
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
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
215 str = purple_account_get_string(acct, "mid", NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
216
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
217 if (str != NULL) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
218 uint = g_ascii_strtoull(str, NULL, 10);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
219 g_value_init(&val, G_TYPE_UINT64);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
220 g_value_set_uint64(&val, uint);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
221 g_object_set_property(G_OBJECT(priv->api), "mid", &val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
222 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
223 } else {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
224 ret = FALSE;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
225 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
226
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
227 str = purple_account_get_string(acct, "uid", NULL);
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 if (str != NULL) {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
230 id = FB_ID_FROM_STR(str);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
231 g_value_init(&val, FB_TYPE_ID);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
232 g_value_set_int64(&val, id);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
233 g_object_set_property(G_OBJECT(priv->api), "uid", &val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
234 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
235 } else {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
236 ret = FALSE;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
237 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
238
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
239 fb_api_rehash(priv->api);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
240 return ret;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
241 }
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 void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
244 fb_data_save(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
245 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
246 const gchar *str;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
247 FbDataPrivate *priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
248 gchar *dup;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
249 guint i;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
250 guint64 uint;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
251 GValue val = G_VALUE_INIT;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
252 PurpleAccount *acct;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
253
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
254 g_return_if_fail(FB_IS_DATA(fata));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
255 priv = fata->priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
256 acct = purple_connection_get_account(priv->gc);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
257
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
258 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
259 g_value_init(&val, G_TYPE_STRING);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
260 g_object_get_property(G_OBJECT(priv->api), fb_props_strs[i],
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
261 &val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
262 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
263
e27755a3a92e facebook: don't save access token if not remembering password
dx <dx@dxzone.com.ar>
parents: 37560
diff changeset
264 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
265 str = "";
e27755a3a92e facebook: don't save access token if not remembering password
dx <dx@dxzone.com.ar>
parents: 37560
diff changeset
266 }
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
267 purple_account_set_string(acct, fb_props_strs[i], str);
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
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
271 g_value_init(&val, G_TYPE_UINT64);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
272 g_object_get_property(G_OBJECT(priv->api), "mid", &val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
273 uint = g_value_get_uint64(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
274 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
275
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
276 dup = g_strdup_printf("%" G_GINT64_FORMAT, uint);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
277 purple_account_set_string(acct, "mid", dup);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
278 g_free(dup);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
279
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
280 g_value_init(&val, G_TYPE_INT64);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
281 g_object_get_property(G_OBJECT(priv->api), "uid", &val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
282 uint = g_value_get_int64(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
283 g_value_unset(&val);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
284
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
285 dup = g_strdup_printf("%" FB_ID_FORMAT, uint);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
286 purple_account_set_string(acct, "uid", dup);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
287 g_free(dup);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
288 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
289
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
290 void
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
291 fb_data_add_timeout(FbData *fata, const gchar *name, guint interval,
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
292 GSourceFunc func, gpointer data)
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
293 {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
294 FbDataPrivate *priv;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
295 gchar *key;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
296 guint id;
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
297
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
298 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
299 priv = fata->priv;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
300
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
301 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
302
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
303 key = g_strdup(name);
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 38403
diff changeset
304 id = g_timeout_add(interval, func, data);
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
305 g_hash_table_replace(priv->evs, key, GUINT_TO_POINTER(id));
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
306 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
307
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
308 void
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
309 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
310 {
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
311 FbDataPrivate *priv;
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
312 gpointer ptr;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
313 guint id;
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
314
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
315 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
316 priv = fata->priv;
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
317
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
318 ptr = g_hash_table_lookup(priv->evs, name);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
319 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
320
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
321 if ((id > 0) && remove) {
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 38403
diff changeset
322 g_source_remove(id);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
323 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
324
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
325 g_hash_table_remove(priv->evs, name);
37342
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
326 }
acae53caaff0 facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents: 37338
diff changeset
327
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
328 FbApi *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
329 fb_data_get_api(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
330 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
331 FbDataPrivate *priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
332
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
333 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
334 priv = fata->priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
335
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
336 return priv->api;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
337 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
338
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
339 PurpleConnection *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
340 fb_data_get_connection(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
341 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
342 FbDataPrivate *priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
343
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
344 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
345 priv = fata->priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
346
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
347 return priv->gc;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
348 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
349
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
350 PurpleRoomlist *
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
351 fb_data_get_roomlist(FbData *fata)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
352 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
353 FbDataPrivate *priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
354
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
355 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
356 priv = fata->priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
357
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
358 return priv->roomlist;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
359 }
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
360
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
361 gboolean
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
362 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
363 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
364 FbDataPrivate *priv;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
365 gpointer *ptr;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
366
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
367 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
368 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
369 priv = fata->priv;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
370
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
371 ptr = g_hash_table_lookup(priv->unread, &id);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
372 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
373 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
374
37258
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
375 void
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
376 fb_data_set_roomlist(FbData *fata, PurpleRoomlist *list)
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
377 {
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
378 FbDataPrivate *priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
379
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
380 g_return_if_fail(FB_IS_DATA(fata));
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
381 priv = fata->priv;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
382
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
383 priv->roomlist = list;
291b6e1acc24 facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff changeset
384 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
385
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
386 void
37343
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
387 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
388 {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
389 FbDataPrivate *priv;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
390 gpointer key;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
391
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
392 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
393 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
394 priv = fata->priv;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
395
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
396 if (!unread) {
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
397 g_hash_table_remove(priv->unread, &id);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
398 return;
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
399 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
400
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
401 key = g_memdup(&id, sizeof id);
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
402 g_hash_table_replace(priv->unread, key, GINT_TO_POINTER(unread));
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
403 }
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
404
3e818c95dfd9 facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents: 37342
diff changeset
405 void
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
406 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
407 {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
408 FbDataPrivate *priv;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
409
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
410 g_return_if_fail(FB_IS_DATA(fata));
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
411 priv = fata->priv;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
412
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
413 g_queue_push_tail(priv->msgs, msg);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
414 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
415
37364
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
416 void
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
417 fb_data_remove_message(FbData *fata, FbApiMessage *msg)
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
418 {
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
419 FbDataPrivate *priv;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
420
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
421 g_return_if_fail(FB_IS_DATA(fata));
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
422 priv = fata->priv;
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
423
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
424 g_queue_remove(priv->msgs, msg);
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
425 }
d8e50d403e82 facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents: 37361
diff changeset
426
37338
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
427 GSList *
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
428 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
429 {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
430 FbApiMessage *msg;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
431 FbDataPrivate *priv;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
432 GList *l;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
433 GList *prev;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
434 GSList *msgs = NULL;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
435
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
436 g_return_val_if_fail(FB_IS_DATA(fata), NULL);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
437 priv = fata->priv;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
438 l = priv->msgs->tail;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
439
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
440 while (l != NULL) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
441 msg = l->data;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
442 prev = l->prev;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
443
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
444 if (msg->uid == uid) {
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
445 msgs = g_slist_prepend(msgs, msg);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
446 g_queue_delete_link(priv->msgs, l);
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
447 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
448
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
449 l = prev;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
450 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
451
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
452 return msgs;
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
453 }
e4d77bc25235 facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents: 37323
diff changeset
454
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
455 FbDataImage *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
456 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
457 gpointer data, GDestroyNotify dunc)
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
458 {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
459 FbDataImage *img;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
460 FbDataImagePrivate *priv;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
461
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
462 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
463 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
464 g_return_val_if_fail(func != NULL, NULL);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
465
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
466 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
467 priv = img->priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
468
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
469 priv->fata = fata;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
470 priv->url = g_strdup(url);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
471 priv->func = func;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
472 priv->data = data;
37560
92885e0456ed facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents: 37471
diff changeset
473 priv->dunc = dunc;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
474
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
475 g_hash_table_insert(fata->priv->imgs, img, img);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
476 return img;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
477 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
478
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
479 gboolean
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
480 fb_data_image_get_active(FbDataImage *img)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
481 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
482 FbDataImagePrivate *priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
483
37375
39b8f418563c facebook: fixed invalid return type
James Geboski <jgeboski@gmail.com>
parents: 37366
diff changeset
484 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
485 priv = img->priv;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
486
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
487 return priv->active;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
488 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
489
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
490 gpointer
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
491 fb_data_image_get_data(FbDataImage *img)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
492 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
493 FbDataImagePrivate *priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
494
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
495 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
496 priv = img->priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
497
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
498 return priv->data;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
499 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
500
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
501 FbData *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
502 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
503 {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
504 FbDataImagePrivate *priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
505
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
506 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
507 priv = img->priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
508
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
509 return priv->fata;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
510 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
511
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
512 const guint8 *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
513 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
514 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
515 FbDataImagePrivate *priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
516
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
517 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
518 priv = img->priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
519
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
520 if (size != NULL) {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
521 *size = priv->size;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
522 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
523
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
524 return priv->image;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
525 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
526
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
527 guint8 *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
528 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
529 {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
530 FbDataImagePrivate *priv;
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 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
533 priv = img->priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
534
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
535 if (size != NULL) {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
536 *size = priv->size;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
537 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
538
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
539 if (priv->size < 1) {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
540 return NULL;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
541 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
542
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
543 return g_memdup(priv->image, priv->size);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
544 }
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
545
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
546 const gchar *
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
547 fb_data_image_get_url(FbDataImage *img)
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
548 {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
549 FbDataImagePrivate *priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
550
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
551 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
552 priv = img->priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
553
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
554 return priv->url;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
555 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
556
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
557 static void
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
558 fb_data_image_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *res,
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
559 gpointer data)
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
560 {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
561 FbDataImage *img = data;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
562 FbDataImagePrivate *priv = img->priv;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
563 GError *err = NULL;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
564
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
565 fb_http_error_chk(res, &err);
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
566
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
567 priv->image = (guint8 *)res->response_body->data;
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
568 priv->size = res->response_body->length;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
569 priv->func(img, err);
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
570
37433
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
571 if (G_LIKELY(err == NULL)) {
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
572 fb_data_image_queue(priv->fata);
50bb40c42245 facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents: 37375
diff changeset
573 } else {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
574 g_error_free(err);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
575 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
576
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
577 g_object_unref(img);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
578 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
579
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
580 void
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
581 fb_data_image_queue(FbData *fata)
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
582 {
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
583 const gchar *url;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
584 FbDataImage *img;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
585 FbDataPrivate *priv;
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
586 GHashTableIter iter;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
587 guint active = 0;
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
588
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
589 g_return_if_fail(FB_IS_DATA(fata));
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
590 priv = fata->priv;
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
591 g_hash_table_iter_init(&iter, priv->imgs);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
592
37471
32c1e77d0474 facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents: 37433
diff changeset
593 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
594 if (fb_data_image_get_active(img)) {
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
595 active++;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
596 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
597 }
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
598
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
599 if (active >= FB_DATA_ICON_MAX) {
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
600 return;
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
601 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
602
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
603 g_hash_table_iter_init(&iter, priv->imgs);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
604
37471
32c1e77d0474 facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents: 37433
diff changeset
605 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
606 SoupMessage *msg;
39270
267f9e8581df facebook: Allow sizes larger than 1MiB for received images
Mike Ruprecht <cmaiku@gmail.com>
parents: 38433
diff changeset
607
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
608 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
609 continue;
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
610 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
611
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
612 img->priv->active = TRUE;
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
613 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
614
40029
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
615 msg = soup_message_new("GET", url);
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
616 // purple_http_request_set_max_len(req, FB_DATA_ICON_SIZE_MAX);
70a9571132e4 Convert most Facebook prpl to libsoup.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 39556
diff changeset
617 soup_session_queue_message(priv->cons, msg, fb_data_image_cb, img);
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
618
37361
6545b86a0705 facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents: 37352
diff changeset
619 if (++active >= FB_DATA_ICON_MAX) {
37276
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
620 break;
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
621 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
622 }
853fadf2e250 facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents: 37264
diff changeset
623 }

mercurial