libpurple/image.c

Mon, 30 Jun 2025 14:22:13 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 30 Jun 2025 14:22:13 -0500
changeset 43269
1523eab3b5a0
parent 43071
071588186662
permissions
-rw-r--r--

Update the flatpak to gnome 48 and to the matching birb version

The birb version was missed here when it was updated.

Testing Done:
Built the flatpak with the instructions in the readme.

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

42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
1 /*
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
2 * Purple - Internet Messaging Library
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
4 *
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
5 * Purple is the legal property of its developers, whose names are too numerous
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
7 * source distribution.
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
8 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
9 * This library is free software; you can redistribute it and/or modify it
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
10 * under the terms of the GNU General Public License as published by the Free
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
11 * Software Foundation; either version 2 of the License, or (at your option)
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
12 * any later version.
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
13 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
14 * This library is distributed in the hope that it will be useful, but WITHOUT
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
17 * more details.
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
18 *
42594
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
19 * You should have received a copy of the GNU General Public License along with
eddde70cedd8 Create a test for verifying license headers and correct the ones that were wrong
Gary Kramlich <grim@reaperworld.com>
parents: 42584
diff changeset
20 * this library; if not, see <https://www.gnu.org/licenses/>.
35800
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
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
23 #include "debug.h"
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
24 #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
25 #include "util.h"
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
26
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
27 typedef struct {
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
28 gchar *path;
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
29
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
30 GBytes *contents;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
31
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
32 const gchar *extension;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
33 const gchar *mime;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
34 gchar *gen_filename;
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
35 gchar *friendly_filename;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
36 } PurpleImagePrivate;
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
37
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
38 enum {
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
39 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
40 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
41 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
42 PROP_SIZE,
42584
687260353985 Make signal and property enums and initializers consistent
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41960
diff changeset
43 N_PROPERTIES,
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
44 };
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
45
42584
687260353985 Make signal and property enums and initializers consistent
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41960
diff changeset
46 static GParamSpec *properties[N_PROPERTIES] = {NULL, };
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
47
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
48 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
49
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
50 /******************************************************************************
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
51 * 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
52 ******************************************************************************/
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 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
54 _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
55 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
56
42767
8cf1d11b59c1 Use g_set_str everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42656
diff changeset
57 g_set_str(&priv->path, path);
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
58 }
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 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
61 _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
62 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
63
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 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
65 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
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 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
68 }
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 /******************************************************************************
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
71 * Object stuff
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
72 ******************************************************************************/
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
73 static void
41960
c8a4853205e3 Bump C standard to C99 for libpurple files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41685
diff changeset
74 purple_image_init(G_GNUC_UNUSED PurpleImage *image) {
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
75 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
76
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
77 static void
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
78 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
79 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
80 PurpleImagePrivate *priv = purple_image_get_instance_private(image);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
81
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
82 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
83 g_bytes_unref(priv->contents);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
84
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
85 g_free(priv->path);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
86 g_free(priv->gen_filename);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
87 g_free(priv->friendly_filename);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
88
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
89 G_OBJECT_CLASS(purple_image_parent_class)->finalize(obj);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
90 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
91
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
92 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
93 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
94 const GValue *value, GParamSpec *pspec)
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
95 {
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 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
97
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
98 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
99 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
100 _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
101 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
102 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
103 _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
104 break;
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
105 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
106 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
107 break;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
108 }
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
109 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
110
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
111 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
112 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
113 GParamSpec *pspec)
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
114 {
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 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
116
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
117 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
118 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
119 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
120 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
121 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
122 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
123 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
124 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
125 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
126 break;
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
127 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
128 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
129 break;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
130 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
131 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
132
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
133 static void
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
134 purple_image_class_init(PurpleImageClass *klass) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
135 GObjectClass *gobj_class = G_OBJECT_CLASS(klass);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
136
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
137 gobj_class->finalize = purple_image_finalize;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
138 gobj_class->get_property = purple_image_get_property;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
139 gobj_class->set_property = purple_image_set_property;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
140
42656
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
141 /**
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
142 * PurpleImage:path:
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
143 *
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
144 * The file path for the image if one was provided.
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
145 *
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
146 * Since: 3.0
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
147 */
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
148 properties[PROP_PATH] = g_param_spec_string(
43071
071588186662 Remove nick and blurb from libpurple properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42767
diff changeset
149 "path", NULL, NULL,
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
150 NULL,
43071
071588186662 Remove nick and blurb from libpurple properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42767
diff changeset
151 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
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
152
42656
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
153 /**
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
154 * PurpleImage:contents:
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
155 *
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
156 * The contents of the image.
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
157 *
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
158 * Since: 3.0
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
159 */
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
160 properties[PROP_CONTENTS] = g_param_spec_boxed(
43071
071588186662 Remove nick and blurb from libpurple properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42767
diff changeset
161 "contents", NULL, NULL,
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
162 G_TYPE_BYTES,
43071
071588186662 Remove nick and blurb from libpurple properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42767
diff changeset
163 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
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
164
42656
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
165 /**
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
166 * PurpleImage:size:
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
167 *
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
168 * The size of the image in bytes.
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
169 *
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
170 * Since: 3.0
df9aafbae930 Add a doc-check unit test to libpurple and fix the issues it has found
Gary Kramlich <grim@reaperworld.com>
parents: 42594
diff changeset
171 */
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
172 properties[PROP_SIZE] = g_param_spec_uint64(
43071
071588186662 Remove nick and blurb from libpurple properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42767
diff changeset
173 "size", NULL, NULL,
071588186662 Remove nick and blurb from libpurple properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42767
diff changeset
174 0, G_MAXUINT64, 0,
071588186662 Remove nick and blurb from libpurple properties
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42767
diff changeset
175 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
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
176
42584
687260353985 Make signal and property enums and initializers consistent
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41960
diff changeset
177 g_object_class_install_properties(gobj_class, N_PROPERTIES, properties);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
178 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
179
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
180 /******************************************************************************
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
181 * API
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
182 ******************************************************************************/
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
183 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
184 purple_image_new_from_bytes(GBytes *bytes) {
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
185 return g_object_new(
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
186 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
187 "contents", bytes,
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
188 NULL
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
189 );
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
190 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
191
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
192 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
193 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
194 PurpleImage *image = NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
195 GBytes *bytes = NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
196 gchar *contents = NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
197 gsize length = 0;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
198
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
199 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
200 return NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
201 }
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
202
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
203 bytes = g_bytes_new_take(contents, length);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
204
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
205 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
206 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
207 "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
208 "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
209 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
210 );
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
211
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
212 g_bytes_unref(bytes);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
213
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
214 return image;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
215 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
216
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
217 PurpleImage *
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
218 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
219 PurpleImage *image;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
220 GBytes *bytes = NULL;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
221
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
222 bytes = g_bytes_new(data, length);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
223
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
224 image = purple_image_new_from_bytes(bytes);
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
225
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
226 g_bytes_unref(bytes);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
227
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
228 return image;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
229 }
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
230
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
231 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
232 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
233 PurpleImage *image;
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
234 GBytes *bytes = NULL;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
235
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
236 bytes = g_bytes_new_take(data, length);
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
237
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
238 image = purple_image_new_from_bytes(bytes);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
239
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
240 g_bytes_unref(bytes);
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
241
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
242 return image;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
243 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
244
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
245 gboolean
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
246 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
247 PurpleImagePrivate *priv = NULL;
35846
07dabf3c0022 PurpleImage: purple_image_get_data should return const buffer
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35843
diff changeset
248 gconstpointer data;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
249 gsize len;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
250 gboolean succ;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
251
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
252 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
253 g_return_val_if_fail(path != NULL, FALSE);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
254 g_return_val_if_fail(path[0] != '\0', FALSE);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
255
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
256 priv = purple_image_get_instance_private(image);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
257 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
258 len = purple_image_get_data_size(image);
35809
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 g_return_val_if_fail(data != NULL, FALSE);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
261 g_return_val_if_fail(len > 0, FALSE);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
262
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
263 succ = g_file_set_contents(path, data, len, NULL);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
264 if (succ && priv->path == NULL)
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
265 priv->path = g_strdup(path);
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
266
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
267 return succ;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
268 }
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
269
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
270 GBytes *
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
271 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
272 {
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
273 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
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 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
276
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
277 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
278
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
279 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
280 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
281
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
282 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
283 }
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
284
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
285 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
286 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
287 PurpleImagePrivate *priv = NULL;
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
288
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
289 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
290
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
291 priv = purple_image_get_instance_private(image);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
292
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
293 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
294 }
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
295
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
296 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
297 purple_image_get_data_size(PurpleImage *image) {
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
298 PurpleImagePrivate *priv;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
299
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
300 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
301
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
302 priv = purple_image_get_instance_private(image);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
303
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
304 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
305 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
306
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
307 return 0;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
308 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
309
35846
07dabf3c0022 PurpleImage: purple_image_get_data should return const buffer
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35843
diff changeset
310 gconstpointer
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
311 purple_image_get_data(PurpleImage *image) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
312 PurpleImagePrivate *priv = NULL;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
313
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
314 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
315
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
316 priv = purple_image_get_instance_private(image);
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
317
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
318 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
319 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
320
df274be2afa2 A bunch more hack and slash with a bit more design on the fly
Gary Kramlich <grim@reaperworld.com>
parents: 38278
diff changeset
321 return NULL;
35800
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
322 }
2c21828e7442 PurpleImage: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
diff changeset
323
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
324 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
325 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
326 PurpleImagePrivate *priv = NULL;
35846
07dabf3c0022 PurpleImage: purple_image_get_data should return const buffer
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35843
diff changeset
327 gconstpointer data;
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
328
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
329 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
330
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
331 priv = purple_image_get_instance_private(image);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
332
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
333 if (priv->extension)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
334 return priv->extension;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
335
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
336 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
337 return NULL;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
338
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
339 data = purple_image_get_data(image);
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
340 g_assert(data != NULL);
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
341
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
342 if (memcmp(data, "GIF8", 4) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
343 return priv->extension = "gif";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
344 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
345 return priv->extension = "jpg";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
346 if (memcmp(data, "\x89PNG", 4) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
347 return priv->extension = "png";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
348 if (memcmp(data, "MM", 2) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
349 return priv->extension = "tif";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
350 if (memcmp(data, "II", 2) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
351 return priv->extension = "tif";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
352 if (memcmp(data, "BM", 2) == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
353 return priv->extension = "bmp";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
354 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
355 return priv->extension = "ico";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
356
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
357 return NULL;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
358 }
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
359
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
360 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
361 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
362 PurpleImagePrivate *priv = NULL;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
363 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
364
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
365 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
366
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
367 priv = purple_image_get_instance_private(image);
35801
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
368
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
369 if (priv->mime)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
370 return priv->mime;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
371
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
372 g_return_val_if_fail(ext != NULL, NULL);
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
373
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
374 if (g_strcmp0(ext, "gif") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
375 return priv->mime = "image/gif";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
376 if (g_strcmp0(ext, "jpg") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
377 return priv->mime = "image/jpeg";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
378 if (g_strcmp0(ext, "png") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
379 return priv->mime = "image/png";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
380 if (g_strcmp0(ext, "tif") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
381 return priv->mime = "image/tiff";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
382 if (g_strcmp0(ext, "bmp") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
383 return priv->mime = "image/bmp";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
384 if (g_strcmp0(ext, "ico") == 0)
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
385 return priv->mime = "image/vnd.microsoft.icon";
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
386
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
387 return NULL;
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
388 }
9cdf2c4d5a7a PurpleImage: extension and mime type retrieval
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35800
diff changeset
389
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
390 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
391 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
392 PurpleImagePrivate *priv = NULL;
35846
07dabf3c0022 PurpleImage: purple_image_get_data should return const buffer
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35843
diff changeset
393 gconstpointer data;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
394 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
395 const gchar *ext = NULL;
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
396 gchar *checksum;
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 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
399
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
400 priv = purple_image_get_instance_private(image);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
401
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
402 if (priv->gen_filename)
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
403 return priv->gen_filename;
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 /* 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
406 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
407 len = purple_image_get_data_size(image);
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
408
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
409 /* 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
410 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
411
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
412 /* 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
413 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
414 if(ext != NULL) {
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
415 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
416 g_free(checksum);
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
417 } else {
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
418 priv->gen_filename = checksum;
09ad2b3bbd02 Avoid an extra copy by not using a GString here
Gary Kramlich <grim@reaperworld.com>
parents: 38575
diff changeset
419 }
35809
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
420
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
421 return priv->gen_filename;
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
422 }
6dd40b244ce3 PurpleImage: convert buddyicon.c
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35806
diff changeset
423
35819
cc375b914104 imgstore: remove refs from gg prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35809
diff changeset
424 void
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
425 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
426 PurpleImagePrivate *priv = NULL;
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
427 gchar *newname;
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
428 const gchar *escaped;
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
429
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
430 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
431
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
432 priv = purple_image_get_instance_private(image);
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
433
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
434 newname = g_path_get_basename(filename);
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
435 escaped = purple_escape_filename(newname);
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
436 g_free(newname);
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
437 newname = NULL;
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 if (g_strcmp0(escaped, "") == 0 || g_strcmp0(escaped, ".") == 0 ||
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
440 g_strcmp0(escaped, G_DIR_SEPARATOR_S) == 0 ||
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
441 g_strcmp0(escaped, "/") == 0 || g_strcmp0(escaped, "\\") == 0)
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 escaped = NULL;
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
444 }
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
445
42767
8cf1d11b59c1 Use g_set_str everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42656
diff changeset
446 g_set_str(&priv->friendly_filename, escaped);
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
447 }
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
448
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
449 const gchar *
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
450 purple_image_get_friendly_filename(PurpleImage *image) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
451 PurpleImagePrivate *priv = NULL;
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
452
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
453 g_return_val_if_fail(PURPLE_IS_IMAGE(image), NULL);
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
454
39545
77379050b5f7 Use G_DECLARE* for PurpleImage and drop private macro.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 38576
diff changeset
455 priv = purple_image_get_instance_private(image);
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
456
38277
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
457 if(priv->friendly_filename) {
061e91dd78d4 first pass at cleaning up PurpleImage
Gary Kramlich <grim@reaperworld.com>
parents: 36049
diff changeset
458 return priv->friendly_filename;
35829
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
459 }
268931512478 imgstore: unref oscar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35819
diff changeset
460
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
461 return purple_image_generate_filename(image);
35819
cc375b914104 imgstore: remove refs from gg prpl
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35809
diff changeset
462 }
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
463

mercurial