Mon, 03 Feb 2020 21:15:02 -0600
closing merged branch
|
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 | ||
| 24 | #include "debug.h" | |
|
35744
34964f8d43fe
Remote smileys: initial implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35728
diff
changeset
|
25 | #include "util.h" |
| 35715 | 26 | |
| 27 | #include <glib/gstdio.h> | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
28 | #include <errno.h> |
| 35715 | 29 | |
| 30 | #define SMILEYS_DEFAULT_FOLDER "custom_smiley" | |
| 31 | #define SMILEYS_INDEX_FILE "smileys.xml" | |
| 32 | ||
| 33 | static gchar *smileys_dir; | |
| 34 | static gchar *smileys_index; | |
| 35 | ||
|
35716
80bedd712883
Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35715
diff
changeset
|
36 | static PurpleSmileyList *smileys_list; |
| 35715 | 37 | static gboolean disable_write = FALSE; |
| 38 | ||
| 39 | /******************************************************************************* | |
| 40 | * XML storage | |
| 41 | ******************************************************************************/ | |
| 42 | ||
| 43 | static void | |
| 44 | purple_smiley_custom_load(void) | |
| 45 | { | |
| 46 | 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
|
47 | gchar *basename; |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
48 | gchar *dirname; |
| 35715 | 49 | int got_smileys = 0; |
| 50 | ||
| 51 | if (!g_file_test(smileys_index, G_FILE_TEST_EXISTS)) | |
| 52 | return; | |
| 53 | ||
|
37197
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
54 | 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
|
55 | 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
|
56 | 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
|
57 | "custom smileys index", "smiley-custom"); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
58 | g_free(dirname); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
59 | g_free(basename); |
|
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
60 | |
| 35715 | 61 | g_return_if_fail(root_node); |
| 62 | ||
| 63 | profile_node = purple_xmlnode_get_child(root_node, "profile"); | |
| 64 | if (!profile_node) { | |
| 65 | purple_xmlnode_free(root_node); | |
| 66 | g_return_if_fail(profile_node); | |
| 67 | } | |
| 68 | ||
| 69 | smileyset_node = purple_xmlnode_get_child(profile_node, "smiley_set"); | |
| 70 | if (!smileyset_node) { | |
| 71 | purple_xmlnode_free(root_node); | |
| 72 | g_return_if_fail(smileyset_node); | |
| 73 | } | |
| 74 | ||
| 75 | smiley_node = purple_xmlnode_get_child(smileyset_node, "smiley"); | |
| 76 | while (smiley_node) { | |
| 77 | const gchar *shortcut, *file_name; | |
| 78 | ||
| 79 | shortcut = purple_xmlnode_get_attrib(smiley_node, "shortcut"); | |
| 80 | file_name = purple_xmlnode_get_attrib(smiley_node, "filename"); | |
| 81 | ||
| 82 | if (shortcut && file_name) { | |
| 83 | PurpleSmiley *smiley; | |
| 84 | gchar *file_path = g_build_filename( | |
| 85 | smileys_dir, file_name, NULL); | |
| 86 | ||
| 87 | smiley = purple_smiley_new(shortcut, file_path); | |
| 88 | g_free(file_path); | |
| 89 | ||
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
90 | if (purple_smiley_list_add(smileys_list, smiley)) { |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
91 | got_smileys++; |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
92 | } else { |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
93 | purple_debug_warning("smiley-custom", |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
94 | "Couldn't add '%s' smiley", shortcut); |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
95 | } |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
96 | g_object_unref(smiley); |
| 35715 | 97 | } |
| 98 | ||
| 99 | smiley_node = purple_xmlnode_get_next_twin(smiley_node); | |
| 100 | } | |
| 101 | ||
| 102 | purple_xmlnode_free(root_node); | |
| 103 | ||
| 104 | purple_debug_info("smiley-custom", "Loaded %d custom smiley(s)", | |
| 105 | got_smileys); | |
| 106 | } | |
| 107 | ||
| 108 | static PurpleXmlNode * | |
| 109 | smileys_to_xmlnode(void) | |
| 110 | { | |
| 111 | PurpleXmlNode *root_node, *profile_node, *smileyset_node; | |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
112 | GList *smileys, *it; |
|
37197
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
113 | gchar *basename; |
| 35715 | 114 | |
| 115 | root_node = purple_xmlnode_new("smileys"); | |
| 116 | purple_xmlnode_set_attrib(root_node, "version", "1.0"); | |
| 117 | ||
| 118 | profile_node = purple_xmlnode_new("profile"); | |
| 119 | purple_xmlnode_insert_child(root_node, profile_node); | |
| 120 | purple_xmlnode_set_attrib(profile_node, "name", "Default"); | |
| 121 | ||
| 122 | smileyset_node = purple_xmlnode_new("smiley_set"); | |
| 123 | purple_xmlnode_insert_child(profile_node, smileyset_node); | |
| 124 | ||
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
125 | smileys = purple_smiley_list_get_all(smileys_list); |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
126 | |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
127 | for (it = smileys; it; it = g_list_next(it)) { |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
128 | PurpleSmiley *smiley = PURPLE_SMILEY(it->data); |
| 35715 | 129 | PurpleXmlNode *smiley_node; |
| 130 | ||
| 131 | smiley_node = purple_xmlnode_new("smiley"); | |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
132 | purple_xmlnode_insert_child(smileyset_node, smiley_node); |
| 35715 | 133 | purple_xmlnode_set_attrib(smiley_node, "shortcut", |
| 134 | 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
|
135 | 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
|
136 | PURPLE_IMAGE(smiley))); |
|
37197
ab6dff2a5133
Fix 3 small memleaks on the smiley subsystem
Jorge Villaseñor <salinasv@pidgin.im>
parents:
35839
diff
changeset
|
137 | 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
|
138 | g_free(basename); |
| 35715 | 139 | } |
| 140 | ||
| 141 | return root_node; | |
| 142 | } | |
| 143 | ||
| 144 | static void | |
| 145 | purple_smiley_custom_save(void) | |
| 146 | { | |
| 147 | PurpleXmlNode *root_node; | |
| 148 | gchar *data; | |
| 149 | GError *error = NULL; | |
| 150 | ||
| 151 | if (disable_write) | |
| 152 | return; | |
| 153 | ||
| 154 | root_node = smileys_to_xmlnode(); | |
| 155 | g_return_if_fail(root_node != NULL); | |
| 156 | ||
| 157 | data = purple_xmlnode_to_formatted_str(root_node, NULL); | |
| 158 | g_return_if_fail(data != NULL); | |
| 159 | ||
| 160 | g_file_set_contents(smileys_index, data, -1, &error); | |
| 161 | ||
| 162 | g_free(data); | |
| 163 | purple_xmlnode_free(root_node); | |
| 164 | ||
| 165 | if (error) { | |
| 166 | purple_debug_error("smiley-custom", | |
| 167 | "Error writting custom smileys xml file"); | |
| 168 | } | |
| 169 | } | |
| 170 | ||
| 171 | static gchar * | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
172 | purple_smiley_custom_img_checksum(PurpleImage *img) |
| 35715 | 173 | { |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
174 | g_return_val_if_fail(PURPLE_IS_IMAGE(img), NULL); |
| 35715 | 175 | |
| 176 | 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
|
177 | 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
|
178 | purple_image_get_data_size(img)); |
| 35715 | 179 | } |
| 180 | ||
| 181 | ||
| 182 | /******************************************************************************* | |
| 183 | * API implementation | |
| 184 | ******************************************************************************/ | |
| 185 | ||
| 186 | PurpleSmiley * | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
187 | purple_smiley_custom_add(PurpleImage *img, const gchar *shortcut) |
| 35715 | 188 | { |
| 189 | PurpleSmiley *existing_smiley, *smiley; | |
| 190 | gchar *checksum, *file_path; | |
| 191 | gchar file_name[256]; | |
| 192 | const gchar *file_ext; | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
193 | gboolean succ; |
| 35715 | 194 | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
195 | g_return_val_if_fail(PURPLE_IS_IMAGE(img), NULL); |
| 35715 | 196 | |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
197 | existing_smiley = purple_smiley_list_get_by_shortcut( |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
198 | smileys_list, shortcut); |
| 35715 | 199 | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
200 | g_object_ref(img); |
| 35715 | 201 | |
| 202 | if (existing_smiley) { | |
| 203 | disable_write = TRUE; | |
| 204 | purple_smiley_custom_remove(existing_smiley); | |
| 205 | disable_write = FALSE; | |
| 206 | } | |
| 207 | ||
| 208 | checksum = purple_smiley_custom_img_checksum(img); | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
209 | file_ext = purple_image_get_extension(img); |
| 35715 | 210 | if (file_ext == NULL || g_strcmp0("icon", file_ext) == 0) { |
| 211 | purple_debug_warning("smiley-custom", "Invalid image type"); | |
| 212 | return NULL; | |
| 213 | } | |
| 214 | ||
| 215 | 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
|
216 | g_free(checksum); |
|
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
217 | |
| 35715 | 218 | file_path = g_build_filename(smileys_dir, file_name, NULL); |
| 219 | ||
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
220 | if (!purple_image_save(img, file_path)) { |
| 35715 | 221 | purple_debug_error("smiley-custom", "Failed writing smiley " |
| 35825 | 222 | "file %s", file_path); |
| 35715 | 223 | g_free(file_path); |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
224 | g_object_unref(img); |
| 35715 | 225 | return NULL; |
| 226 | } | |
|
35812
48c6ee645ca1
Imgstore vs PurpleImage: rip and fix
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35776
diff
changeset
|
227 | g_object_unref(img); |
| 35715 | 228 | |
| 229 | smiley = purple_smiley_new(shortcut, file_path); | |
| 230 | g_free(file_path); | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
231 | succ = purple_smiley_list_add(smileys_list, smiley); |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
232 | g_object_unref(smiley); |
| 35715 | 233 | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
234 | if (!succ) |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
235 | purple_debug_error("smiley-custom", "Failed adding a smiley"); |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
236 | |
| 35715 | 237 | purple_smiley_custom_save(); |
| 238 | ||
| 239 | return smiley; | |
| 240 | } | |
| 241 | ||
| 242 | void | |
| 243 | purple_smiley_custom_remove(PurpleSmiley *smiley) | |
| 244 | { | |
| 245 | PurpleSmiley *existing_smiley; | |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
246 | const gchar *smiley_shortcut, *path; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
247 | GList *other_smileys, *it; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
248 | gboolean is_unique; |
| 35715 | 249 | |
| 250 | g_return_if_fail(PURPLE_IS_SMILEY(smiley)); | |
| 251 | ||
| 252 | smiley_shortcut = purple_smiley_get_shortcut(smiley); | |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
253 | existing_smiley = purple_smiley_list_get_by_shortcut( |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
254 | smileys_list, smiley_shortcut); |
| 35715 | 255 | if (existing_smiley == NULL) |
| 256 | return; | |
| 257 | if (existing_smiley != smiley) { | |
| 258 | purple_debug_warning("smiley-custom", "Smiley is not in store"); | |
| 259 | return; | |
| 260 | } | |
| 261 | ||
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
262 | g_object_ref(smiley); |
|
35716
80bedd712883
Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35715
diff
changeset
|
263 | purple_smiley_list_remove(smileys_list, smiley); |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
264 | |
|
38280
a77ae457fb9f
Some clean ups for custom smileys after cleaning up smileys
Gary Kramlich <grim@reaperworld.com>
parents:
37197
diff
changeset
|
265 | path = purple_image_get_path(PURPLE_IMAGE(smiley)); |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
266 | |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
267 | other_smileys = purple_smiley_list_get_unique(smileys_list); |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
268 | is_unique = TRUE; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
269 | for (it = other_smileys; it; it = g_list_next(it)) { |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
270 | 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
|
271 | 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
|
272 | if (g_strcmp0(other_path, path) == 0) { |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
273 | is_unique = FALSE; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
274 | break; |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
275 | } |
|
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 | g_list_free(other_smileys); |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
278 | |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
279 | if (is_unique) |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
280 | g_unlink(path); |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
281 | |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
282 | g_object_unref(smiley); |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
283 | |
| 35715 | 284 | purple_smiley_custom_save(); |
| 285 | } | |
| 286 | ||
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
287 | PurpleSmileyList * |
|
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
288 | purple_smiley_custom_get_list(void) |
| 35715 | 289 | { |
|
35717
45bde03f86a6
Custom smileys: simplify storage implementation
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35716
diff
changeset
|
290 | return smileys_list; |
| 35715 | 291 | } |
| 292 | ||
| 293 | ||
| 294 | /******************************************************************************* | |
| 295 | * Custom smiley subsystem | |
| 296 | ******************************************************************************/ | |
| 297 | ||
| 298 | void | |
|
35776
901a94245460
Comments: custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35744
diff
changeset
|
299 | _purple_smiley_custom_init(void) |
| 35715 | 300 | { |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
301 | gint ret; |
|
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
302 | |
|
39441
5cd3c1c79e7a
Move custom smileys to XDG directories.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38298
diff
changeset
|
303 | smileys_dir = g_build_filename(purple_data_dir(), |
| 35715 | 304 | SMILEYS_DEFAULT_FOLDER, NULL); |
|
39441
5cd3c1c79e7a
Move custom smileys to XDG directories.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
38298
diff
changeset
|
305 | smileys_index = g_build_filename(purple_config_dir(), |
| 35715 | 306 | SMILEYS_INDEX_FILE, NULL); |
|
35716
80bedd712883
Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35715
diff
changeset
|
307 | smileys_list = purple_smiley_list_new(); |
| 35715 | 308 | |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
309 | 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
|
310 | if (ret != 0 && errno != EEXIST) { |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
311 | purple_debug_error("smiley-custom", "Failed creating custom " |
|
35728
6cd9aee7f276
Smiley manager: edit, delete
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35727
diff
changeset
|
312 | "smileys directory: %s (%d)", g_strerror(errno), errno); |
|
35727
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
313 | } |
|
9025074cda55
Smiley manager: saving smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35717
diff
changeset
|
314 | |
| 35715 | 315 | purple_smiley_custom_load(); |
| 316 | } | |
| 317 | ||
| 318 | void | |
|
35776
901a94245460
Comments: custom smileys
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35744
diff
changeset
|
319 | _purple_smiley_custom_uninit(void) |
| 35715 | 320 | { |
| 321 | g_free(smileys_dir); | |
| 322 | g_free(smileys_index); | |
|
35716
80bedd712883
Custom smileys: parse and display in toolbar
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35715
diff
changeset
|
323 | g_object_unref(smileys_list); |
| 35715 | 324 | } |