libpurple/image.c

Thu, 25 Aug 2022 23:25:12 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 25 Aug 2022 23:25:12 -0500
branch
gtk4
changeset 41598
2b34cd990c16
parent 40650
94e777c03e4a
child 41685
ca22b00972d4
permissions
-rw-r--r--

Replace the style-updated signal with GtkIconTheme:changed

Testing Done:
Ran and make sure the `GWarning` went away.

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

35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
1 /* purple
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
2 *
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
3 * Purple is the legal property of its developers, whose names are too numerous
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
4 * to list here. Please refer to the COPYRIGHT file distributed with this
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
5 * source distribution.
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
6 *
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
7 * This program is free software; you can redistribute it and/or modify
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
8 * it under the terms of the GNU General Public License as published by
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
10 * (at your option) any later version.
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
11 *
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
15 * GNU General Public License for more details.
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
16 *
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
20 */
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
21
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
22 #include "internal.h"
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
23
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
24 #include "debug.h"
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
25 #include "image.h"
40439
e9838d634d5e Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
Gary Kramlich <grim@reaperworld.com>
parents: 40195
diff changeset
26 #include "util.h"
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
27
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
28 typedef struct {
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
29 gchar *path;
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
30
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
31 GBytes *contents;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
32
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
33 const gchar *extension;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
34 const gchar *mime;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
35 gchar *gen_filename;
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
36 gchar *friendly_filename;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
37 } PurpleImagePrivate;
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
38
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
39 enum {
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
40 PROP_0,
38567
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
41 PROP_PATH,
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
42 PROP_CONTENTS,
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
43 PROP_SIZE,
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
44 PROP_LAST
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
45 };
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
46
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
47 static GParamSpec *properties[PROP_LAST];
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
48
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
49 G_DEFINE_TYPE_WITH_PRIVATE(PurpleImage, purple_image, G_TYPE_OBJECT);
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
50
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
51 /******************************************************************************
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
52 * Helpers
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
53 ******************************************************************************/
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
54 static void
38567
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
55 _purple_image_set_path(PurpleImage *image, const gchar *path) {
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
56 PurpleImagePrivate *priv = purple_image_get_instance_private(image);
38567
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
57
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
58 g_free(priv->path);
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
59
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
60 priv->path = g_strdup(path);
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
61 }
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
62
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
63 static void
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
64 _purple_image_set_contents(PurpleImage *image, GBytes *bytes) {
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
65 PurpleImagePrivate *priv = purple_image_get_instance_private(image);
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
66
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
67 if(priv->contents)
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
68 g_bytes_unref(priv->contents);
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
69
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
70 priv->contents = (bytes) ? g_bytes_ref(bytes) : NULL;
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
71 }
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
72
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
73 /******************************************************************************
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
74 * Object stuff
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
75 ******************************************************************************/
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
76 static void
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
77 purple_image_init(PurpleImage *image) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
78 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
79
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
80 static void
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
81 purple_image_finalize(GObject *obj) {
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
82 PurpleImage *image = PURPLE_IMAGE(obj);
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
83 PurpleImagePrivate *priv = purple_image_get_instance_private(image);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
84
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
85 if(priv->contents)
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
86 g_bytes_unref(priv->contents);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
87
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
88 g_free(priv->path);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
89 g_free(priv->gen_filename);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
90 g_free(priv->friendly_filename);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
91
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
92 G_OBJECT_CLASS(purple_image_parent_class)->finalize(obj);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
93 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
94
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
95 static void
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
96 purple_image_set_property(GObject *obj, guint param_id,
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
97 const GValue *value, GParamSpec *pspec)
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
98 {
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
99 PurpleImage *image = PURPLE_IMAGE(obj);
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
100
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
101 switch (param_id) {
38567
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
102 case PROP_PATH:
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
103 _purple_image_set_path(image, g_value_get_string(value));
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
104 break;
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
105 case PROP_CONTENTS:
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
106 _purple_image_set_contents(image, g_value_get_boxed(value));
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
107 break;
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
108 default:
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
109 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
110 break;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
111 }
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
112 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
113
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
114 static void
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
115 purple_image_get_property(GObject *obj, guint param_id, GValue *value,
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
116 GParamSpec *pspec)
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
117 {
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
118 PurpleImage *image = PURPLE_IMAGE(obj);
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
119
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
120 switch (param_id) {
38567
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
121 case PROP_PATH:
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
122 g_value_set_string(value, purple_image_get_path(image));
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
123 break;
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
124 case PROP_CONTENTS:
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
125 g_value_set_boxed(value, purple_image_get_contents(image));
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
126 break;
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
127 case PROP_SIZE:
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 38295
diff changeset
128 g_value_set_uint64(value, purple_image_get_data_size(image));
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
129 break;
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
130 default:
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
131 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
132 break;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
133 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
134 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
135
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
136 static void
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
137 purple_image_class_init(PurpleImageClass *klass) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
138 GObjectClass *gobj_class = G_OBJECT_CLASS(klass);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
139
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
140 gobj_class->finalize = purple_image_finalize;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
141 gobj_class->get_property = purple_image_get_property;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
142 gobj_class->set_property = purple_image_set_property;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
143
38567
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
144 properties[PROP_PATH] = g_param_spec_string(
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
145 "path",
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
146 "path",
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
147 "The filepath for the image if one was provided",
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
148 NULL,
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
149 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
150 );
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
151
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
152 properties[PROP_CONTENTS] = g_param_spec_boxed(
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
153 "contents",
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
154 "contents",
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
155 "The contents of the image stored in a GBytes",
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
156 G_TYPE_BYTES,
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
157 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
158 );
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
159
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
160 properties[PROP_SIZE] = g_param_spec_uint64(
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
161 "size",
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
162 "size",
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
163 "The size of the image in bytes",
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
164 0,
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
165 G_MAXUINT64,
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
166 0,
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
167 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
168 );
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
169
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
170 g_object_class_install_properties(gobj_class, PROP_LAST, properties);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
171 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
172
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
173 /******************************************************************************
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
174 * API
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
175 ******************************************************************************/
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
176 PurpleImage *
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
177 purple_image_new_from_bytes(GBytes *bytes) {
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
178 return g_object_new(
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
179 PURPLE_TYPE_IMAGE,
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
180 "contents", bytes,
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
181 NULL
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
182 );
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
183 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
184
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
185 PurpleImage *
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
186 purple_image_new_from_file(const gchar *path, GError **error) {
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
187 PurpleImage *image = NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
188 GBytes *bytes = NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
189 gchar *contents = NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
190 gsize length = 0;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
191
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
192 if(!g_file_get_contents(path, &contents, &length, error)) {
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
193 return NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
194 }
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
195
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
196 bytes = g_bytes_new_take(contents, length);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
197
38568
9463c7db20fa Set the path on the image for purple_image_new_from_file, update/add some tests
Gary Kramlich <grim@reaperworld.com>
parents: 38567
diff changeset
198 image = g_object_new(
9463c7db20fa Set the path on the image for purple_image_new_from_file, update/add some tests
Gary Kramlich <grim@reaperworld.com>
parents: 38567
diff changeset
199 PURPLE_TYPE_IMAGE,
9463c7db20fa Set the path on the image for purple_image_new_from_file, update/add some tests
Gary Kramlich <grim@reaperworld.com>
parents: 38567
diff changeset
200 "contents", bytes,
9463c7db20fa Set the path on the image for purple_image_new_from_file, update/add some tests
Gary Kramlich <grim@reaperworld.com>
parents: 38567
diff changeset
201 "path", path,
9463c7db20fa Set the path on the image for purple_image_new_from_file, update/add some tests
Gary Kramlich <grim@reaperworld.com>
parents: 38567
diff changeset
202 NULL
9463c7db20fa Set the path on the image for purple_image_new_from_file, update/add some tests
Gary Kramlich <grim@reaperworld.com>
parents: 38567
diff changeset
203 );
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
204
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
205 g_bytes_unref(bytes);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
206
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
207 return image;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
208 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
209
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
210 PurpleImage *
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
211 purple_image_new_from_data(const guint8 *data, gsize length) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
212 PurpleImage *image;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
213 GBytes *bytes = NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
214
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
215 bytes = g_bytes_new(data, length);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
216
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
217 image = purple_image_new_from_bytes(bytes);
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
218
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
219 g_bytes_unref(bytes);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
220
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
221 return image;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
222 }
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
223
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
224 PurpleImage *
38294
5a797c987eb2 Rename purple_image_new_from_data_take to purple_image_new_take_data
Gary Kramlich <grim@reaperworld.com>
parents: 38293
diff changeset
225 purple_image_new_take_data(guint8 *data, gsize length) {
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
226 PurpleImage *image;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
227 GBytes *bytes = NULL;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
228
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
229 bytes = g_bytes_new_take(data, length);
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
230
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
231 image = purple_image_new_from_bytes(bytes);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
232
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
233 g_bytes_unref(bytes);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
234
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
235 return image;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
236 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
237
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
238 gboolean
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
239 purple_image_save(PurpleImage *image, const gchar *path) {
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
240 PurpleImagePrivate *priv = NULL;
35846
07dabf3c0022 PurpleImage: purple_image_get_data should return const buffer
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35843
diff changeset
241 gconstpointer data;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
242 gsize len;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
243 gboolean succ;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
244
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
245 g_return_val_if_fail(PURPLE_IS_IMAGE(image), FALSE);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
246 g_return_val_if_fail(path != NULL, FALSE);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
247 g_return_val_if_fail(path[0] != '\0', FALSE);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
248
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
249 priv = purple_image_get_instance_private(image);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
250 data = purple_image_get_data(image);
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 38295
diff changeset
251 len = purple_image_get_data_size(image);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
252
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
253 g_return_val_if_fail(data != NULL, FALSE);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
254 g_return_val_if_fail(len > 0, FALSE);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
255
40650
94e777c03e4a Deprecate purple_util_write_data_to_file_absolute and use g_file_set_contents in place of it
Gary Kramlich <grim@reaperworld.com>
parents: 40439
diff changeset
256 succ = g_file_set_contents(path, data, len, NULL);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
257 if (succ && priv->path == NULL)
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
258 priv->path = g_strdup(path);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
259
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
260 return succ;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
261 }
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
262
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
263 GBytes *
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
264 purple_image_get_contents(PurpleImage *image)
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
265 {
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
266 PurpleImagePrivate *priv = NULL;
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
267
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
268 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
269
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
270 priv = purple_image_get_instance_private(image);
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
271
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
272 if(priv->contents)
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
273 return g_bytes_ref(priv->contents);
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
274
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
275 return NULL;
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
276 }
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
277
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
278 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
279 purple_image_get_path(PurpleImage *image) {
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
280 PurpleImagePrivate *priv = NULL;
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
281
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
282 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
283
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
284 priv = purple_image_get_instance_private(image);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
285
38567
277d8f0ec6f8 This should fix up https://github.com/tieto/sipe/issues/147 as paths for smileys were overlooked
Gary Kramlich <grim@reaperworld.com>
parents: 38298
diff changeset
286 return priv->path ? priv->path : purple_image_generate_filename(image);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
287 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
288
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
289 gsize
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 38295
diff changeset
290 purple_image_get_data_size(PurpleImage *image) {
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
291 PurpleImagePrivate *priv;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
292
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
293 g_return_val_if_fail(PURPLE_IS_IMAGE(image), 0);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
294
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
295 priv = purple_image_get_instance_private(image);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
296
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
297 if(priv->contents)
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
298 return g_bytes_get_size(priv->contents);
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
299
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
300 return 0;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
301 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
302
35846
07dabf3c0022 PurpleImage: purple_image_get_data should return const buffer
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35843
diff changeset
303 gconstpointer
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
304 purple_image_get_data(PurpleImage *image) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
305 PurpleImagePrivate *priv = NULL;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
306
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
307 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
308
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
309 priv = purple_image_get_instance_private(image);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
310
38281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
311 if(priv->contents)
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
312 return g_bytes_get_data(priv->contents, NULL);
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
313
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
314 return NULL;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
315 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
316
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
317 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
318 purple_image_get_extension(PurpleImage *image) {
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
319 PurpleImagePrivate *priv = NULL;
35846
07dabf3c0022 PurpleImage: purple_image_get_data should return const buffer
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35843
diff changeset
320 gconstpointer data;
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
321
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
322 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
323
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
324 priv = purple_image_get_instance_private(image);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
325
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
326 if (priv->extension)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
327 return priv->extension;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
328
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 38295
diff changeset
329 if (purple_image_get_data_size(image) < 4)
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
330 return NULL;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
331
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
332 data = purple_image_get_data(image);
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
333 g_assert(data != NULL);
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
334
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
335 if (memcmp(data, "GIF8", 4) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
336 return priv->extension = "gif";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
337 if (memcmp(data, "\xff\xd8\xff", 3) == 0) /* 4th may be e0 through ef */
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
338 return priv->extension = "jpg";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
339 if (memcmp(data, "\x89PNG", 4) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
340 return priv->extension = "png";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
341 if (memcmp(data, "MM", 2) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
342 return priv->extension = "tif";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
343 if (memcmp(data, "II", 2) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
344 return priv->extension = "tif";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
345 if (memcmp(data, "BM", 2) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
346 return priv->extension = "bmp";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
347 if (memcmp(data, "\x00\x00\x01\x00", 4) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
348 return priv->extension = "ico";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
349
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
350 return NULL;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
351 }
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
352
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
353 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
354 purple_image_get_mimetype(PurpleImage *image) {
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
355 PurpleImagePrivate *priv = NULL;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
356 const gchar *ext = purple_image_get_extension(image);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
357
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
358 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
359
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
360 priv = purple_image_get_instance_private(image);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
361
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
362 if (priv->mime)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
363 return priv->mime;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
364
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
365 g_return_val_if_fail(ext != NULL, NULL);
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
366
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
367 if (g_strcmp0(ext, "gif") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
368 return priv->mime = "image/gif";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
369 if (g_strcmp0(ext, "jpg") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
370 return priv->mime = "image/jpeg";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
371 if (g_strcmp0(ext, "png") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
372 return priv->mime = "image/png";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
373 if (g_strcmp0(ext, "tif") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
374 return priv->mime = "image/tiff";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
375 if (g_strcmp0(ext, "bmp") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
376 return priv->mime = "image/bmp";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
377 if (g_strcmp0(ext, "ico") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
378 return priv->mime = "image/vnd.microsoft.icon";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
379
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
380 return NULL;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
381 }
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
382
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
383 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
384 purple_image_generate_filename(PurpleImage *image) {
38575
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
385 PurpleImagePrivate *priv = NULL;
35846
07dabf3c0022 PurpleImage: purple_image_get_data should return const buffer
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35843
diff changeset
386 gconstpointer data;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
387 gsize len;
38575
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
388 const gchar *ext = NULL;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
389 gchar *checksum;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
390
38575
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
391 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
392
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
393 priv = purple_image_get_instance_private(image);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
394
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
395 if (priv->gen_filename)
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
396 return priv->gen_filename;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
397
38575
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
398 /* grab the image's data and size of that data */
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
399 data = purple_image_get_data(image);
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 38295
diff changeset
400 len = purple_image_get_data_size(image);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
401
38575
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
402 /* create a checksum of it and use it as the start of our filename */
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
403 checksum = g_compute_checksum_for_data(G_CHECKSUM_SHA1, data, len);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
404
38575
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
405 /* if the image has a known format, set the extension appropriately */
9ba990f8a102 Refactor the way we generate image filenames and make it not depend on a file extension.
Gary Kramlich <grim@reaperworld.com>
parents: 38568
diff changeset
406 ext = purple_image_get_extension(image);
38576
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
407 if(ext != NULL) {
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
408 priv->gen_filename = g_strdup_printf("%s.%s", checksum, ext);
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
409 g_free(checksum);
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
410 } else {
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
411 priv->gen_filename = checksum;
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
412 }
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
413
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
414 return priv->gen_filename;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
415 }
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
416
35819
cc375b914104 imgstore: remove refs from gg prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35809
diff changeset
417 void
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
418 purple_image_set_friendly_filename(PurpleImage *image, const gchar *filename) {
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
419 PurpleImagePrivate *priv = NULL;
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
420 gchar *newname;
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
421 const gchar *escaped;
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
422
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
423 g_return_if_fail(PURPLE_IS_IMAGE(image));
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
424
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
425 priv = purple_image_get_instance_private(image);
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
426
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
427 newname = g_path_get_basename(filename);
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
428 escaped = purple_escape_filename(newname);
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
429 g_free(newname);
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
430 newname = NULL;
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
431
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
432 if (g_strcmp0(escaped, "") == 0 || g_strcmp0(escaped, ".") == 0 ||
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
433 g_strcmp0(escaped, G_DIR_SEPARATOR_S) == 0 ||
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
434 g_strcmp0(escaped, "/") == 0 || g_strcmp0(escaped, "\\") == 0)
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
435 {
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
436 escaped = NULL;
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
437 }
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
438
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
439 g_free(priv->friendly_filename);
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
440 priv->friendly_filename = g_strdup(escaped);
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
441 }
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
442
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
443 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
444 purple_image_get_friendly_filename(PurpleImage *image) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
445 PurpleImagePrivate *priv = NULL;
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
446
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
447 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
448
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
449 priv = purple_image_get_instance_private(image);
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
450
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
451 if(priv->friendly_filename) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
452 return priv->friendly_filename;
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
453 }
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
454
38295
8344bea0b9c7 Follow what the documentation says for purple_image_get_friendly_filename and generate it if it is not set
Gary Kramlich <grim@reaperworld.com>
parents: 38294
diff changeset
455 return purple_image_generate_filename(image);
35819
cc375b914104 imgstore: remove refs from gg prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35809
diff changeset
456 }
38298
f0a8f63f9312 rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents: 38295
diff changeset
457

mercurial