Mon, 12 Sep 2016 08:55:35 -0500
gg: Protect against issues when closing while connecting
Since the GIOStream is cancelled when data is freed, any cancelled
callbacks are called after such data is freed. This patch guards against
cancelled calls by safely returning without accessing any freed data if
the connection has been cancelled (aka closed).
Futhermore, if GG tries to connect and is quickly disconnected,
ggp_tcpsocket_close() is never called. As far as I can tell, it's an
existing bug, but PurpleSockets both work differently when closing and
are closed by the connection if any leak. So the issue wasn't a major
problem. This patch lessens the issue by guarding against it, but it
should be fixed at some point.
|
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 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
22 | #include <string.h> |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
23 | |
|
37310
a1a5f0ac39f2
facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents:
37309
diff
changeset
|
24 | #include "account.h" |
|
a1a5f0ac39f2
facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents:
37309
diff
changeset
|
25 | #include "glibcompat.h" |
|
a1a5f0ac39f2
facebook: cleaned up libpurple includes
James Geboski <jgeboski@gmail.com>
parents:
37309
diff
changeset
|
26 | |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
27 | #include "api.h" |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
28 | #include "data.h" |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
29 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
30 | struct _FbDataPrivate |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
31 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
32 | FbApi *api; |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
33 | FbHttpConns *cons; |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
34 | PurpleConnection *gc; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
35 | PurpleRoomlist *roomlist; |
|
37338
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
36 | GQueue *msgs; |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
37 | GHashTable *imgs; |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
38 | GHashTable *unread; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
39 | GHashTable *evs; |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
40 | }; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
41 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
42 | struct _FbDataImagePrivate |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
43 | { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
44 | FbData *fata; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
45 | gchar *url; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
46 | FbDataImageFunc func; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
47 | gpointer data; |
|
37560
92885e0456ed
facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents:
37471
diff
changeset
|
48 | GDestroyNotify dunc; |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
49 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
50 | gboolean active; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
51 | const guint8 *image; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
52 | gsize size; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
53 | }; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
54 | |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
55 | static const gchar *fb_props_strs[] = { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
56 | "cid", |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
57 | "did", |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
58 | "stoken", |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
59 | "token" |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
60 | }; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
61 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
62 | G_DEFINE_TYPE(FbData, fb_data, G_TYPE_OBJECT); |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
63 | 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
|
64 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
65 | static void |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
66 | fb_data_dispose(GObject *obj) |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
67 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
68 | 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
|
69 | GHashTableIter iter; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
70 | gpointer ptr; |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
71 | |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
72 | fb_http_conns_cancel_all(priv->cons); |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
73 | 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
|
74 | |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
75 | while (g_hash_table_iter_next(&iter, NULL, &ptr)) { |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
76 | purple_timeout_remove(GPOINTER_TO_UINT(ptr)); |
|
37342
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
77 | } |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
78 | |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
79 | if (G_LIKELY(priv->api != NULL)) { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
80 | g_object_unref(priv->api); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
81 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
82 | |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
83 | fb_http_conns_free(priv->cons); |
|
37338
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
84 | 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
|
85 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
86 | 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
|
87 | 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
|
88 | g_hash_table_destroy(priv->evs); |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
89 | } |
|
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 | static void |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
92 | fb_data_class_init(FbDataClass *klass) |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
93 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
94 | GObjectClass *gklass = G_OBJECT_CLASS(klass); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
95 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
96 | gklass->dispose = fb_data_dispose; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
97 | g_type_class_add_private(klass, sizeof (FbDataPrivate)); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
98 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
99 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
100 | static void |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
101 | fb_data_init(FbData *fata) |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
102 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
103 | FbDataPrivate *priv; |
|
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 | priv = G_TYPE_INSTANCE_GET_PRIVATE(fata, FB_TYPE_DATA, FbDataPrivate); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
106 | fata->priv = priv; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
107 | |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
108 | priv->cons = fb_http_conns_new(); |
|
37338
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
109 | priv->msgs = g_queue_new(); |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
110 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
111 | 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
|
112 | g_object_unref, NULL); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
113 | 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
|
114 | g_free, NULL); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
115 | 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
|
116 | g_free, NULL); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
117 | } |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
118 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
119 | static void |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
120 | fb_data_image_dispose(GObject *obj) |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
121 | { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
122 | FbDataImage *img = FB_DATA_IMAGE(obj); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
123 | FbDataImagePrivate *priv = img->priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
124 | FbData *fata = priv->fata; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
125 | |
|
37560
92885e0456ed
facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents:
37471
diff
changeset
|
126 | 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
|
127 | priv->dunc(priv->data); |
|
92885e0456ed
facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents:
37471
diff
changeset
|
128 | } |
|
92885e0456ed
facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents:
37471
diff
changeset
|
129 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
130 | g_free(priv->url); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
131 | g_hash_table_steal(fata->priv->imgs, img); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
132 | } |
|
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 | static void |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
135 | fb_data_image_class_init(FbDataImageClass *klass) |
|
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 | GObjectClass *gklass = G_OBJECT_CLASS(klass); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
138 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
139 | gklass->dispose = fb_data_image_dispose; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
140 | g_type_class_add_private(klass, sizeof (FbDataImagePrivate)); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
141 | } |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
142 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
143 | static void |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
144 | fb_data_image_init(FbDataImage *img) |
|
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 | FbDataImagePrivate *priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
147 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
148 | priv = G_TYPE_INSTANCE_GET_PRIVATE(img, FB_TYPE_DATA_IMAGE, |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
149 | FbDataImagePrivate); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
150 | img->priv = priv; |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
151 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
152 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
153 | FbData * |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
154 | fb_data_new(PurpleConnection *gc) |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
155 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
156 | FbData *fata; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
157 | FbDataPrivate *priv; |
|
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 | fata = g_object_new(FB_TYPE_DATA, NULL); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
160 | priv = fata->priv; |
|
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 | priv->api = fb_api_new(gc); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
163 | priv->gc = gc; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
164 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
165 | return fata; |
|
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 | gboolean |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
169 | fb_data_load(FbData *fata) |
|
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 | const gchar *str; |
|
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 | FbId id; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
174 | gboolean ret = TRUE; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
175 | guint i; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
176 | guint64 uint; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
177 | GValue val = G_VALUE_INIT; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
178 | PurpleAccount *acct; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
179 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
180 | g_return_val_if_fail(FB_IS_DATA(fata), FALSE); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
181 | priv = fata->priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
182 | acct = purple_connection_get_account(priv->gc); |
|
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 | 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
|
185 | 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
|
186 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
187 | if (str == NULL) { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
188 | ret = FALSE; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
189 | } |
|
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 | g_value_init(&val, G_TYPE_STRING); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
192 | g_value_set_string(&val, str); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
193 | 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
|
194 | &val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
195 | g_value_unset(&val); |
|
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 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
198 | str = purple_account_get_string(acct, "mid", NULL); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
199 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
200 | if (str != NULL) { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
201 | uint = g_ascii_strtoull(str, NULL, 10); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
202 | g_value_init(&val, G_TYPE_UINT64); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
203 | g_value_set_uint64(&val, uint); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
204 | g_object_set_property(G_OBJECT(priv->api), "mid", &val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
205 | g_value_unset(&val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
206 | } else { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
207 | ret = FALSE; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
208 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
209 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
210 | str = purple_account_get_string(acct, "uid", NULL); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
211 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
212 | if (str != NULL) { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
213 | id = FB_ID_FROM_STR(str); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
214 | g_value_init(&val, FB_TYPE_ID); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
215 | g_value_set_int64(&val, id); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
216 | g_object_set_property(G_OBJECT(priv->api), "uid", &val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
217 | g_value_unset(&val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
218 | } else { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
219 | ret = FALSE; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
220 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
221 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
222 | fb_api_rehash(priv->api); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
223 | return ret; |
|
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 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
226 | void |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
227 | fb_data_save(FbData *fata) |
|
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 | const gchar *str; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
230 | FbDataPrivate *priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
231 | gchar *dup; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
232 | guint i; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
233 | guint64 uint; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
234 | GValue val = G_VALUE_INIT; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
235 | PurpleAccount *acct; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
236 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
237 | g_return_if_fail(FB_IS_DATA(fata)); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
238 | priv = fata->priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
239 | acct = purple_connection_get_account(priv->gc); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
240 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
241 | 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
|
242 | g_value_init(&val, G_TYPE_STRING); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
243 | 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
|
244 | &val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
245 | str = g_value_get_string(&val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
246 | purple_account_set_string(acct, fb_props_strs[i], str); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
247 | g_value_unset(&val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
248 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
249 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
250 | g_value_init(&val, G_TYPE_UINT64); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
251 | g_object_get_property(G_OBJECT(priv->api), "mid", &val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
252 | uint = g_value_get_uint64(&val); |
|
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 | dup = g_strdup_printf("%" G_GINT64_FORMAT, uint); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
256 | purple_account_set_string(acct, "mid", dup); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
257 | g_free(dup); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
258 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
259 | g_value_init(&val, G_TYPE_INT64); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
260 | g_object_get_property(G_OBJECT(priv->api), "uid", &val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
261 | uint = g_value_get_int64(&val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
262 | g_value_unset(&val); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
263 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
264 | dup = g_strdup_printf("%" FB_ID_FORMAT, uint); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
265 | purple_account_set_string(acct, "uid", dup); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
266 | g_free(dup); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
267 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
268 | |
|
37342
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
269 | void |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
270 | 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
|
271 | GSourceFunc func, gpointer data) |
|
37342
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
272 | { |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
273 | FbDataPrivate *priv; |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
274 | gchar *key; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
275 | guint id; |
|
37342
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
276 | |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
277 | 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
|
278 | priv = fata->priv; |
|
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 | |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
282 | key = g_strdup(name); |
|
37352
dd1528f03f59
facebook: fixed the timer using seconds instead of milliseconds
James Geboski <jgeboski@gmail.com>
parents:
37343
diff
changeset
|
283 | id = purple_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
|
284 | 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
|
285 | } |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
286 | |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
287 | void |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
288 | 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
|
289 | { |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
290 | FbDataPrivate *priv; |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
291 | gpointer ptr; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
292 | guint id; |
|
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 | 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
|
295 | priv = fata->priv; |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
296 | |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
297 | 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
|
298 | 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
|
299 | |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
300 | if ((id > 0) && remove) { |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
301 | purple_timeout_remove(id); |
|
37342
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
302 | } |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
303 | |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
304 | 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
|
305 | } |
|
acae53caaff0
facebook: periodically refetch the contact list for updates
James Geboski <jgeboski@gmail.com>
parents:
37338
diff
changeset
|
306 | |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
307 | FbApi * |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
308 | fb_data_get_api(FbData *fata) |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
309 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
310 | FbDataPrivate *priv; |
|
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 | g_return_val_if_fail(FB_IS_DATA(fata), NULL); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
313 | priv = fata->priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
314 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
315 | return priv->api; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
316 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
317 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
318 | PurpleConnection * |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
319 | fb_data_get_connection(FbData *fata) |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
320 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
321 | FbDataPrivate *priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
322 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
323 | g_return_val_if_fail(FB_IS_DATA(fata), NULL); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
324 | priv = fata->priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
325 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
326 | return priv->gc; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
327 | } |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
328 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
329 | PurpleRoomlist * |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
330 | fb_data_get_roomlist(FbData *fata) |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
331 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
332 | FbDataPrivate *priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
333 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
334 | g_return_val_if_fail(FB_IS_DATA(fata), NULL); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
335 | priv = fata->priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
336 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
337 | return priv->roomlist; |
|
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 | |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
340 | gboolean |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
341 | 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
|
342 | { |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
343 | FbDataPrivate *priv; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
344 | gpointer *ptr; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
345 | |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
346 | 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
|
347 | 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
|
348 | priv = fata->priv; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
349 | |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
350 | 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
|
351 | 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
|
352 | } |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
353 | |
|
37258
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
354 | void |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
355 | fb_data_set_roomlist(FbData *fata, PurpleRoomlist *list) |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
356 | { |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
357 | FbDataPrivate *priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
358 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
359 | g_return_if_fail(FB_IS_DATA(fata)); |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
360 | priv = fata->priv; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
361 | |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
362 | priv->roomlist = list; |
|
291b6e1acc24
facebook: implemented group chat support
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
363 | } |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
364 | |
|
37338
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
365 | void |
|
37343
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
366 | 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
|
367 | { |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
368 | FbDataPrivate *priv; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
369 | gpointer key; |
|
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 | 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
|
372 | 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
|
373 | priv = fata->priv; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
374 | |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
375 | if (!unread) { |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
376 | 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
|
377 | return; |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
378 | } |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
379 | |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
380 | 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
|
381 | 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
|
382 | } |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
383 | |
|
3e818c95dfd9
facebook: mark as read only if the conversation is focused
James Geboski <jgeboski@gmail.com>
parents:
37342
diff
changeset
|
384 | void |
|
37338
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
385 | 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
|
386 | { |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
387 | FbDataPrivate *priv; |
|
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_if_fail(FB_IS_DATA(fata)); |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
390 | priv = fata->priv; |
|
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 | g_queue_push_tail(priv->msgs, msg); |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
393 | } |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
394 | |
|
37364
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
395 | void |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
396 | fb_data_remove_message(FbData *fata, FbApiMessage *msg) |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
397 | { |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
398 | FbDataPrivate *priv; |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
399 | |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
400 | g_return_if_fail(FB_IS_DATA(fata)); |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
401 | priv = fata->priv; |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
402 | |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
403 | g_queue_remove(priv->msgs, msg); |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
404 | } |
|
d8e50d403e82
facebook: display images in-line
James Geboski <jgeboski@gmail.com>
parents:
37361
diff
changeset
|
405 | |
|
37338
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
406 | GSList * |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
407 | 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
|
408 | { |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
409 | FbApiMessage *msg; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
410 | FbDataPrivate *priv; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
411 | GList *l; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
412 | GList *prev; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
413 | GSList *msgs = NULL; |
|
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 | 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
|
416 | priv = fata->priv; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
417 | l = priv->msgs->tail; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
418 | |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
419 | while (l != NULL) { |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
420 | msg = l->data; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
421 | prev = l->prev; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
422 | |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
423 | if (msg->uid == uid) { |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
424 | msgs = g_slist_prepend(msgs, msg); |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
425 | g_queue_delete_link(priv->msgs, l); |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
426 | } |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
427 | |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
428 | l = prev; |
|
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 | |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
431 | return msgs; |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
432 | } |
|
e4d77bc25235
facebook: add and alias non-friend buddies
James Geboski <jgeboski@gmail.com>
parents:
37323
diff
changeset
|
433 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
434 | FbDataImage * |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
435 | 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
|
436 | gpointer data, GDestroyNotify dunc) |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
437 | { |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
438 | FbDataImage *img; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
439 | FbDataImagePrivate *priv; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
440 | |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
441 | 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
|
442 | 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
|
443 | g_return_val_if_fail(func != NULL, NULL); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
444 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
445 | 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
|
446 | priv = img->priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
447 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
448 | priv->fata = fata; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
449 | priv->url = g_strdup(url); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
450 | priv->func = func; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
451 | priv->data = data; |
|
37560
92885e0456ed
facebook: fixed a crash with incoming messages from non-friends
James Geboski <jgeboski@gmail.com>
parents:
37471
diff
changeset
|
452 | priv->dunc = dunc; |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
453 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
454 | 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
|
455 | return img; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
456 | } |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
457 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
458 | gboolean |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
459 | fb_data_image_get_active(FbDataImage *img) |
|
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 | FbDataImagePrivate *priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
462 | |
|
37375
39b8f418563c
facebook: fixed invalid return type
James Geboski <jgeboski@gmail.com>
parents:
37366
diff
changeset
|
463 | 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
|
464 | priv = img->priv; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
465 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
466 | return priv->active; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
467 | } |
|
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 | gpointer |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
470 | fb_data_image_get_data(FbDataImage *img) |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
471 | { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
472 | FbDataImagePrivate *priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
473 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
474 | 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
|
475 | priv = img->priv; |
|
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 | return priv->data; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
478 | } |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
479 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
480 | FbData * |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
481 | 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
|
482 | { |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
483 | FbDataImagePrivate *priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
484 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
485 | 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
|
486 | priv = img->priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
487 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
488 | return priv->fata; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
489 | } |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
490 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
491 | const guint8 * |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
492 | 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
|
493 | { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
494 | FbDataImagePrivate *priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
495 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
496 | 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
|
497 | priv = img->priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
498 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
499 | if (size != NULL) { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
500 | *size = priv->size; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
501 | } |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
502 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
503 | return priv->image; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
504 | } |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
505 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
506 | guint8 * |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
507 | 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
|
508 | { |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
509 | FbDataImagePrivate *priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
510 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
511 | 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
|
512 | priv = img->priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
513 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
514 | if (size != NULL) { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
515 | *size = priv->size; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
516 | } |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
517 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
518 | if (priv->size < 1) { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
519 | return NULL; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
520 | } |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
521 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
522 | return g_memdup(priv->image, priv->size); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
523 | } |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
524 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
525 | const gchar * |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
526 | fb_data_image_get_url(FbDataImage *img) |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
527 | { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
528 | FbDataImagePrivate *priv; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
529 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
530 | 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
|
531 | priv = img->priv; |
|
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 | return priv->url; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
534 | } |
|
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 | static void |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
537 | fb_data_image_cb(PurpleHttpConnection *con, PurpleHttpResponse *res, |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
538 | gpointer data) |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
539 | { |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
540 | FbDataImage *img = data; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
541 | FbDataImagePrivate *priv = img->priv; |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
542 | FbDataPrivate *driv = priv->fata->priv; |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
543 | GError *err = NULL; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
544 | |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
545 | if (fb_http_conns_is_canceled(driv->cons)) { |
|
37366
1cbcea2165c1
facebook: ignore canceling HTTP requests
James Geboski <jgeboski@gmail.com>
parents:
37364
diff
changeset
|
546 | return; |
|
1cbcea2165c1
facebook: ignore canceling HTTP requests
James Geboski <jgeboski@gmail.com>
parents:
37364
diff
changeset
|
547 | } |
|
1cbcea2165c1
facebook: ignore canceling HTTP requests
James Geboski <jgeboski@gmail.com>
parents:
37364
diff
changeset
|
548 | |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
549 | fb_http_conns_remove(driv->cons, con); |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
550 | fb_http_error_chk(res, &err); |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
551 | |
|
37471
32c1e77d0474
facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents:
37433
diff
changeset
|
552 | priv->image = (guint8 *) purple_http_response_get_data(res, &priv->size); |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
553 | priv->func(img, err); |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
554 | |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
555 | if (G_LIKELY(err == NULL)) { |
|
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
556 | fb_data_image_queue(priv->fata); |
|
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
557 | } else { |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
558 | g_error_free(err); |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
559 | } |
|
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 | g_object_unref(img); |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
562 | } |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
563 | |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
564 | void |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
565 | fb_data_image_queue(FbData *fata) |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
566 | { |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
567 | const gchar *url; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
568 | FbDataImage *img; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
569 | FbDataPrivate *priv; |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
570 | GHashTableIter iter; |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
571 | guint active = 0; |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
572 | PurpleHttpConnection *con; |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
573 | |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
574 | 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
|
575 | priv = fata->priv; |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
576 | 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
|
577 | |
|
37471
32c1e77d0474
facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents:
37433
diff
changeset
|
578 | 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
|
579 | if (fb_data_image_get_active(img)) { |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
580 | active++; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
581 | } |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
582 | } |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
583 | |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
584 | if (active >= FB_DATA_ICON_MAX) { |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
585 | return; |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
586 | } |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
587 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
588 | 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
|
589 | |
|
37471
32c1e77d0474
facebook: coding style consistencies
James Geboski <jgeboski@gmail.com>
parents:
37433
diff
changeset
|
590 | 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
|
591 | 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
|
592 | continue; |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
593 | } |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
594 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
595 | img->priv->active = TRUE; |
|
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
596 | url = fb_data_image_get_url(img); |
|
37433
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
597 | con = purple_http_get(priv->gc, fb_data_image_cb, img, url); |
|
50bb40c42245
facebook: implemented better HTTP connection handling
James Geboski <jgeboski@gmail.com>
parents:
37375
diff
changeset
|
598 | fb_http_conns_add(priv->cons, con); |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
599 | |
|
37361
6545b86a0705
facebook: refactored for future inline images
James Geboski <jgeboski@gmail.com>
parents:
37352
diff
changeset
|
600 | if (++active >= FB_DATA_ICON_MAX) { |
|
37276
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
601 | break; |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
602 | } |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
603 | } |
|
853fadf2e250
facebook: queue icon downloads to prevent lag
James Geboski <jgeboski@gmail.com>
parents:
37264
diff
changeset
|
604 | } |