Mercurial > pidgin
comparison libpurple/sound-loader.c @ 25091:655a37bc0eb0
fixed images to appear in pref menu
author | Justin Rodriguez <ffdragon@soc.pidgin.im> |
---|---|
date | Tue, 24 Jun 2008 02:06:42 +0000 |
parents | 5a02912e0bac |
children | c32dd71d0658 |
comparison
equal
deleted
inserted
replaced
25090:5a02912e0bac | 25091:655a37bc0eb0 |
---|---|
30 * Globals | 30 * Globals |
31 *****************************************************************************/ | 31 *****************************************************************************/ |
32 /***************************************************************************** | 32 /***************************************************************************** |
33 * Sound Theme Builder | 33 * Sound Theme Builder |
34 *****************************************************************************/ | 34 *****************************************************************************/ |
35 #define THEME_SUFFIX ".xml" | |
36 #define THEME_NAME "name" | |
37 #define THEME_AUTHOR "author" | |
38 #define THEME_IMAGE "image" | |
39 #define THEME_DESCRIPTION "description" | |
40 #define THEME_SOUND_EVENT "event" | |
41 #define THEME_EVENT_NAME "name" | |
42 #define THEME_EVENT_FILE "file" | |
43 | 35 |
44 static gpointer | 36 static gpointer |
45 purple_sound_loader_build(const gchar *dir) | 37 purple_sound_loader_build(const gchar *dir) |
46 { | 38 { |
47 xmlnode *root_node, *sub_node; | 39 xmlnode *root_node, *sub_node; |
48 gchar *filename, *filename_full, *image, *data; | 40 gchar *filename, *filename_full, *imagefile, *data; |
49 GDir *gdir; | 41 GDir *gdir; |
50 PurpleSoundTheme *theme; | 42 PurpleSoundTheme *theme; |
43 PurpleStoredImage *preview; | |
44 | |
51 | 45 |
52 /* Find the theme file */ | 46 /* Find the theme file */ |
53 gdir = g_dir_open(dir, 0, NULL); | 47 gdir = g_dir_open(dir, 0, NULL); |
54 g_return_val_if_fail(gdir != NULL, NULL); | 48 g_return_val_if_fail(gdir != NULL, NULL); |
55 | 49 |
56 while ((filename = g_strdup(g_dir_read_name(gdir))) != NULL && ! g_str_has_suffix(filename, THEME_SUFFIX)) | 50 while ((filename = g_strdup(g_dir_read_name(gdir))) != NULL && ! g_str_has_suffix(filename, ".xml")) |
57 g_free(filename); | 51 g_free(filename); |
58 | 52 |
59 g_return_val_if_fail(filename != NULL, NULL); | 53 g_return_val_if_fail(filename != NULL, NULL); |
60 | 54 |
61 /* Build the xml tree */ | 55 /* Build the xml tree */ |
62 filename_full = g_build_filename(dir, filename, NULL); | 56 filename_full = g_build_filename(dir, filename, NULL); |
63 | 57 |
64 root_node = xmlnode_from_file(dir, filename, "sound themes", "sound-loader"); | 58 root_node = xmlnode_from_file(dir, filename, "sound themes", "sound-loader"); |
65 g_return_val_if_fail(root_node != NULL, NULL); | 59 g_return_val_if_fail(root_node != NULL, NULL); |
66 | 60 |
67 /* Parse the tree */ | 61 /* Parse the tree */ |
68 theme = g_object_new(PURPLE_TYPE_SOUND_THEME, "type", "sound", NULL); | 62 /* TODO: fix image and add description */ |
69 | 63 imagefile = g_build_filename(dir, xmlnode_get_attrib(root_node, "image"), NULL); |
70 purple_theme_set_name(PURPLE_THEME(theme), xmlnode_get_attrib(root_node, THEME_NAME)); | 64 preview = purple_imgstore_new_from_file(imagefile); |
71 purple_theme_set_author(PURPLE_THEME(theme), xmlnode_get_attrib(root_node, THEME_AUTHOR)); | 65 |
66 sub_node = xmlnode_get_child(root_node, "description"); | |
67 data = xmlnode_get_data(sub_node); | |
72 | 68 |
73 image = g_build_filename(dir, xmlnode_get_attrib(root_node, THEME_IMAGE), NULL); | 69 theme = g_object_new(PURPLE_TYPE_SOUND_THEME, |
70 "type", "sound", | |
71 "name", xmlnode_get_attrib(root_node, "name"), | |
72 "author", xmlnode_get_attrib(root_node, "author"), | |
73 "image", preview, | |
74 "description", data, NULL); | |
74 | 75 |
75 sub_node = xmlnode_get_child(root_node, THEME_DESCRIPTION); | |
76 data = xmlnode_get_data(sub_node); | |
77 purple_theme_set_description(PURPLE_THEME(theme), data); | |
78 xmlnode_free(sub_node); | 76 xmlnode_free(sub_node); |
79 | 77 |
80 while ((sub_node = xmlnode_get_child(root_node, THEME_SOUND_EVENT)) != NULL){ | 78 while ((sub_node = xmlnode_get_child(root_node, "event")) != NULL){ |
81 purple_sound_theme_set_file(theme, | 79 purple_sound_theme_set_file(theme, |
82 xmlnode_get_attrib(root_node, THEME_EVENT_NAME), | 80 xmlnode_get_attrib(root_node, "name"), |
83 xmlnode_get_attrib(root_node, THEME_EVENT_FILE)); | 81 xmlnode_get_attrib(root_node, "file")); |
84 | 82 |
85 xmlnode_free(sub_node); | 83 xmlnode_free(sub_node); |
86 } | 84 } |
87 | 85 |
86 purple_imgstore_ref(preview); | |
88 xmlnode_free(root_node); | 87 xmlnode_free(root_node); |
89 g_dir_close(gdir); | 88 g_dir_close(gdir); |
90 g_free(filename_full); | 89 g_free(filename_full); |
91 g_free(image); | 90 g_free(imagefile); |
92 g_free(data); | 91 g_free(data); |
93 return theme; | 92 return theme; |
94 } | 93 } |
95 | 94 |
96 /****************************************************************************** | 95 /****************************************************************************** |