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 /******************************************************************************