Tue, 06 Apr 2021 03:35:20 -0500
Port the updates from 2.14.2 and the upcoming 2.14.3 to 3.0.0
* Use the unicode version of the System and UserInfo plugins to fix
non-english languages in the Windows installer.
* Update the installer to use the inetc plugin so that https downloads will
work. This became necessary because Sourceforge now redirects http to
https.
* Standardize everything in pidgin/win32/winpidgin.c to use `wprintf`.
Testing Done:
Compiled and ran on windows 10.
Reviewed at https://reviews.imfreedom.org/r/595/
|
38280
a77ae457fb9f
Some clean ups for custom smileys after cleaning up smileys
Gary Kramlich <grim@reaperworld.com>
parents:
37197
diff
changeset
|
1 | /* purple |
| 35715 | 2 | * |
| 3 | * Purple is the legal property of its developers, whose names are too numerous | |
| 4 | * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 5 | * source distribution. | |
| 6 | * | |
| 7 | * This program is free software; you can redistribute it and/or modify | |
| 8 | * it under the terms of the GNU General Public License as published by | |
| 9 | * the Free Software Foundation; either version 2 of the License, or | |
| 10 | * (at your option) any later version. | |
| 11 | * | |
| 12 | * This program is distributed in the hope that it will be useful, | |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 | * GNU General Public License for more details. | |
| 16 | * | |
| 17 | * You should have received a copy of the GNU General Public License | |
| 18 | * along with this program; if not, write to the Free Software | |
| 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA | |
| 20 | */ | |
| 21 | ||
| 22 | #include "smiley-custom.h" | |
| 23 | ||
|
40669
48dfed6f4f1f
Fix Windows builds and tests
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
39441
diff
changeset
|
24 | #include "internal.h" |
| 35715 | 25 | #include "debug.h" |
|
35744
34964f8d43fe
Remote smileys: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35728
diff
changeset
|
26 | #include "util.h" |
| 35715 | 27 | |
| 28 | #include <glib/gstdio.h> | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
29 | #include <errno.h> |
| 35715 | 30 | |
| 31 | #define SMILEYS_DEFAULT_FOLDER "custom_smiley" | |
| 32 | #define SMILEYS_INDEX_FILE "smileys.xml" | |
| 33 | ||
| 34 | static gchar *smileys_dir; | |
| 35 | static gchar *smileys_index; | |
| 36 | ||
|
35716
80bedd712883
Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35715
diff
changeset
|
37 | static PurpleSmileyList *smileys_list; |
| 35715 | 38 | static gboolean disable_write = FALSE; |
| 39 | ||
| 40 | /******************************************************************************* | |
| 41 | * XML storage | |
| 42 | ******************************************************************************/ | |
| 43 | ||
| 44 | static void | |
| 45 | purple_smiley_custom_load(void) | |
| 46 | { | |
| 47 | PurpleXmlNode *root_node, *profile_node, *smileyset_node, *smiley_node; | |
|
37197
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
48 | gchar *basename; |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
49 | gchar *dirname; |
| 35715 | 50 | int got_smileys = 0; |
| 51 | ||
| 52 | if (!g_file_test(smileys_index, G_FILE_TEST_EXISTS)) | |
| 53 | return; | |
| 54 | ||
|
37197
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
55 | basename = g_path_get_basename(smileys_index); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
56 | dirname = g_path_get_dirname(smileys_index); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
57 | root_node = purple_xmlnode_from_file(dirname, basename, |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
58 | "custom smileys index", "smiley-custom"); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
59 | g_free(dirname); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
60 | g_free(basename); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
61 | |
| 35715 | 62 | g_return_if_fail(root_node); |
| 63 | ||
| 64 | profile_node = purple_xmlnode_get_child(root_node, "profile"); | |
| 65 | if (!profile_node) { | |
| 66 | purple_xmlnode_free(root_node); | |
| 67 | g_return_if_fail(profile_node); | |
| 68 | } | |
| 69 | ||
| 70 | smileyset_node = purple_xmlnode_get_child(profile_node, "smiley_set"); | |
| 71 | if (!smileyset_node) { | |
| 72 | purple_xmlnode_free(root_node); | |
| 73 | g_return_if_fail(smileyset_node); | |
| 74 | } | |
| 75 | ||
| 76 | smiley_node = purple_xmlnode_get_child(smileyset_node, "smiley"); | |
| 77 | while (smiley_node) { | |
| 78 | const gchar *shortcut, *file_name; | |
| 79 | ||
| 80 | shortcut = purple_xmlnode_get_attrib(smiley_node, "shortcut"); | |
| 81 | file_name = purple_xmlnode_get_attrib(smiley_node, "filename"); | |
| 82 | ||
| 83 | if (shortcut && file_name) { | |
| 84 | PurpleSmiley *smiley; | |
| 85 | gchar *file_path = g_build_filename( | |
| 86 | smileys_dir, file_name, NULL); | |
| 87 | ||
| 88 | smiley = purple_smiley_new(shortcut, file_path); | |
| 89 | g_free(file_path); | |
| 90 | ||
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
91 | if (purple_smiley_list_add(smileys_list, smiley)) { |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
92 | got_smileys++; |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
93 | } else { |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
94 | purple_debug_warning("smiley-custom", |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
95 | "Couldn't add '%s' smiley", shortcut); |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
96 | } |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
97 | g_object_unref(smiley); |
| 35715 | 98 | } |
| 99 | ||
| 100 | smiley_node = purple_xmlnode_get_next_twin(smiley_node); | |
| 101 | } | |
| 102 | ||
| 103 | purple_xmlnode_free(root_node); | |
| 104 | ||
| 105 | purple_debug_info("smiley-custom", "Loaded %d custom smiley(s)", | |
| 106 | got_smileys); | |
| 107 | } | |
| 108 | ||
| 109 | static PurpleXmlNode * | |
| 110 | smileys_to_xmlnode(void) | |
| 111 | { | |
| 112 | PurpleXmlNode *root_node, *profile_node, *smileyset_node; | |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
113 | GList *smileys, *it; |
|
37197
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
114 | gchar *basename; |
| 35715 | 115 | |
| 116 | root_node = purple_xmlnode_new("smileys"); | |
| 117 | purple_xmlnode_set_attrib(root_node, "version", "1.0"); | |
| 118 | ||
| 119 | profile_node = purple_xmlnode_new("profile"); | |
| 120 | purple_xmlnode_insert_child(root_node, profile_node); | |
| 121 | purple_xmlnode_set_attrib(profile_node, "name", "Default"); | |
| 122 | ||
| 123 | smileyset_node = purple_xmlnode_new("smiley_set"); | |
| 124 | purple_xmlnode_insert_child(profile_node, smileyset_node); | |
| 125 | ||
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
126 | smileys = purple_smiley_list_get_all(smileys_list); |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
127 | |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
128 | for (it = smileys; it; it = g_list_next(it)) { |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
129 | PurpleSmiley *smiley = PURPLE_SMILEY(it->data); |
| 35715 | 130 | PurpleXmlNode *smiley_node; |
| 131 | ||
| 132 | smiley_node = purple_xmlnode_new("smiley"); | |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
133 | purple_xmlnode_insert_child(smileyset_node, smiley_node); |
| 35715 | 134 | purple_xmlnode_set_attrib(smiley_node, "shortcut", |
| 135 | purple_smiley_get_shortcut(smiley)); | |
|
37197
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
136 | basename = g_path_get_basename(purple_image_get_path( |
|
38280
a77ae457fb9f
Some clean ups for custom smileys after cleaning up smileys
Gary Kramlich <grim@reaperworld.com>
parents:
37197
diff
changeset
|
137 | PURPLE_IMAGE(smiley))); |
|
37197
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
138 | purple_xmlnode_set_attrib(smiley_node, "filename", basename); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
139 | g_free(basename); |
| 35715 | 140 | } |
| 141 | ||
| 142 | return root_node; | |
| 143 | } | |
| 144 | ||
| 145 | static void | |
| 146 | purple_smiley_custom_save(void) | |
| 147 | { | |
| 148 | PurpleXmlNode *root_node; | |
| 149 | gchar *data; | |
| 150 | GError *error = NULL; | |
| 151 | ||
| 152 | if (disable_write) | |
| 153 | return; | |
| 154 | ||
| 155 | root_node = smileys_to_xmlnode(); | |
| 156 | g_return_if_fail(root_node != NULL); | |
| 157 | ||
| 158 | data = purple_xmlnode_to_formatted_str(root_node, NULL); | |
| 159 | g_return_if_fail(data != NULL); | |
| 160 | ||
| 161 | g_file_set_contents(smileys_index, data, -1, &error); | |
| 162 | ||
| 163 | g_free(data); | |
| 164 | purple_xmlnode_free(root_node); | |
| 165 | ||
| 166 | if (error) { | |
| 167 | purple_debug_error("smiley-custom", | |
| 168 | "Error writting custom smileys xml file"); | |
| 169 | } | |
| 170 | } | |
| 171 | ||
| 172 | static gchar * | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
173 | purple_smiley_custom_img_checksum(PurpleImage *img) |
| 35715 | 174 | { |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
175 | g_return_val_if_fail(PURPLE_IS_IMAGE(img), NULL); |
| 35715 | 176 | |
| 177 | return g_compute_checksum_for_data(G_CHECKSUM_SHA1, | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
178 | purple_image_get_data(img), |
|
38298
f0a8f63f9312
rename purple_image_get_size to purple_image_get_data_size and deal with the fallout
Gary Kramlich <grim@reaperworld.com>
parents:
38280
diff
changeset
|
179 | purple_image_get_data_size(img)); |
| 35715 | 180 | } |
| 181 | ||
| 182 | ||
| 183 | /******************************************************************************* | |
| 184 | * API implementation | |
| 185 | ******************************************************************************/ | |
| 186 | ||
| 187 | PurpleSmiley * | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
188 | purple_smiley_custom_add(PurpleImage *img, const gchar *shortcut) |
| 35715 | 189 | { |
| 190 | PurpleSmiley *existing_smiley, *smiley; | |
| 191 | gchar *checksum, *file_path; | |
| 192 | gchar file_name[256]; | |
| 193 | const gchar *file_ext; | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
194 | gboolean succ; |
| 35715 | 195 | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
196 | g_return_val_if_fail(PURPLE_IS_IMAGE(img), NULL); |
| 35715 | 197 | |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
198 | existing_smiley = purple_smiley_list_get_by_shortcut( |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
199 | smileys_list, shortcut); |
| 35715 | 200 | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
201 | g_object_ref(img); |
| 35715 | 202 | |
| 203 | if (existing_smiley) { | |
| 204 | disable_write = TRUE; | |
| 205 | purple_smiley_custom_remove(existing_smiley); | |
| 206 | disable_write = FALSE; | |
| 207 | } | |
| 208 | ||
| 209 | checksum = purple_smiley_custom_img_checksum(img); | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
210 | file_ext = purple_image_get_extension(img); |
| 35715 | 211 | if (file_ext == NULL || g_strcmp0("icon", file_ext) == 0) { |
| 212 | purple_debug_warning("smiley-custom", "Invalid image type"); | |
| 213 | return NULL; | |
| 214 | } | |
| 215 | ||
| 216 | g_snprintf(file_name, sizeof(file_name), "%s.%s", checksum, file_ext); | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
217 | g_free(checksum); |
|
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
218 | |
| 35715 | 219 | file_path = g_build_filename(smileys_dir, file_name, NULL); |
| 220 | ||
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
221 | if (!purple_image_save(img, file_path)) { |
| 35715 | 222 | purple_debug_error("smiley-custom", "Failed writing smiley " |
| 35825 | 223 | "file %s", file_path); |
| 35715 | 224 | g_free(file_path); |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
225 | g_object_unref(img); |
| 35715 | 226 | return NULL; |
| 227 | } | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
228 | g_object_unref(img); |
| 35715 | 229 | |
| 230 | smiley = purple_smiley_new(shortcut, file_path); | |
| 231 | g_free(file_path); | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
232 | succ = purple_smiley_list_add(smileys_list, smiley); |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
233 | g_object_unref(smiley); |
| 35715 | 234 | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
235 | if (!succ) |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
236 | purple_debug_error("smiley-custom", "Failed adding a smiley"); |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
237 | |
| 35715 | 238 | purple_smiley_custom_save(); |
| 239 | ||
| 240 | return smiley; | |
| 241 | } | |
| 242 | ||
| 243 | void | |
| 244 | purple_smiley_custom_remove(PurpleSmiley *smiley) | |
| 245 | { | |
| 246 | PurpleSmiley *existing_smiley; | |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
247 | const gchar *smiley_shortcut, *path; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
248 | GList *other_smileys, *it; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
249 | gboolean is_unique; |
| 35715 | 250 | |
| 251 | g_return_if_fail(PURPLE_IS_SMILEY(smiley)); | |
| 252 | ||
| 253 | smiley_shortcut = purple_smiley_get_shortcut(smiley); | |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
254 | existing_smiley = purple_smiley_list_get_by_shortcut( |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
255 | smileys_list, smiley_shortcut); |
| 35715 | 256 | if (existing_smiley == NULL) |
| 257 | return; | |
| 258 | if (existing_smiley != smiley) { | |
| 259 | purple_debug_warning("smiley-custom", "Smiley is not in store"); | |
| 260 | return; | |
| 261 | } | |
| 262 | ||
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
263 | g_object_ref(smiley); |
|
35716
80bedd712883
Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35715
diff
changeset
|
264 | purple_smiley_list_remove(smileys_list, smiley); |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
265 | |
|
38280
a77ae457fb9f
Some clean ups for custom smileys after cleaning up smileys
Gary Kramlich <grim@reaperworld.com>
parents:
37197
diff
changeset
|
266 | path = purple_image_get_path(PURPLE_IMAGE(smiley)); |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
267 | |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
268 | other_smileys = purple_smiley_list_get_unique(smileys_list); |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
269 | is_unique = TRUE; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
270 | for (it = other_smileys; it; it = g_list_next(it)) { |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
271 | PurpleSmiley *other = it->data; |
|
38280
a77ae457fb9f
Some clean ups for custom smileys after cleaning up smileys
Gary Kramlich <grim@reaperworld.com>
parents:
37197
diff
changeset
|
272 | const gchar *other_path = purple_image_get_path(PURPLE_IMAGE(other)); |
|
35839
a7f91bd51911
Drop purple_smiley_get_path in favor of purple_image_get_path (or don't use it at all)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35825
diff
changeset
|
273 | if (g_strcmp0(other_path, path) == 0) { |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
274 | is_unique = FALSE; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
275 | break; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
276 | } |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
277 | } |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
278 | g_list_free(other_smileys); |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
279 | |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
280 | if (is_unique) |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
281 | g_unlink(path); |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
282 | |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
283 | g_object_unref(smiley); |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
284 | |
| 35715 | 285 | purple_smiley_custom_save(); |
| 286 | } | |
| 287 | ||
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
288 | PurpleSmileyList * |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
289 | purple_smiley_custom_get_list(void) |
| 35715 | 290 | { |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
291 | return smileys_list; |
| 35715 | 292 | } |
| 293 | ||
| 294 | ||
| 295 | /******************************************************************************* | |
| 296 | * Custom smiley subsystem | |
| 297 | ******************************************************************************/ | |
| 298 | ||
| 299 | void | |
|
35776
901a94245460
Comments: custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35744
diff
changeset
|
300 | _purple_smiley_custom_init(void) |
| 35715 | 301 | { |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
302 | gint ret; |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
303 | |
|
39441
5cd3c1c79e7a
Move custom smileys to XDG directories.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38298
diff
changeset
|
304 | smileys_dir = g_build_filename(purple_data_dir(), |
| 35715 | 305 | SMILEYS_DEFAULT_FOLDER, NULL); |
|
39441
5cd3c1c79e7a
Move custom smileys to XDG directories.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38298
diff
changeset
|
306 | smileys_index = g_build_filename(purple_config_dir(), |
| 35715 | 307 | SMILEYS_INDEX_FILE, NULL); |
|
35716
80bedd712883
Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35715
diff
changeset
|
308 | smileys_list = purple_smiley_list_new(); |
| 35715 | 309 | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
310 | ret = g_mkdir(smileys_dir, S_IRUSR | S_IWUSR | S_IXUSR); |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
311 | if (ret != 0 && errno != EEXIST) { |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
312 | purple_debug_error("smiley-custom", "Failed creating custom " |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
313 | "smileys directory: %s (%d)", g_strerror(errno), errno); |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
314 | } |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
315 | |
| 35715 | 316 | purple_smiley_custom_load(); |
| 317 | } | |
| 318 | ||
| 319 | void | |
|
35776
901a94245460
Comments: custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35744
diff
changeset
|
320 | _purple_smiley_custom_uninit(void) |
| 35715 | 321 | { |
| 322 | g_free(smileys_dir); | |
| 323 | g_free(smileys_index); | |
|
35716
80bedd712883
Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35715
diff
changeset
|
324 | g_object_unref(smileys_list); |
| 35715 | 325 | } |