| 35 |
35 |
| 36 static gpointer |
36 static gpointer |
| 37 purple_sound_loader_build(const gchar *dir) |
37 purple_sound_loader_build(const gchar *dir) |
| 38 { |
38 { |
| 39 xmlnode *root_node, *sub_node; |
39 xmlnode *root_node, *sub_node; |
| 40 gchar *filename, *filename_full, *imagefile, *data; |
40 gchar *filename, *filename_full, *data; |
| 41 GDir *gdir; |
41 GDir *gdir; |
| 42 PurpleSoundTheme *theme; |
42 PurpleSoundTheme *theme; |
| 43 PurpleStoredImage *preview; |
|
| 44 |
|
| 45 |
43 |
| 46 /* Find the theme file */ |
44 /* Find the theme file */ |
| 47 gdir = g_dir_open(dir, 0, NULL); |
45 gdir = g_dir_open(dir, 0, NULL); |
| 48 g_return_val_if_fail(gdir != NULL, NULL); |
46 g_return_val_if_fail(gdir != NULL, NULL); |
| 49 |
47 |
| 56 filename_full = g_build_filename(dir, filename, NULL); |
54 filename_full = g_build_filename(dir, filename, NULL); |
| 57 |
55 |
| 58 root_node = xmlnode_from_file(dir, filename, "sound themes", "sound-loader"); |
56 root_node = xmlnode_from_file(dir, filename, "sound themes", "sound-loader"); |
| 59 g_return_val_if_fail(root_node != NULL, NULL); |
57 g_return_val_if_fail(root_node != NULL, NULL); |
| 60 |
58 |
| 61 /* Parse the tree */ |
59 /* Parse the tree */ |
| 62 /* TODO: fix image and add description */ |
|
| 63 imagefile = g_build_filename(dir, xmlnode_get_attrib(root_node, "image"), NULL); |
|
| 64 preview = purple_imgstore_new_from_file(imagefile); |
|
| 65 |
|
| 66 sub_node = xmlnode_get_child(root_node, "description"); |
60 sub_node = xmlnode_get_child(root_node, "description"); |
| 67 data = xmlnode_get_data(sub_node); |
61 data = xmlnode_get_data(sub_node); |
| 68 |
62 |
| 69 theme = g_object_new(PURPLE_TYPE_SOUND_THEME, |
63 theme = g_object_new(PURPLE_TYPE_SOUND_THEME, |
| 70 "type", "sound", |
64 "type", "sound", |
| 71 "name", xmlnode_get_attrib(root_node, "name"), |
65 "name", xmlnode_get_attrib(root_node, "name"), |
| 72 "author", xmlnode_get_attrib(root_node, "author"), |
66 "author", xmlnode_get_attrib(root_node, "author"), |
| 73 "image", preview, |
67 "image", xmlnode_get_attrib(root_node, "image"), |
| 74 "directory", dir, |
68 "directory", dir, |
| 75 "description", data, NULL); |
69 "description", data, NULL); |
| 76 |
70 |
| 77 xmlnode_free(sub_node); |
71 xmlnode_free(sub_node); |
| 78 |
72 |
| 81 xmlnode_get_attrib(sub_node, "name"), |
75 xmlnode_get_attrib(sub_node, "name"), |
| 82 xmlnode_get_attrib(sub_node, "file")); |
76 xmlnode_get_attrib(sub_node, "file")); |
| 83 xmlnode_free(sub_node); |
77 xmlnode_free(sub_node); |
| 84 } |
78 } |
| 85 |
79 |
| 86 purple_imgstore_ref(preview); |
|
| 87 xmlnode_free(root_node); |
80 xmlnode_free(root_node); |
| 88 g_dir_close(gdir); |
81 g_dir_close(gdir); |
| 89 g_free(filename_full); |
82 g_free(filename_full); |
| 90 g_free(imagefile); |
|
| 91 g_free(data); |
83 g_free(data); |
| 92 return theme; |
84 return theme; |
| 93 } |
85 } |
| 94 |
86 |
| 95 /****************************************************************************** |
87 /****************************************************************************** |