libpurple/image-store.c

Fri, 15 Nov 2019 01:07:08 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 15 Nov 2019 01:07:08 -0600
changeset 40195
fb4b0ae193c0
parent 40125
a7acc7b00d79
child 41675
0f8bd2f65c61
permissions
-rw-r--r--

Remove glibcompat.h from all the files that don't actually need it.

35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
1 /* purple
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
2 *
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
5 * source distribution.
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
6 *
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
11 *
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
16 *
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
20 */
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
21
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
22 #include "image-store.h"
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
23
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
24 #include "eventloop.h"
35830
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
25 #include "util.h"
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
26
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
27 #define TEMP_IMAGE_TIMEOUT 5
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
28
35805
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
29 static GHashTable *id_to_image = NULL;
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
30 static guint last_id = 0;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
31
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
32 /* keys: timeout handle */
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
33 static GHashTable *temp_images = NULL;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
34
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
35 /* keys: img id */
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
36 static GSList *perm_images = NULL;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
37
35805
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
38 static void
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
39 image_reset_id(gpointer _id)
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
40 {
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
41 g_return_if_fail(id_to_image != NULL);
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
42
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
43 g_hash_table_remove(id_to_image, _id);
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
44 }
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
45
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
46 static guint
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
47 image_set_id(PurpleImage *image)
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
48 {
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
49 /* Use the next unused id number. We do it in a loop on the off chance
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
50 * that next id wraps back around to 0 and the hash table still contains
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
51 * entries from the first time around.
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
52 */
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
53 while (TRUE) {
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
54 last_id++;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
55
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
56 if (G_UNLIKELY(last_id == 0))
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
57 continue;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
58
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
59 if (purple_image_store_get(last_id) == NULL)
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
60 break;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
61 }
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
62
35805
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
63 g_object_set_data_full(G_OBJECT(image), "purple-image-store-id",
1a2cf8aef4a8 Image store: implement missing cleanup function
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35804
diff changeset
64 GINT_TO_POINTER(last_id), image_reset_id);
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
65 g_hash_table_insert(id_to_image, GINT_TO_POINTER(last_id), image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
66 return last_id;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
67 }
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
68
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
69 static guint
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
70 image_get_id(PurpleImage *image)
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
71 {
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
72 return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(image),
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
73 "purple-image-store-id"));
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
74 }
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
75
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
76 guint
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
77 purple_image_store_add(PurpleImage *image)
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
78 {
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
79 guint id;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
80
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
81 g_return_val_if_fail(PURPLE_IS_IMAGE(image), 0);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
82
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
83 id = image_get_id(image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
84 if (id > 0)
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
85 return id;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
86
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
87 id = image_set_id(image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
88
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
89 g_object_ref(image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
90 perm_images = g_slist_prepend(perm_images, image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
91
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
92 return id;
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
93 }
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
94
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
95 guint
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
96 purple_image_store_add_weak(PurpleImage *image)
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
97 {
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
98 guint id;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
99
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
100 g_return_val_if_fail(PURPLE_IS_IMAGE(image), 0);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
101
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
102 id = image_get_id(image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
103 if (id > 0)
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
104 return id;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
105
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
106 return image_set_id(image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
107 }
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
108
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
109 static gboolean
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
110 remove_temporary(gpointer _image)
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
111 {
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
112 PurpleImage *image = _image;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
113 guint handle;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
114
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
115 handle = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(image),
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
116 "purple-image-store-handle"));
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
117
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
118 g_hash_table_remove(temp_images, GINT_TO_POINTER(handle));
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
119
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
120 return G_SOURCE_REMOVE;
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
121 }
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
122
35806
49018c6bf755 Imgstore: implement with PurpleImage and purple_image_store
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35805
diff changeset
123 static void
49018c6bf755 Imgstore: implement with PurpleImage and purple_image_store
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35805
diff changeset
124 cancel_temporary(gpointer key, gpointer value, gpointer _unused)
49018c6bf755 Imgstore: implement with PurpleImage and purple_image_store
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35805
diff changeset
125 {
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 38277
diff changeset
126 g_source_remove(GPOINTER_TO_INT(key));
35806
49018c6bf755 Imgstore: implement with PurpleImage and purple_image_store
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35805
diff changeset
127 }
49018c6bf755 Imgstore: implement with PurpleImage and purple_image_store
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35805
diff changeset
128
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
129 guint
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
130 purple_image_store_add_temporary(PurpleImage *image)
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
131 {
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
132 guint id;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
133 guint handle;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
134
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
135 g_return_val_if_fail(PURPLE_IS_IMAGE(image), 0);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
136
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
137 id = image_get_id(image);
35806
49018c6bf755 Imgstore: implement with PurpleImage and purple_image_store
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35805
diff changeset
138 /* XXX: add_temporary doesn't extend previous temporary call, sorry */
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
139 if (id > 0)
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
140 return id;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
141
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
142 id = image_set_id(image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
143
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
144 g_object_ref(image);
38433
361c801c4536 Remove purple_timeout_* function usage
Mike Ruprecht <cmaiku@gmail.com>
parents: 38277
diff changeset
145 handle = g_timeout_add_seconds(TEMP_IMAGE_TIMEOUT,
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
146 remove_temporary, image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
147 g_object_set_data(G_OBJECT(image), "purple-image-store-handle",
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
148 GINT_TO_POINTER(handle));
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
149 g_hash_table_insert(temp_images, GINT_TO_POINTER(handle), image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
150
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
151 return id;
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
152 }
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
153
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
154 PurpleImage *
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
155 purple_image_store_get(guint id)
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
156 {
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
157 return g_hash_table_lookup(id_to_image, GINT_TO_POINTER(id));
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
158 }
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
159
35831
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
160 /* TODO: handle PURPLE_IMAGE_STORE_STOCK_PROTOCOL */
35830
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
161 PurpleImage *
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
162 purple_image_store_get_from_uri(const gchar *uri)
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
163 {
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
164 guint64 longid;
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
165 guint id;
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
166 gchar *endptr;
35831
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
167 gchar endchar;
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
168
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
169 g_return_val_if_fail(uri != NULL, NULL);
35830
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
170
40125
a7acc7b00d79 Replace purple_str_has_{prefix,suffix} by g_str_has_{prefix,suffix}.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
171 if (!g_str_has_prefix(uri, PURPLE_IMAGE_STORE_PROTOCOL)) {
35830
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
172 return NULL;
40125
a7acc7b00d79 Replace purple_str_has_{prefix,suffix} by g_str_has_{prefix,suffix}.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38433
diff changeset
173 }
35830
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
174
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
175 uri += sizeof(PURPLE_IMAGE_STORE_PROTOCOL) - 1;
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
176 if (uri[0] == '-')
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
177 return NULL;
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
178
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
179 longid = g_ascii_strtoull(uri, &endptr, 10);
35831
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
180 endchar = endptr[0];
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
181 if (endchar != '\0' && endchar != '"' &&
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
182 endchar != '\'' && endchar != ' ')
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
183 {
35830
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
184 return NULL;
35831
86b7a6d3d267 PurpleImage: use purple_image_store_get_from_uri where possible
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35830
diff changeset
185 }
35830
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
186
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
187 id = longid;
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
188 if (id != longid)
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
189 return NULL;
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
190
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
191 return purple_image_store_get(id);
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
192 }
fb32647ef2f3 PurpleImage: better reference management
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
193
35838
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
194 gchar *
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
195 purple_image_store_get_uri(PurpleImage *image)
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
196 {
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
197 const gchar *path;
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
198 guint img_id;
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
199
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
200 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
201
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
202 path = purple_image_get_path(image);
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
203
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 35838
diff changeset
204 if (path)
35838
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
205 return g_filename_to_uri(path, NULL, NULL);
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
206
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
207 img_id = purple_image_store_add_weak(image);
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
208 return g_strdup_printf(PURPLE_IMAGE_STORE_PROTOCOL "%u", img_id);
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
209 }
64f331a1eaa0 Drop remote smileys in favor of remote images
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35831
diff changeset
210
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
211 void
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
212 _purple_image_store_init(void)
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
213 {
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
214 id_to_image = g_hash_table_new(g_direct_hash, g_direct_equal);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
215 temp_images = g_hash_table_new_full(g_direct_hash, g_direct_equal,
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
216 NULL, g_object_unref);
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
217 }
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
218
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
219 void
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
220 _purple_image_store_uninit(void)
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
221 {
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
222 g_slist_free_full(perm_images, g_object_unref);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
223 perm_images = NULL;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
224
35806
49018c6bf755 Imgstore: implement with PurpleImage and purple_image_store
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35805
diff changeset
225 g_hash_table_foreach(temp_images, cancel_temporary, NULL);
35804
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
226 g_hash_table_destroy(temp_images);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
227 temp_images = NULL;
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
228
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
229 g_hash_table_destroy(id_to_image);
e97d93132751 Image store: most of the implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35803
diff changeset
230 id_to_image = NULL;
35803
caa6f35efd7a Image store: very initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
231 }

mercurial