aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2005-07-05 00:07:28 +0000
committerChristian Grothoff <christian@grothoff.org>2005-07-05 00:07:28 +0000
commitcfcbd7da2d83ed1ae943e56e8637b4ea541bcdb9 (patch)
tree8366d4593f4c60ab1b5eb07d2e1a3a37d4cfbb6b
parent866edd0514ed7454af80f44414f3769cd594d077 (diff)
downloadgnunet-gtk-cfcbd7da2d83ed1ae943e56e8637b4ea541bcdb9.tar.gz
gnunet-gtk-cfcbd7da2d83ed1ae943e56e8637b4ea541bcdb9.zip
update
-rw-r--r--src/plugins/fs/extensions/musicinsert.c1382
-rw-r--r--src/plugins/fs/extensions/musicinsert.glade2
-rw-r--r--src/plugins/fs/extensions/musicinsert.h18
3 files changed, 832 insertions, 570 deletions
diff --git a/src/plugins/fs/extensions/musicinsert.c b/src/plugins/fs/extensions/musicinsert.c
index 002bf8e9..fedf5396 100644
--- a/src/plugins/fs/extensions/musicinsert.c
+++ b/src/plugins/fs/extensions/musicinsert.c
@@ -41,11 +41,24 @@
41 41
42#include <extractor.h> 42#include <extractor.h>
43 43
44#include "fs.h"
45#include "ecrs.h"
46#include "gnunet_ecrs_lib.h"
47#include "platform.h"
44#include "main.h" 48#include "main.h"
45 49
46/* platform.h will be needed */
47 50
48#define _ 51GladeXML *musicinsertXML;
52GtkListStore *filelist_store;
53GList *AlbumList, *ArtistList, *TypeList;
54GtkComboBoxEntry *artistcombobox, *albumcombobox, *typecombobox;
55EXTRACTOR_ExtractorList *Extractors;
56GtkWidget *musicinsertdialog;
57
58GtkTreeViewColumn *filename_list_col, *title_list_col, *artist_list_col,
59 *album_list_col, *type_list_col, *format_list_col, *keywords_list_col;
60
61GtkWidget *filelist_popup;
49 62
50int 63int
51main (int argc, char *argv[]) 64main (int argc, char *argv[])
@@ -53,217 +66,260 @@ main (int argc, char *argv[])
53 66
54 67
55 68
56 gtk_init(&argc, &argv); 69 gtk_init (&argc, &argv);
57 70
58show_musicinsertdialog (); 71 show_musicinsertdialog ();
59 72
60 gtk_main (); 73 gtk_main ();
61 return 0; 74 return 0;
62} 75}
63 76
64void show_musicinsertdialog () 77void
78show_musicinsertdialog ()
65{ 79{
66 musicinsertXML = glade_xml_new("../musicinsert.glade", "musicinsertdialog", NULL); 80 musicinsertXML =
67 glade_xml_signal_autoconnect(musicinsertXML); 81 glade_xml_new (MUSICINSERTXMLFILE, "musicinsertdialog",
82 NULL);
83 glade_xml_signal_autoconnect (musicinsertXML);
68/* libglade*/ 84/* libglade*/
69 85
70 86
71 gtk_set_locale (); 87 gtk_set_locale ();
72 88
73 /* 89 musicinsertdialog =
74 * The following code was added by Glade to create one of each component 90 glade_xml_get_widget (musicinsertXML, "musicinsertdialog");
75 * (except popup menus), just so that you see something after building
76 * the project. Delete any components that you don't want shown initially.
77 */
78 //musicinsertdialog = create_musicinsertdialog ();
79 GtkWidget *musicinsertdialog;
80 musicinsertdialog = glade_xml_get_widget(musicinsertXML, "musicinsertdialog");
81 91
82/* 92/*
83 * Create the 3 ComboBoxEntry manually (libglade doesn't handle this well : 93 * Create the 3 ComboBoxEntry manually (libglade doesn't handle this well :
84 * should use gtk_combo_box_entry_new_text instead of gtk_combo_box_entry_new) 94 * should use gtk_combo_box_entry_new_text instead of gtk_combo_box_entry_new)
85 */ 95 */
86 artistcombobox = GTK_COMBO_BOX_ENTRY(gtk_combo_box_entry_new_text ()); 96 artistcombobox =
87 albumcombobox = GTK_COMBO_BOX_ENTRY(gtk_combo_box_entry_new_text ()); 97 GTK_COMBO_BOX_ENTRY (gtk_combo_box_entry_new_text ());
88 typecombobox = GTK_COMBO_BOX_ENTRY(gtk_combo_box_entry_new_text ()); 98 albumcombobox = GTK_COMBO_BOX_ENTRY (gtk_combo_box_entry_new_text ());
89 99 typecombobox = GTK_COMBO_BOX_ENTRY (gtk_combo_box_entry_new_text ());
90 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "Ogg (application/ogg)"); 100
91 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "MP3 (audio/mpeg)"); 101 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox),
92 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "MPC (application/x-musepack)"); 102 "Ogg (application/ogg)");
93 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "AAC"); 103 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox),
94 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "WMA (audio/x-ms-wma)"); 104 "MP3 (audio/mpeg)");
95 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "FLAC (audio/flac)"); 105 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox),
96 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "APE"); 106 "MPC (application/x-musepack)");
97 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "WAV (application/x-wav)"); 107 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox), "AAC");
98 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "REAL (audio/vnd.rn-realaudio)"); 108 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox),
99 gtk_combo_box_append_text (GTK_COMBO_BOX(typecombobox), "MIDI (audio/x-midi)"); 109 "WMA (audio/x-ms-wma)");
100 110 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox),
101 GtkWidget *globaltable = glade_xml_get_widget (musicinsertXML, "globaltable"); 111 "FLAC (audio/flac)");
102 gtk_table_attach (GTK_TABLE(globaltable), GTK_WIDGET(artistcombobox), 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0); 112 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox), "APE");
103 gtk_table_attach (GTK_TABLE(globaltable), GTK_WIDGET(albumcombobox), 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0); 113 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox),
104 gtk_table_attach (GTK_TABLE(globaltable), GTK_WIDGET(typecombobox), 1, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0); 114 "WAV (application/x-wav)");
105 115 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox),
106 gtk_widget_show (GTK_WIDGET(artistcombobox)); 116 "REAL (audio/vnd.rn-realaudio)");
107 gtk_widget_show (GTK_WIDGET(albumcombobox)); 117 gtk_combo_box_append_text (GTK_COMBO_BOX (typecombobox),
108 gtk_widget_show (GTK_WIDGET(typecombobox)); 118 "MIDI (audio/x-midi)");
109 119
110 /* 120 GtkWidget *globaltable =
111 * treeview creation 121 glade_xml_get_widget (musicinsertXML, "globaltable");
112 */ 122 gtk_table_attach (GTK_TABLE (globaltable),
113 123 GTK_WIDGET (artistcombobox), 1, 3, 1, 2,
114 /* liststore model */ 124 GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0);
115 filelist_store = 125 gtk_table_attach (GTK_TABLE (globaltable), GTK_WIDGET (albumcombobox),
116 gtk_list_store_new (COLS_NUMBER, G_TYPE_STRING, G_TYPE_STRING, 126 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0,
117 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, 127 0);
118 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); 128 gtk_table_attach (GTK_TABLE (globaltable), GTK_WIDGET (typecombobox),
119 129 1, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0,
120 /* view */ 130 0);
121 GtkWidget *filelist = glade_xml_get_widget (musicinsertXML, "filelist"); 131
122 gtk_tree_view_set_model (GTK_TREE_VIEW (filelist), 132 gtk_widget_show (GTK_WIDGET (artistcombobox));
123 GTK_TREE_MODEL (filelist_store)); 133 gtk_widget_show (GTK_WIDGET (albumcombobox));
124 134 gtk_widget_show (GTK_WIDGET (typecombobox));
125 /* cells definition */ 135
126 GtkCellRenderer *filename_renderer = gtk_cell_renderer_text_new (); 136 /*
127 g_object_set (filename_renderer, "editable", TRUE, NULL); 137 * treeview creation
128 GtkCellRenderer *title_renderer = gtk_cell_renderer_text_new (); 138 */
129 g_object_set (title_renderer, "editable", TRUE, NULL); 139
130 GtkCellRenderer *artist_renderer = gtk_cell_renderer_text_new (); 140 /* liststore model */
131 g_object_set (artist_renderer, "editable", TRUE, NULL); 141 filelist_store =
132 GtkCellRenderer *album_renderer = gtk_cell_renderer_text_new (); 142 gtk_list_store_new (COLS_NUMBER, G_TYPE_STRING, G_TYPE_STRING,
133 g_object_set (album_renderer, "editable", TRUE, NULL); 143 G_TYPE_STRING, G_TYPE_STRING,
134 GtkCellRenderer *type_renderer = gtk_cell_renderer_text_new (); 144 G_TYPE_STRING, G_TYPE_STRING,
135 g_object_set (type_renderer, "editable", TRUE, NULL); 145 G_TYPE_STRING, G_TYPE_STRING);
136 GtkCellRenderer *format_renderer = gtk_cell_renderer_text_new (); 146
137 g_object_set (format_renderer, "editable", TRUE, NULL); 147 /* view */
138 GtkCellRenderer *keywords_renderer = gtk_cell_renderer_text_new (); 148 GtkWidget *filelist =
139 g_object_set (keywords_renderer, "editable", TRUE, NULL); 149 glade_xml_get_widget (musicinsertXML, "filelist");
140 150 gtk_tree_view_set_model (GTK_TREE_VIEW (filelist),
141 151 GTK_TREE_MODEL (filelist_store));
142 g_signal_connect ((gpointer) filename_renderer, "edited", 152
143 G_CALLBACK (on_renderer_edited), (gpointer) &filename_col_num); 153 /* cells definition */
144 g_signal_connect ((gpointer) title_renderer, "edited", 154 GtkCellRenderer *filename_renderer = gtk_cell_renderer_text_new ();
145 G_CALLBACK (on_renderer_edited), (gpointer) &title_col_num); 155 g_object_set (filename_renderer, "editable", TRUE, NULL);
146 g_signal_connect ((gpointer) artist_renderer, "edited", 156 GtkCellRenderer *title_renderer = gtk_cell_renderer_text_new ();
147 G_CALLBACK (on_renderer_edited), (gpointer) &artist_col_num); 157 g_object_set (title_renderer, "editable", TRUE, NULL);
148 g_signal_connect ((gpointer) album_renderer, "edited", 158 GtkCellRenderer *artist_renderer = gtk_cell_renderer_text_new ();
149 G_CALLBACK (on_renderer_edited), (gpointer) &album_col_num); 159 g_object_set (artist_renderer, "editable", TRUE, NULL);
150 g_signal_connect ((gpointer) type_renderer, "edited", 160 GtkCellRenderer *album_renderer = gtk_cell_renderer_text_new ();
151 G_CALLBACK (on_renderer_edited), (gpointer) &type_col_num); 161 g_object_set (album_renderer, "editable", TRUE, NULL);
152 g_signal_connect ((gpointer) format_renderer, "edited", 162 GtkCellRenderer *type_renderer = gtk_cell_renderer_text_new ();
153 G_CALLBACK (on_renderer_edited), (gpointer) &format_col_num); 163 g_object_set (type_renderer, "editable", TRUE, NULL);
154 g_signal_connect ((gpointer) keywords_renderer, "edited", 164 GtkCellRenderer *format_renderer = gtk_cell_renderer_text_new ();
155 G_CALLBACK (on_renderer_edited), (gpointer) &keywords_col_num); 165 g_object_set (format_renderer, "editable", TRUE, NULL);
156 166 GtkCellRenderer *keywords_renderer = gtk_cell_renderer_text_new ();
157 /* columns definition */ 167 g_object_set (keywords_renderer, "editable", TRUE, NULL);
158 filename_list_col = 168
159 gtk_tree_view_column_new_with_attributes (_("Published filename"), 169
160 filename_renderer, 170 g_signal_connect ((gpointer) filename_renderer, "edited",
161 "text", FILENAME_COL, NULL); 171 G_CALLBACK (on_renderer_edited),
162 title_list_col = 172 (gpointer) & filename_col_num);
163 gtk_tree_view_column_new_with_attributes (_("Title"), 173 g_signal_connect ((gpointer) title_renderer, "edited",
164 title_renderer, 174 G_CALLBACK (on_renderer_edited),
165 "text", TITLE_COL, NULL); 175 (gpointer) & title_col_num);
166 artist_list_col = 176 g_signal_connect ((gpointer) artist_renderer, "edited",
167 gtk_tree_view_column_new_with_attributes (_("Artist"), 177 G_CALLBACK (on_renderer_edited),
168 artist_renderer, 178 (gpointer) & artist_col_num);
169 "text", ARTIST_COL, NULL); 179 g_signal_connect ((gpointer) album_renderer, "edited",
170 album_list_col = 180 G_CALLBACK (on_renderer_edited),
171 gtk_tree_view_column_new_with_attributes (_("Album"), 181 (gpointer) & album_col_num);
172 album_renderer, 182 g_signal_connect ((gpointer) type_renderer, "edited",
173 "text", ALBUM_COL, NULL); 183 G_CALLBACK (on_renderer_edited),
174 type_list_col = 184 (gpointer) & type_col_num);
175 gtk_tree_view_column_new_with_attributes (_("Type"), 185 g_signal_connect ((gpointer) format_renderer, "edited",
176 type_renderer, 186 G_CALLBACK (on_renderer_edited),
177 "text", TYPE_COL, NULL); 187 (gpointer) & format_col_num);
178 format_list_col = 188 g_signal_connect ((gpointer) keywords_renderer, "edited",
179 gtk_tree_view_column_new_with_attributes (_("Format"), 189 G_CALLBACK (on_renderer_edited),
180 format_renderer, 190 (gpointer) & keywords_col_num);
181 "text", FORMAT_COL, NULL); 191
182 keywords_list_col = 192 /* columns definition */
183 gtk_tree_view_column_new_with_attributes (_("Keywords"), 193 filename_list_col =
184 keywords_renderer, 194 gtk_tree_view_column_new_with_attributes (_
185 "text", KEYWORDS_COL, NULL); 195 ("Published filename"),
196 filename_renderer,
197 "text",
198 FILENAME_COL, NULL);
199 title_list_col =
200 gtk_tree_view_column_new_with_attributes (_("Title"),
201 title_renderer,
202 "text", TITLE_COL,
203 NULL);
204 artist_list_col =
205 gtk_tree_view_column_new_with_attributes (_("Artist"),
206 artist_renderer,
207 "text", ARTIST_COL,
208 NULL);
209 album_list_col =
210 gtk_tree_view_column_new_with_attributes (_("Album"),
211 album_renderer,
212 "text", ALBUM_COL,
213 NULL);
214 type_list_col =
215 gtk_tree_view_column_new_with_attributes (_("Type"),
216 type_renderer,
217 "text", TYPE_COL,
218 NULL);
219 format_list_col =
220 gtk_tree_view_column_new_with_attributes (_("Format"),
221 format_renderer,
222 "text", FORMAT_COL,
223 NULL);
224 keywords_list_col =
225 gtk_tree_view_column_new_with_attributes (_("Keywords"),
226 keywords_renderer,
227 "text",
228 KEYWORDS_COL, NULL);
186 229
187/* Allow sorting for all columns */ 230/* Allow sorting for all columns */
188 gtk_tree_view_column_set_sort_column_id (filename_list_col, FILENAME_COL); 231 gtk_tree_view_column_set_sort_column_id (filename_list_col,
189 gtk_tree_view_column_set_sort_column_id (title_list_col, TITLE_COL); 232 FILENAME_COL);
190 gtk_tree_view_column_set_sort_column_id (artist_list_col, ARTIST_COL); 233 gtk_tree_view_column_set_sort_column_id (title_list_col, TITLE_COL);
191 gtk_tree_view_column_set_sort_column_id (album_list_col, ALBUM_COL); 234 gtk_tree_view_column_set_sort_column_id (artist_list_col, ARTIST_COL);
192 gtk_tree_view_column_set_sort_column_id (type_list_col, TYPE_COL); 235 gtk_tree_view_column_set_sort_column_id (album_list_col, ALBUM_COL);
193 gtk_tree_view_column_set_sort_column_id (format_list_col, FORMAT_COL); 236 gtk_tree_view_column_set_sort_column_id (type_list_col, TYPE_COL);
194 gtk_tree_view_column_set_sort_column_id (keywords_list_col, KEYWORDS_COL); 237 gtk_tree_view_column_set_sort_column_id (format_list_col, FORMAT_COL);
195 238 gtk_tree_view_column_set_sort_column_id (keywords_list_col,
196 /* Allow to resize all columns */ 239 KEYWORDS_COL);
197 gtk_tree_view_column_set_resizable (filename_list_col, TRUE); 240
198 gtk_tree_view_column_set_resizable (title_list_col, TRUE); 241 /* Allow to resize all columns */
199 gtk_tree_view_column_set_resizable (artist_list_col, TRUE); 242 gtk_tree_view_column_set_resizable (filename_list_col, TRUE);
200 gtk_tree_view_column_set_resizable (album_list_col, TRUE); 243 gtk_tree_view_column_set_resizable (title_list_col, TRUE);
201 gtk_tree_view_column_set_resizable (type_list_col, TRUE); 244 gtk_tree_view_column_set_resizable (artist_list_col, TRUE);
202 gtk_tree_view_column_set_resizable (format_list_col, TRUE); 245 gtk_tree_view_column_set_resizable (album_list_col, TRUE);
203 gtk_tree_view_column_set_resizable (keywords_list_col, TRUE); 246 gtk_tree_view_column_set_resizable (type_list_col, TRUE);
204 247 gtk_tree_view_column_set_resizable (format_list_col, TRUE);
205 /* Hide unedeed columns */ 248 gtk_tree_view_column_set_resizable (keywords_list_col, TRUE);
206 gtk_tree_view_column_set_visible (artist_list_col, FALSE); 249
207 gtk_tree_view_column_set_visible (album_list_col, FALSE); 250 /* Hide unedeed columns */
208 gtk_tree_view_column_set_visible (type_list_col, FALSE); 251 gtk_tree_view_column_set_visible (artist_list_col, FALSE);
209 gtk_tree_view_column_set_visible (keywords_list_col, FALSE); 252 gtk_tree_view_column_set_visible (album_list_col, FALSE);
210 253 gtk_tree_view_column_set_visible (type_list_col, FALSE);
211 /* Set a smart option */ 254 gtk_tree_view_column_set_visible (keywords_list_col, FALSE);
212 gtk_tree_view_get_hover_expand (GTK_TREE_VIEW (filelist)); 255
213 256 /* Set a smart option */
214 /* add columns to view */ 257 gtk_tree_view_get_hover_expand (GTK_TREE_VIEW (filelist));
215 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist), filename_list_col); 258
216 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist), title_list_col); 259 /* add columns to view */
217 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist), artist_list_col); 260 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist),
218 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist), album_list_col); 261 filename_list_col);
219 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist), type_list_col); 262 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist),
220 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist), format_list_col); 263 title_list_col);
221 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist), keywords_list_col); 264 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist),
222 265 artist_list_col);
223 /* Expand columns */ 266 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist),
224 gtk_tree_view_column_set_expand (filename_list_col, TRUE); 267 album_list_col);
225 gtk_tree_view_column_set_expand (artist_list_col, TRUE); 268 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist), type_list_col);
226 gtk_tree_view_column_set_expand (album_list_col, TRUE); 269 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist),
227 gtk_tree_view_column_set_expand (type_list_col, TRUE); 270 format_list_col);
228 gtk_tree_view_column_set_expand (format_list_col, TRUE); 271 gtk_tree_view_append_column (GTK_TREE_VIEW (filelist),
229 gtk_tree_view_column_set_expand (keywords_list_col, TRUE); 272 keywords_list_col);
230 273
231 /* Allow multiple selections */ 274 /* Expand columns */
232 GtkTreeSelection *filelist_selection = 275 gtk_tree_view_column_set_expand (filename_list_col, TRUE);
233 gtk_tree_view_get_selection (GTK_TREE_VIEW (filelist)); 276 gtk_tree_view_column_set_expand (artist_list_col, TRUE);
234 gtk_tree_selection_set_mode (filelist_selection, GTK_SELECTION_MULTIPLE); 277 gtk_tree_view_column_set_expand (album_list_col, TRUE);
235 278 gtk_tree_view_column_set_expand (type_list_col, TRUE);
236 279 gtk_tree_view_column_set_expand (format_list_col, TRUE);
237 280 gtk_tree_view_column_set_expand (keywords_list_col, TRUE);
238 AlbumList = NULL; 281
239 ArtistList = NULL; 282 /* Allow multiple selections */
240 283 GtkTreeSelection *filelist_selection =
241 Extractors = EXTRACTOR_loadDefaultLibraries (); 284 gtk_tree_view_get_selection (GTK_TREE_VIEW (filelist));
242 Extractors = EXTRACTOR_loadConfigLibraries (Extractors, "libextractor_filename"); 285 gtk_tree_selection_set_mode (filelist_selection,
286 GTK_SELECTION_MULTIPLE);
287
288
289
290 AlbumList = NULL;
291 ArtistList = NULL;
292
293 Extractors = EXTRACTOR_loadDefaultLibraries ();
294 Extractors =
295 EXTRACTOR_loadConfigLibraries (Extractors,
296 "libextractor_filename");
243 297
244/* Create the popup menu */ 298/* Create the popup menu */
245 filelist_popup = gtk_menu_new (); 299 filelist_popup = gtk_menu_new ();
246 GtkWidget *select_all_menu_item = 300 GtkWidget *select_all_menu_item =
247 gtk_menu_item_new_with_label (_("Select all files")); 301 gtk_menu_item_new_with_label (_("Select all files"));
248 GtkWidget *delete_menu_item = 302 GtkWidget *delete_menu_item =
249 gtk_menu_item_new_with_label (_("Remove selected files")); 303 gtk_menu_item_new_with_label (_("Remove selected files"));
250 gtk_menu_attach (GTK_MENU (filelist_popup), select_all_menu_item, 0, 1, 0, 304 gtk_menu_attach (GTK_MENU (filelist_popup), select_all_menu_item, 0,
251 1); 305 1, 0, 1);
252 gtk_menu_attach (GTK_MENU (filelist_popup), delete_menu_item, 0, 1, 1, 2); 306 gtk_menu_attach (GTK_MENU (filelist_popup), delete_menu_item, 0, 1, 1,
253 gtk_widget_show (select_all_menu_item); 307 2);
254 gtk_widget_show (delete_menu_item); 308 gtk_widget_show (select_all_menu_item);
255 gtk_signal_connect (GTK_OBJECT (filelist), "button-press-event", 309 gtk_widget_show (delete_menu_item);
256 GTK_SIGNAL_FUNC (popup_delete), (gpointer) NULL); 310 gtk_signal_connect (GTK_OBJECT (filelist), "button-press-event",
257 gtk_signal_connect (GTK_OBJECT (select_all_menu_item), "activate", 311 GTK_SIGNAL_FUNC (popup_delete), (gpointer) NULL);
258 GTK_SIGNAL_FUNC (select_all_files), (gpointer) TRUE); 312 gtk_signal_connect (GTK_OBJECT (select_all_menu_item), "activate",
259 gtk_signal_connect (GTK_OBJECT (delete_menu_item), "activate", 313 GTK_SIGNAL_FUNC (select_all_files),
260 GTK_SIGNAL_FUNC (remove_file_from_list), 314 (gpointer) TRUE);
261 (gpointer) NULL); 315 gtk_signal_connect (GTK_OBJECT (delete_menu_item), "activate",
262 316 GTK_SIGNAL_FUNC (remove_file_from_list),
263 /* 317 (gpointer) NULL);
264 * show the main window 318
265 */ 319 /*
266 gtk_widget_show (musicinsertdialog); 320 * show the main window
321 */
322 gtk_widget_show (musicinsertdialog);
267} 323}
268 324
269/** 325/**
@@ -275,99 +331,111 @@ EXTRACTOR_KeywordList *
275get_EXTRACTORKeywords (const EXTRACTOR_ExtractorList 331get_EXTRACTORKeywords (const EXTRACTOR_ExtractorList
276 * exList, const char *filename) 332 * exList, const char *filename)
277{ 333{
278 EXTRACTOR_KeywordList *keyList; 334 EXTRACTOR_KeywordList *keyList;
279 335
280 keyList = 336 keyList =
281 EXTRACTOR_getKeywords ((EXTRACTOR_ExtractorList *) exList, filename); 337 EXTRACTOR_getKeywords ((EXTRACTOR_ExtractorList *) exList,
282 keyList = 338 filename);
283 EXTRACTOR_removeDuplicateKeywords (keyList, 339 keyList =
284 EXTRACTOR_DUPLICATES_REMOVE_UNKNOWN); 340 EXTRACTOR_removeDuplicateKeywords (keyList,
285 keyList = EXTRACTOR_removeEmptyKeywords (keyList); 341 EXTRACTOR_DUPLICATES_REMOVE_UNKNOWN);
286 return keyList; 342 keyList = EXTRACTOR_removeEmptyKeywords (keyList);
343 return keyList;
287} 344}
288 345
289 346
290 347
291/** 348/**
292 * @brief Get an EXTRACTOR_KeywordList for a specified file 349 * @brief Get an EXTRACTOR_KeywordList for a specified file
293 * @param a pointer to the extractors used to get the keywords
294 * @param the name of the file to extract the keywords from 350 * @param the name of the file to extract the keywords from
295 */ 351 */
296void 352void
297set_File_Keywords (const gchar * filename) 353set_File_Keywords (const gchar * filename)
298{ 354{
299 char *keywords[7]; 355 char *keywords[7];
300 GtkTreeIter pIter; 356 GtkTreeIter pIter;
301 357
302 EXTRACTOR_KeywordList *KeywordList = 358 EXTRACTOR_KeywordList *KeywordList =
303 get_EXTRACTORKeywords (Extractors, filename); 359 get_EXTRACTORKeywords (Extractors, filename);
304 360
305 361
306 keywords[0] = (char *) EXTRACTOR_extractLast (EXTRACTOR_FILENAME, KeywordList); 362 keywords[0] =
307 363 (char *) EXTRACTOR_extractLast (EXTRACTOR_FILENAME,
308 keywords[1] = (char *) EXTRACTOR_extractLast (EXTRACTOR_FILENAME, KeywordList); 364 KeywordList);
309 365
310 keywords[2] = (char *) EXTRACTOR_extractLast (EXTRACTOR_TITLE, KeywordList); 366 keywords[1] =
311 367 (char *) EXTRACTOR_extractLast (EXTRACTOR_FILENAME,
312 keywords[3] = 368 KeywordList);
313 (char *) EXTRACTOR_extractLast (EXTRACTOR_ARTIST, KeywordList); 369
314 if (keywords[3] != '\0' 370 keywords[2] =
315 && (g_list_find_custom (ArtistList, keywords[3], (GCompareFunc) strcmp) == NULL)) 371 (char *) EXTRACTOR_extractLast (EXTRACTOR_TITLE, KeywordList);
316 { 372
317 ArtistList = g_list_append (ArtistList, STRDUP(keywords[3])); 373 keywords[3] =
318 gtk_combo_box_append_text (GTK_COMBO_BOX 374 (char *) EXTRACTOR_extractLast (EXTRACTOR_ARTIST,
319 (artistcombobox), keywords[3]); 375 KeywordList);
320 } 376 if (keywords[3] != '\0'
321 377 &&
322 keywords[4] = (char *) EXTRACTOR_extractLast (EXTRACTOR_ALBUM, KeywordList); 378 (g_list_find_custom
323 if (keywords[4] != '\0' 379 (ArtistList, keywords[3], (GCompareFunc) strcmp) == NULL))
324 && (g_list_find_custom (AlbumList, keywords[4], (GCompareFunc) strcmp)) == NULL) 380 {
325 { 381 ArtistList = g_list_append (ArtistList, STRDUP (keywords[3]));
326 AlbumList = g_list_append (AlbumList, STRDUP(keywords[4])); 382 gtk_combo_box_append_text (GTK_COMBO_BOX
327 gtk_combo_box_append_text (GTK_COMBO_BOX 383 (artistcombobox), keywords[3]);
328 (albumcombobox), keywords[4]); 384 }
329 } 385
330 386 keywords[4] =
331 keywords[5] = 387 (char *) EXTRACTOR_extractLast (EXTRACTOR_ALBUM, KeywordList);
332 (char *) EXTRACTOR_extractLast (EXTRACTOR_MIMETYPE, KeywordList); 388 if (keywords[4] != '\0'
333 if (keywords[5] != '\0') 389 &&
334 { 390 (g_list_find_custom
335 if ((g_list_find_custom (TypeList, keywords[5], (GCompareFunc) strcmp)) == NULL) 391 (AlbumList, keywords[4], (GCompareFunc) strcmp)) == NULL)
336 TypeList = g_list_append (TypeList, STRDUP(keywords[5])); 392 {
337 393 AlbumList = g_list_append (AlbumList, STRDUP (keywords[4]));
338 if (strcmp (keywords[5], "application/ogg") == 0) 394 gtk_combo_box_append_text (GTK_COMBO_BOX
339 gtk_combo_box_set_active (GTK_COMBO_BOX 395 (albumcombobox), keywords[4]);
340 (typecombobox), 396 }
341 FORMAT_OGG); 397
342 else if (strcmp (keywords[5], "audio/mpeg") == 0) 398 keywords[5] =
343 gtk_combo_box_set_active 399 (char *) EXTRACTOR_extractLast (EXTRACTOR_MIMETYPE,
344 (GTK_COMBO_BOX 400 KeywordList);
345 (typecombobox), FORMAT_MP3); 401 if (keywords[5] != '\0')
346 else if (strcmp (keywords[5], "application/x-wav") == 0) 402 {
347 gtk_combo_box_set_active 403 if ((g_list_find_custom
348 (GTK_COMBO_BOX 404 (TypeList, keywords[5], (GCompareFunc) strcmp)) == NULL)
349 (typecombobox), FORMAT_WAV); 405 TypeList =
350 else if (strcmp (keywords[5], "audio/vnd.rn-realaudio") == 0) 406 g_list_append (TypeList,
351 gtk_combo_box_set_active 407 STRDUP (keywords[5]));
352 (GTK_COMBO_BOX 408
353 (typecombobox), FORMAT_REAL); 409 if (strcmp (keywords[5], "application/ogg") == 0)
354 } 410 gtk_combo_box_set_active (GTK_COMBO_BOX
355 else 411 (typecombobox), FORMAT_OGG);
356 { 412 else if (strcmp (keywords[5], "audio/mpeg") == 0)
357 TypeList = g_list_append (TypeList, STRDUP("unspecified")); 413 gtk_combo_box_set_active
358 } 414 (GTK_COMBO_BOX (typecombobox), FORMAT_MP3);
359 415 else if (strcmp (keywords[5], "application/x-wav") == 0)
360 keywords[6] = 416 gtk_combo_box_set_active
361 (char *) EXTRACTOR_extractLast (EXTRACTOR_FORMAT, KeywordList); 417 (GTK_COMBO_BOX (typecombobox), FORMAT_WAV);
362 418 else if (strcmp (keywords[5], "audio/vnd.rn-realaudio") == 0)
363 gtk_list_store_append (filelist_store, &pIter); 419 gtk_combo_box_set_active
364 gtk_list_store_set (filelist_store, &pIter, REAL_FILENAME_COL, keywords[0], 420 (GTK_COMBO_BOX (typecombobox), FORMAT_REAL);
365 FILENAME_COL, keywords[1], TITLE_COL, keywords[2], 421 }
366 ARTIST_COL, keywords[3], ALBUM_COL, keywords[4], 422 else
367 TYPE_COL, keywords[5], FORMAT_COL, keywords[6], 423 {
368 KEYWORDS_COL, "", -1); 424 TypeList = g_list_append (TypeList, STRDUP ("unspecified"));
369 EXTRACTOR_freeKeywords (KeywordList); 425 }
370 return; 426
427 keywords[6] =
428 (char *) EXTRACTOR_extractLast (EXTRACTOR_FORMAT,
429 KeywordList);
430
431 gtk_list_store_append (filelist_store, &pIter);
432 gtk_list_store_set (filelist_store, &pIter, REAL_FILENAME_COL,
433 keywords[0], FILENAME_COL, keywords[1], TITLE_COL,
434 keywords[2], ARTIST_COL, keywords[3], ALBUM_COL,
435 keywords[4], TYPE_COL, keywords[5], FORMAT_COL,
436 keywords[6], KEYWORDS_COL, "", -1);
437 EXTRACTOR_freeKeywords (KeywordList);
438 return;
371} 439}
372 440
373/** 441/**
@@ -377,31 +445,28 @@ void
377activateComboBoxes () 445activateComboBoxes ()
378{ 446{
379 447
380 if (gtk_combo_box_get_active (GTK_COMBO_BOX (albumcombobox)) < 0 448 if (gtk_combo_box_get_active (GTK_COMBO_BOX (albumcombobox)) < 0
381 && 449 &&
382 gtk_tree_model_iter_n_children (gtk_combo_box_get_model 450 gtk_tree_model_iter_n_children (gtk_combo_box_get_model
383 (GTK_COMBO_BOX (albumcombobox)), 451 (GTK_COMBO_BOX (albumcombobox)),
384 NULL) != 0) 452 NULL) != 0)
385 gtk_combo_box_set_active (GTK_COMBO_BOX 453 gtk_combo_box_set_active (GTK_COMBO_BOX (albumcombobox), 0);
386 (albumcombobox), 0); 454
387 455 if (gtk_combo_box_get_active (GTK_COMBO_BOX (artistcombobox)) < 0
388 if (gtk_combo_box_get_active (GTK_COMBO_BOX (artistcombobox)) < 0 456 &&
389 && 457 gtk_tree_model_iter_n_children (gtk_combo_box_get_model
390 gtk_tree_model_iter_n_children (gtk_combo_box_get_model 458 (GTK_COMBO_BOX (artistcombobox)),
391 (GTK_COMBO_BOX (artistcombobox)), 459 NULL) != 0)
392 NULL) != 0) 460 gtk_combo_box_set_active (GTK_COMBO_BOX (artistcombobox), 0);
393 gtk_combo_box_set_active (GTK_COMBO_BOX 461
394 (artistcombobox), 0); 462 if (gtk_combo_box_get_active (GTK_COMBO_BOX (typecombobox)) < 0
395 463 &&
396 if (gtk_combo_box_get_active (GTK_COMBO_BOX (typecombobox)) < 0 464 gtk_tree_model_iter_n_children (gtk_combo_box_get_model
397 && 465 (GTK_COMBO_BOX (typecombobox)),
398 gtk_tree_model_iter_n_children (gtk_combo_box_get_model 466 NULL) != 0)
399 (GTK_COMBO_BOX (typecombobox)), 467 gtk_combo_box_set_active (GTK_COMBO_BOX (typecombobox), 0);
400 NULL) != 0) 468
401 gtk_combo_box_set_active (GTK_COMBO_BOX 469 return;
402 (typecombobox), 0);
403
404 return;
405} 470}
406 471
407/** 472/**
@@ -410,35 +475,207 @@ activateComboBoxes ()
410void 475void
411updateColumns () 476updateColumns ()
412{ 477{
413 if (g_list_length (ArtistList) > 1) 478 if (g_list_length (ArtistList) > 1)
414 gtk_tree_view_column_set_visible (type_list_col, TRUE); 479 gtk_tree_view_column_set_visible (type_list_col, TRUE);
415 else 480 else
416 gtk_tree_view_column_set_visible (type_list_col, FALSE); 481 gtk_tree_view_column_set_visible (type_list_col, FALSE);
417 482
418 if (g_list_length (AlbumList) > 1) 483 if (g_list_length (AlbumList) > 1)
419 gtk_tree_view_column_set_visible (type_list_col, TRUE); 484 gtk_tree_view_column_set_visible (type_list_col, TRUE);
420 else 485 else
421 gtk_tree_view_column_set_visible (type_list_col, FALSE); 486 gtk_tree_view_column_set_visible (type_list_col, FALSE);
422 487
423 if (g_list_length (TypeList) > 1) 488 if (g_list_length (TypeList) > 1)
424 gtk_tree_view_column_set_visible (type_list_col, TRUE); 489 gtk_tree_view_column_set_visible (type_list_col, TRUE);
425 else 490 else
426 gtk_tree_view_column_set_visible (type_list_col, FALSE); 491 gtk_tree_view_column_set_visible (type_list_col, FALSE);
427 492
428 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (filelist_store), 493 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE
429 FILENAME_COL, GTK_SORT_ASCENDING); 494 (filelist_store), FILENAME_COL,
495 GTK_SORT_ASCENDING);
430} 496}
431 497
432/** 498gboolean
433 * @brief Get an EXTRACTOR_KeywordList for a specified file 499insertfiles ()
434 * @param a pointer to the extractors used to get the keywords
435 * @param the name of the file to extract the keywords from
436 *
437int inv_strcomp (gconstpointer a, gconstpointer b)
438{ 500{
439 return !strcmp ((char *)a, (char *)b); 501 struct ECRS_MetaData *dirmetadata;
502 struct ECRS_MetaData *tempmetadata;
503 GArray *filesmetadatas, *files;
504 gchar *temptext;
505 gchar **dirkeywords;
506 gchararray *tempkeywords;
507 gchar **tempmetas, *dirmetas[8];
508 gchar *separator = ";";
509 int i, n;
510 guint useforallflags;
511 GtkWidget *keywordsentry;
512 GtkTreeIter fileiter;
513 GtkToggleButton *artisttogglebutton;
514 GtkToggleButton *albumtogglebutton;
515 GtkToggleButton *keywordstogglebutton;
516 GtkToggleButton *commentstogglebutton;
517
518 /* Test if files are present */
519 if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (filelist_store),
520 &fileiter))
521 {
522 gchar *error_message =
523 STRDUP (_
524 ("No files to insert ! Please add files to the list before validating."));
525 GtkWidget *message_dialog =
526 gtk_message_dialog_new (GTK_WINDOW
527 (musicinsertdialog),
528 GTK_DIALOG_DESTROY_WITH_PARENT,
529 GTK_MESSAGE_ERROR,
530 GTK_BUTTONS_CLOSE,
531 "%s", error_message);
532 gtk_dialog_run (GTK_DIALOG (message_dialog));
533 gtk_widget_destroy (message_dialog);
534 FREE (error_message);
535 return FALSE;
536 }
537
538
539 /* Manage album metadatas */
540
541 dirmetadata = ECRS_createMetaData ();
542
543 dirmetas[0] =
544 gtk_combo_box_get_active_text (GTK_COMBO_BOX
545 (artistcombobox));
546 if (dirmetas[0])
547 ECRS_addToMetaData (dirmetadata, EXTRACTOR_ARTIST, dirmetas[0]);
548
549 dirmetas[1] =
550 gtk_combo_box_get_active_text (GTK_COMBO_BOX (albumcombobox));
551 if (dirmetas[1])
552 ECRS_addToMetaData (dirmetadata, EXTRACTOR_ALBUM, dirmetas[1]);
553
554 keywordsentry =
555 glade_xml_get_widget (musicinsertXML, "keywordsentry");
556 temptext = (gchar *) gtk_entry_get_text (GTK_ENTRY (keywordsentry));
557 dirkeywords = NULL;
558 if (temptext)
559 dirkeywords = g_strsplit (temptext, separator, 255);
560 n = 0;
561 while (dirkeywords[n])
562 {
563 ECRS_addToMetaData (dirmetadata, EXTRACTOR_KEYWORDS, dirkeywords[n]);
564 n++;
565 }
566 /* Add a standard keyword to allow finding all available music albums
567 * on AFS in one search */
568 ECRS_addToMetaData (dirmetadata,
569 EXTRACTOR_KEYWORDS,
570 "music album");
571
572
573 /* Manage files metadatas */
574 artisttogglebutton = GTK_TOGGLE_BUTTON(glade_xml_get_widget (musicinsertXML, "artisttogglebutton"));
575 albumtogglebutton = GTK_TOGGLE_BUTTON(glade_xml_get_widget (musicinsertXML, "albumtogglebutton"));
576 keywordstogglebutton = GTK_TOGGLE_BUTTON(glade_xml_get_widget (musicinsertXML, "keywordstogglebutton"));
577 commentstogglebutton = GTK_TOGGLE_BUTTON(glade_xml_get_widget (musicinsertXML, "commentstogglebutton"));
578
579 useforallflags = 0;
580 useforallflags = gtk_toggle_button_get_active (artisttogglebutton) << 0;
581 useforallflags = gtk_toggle_button_get_active (albumtogglebutton) << 1;
582 useforallflags = gtk_toggle_button_get_active (keywordstogglebutton) << 2;
583 useforallflags = gtk_toggle_button_get_active (commentstogglebutton) << 3;
584
585 filesmetadatas = g_array_sized_new (FALSE, FALSE, sizeof (struct ECRS_MetaData *), 20);
586 files = g_array_sized_new (FALSE, FALSE, sizeof (gchar *), 20);
587 i = 0;
588 do
589 {
590 tempmetadata = ECRS_createMetaData();
591 tempmetas = malloc (sizeof(gchar *) * 8);
592 g_array_append_val (filesmetadatas, tempmetadata);
593 gtk_tree_model_get (GTK_TREE_MODEL (filelist_store),
594 &fileiter,
595 REAL_FILENAME_COL, &tempmetas[0],
596 FILENAME_COL, &tempmetas[1],
597 TITLE_COL, &tempmetas[2],
598 ARTIST_COL, &tempmetas[3],
599 ALBUM_COL, &tempmetas[4],
600 TYPE_COL, &tempmetas[5],
601 FORMAT_COL, &tempmetas[6],
602 KEYWORDS_COL, &tempmetas[7],
603 -1);
604 g_array_append_val (files, tempmetas[0]);
605
606
607 if (tempmetas[1])
608 ECRS_addToMetaData (tempmetadata, EXTRACTOR_FILENAME,
609 tempmetas[1]);
610 if ((useforallflags & 0x1) && dirmetas[0])
611 ECRS_addToMetaData (tempmetadata, EXTRACTOR_FILENAME,
612 dirmetas[0]);
613 else if (!(useforallflags & 0x1) && tempmetas[2])
614 ECRS_addToMetaData (tempmetadata, EXTRACTOR_TITLE,
615 tempmetas[2]);
616 if ((useforallflags & 0x2) && dirmetas[1])
617 ECRS_addToMetaData (tempmetadata, EXTRACTOR_ARTIST,
618 dirmetas[1]);
619 else if (!(useforallflags & 0x2)&& tempmetas[3])
620 ECRS_addToMetaData (tempmetadata, EXTRACTOR_FILENAME,
621 tempmetas[3]);
622 if (tempmetas[4])
623 ECRS_addToMetaData (tempmetadata, EXTRACTOR_ALBUM,
624 tempmetas[4]);
625 if (tempmetas[5])
626 ECRS_addToMetaData (tempmetadata, EXTRACTOR_MIMETYPE,
627 tempmetas[5]);
628 if (tempmetas[6])
629 ECRS_addToMetaData (tempmetadata, EXTRACTOR_FORMAT,
630 tempmetas[6]);
631
632 if (!(useforallflags & 0x1))
633 {
634 n = 0;
635 while (dirkeywords[n])
636 {
637 ECRS_addToMetaData (tempmetadata, EXTRACTOR_KEYWORDS, dirkeywords[n]);
638 n++;
639 }
640 }
641 else if (tempmetas[7])
642 {
643 tempkeywords = g_strsplit (temptext, separator, 255);
644 n = 0;
645 while (tempkeywords[n])
646 {
647 ECRS_addToMetaData (tempmetadata,
648 EXTRACTOR_KEYWORDS,
649 tempkeywords[n]);
650 n++;
651 }
652 g_strfreev (tempkeywords);
653 /* Add a standard keyword to allow finding all available music files
654 * on AFS in one search */
655 ECRS_addToMetaData (tempmetadata,
656 EXTRACTOR_KEYWORDS,
657 "music");
658 }
659
660 FREE (tempmetas);
661 i++;
662 }
663 while (gtk_tree_model_iter_next (GTK_TREE_MODEL(filelist_store), &fileiter));
664
665 g_strfreev (dirkeywords);
666
667 /* TODO : take care of the 'Insert as an album'/'Insert files separately' options
668 * and create or not a gnunet directory containing the files
669 *
670 * TODO : Create a file and album description from metadatas - an idea :
671 * Artist: Song (Album) - Type and Format # for files
672 * Artist: Album - Type and number of the files # or album
673 *
674 * TODO : really call FSUI_upload() to insert these files */
675
676 return TRUE;
440} 677}
441*/ 678
442/* Callback functions */ 679/* Callback functions */
443 680
444/** 681/**
@@ -447,7 +684,9 @@ int inv_strcomp (gconstpointer a, gconstpointer b)
447void 684void
448on_musicinsertdialog_destroy (GtkObject * object, gpointer user_data) 685on_musicinsertdialog_destroy (GtkObject * object, gpointer user_data)
449{ 686{
450 gtk_main_quit (); 687 EXTRACTOR_removeAll (Extractors);
688 UNREF (musicinsertXML);
689 musicinsertXML = NULL;
451} 690}
452 691
453/** 692/**
@@ -456,7 +695,8 @@ on_musicinsertdialog_destroy (GtkObject * object, gpointer user_data)
456void 695void
457on_cancelbutton_clicked (GtkButton * button, gpointer user_data) 696on_cancelbutton_clicked (GtkButton * button, gpointer user_data)
458{ 697{
459 gtk_main_quit (); 698 gtk_widget_destroy (musicinsertdialog);
699 return;
460} 700}
461 701
462/** 702/**
@@ -465,7 +705,9 @@ on_cancelbutton_clicked (GtkButton * button, gpointer user_data)
465void 705void
466on_okbutton_clicked (GtkButton * button, gpointer user_data) 706on_okbutton_clicked (GtkButton * button, gpointer user_data)
467{ 707{
468 return; 708 if (insertfiles ())
709 gtk_widget_destroy (musicinsertdialog);
710 return ;
469} 711}
470 712
471/** 713/**
@@ -474,95 +716,112 @@ on_okbutton_clicked (GtkButton * button, gpointer user_data)
474void 716void
475on_diraddbutton_clicked (GtkButton * button, gpointer user_data) 717on_diraddbutton_clicked (GtkButton * button, gpointer user_data)
476{ 718{
477 gchar *path; 719 gchar *path;
478GtkWidget *musicinsertdialog = glade_xml_get_widget(musicinsertXML, "musicinsertdialog"); 720 GtkWidget *musicinsertdialog =
479 /* choose the directory to list */ 721 glade_xml_get_widget (musicinsertXML, "musicinsertdialog");
480 GtkWidget *filechooser = 722 /* choose the directory to list */
481 gtk_file_chooser_dialog_new (_("Choose the directory to insert..."), 723 GtkWidget *filechooser =
482 GTK_WINDOW (musicinsertdialog), 724 gtk_file_chooser_dialog_new (_
483 GTK_FILE_CHOOSER_ACTION_OPEN, 725 ("Choose the directory to insert..."),
484 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 726GTK_WINDOW (musicinsertdialog),
485 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, 727GTK_FILE_CHOOSER_ACTION_OPEN,
486 NULL); 728GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
487 gtk_file_chooser_set_action (GTK_FILE_CHOOSER (filechooser), 729GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
488 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); 730NULL);
489 gtk_window_set_modal (GTK_WINDOW (filechooser), TRUE); 731 gtk_file_chooser_set_action (GTK_FILE_CHOOSER (filechooser),
490 switch (gtk_dialog_run (GTK_DIALOG (filechooser))) 732 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
491 { 733 gtk_window_set_modal (GTK_WINDOW (filechooser), TRUE);
492 case GTK_RESPONSE_ACCEPT: 734 switch (gtk_dialog_run (GTK_DIALOG (filechooser)))
493 /* get the path */
494 path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechooser));
495 gtk_widget_destroy (filechooser);
496 break;
497 default:
498 gtk_widget_destroy (filechooser);
499 return;
500 }
501
502 /* list directory and fill the fields */
503 GDir *directory;
504 GString *long_filename;
505 GError *dir_opening_error;
506 GSList *file_error_list = NULL;
507 gchar *filename;
508 if ((directory = g_dir_open (path, 0, &dir_opening_error)))
509 {
510 while ((filename = (gchar *) g_dir_read_name (directory)))
511 { 735 {
512 long_filename = g_string_new (path); 736 case GTK_RESPONSE_ACCEPT:
513 g_string_append_c (long_filename, DIR_SEPARATOR); 737 /* get the path */
514 g_string_append (long_filename, filename); 738 path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER
515 if (!(ACCESS (long_filename->str, F_OK | R_OK))) 739 (filechooser));
516 { 740 gtk_widget_destroy (filechooser);
517 if (!(g_file_test (long_filename->str, G_FILE_TEST_IS_DIR))) 741 break;
518 set_File_Keywords (long_filename->str); 742 default:
519 } 743 gtk_widget_destroy (filechooser);
520 else 744 return;
521 {
522 file_error_list = g_slist_append (file_error_list, filename);
523 g_string_free (long_filename, TRUE);
524 }
525 } 745 }
526 746
527 g_free (path); 747 /* list directory and fill the fields */
528 activateComboBoxes (); 748 GDir *directory;
529 updateColumns (); 749 GString *long_filename;
530 if (g_slist_length (file_error_list) > 0) 750 GError *dir_opening_error;
751 GSList *file_error_list = NULL;
752 gchar *filename;
753 if ((directory = g_dir_open (path, 0, &dir_opening_error)))
531 { 754 {
532 GString *file_error_message = 755 while ((filename = (gchar *) g_dir_read_name (directory)))
533 g_string_new (_ 756 {
534 ("The following files won't be added for I could not read them :")); 757 long_filename = g_string_new (path);
535 while ((file_error_list = g_slist_next (file_error_list))) 758 g_string_append_c (long_filename, DIR_SEPARATOR);
536 { 759 g_string_append (long_filename, filename);
537 g_string_append_c (file_error_message, '\n'); 760 if (!(ACCESS (long_filename->str, F_OK | R_OK)))
538 g_string_append (file_error_message, 761 {
539 (gchar *) file_error_list->data); 762 if (!
540 } 763 (g_file_test
541 GtkWidget *file_error_dialog = 764 (long_filename->str,
542 gtk_message_dialog_new (GTK_WINDOW (musicinsertdialog), 765 G_FILE_TEST_IS_DIR)))
543 GTK_DIALOG_DESTROY_WITH_PARENT, 766 set_File_Keywords (long_filename->
544 GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, 767 str);
545 file_error_message->str); 768 }
546 gtk_dialog_run (GTK_DIALOG (file_error_dialog)); 769 else
547 gtk_widget_destroy (file_error_dialog); 770 {
548 g_string_free (file_error_message, TRUE); 771 file_error_list =
772 g_slist_append (file_error_list,
773 filename);
774 g_string_free (long_filename, TRUE);
775 }
776 }
777
778 g_free (path);
779 activateComboBoxes ();
780 updateColumns ();
781 if (g_slist_length (file_error_list) > 0)
782 {
783 GString *file_error_message =
784 g_string_new (_
785 ("The following files won't be added for I could not read them :"));
786 while ((file_error_list =
787 g_slist_next (file_error_list)))
788 {
789 g_string_append_c (file_error_message, '\n');
790 g_string_append (file_error_message,
791 (gchar *) file_error_list->
792 data);
793 }
794 GtkWidget *file_error_dialog =
795 gtk_message_dialog_new (GTK_WINDOW
796 (musicinsertdialog),
797 GTK_DIALOG_DESTROY_WITH_PARENT,
798 GTK_MESSAGE_ERROR,
799 GTK_BUTTONS_CLOSE,
800 file_error_message->
801 str);
802 gtk_dialog_run (GTK_DIALOG (file_error_dialog));
803 gtk_widget_destroy (file_error_dialog);
804 g_string_free (file_error_message, TRUE);
805 }
806 g_dir_close (directory);
807 }
808 else
809 {
810 gchar *error_message =
811 STRDUP (_("Could not open the directory :\n"));
812 GtkWidget *message_dialog =
813 gtk_message_dialog_new (GTK_WINDOW
814 (musicinsertdialog),
815 GTK_DIALOG_DESTROY_WITH_PARENT,
816 GTK_MESSAGE_ERROR,
817 GTK_BUTTONS_CLOSE,
818 "%s%s", error_message,
819 dir_opening_error->message);
820 gtk_dialog_run (GTK_DIALOG (message_dialog));
821 gtk_widget_destroy (message_dialog);
822 g_free (error_message);
823 g_error_free (dir_opening_error);
549 } 824 }
550 g_dir_close (directory);
551 }
552 else
553 {
554 gchar *error_message = STRDUP (_("Could not open the directory :\n"));
555 GtkWidget *message_dialog =
556 gtk_message_dialog_new (GTK_WINDOW (musicinsertdialog),
557 GTK_DIALOG_DESTROY_WITH_PARENT,
558 GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
559 "%s%s", error_message,
560 dir_opening_error->message);
561 gtk_dialog_run (GTK_DIALOG (message_dialog));
562 gtk_widget_destroy (message_dialog);
563 g_free (error_message);
564 g_error_free (dir_opening_error);
565 }
566} 825}
567 826
568/** 827/**
@@ -571,73 +830,82 @@ GtkWidget *musicinsertdialog = glade_xml_get_widget(musicinsertXML, "musicinsert
571void 830void
572on_fileaddbutton_clicked (GtkButton * button, gpointer user_data) 831on_fileaddbutton_clicked (GtkButton * button, gpointer user_data)
573{ 832{
574 GSList *pathlist; 833 GSList *pathlist;
575GtkWidget *musicinsertdialog = glade_xml_get_widget(musicinsertXML, "musicinsertdialog"); 834 GtkWidget *musicinsertdialog =
576 /* choose the file to add */ 835 glade_xml_get_widget (musicinsertXML, "musicinsertdialog");
577 GtkWidget *filechooser = 836 /* choose the file to add */
578 gtk_file_chooser_dialog_new (_("Choose files to insert..."), 837 GtkWidget *filechooser =
579 GTK_WINDOW (musicinsertdialog), 838 gtk_file_chooser_dialog_new (_("Choose files to insert..."),
580 GTK_FILE_CHOOSER_ACTION_OPEN, 839 GTK_WINDOW (musicinsertdialog),
581 GTK_STOCK_CANCEL, 840 GTK_FILE_CHOOSER_ACTION_OPEN,
582 GTK_RESPONSE_CANCEL, 841 GTK_STOCK_CANCEL,
583 GTK_STOCK_OPEN, 842 GTK_RESPONSE_CANCEL,
584 GTK_RESPONSE_ACCEPT, NULL); 843 GTK_STOCK_OPEN,
585 gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (filechooser), TRUE); 844 GTK_RESPONSE_ACCEPT, NULL);
586 gtk_window_set_modal (GTK_WINDOW (filechooser), TRUE); 845 gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (filechooser),
587 846 TRUE);
588 if (gtk_dialog_run (GTK_DIALOG (filechooser)) == GTK_RESPONSE_ACCEPT) 847 gtk_window_set_modal (GTK_WINDOW (filechooser), TRUE);
589 { 848
590 GSList *file_error_list = NULL; 849 if (gtk_dialog_run (GTK_DIALOG (filechooser)) == GTK_RESPONSE_ACCEPT)
591 /* get the path */
592 pathlist =
593 gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (filechooser));
594 gtk_widget_destroy (filechooser);
595 do
596 { 850 {
597 if (!(ACCESS (pathlist->data, F_OK | R_OK))) 851 GSList *file_error_list = NULL;
598 { 852 /* get the path */
599 set_File_Keywords (pathlist->data); 853 pathlist =
600 } 854 gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER
601 else 855 (filechooser));
602 { 856 gtk_widget_destroy (filechooser);
603 file_error_list = 857 do
604 g_slist_append (file_error_list, pathlist->data); 858 {
605 } 859 if (!(ACCESS (pathlist->data, F_OK | R_OK)))
860 {
861 set_File_Keywords (pathlist->data);
862 }
863 else
864 {
865 file_error_list =
866 g_slist_append (file_error_list,
867 pathlist->data);
868 }
869 }
870 while ((pathlist = g_slist_next (pathlist)));
871 g_slist_free (pathlist);
872
873 activateComboBoxes ();
874 updateColumns ();
875
876 if (g_slist_length (file_error_list) > 0)
877 {
878 GString *file_error_message =
879 g_string_new (_
880 ("The following files won't be added for I could not read them :"));
881 while ((file_error_list =
882 g_slist_next (file_error_list)))
883 {
884 g_string_append_c (file_error_message, '\n');
885 g_string_append (file_error_message,
886 (gchar *) file_error_list->
887 data);
888 }
889
890 GtkWidget *file_error_dialog =
891 gtk_message_dialog_new (GTK_WINDOW
892 (musicinsertdialog),
893 GTK_DIALOG_DESTROY_WITH_PARENT,
894 GTK_MESSAGE_ERROR,
895 GTK_BUTTONS_CLOSE,
896 file_error_message->
897 str);
898 gtk_dialog_run (GTK_DIALOG (file_error_dialog));
899 g_string_free (file_error_message, TRUE);
900 gtk_widget_destroy (file_error_dialog);
901 }
902 return;
606 } 903 }
607 while ((pathlist = g_slist_next (pathlist))); 904 else
608 g_slist_free (pathlist);
609
610 activateComboBoxes ();
611 updateColumns ();
612
613 if (g_slist_length (file_error_list) > 0)
614 { 905 {
615 GString *file_error_message = 906 gtk_widget_destroy (filechooser);
616 g_string_new (_ 907 return;
617 ("The following files won't be added for I could not read them :"));
618 while ((file_error_list = g_slist_next (file_error_list)))
619 {
620 g_string_append_c (file_error_message, '\n');
621 g_string_append (file_error_message,
622 (gchar *) file_error_list->data);
623 }
624
625 GtkWidget *file_error_dialog =
626 gtk_message_dialog_new (GTK_WINDOW (musicinsertdialog),
627 GTK_DIALOG_DESTROY_WITH_PARENT,
628 GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
629 file_error_message->str);
630 gtk_dialog_run (GTK_DIALOG (file_error_dialog));
631 g_string_free (file_error_message, TRUE);
632 gtk_widget_destroy (file_error_dialog);
633 } 908 }
634 return;
635 }
636 else
637 {
638 gtk_widget_destroy (filechooser);
639 return;
640 }
641} 909}
642 910
643/** 911/**
@@ -646,8 +914,10 @@ GtkWidget *musicinsertdialog = glade_xml_get_widget(musicinsertXML, "musicinsert
646void 914void
647on_radioinsert_toggled (GtkRadioButton * radiobutton, gpointer user_data) 915on_radioinsert_toggled (GtkRadioButton * radiobutton, gpointer user_data)
648{ 916{
649 gtk_widget_set_sensitive (GTK_WIDGET 917 gtk_widget_set_sensitive (GTK_WIDGET
650 (glade_xml_get_widget (musicinsertXML, "copyfilesbutton")), FALSE); 918 (glade_xml_get_widget
919 (musicinsertXML, "copyfilesbutton")),
920 FALSE);
651} 921}
652 922
653/** 923/**
@@ -656,76 +926,75 @@ on_radioinsert_toggled (GtkRadioButton * radiobutton, gpointer user_data)
656void 926void
657on_radioindex_toggled (GtkRadioButton * radiobutton, gpointer user_data) 927on_radioindex_toggled (GtkRadioButton * radiobutton, gpointer user_data)
658{ 928{
659 gtk_widget_set_sensitive 929 gtk_widget_set_sensitive
660 (GTK_WIDGET (glade_xml_get_widget (musicinsertXML, "copyfilesbutton")), TRUE); 930 (GTK_WIDGET
931 (glade_xml_get_widget (musicinsertXML, "copyfilesbutton")),
932 TRUE);
661} 933}
662 934
663/** 935/**
664 * @brief Hide or show the album column when needed 936 * @brief Hide or show the album column when needed
665 */ 937 */
666void 938void on_albumtogglebutton_toggled
667 on_albumtogglebutton_toggled 939 (GtkToggleButton * togglebutton, gpointer user_data)
668 (GtkToggleButton * togglebutton, gpointer user_data)
669{ 940{
670 if (gtk_toggle_button_get_active (togglebutton)) 941 if (gtk_toggle_button_get_active (togglebutton))
671 gtk_tree_view_column_set_visible (album_list_col, FALSE); 942 gtk_tree_view_column_set_visible (album_list_col, FALSE);
672 else 943 else
673 gtk_tree_view_column_set_visible (album_list_col, TRUE); 944 gtk_tree_view_column_set_visible (album_list_col, TRUE);
674} 945}
675 946
676/** 947/**
677 * @brief Hide or show the artist column when needed 948 * @brief Hide or show the artist column when needed
678 */ 949 */
679void 950void on_artisttogglebutton_toggled
680 on_artisttogglebutton_toggled 951 (GtkToggleButton * togglebutton, gpointer user_data)
681 (GtkToggleButton * togglebutton, gpointer user_data)
682{ 952{
683 if (gtk_toggle_button_get_active (togglebutton)) 953 if (gtk_toggle_button_get_active (togglebutton))
684 gtk_tree_view_column_set_visible (artist_list_col, FALSE); 954 gtk_tree_view_column_set_visible (artist_list_col, FALSE);
685 else 955 else
686 gtk_tree_view_column_set_visible (artist_list_col, TRUE); 956 gtk_tree_view_column_set_visible (artist_list_col, TRUE);
687} 957}
688 958
689/** 959/**
690 * @brief Hide or show the keywords column when needed 960 * @brief Hide or show the keywords column when needed
691 */ 961 */
692void 962void on_keywordstogglebutton_toggled
693 on_keywordstogglebutton_toggled 963 (GtkToggleButton * togglebutton, gpointer user_data)
694 (GtkToggleButton * togglebutton, gpointer user_data)
695{ 964{
696 if (gtk_toggle_button_get_active (togglebutton)) 965 if (gtk_toggle_button_get_active (togglebutton))
697 gtk_tree_view_column_set_visible (keywords_list_col, FALSE); 966 gtk_tree_view_column_set_visible (keywords_list_col, FALSE);
698 else 967 else
699 gtk_tree_view_column_set_visible (keywords_list_col, TRUE); 968 gtk_tree_view_column_set_visible (keywords_list_col, TRUE);
700} 969}
701 970
702/** 971/**
703 * @brief Make to user able to modify the per-file data 972 * @brief Make to user able to modify the per-file data
704 */ 973 */
705void 974void on_renderer_edited
706 on_renderer_edited 975 (GtkCellRendererText *
707 (GtkCellRendererText * 976 cellrenderertext,
708 cellrenderertext, 977 gchar * path_string, gchar * new_text, gpointer user_data)
709 gchar * path_string, gchar * new_text, gpointer user_data)
710{ 978{
711 GtkTreePath *path = gtk_tree_path_new_from_string (path_string); 979 GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
712 GtkTreeIter iter; 980 GtkTreeIter iter;
713 gtk_tree_model_get_iter (GTK_TREE_MODEL (filelist_store), &iter, path); 981 gtk_tree_model_get_iter (GTK_TREE_MODEL (filelist_store), &iter,
714 gtk_list_store_set (filelist_store, &iter, 982 path);
715 (gint) * ((gint *) user_data), new_text, -1); 983 gtk_list_store_set (filelist_store, &iter,
716 gtk_tree_path_free (path); 984 (gint) * ((gint *) user_data), new_text, -1);
985 gtk_tree_path_free (path);
717} 986}
718 987
719gboolean 988gboolean
720popup_delete (GtkWidget * widget, GdkEventButton * event, gpointer user_data) 989popup_delete (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
721{ 990{
722 if ((event->type == GDK_BUTTON_PRESS) && (event->button == 3)) 991 if ((event->type == GDK_BUTTON_PRESS) && (event->button == 3))
723 { 992 {
724 gtk_menu_popup (GTK_MENU (filelist_popup), NULL, NULL, NULL, NULL, 993 gtk_menu_popup (GTK_MENU (filelist_popup), NULL, NULL, NULL,
725 event->button, event->time); 994 NULL, event->button, event->time);
726 return TRUE; 995 return TRUE;
727 } 996 }
728 return FALSE; 997 return FALSE;
729} 998}
730 999
731/** 1000/**
@@ -734,39 +1003,43 @@ popup_delete (GtkWidget * widget, GdkEventButton * event, gpointer user_data)
734void 1003void
735remove_file_from_list (gpointer user_data) 1004remove_file_from_list (gpointer user_data)
736{ 1005{
737 GtkTreeIter iter; 1006 GtkTreeIter iter;
738 GtkWidget *filelist = glade_xml_get_widget (musicinsertXML, "filelist"); 1007 GtkWidget *filelist =
739 GtkTreeSelection *selection = 1008 glade_xml_get_widget (musicinsertXML, "filelist");
740 gtk_tree_view_get_selection (GTK_TREE_VIEW (filelist)); 1009 GtkTreeSelection *selection =
741 GList *selected_paths = gtk_tree_selection_get_selected_rows (selection, 1010 gtk_tree_view_get_selection (GTK_TREE_VIEW (filelist));
742 (GtkTreeModel 1011 GList *selected_paths =
743 **) & 1012 gtk_tree_selection_get_selected_rows (selection,
744 filelist_store); 1013 (GtkTreeModel **)
745 GList *selected_refs = NULL; 1014 &filelist_store);
746 GtkTreePath *path; 1015 GList *selected_refs = NULL;
1016 GtkTreePath *path;
747/* Get static references from paths */ 1017/* Get static references from paths */
748 while (selected_paths) 1018 while (selected_paths)
749 { 1019 {
750 selected_refs = g_list_append (selected_refs, 1020 selected_refs = g_list_append (selected_refs,
751 gtk_tree_row_reference_new 1021 gtk_tree_row_reference_new
752 (GTK_TREE_MODEL (filelist_store), 1022 (GTK_TREE_MODEL
753 selected_paths->data)); 1023 (filelist_store),
754 selected_paths = g_list_next (selected_paths); 1024 selected_paths->data));
755 } 1025 selected_paths = g_list_next (selected_paths);
756 g_list_foreach (selected_paths, (GFunc) gtk_tree_path_free, NULL); 1026 }
757 g_list_free (selected_paths); 1027 g_list_foreach (selected_paths, (GFunc) gtk_tree_path_free, NULL);
1028 g_list_free (selected_paths);
758 1029
759/* Remove items from references */ 1030/* Remove items from references */
760 while (selected_refs) 1031 while (selected_refs)
761 { 1032 {
762 path = gtk_tree_row_reference_get_path (selected_refs->data); 1033 path = gtk_tree_row_reference_get_path (selected_refs->data);
763 gtk_tree_model_get_iter (GTK_TREE_MODEL (filelist_store), &iter, path); 1034 gtk_tree_model_get_iter (GTK_TREE_MODEL (filelist_store),
764 gtk_list_store_remove (filelist_store, &iter); 1035 &iter, path);
765 gtk_tree_path_free (path); 1036 gtk_list_store_remove (filelist_store, &iter);
766 selected_refs = g_list_next (selected_refs); 1037 gtk_tree_path_free (path);
767 } 1038 selected_refs = g_list_next (selected_refs);
768 g_list_foreach (selected_paths, (GFunc) gtk_tree_row_reference_free, NULL); 1039 }
769 g_list_free (selected_paths); 1040 g_list_foreach (selected_paths, (GFunc) gtk_tree_row_reference_free,
1041 NULL);
1042 g_list_free (selected_paths);
770} 1043}
771 1044
772/** 1045/**
@@ -775,8 +1048,9 @@ remove_file_from_list (gpointer user_data)
775void 1048void
776select_all_files (gpointer user_data) 1049select_all_files (gpointer user_data)
777{ 1050{
778 GtkWidget *filelist = glade_xml_get_widget (musicinsertXML, "filelist"); 1051 GtkWidget *filelist =
779 GtkTreeSelection *selection = 1052 glade_xml_get_widget (musicinsertXML, "filelist");
780 gtk_tree_view_get_selection (GTK_TREE_VIEW (filelist)); 1053 GtkTreeSelection *selection =
781 gtk_tree_selection_select_all (selection); 1054 gtk_tree_view_get_selection (GTK_TREE_VIEW (filelist));
1055 gtk_tree_selection_select_all (selection);
782} 1056}
diff --git a/src/plugins/fs/extensions/musicinsert.glade b/src/plugins/fs/extensions/musicinsert.glade
index c7bb64b9..4effd14f 100644
--- a/src/plugins/fs/extensions/musicinsert.glade
+++ b/src/plugins/fs/extensions/musicinsert.glade
@@ -67,7 +67,7 @@
67 <property name="editable">True</property> 67 <property name="editable">True</property>
68 <property name="visibility">True</property> 68 <property name="visibility">True</property>
69 <property name="max_length">0</property> 69 <property name="max_length">0</property>
70 <property name="text" translatable="yes">music</property> 70 <property name="text" translatable="yes"></property>
71 <property name="has_frame">True</property> 71 <property name="has_frame">True</property>
72 <property name="invisible_char">*</property> 72 <property name="invisible_char">*</property>
73 <property name="activates_default">False</property> 73 <property name="activates_default">False</property>
diff --git a/src/plugins/fs/extensions/musicinsert.h b/src/plugins/fs/extensions/musicinsert.h
index 2f8a346b..fcfb07c1 100644
--- a/src/plugins/fs/extensions/musicinsert.h
+++ b/src/plugins/fs/extensions/musicinsert.h
@@ -30,19 +30,10 @@
30#include <extractor.h> 30#include <extractor.h>
31#include <gtk/gtk.h> 31#include <gtk/gtk.h>
32#include <glade/glade.h> 32#include <glade/glade.h>
33/* platform.h will be needed */
34
35 33
36GladeXML *musicinsertXML; 34#include "platform.h"
37GtkListStore *filelist_store;
38GList *AlbumList, *ArtistList, *TypeList;
39GtkComboBoxEntry *artistcombobox, *albumcombobox, *typecombobox;
40EXTRACTOR_ExtractorList *Extractors;
41 35
42GtkTreeViewColumn *filename_list_col, *title_list_col, *artist_list_col, 36#define MUSICINSERTXMLFILE "musicinsert.glade"
43 *album_list_col, *type_list_col, *format_list_col, *keywords_list_col;
44
45GtkWidget *filelist_popup;
46 37
47/* Know music files mimetypes to list in the format ComboBoxEntry */ 38/* Know music files mimetypes to list in the format ComboBoxEntry */
48enum Types 39enum Types
@@ -82,10 +73,6 @@ const gint type_col_num = TYPE_COL;
82const gint format_col_num = FORMAT_COL; 73const gint format_col_num = FORMAT_COL;
83const gint keywords_col_num = KEYWORDS_COL; 74const gint keywords_col_num = KEYWORDS_COL;
84 75
85/* Temp definitions to remove, will be present in platform.h from GNUnet source*/
86 #define DIR_SEPARATOR '/'
87 #define ACCESS(p, m) access(p, m)
88 #define STRDUP(s) strdup (s)
89 76
90 77
91EXTRACTOR_KeywordList *get_EXTRACTORKeywords (const EXTRACTOR_ExtractorList * 78EXTRACTOR_KeywordList *get_EXTRACTORKeywords (const EXTRACTOR_ExtractorList *
@@ -94,6 +81,7 @@ void set_File_Keywords (const gchar * filename);
94void activateComboBoxes (); 81void activateComboBoxes ();
95void updateColumns (); 82void updateColumns ();
96void show_musicinsertdialog (); 83void show_musicinsertdialog ();
84gboolean insertfiles ();
97 85
98/* Callback functions declaration */ 86/* Callback functions declaration */
99void on_musicinsertdialog_destroy (GtkObject * object, gpointer user_data); 87void on_musicinsertdialog_destroy (GtkObject * object, gpointer user_data);