diff options
author | Christian Grothoff <christian@grothoff.org> | 2005-07-05 00:07:28 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2005-07-05 00:07:28 +0000 |
commit | cfcbd7da2d83ed1ae943e56e8637b4ea541bcdb9 (patch) | |
tree | 8366d4593f4c60ab1b5eb07d2e1a3a37d4cfbb6b | |
parent | 866edd0514ed7454af80f44414f3769cd594d077 (diff) | |
download | gnunet-gtk-cfcbd7da2d83ed1ae943e56e8637b4ea541bcdb9.tar.gz gnunet-gtk-cfcbd7da2d83ed1ae943e56e8637b4ea541bcdb9.zip |
update
-rw-r--r-- | src/plugins/fs/extensions/musicinsert.c | 1382 | ||||
-rw-r--r-- | src/plugins/fs/extensions/musicinsert.glade | 2 | ||||
-rw-r--r-- | src/plugins/fs/extensions/musicinsert.h | 18 |
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 _ | 51 | GladeXML *musicinsertXML; |
52 | GtkListStore *filelist_store; | ||
53 | GList *AlbumList, *ArtistList, *TypeList; | ||
54 | GtkComboBoxEntry *artistcombobox, *albumcombobox, *typecombobox; | ||
55 | EXTRACTOR_ExtractorList *Extractors; | ||
56 | GtkWidget *musicinsertdialog; | ||
57 | |||
58 | GtkTreeViewColumn *filename_list_col, *title_list_col, *artist_list_col, | ||
59 | *album_list_col, *type_list_col, *format_list_col, *keywords_list_col; | ||
60 | |||
61 | GtkWidget *filelist_popup; | ||
49 | 62 | ||
50 | int | 63 | int |
51 | main (int argc, char *argv[]) | 64 | main (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 | ||
58 | show_musicinsertdialog (); | 71 | show_musicinsertdialog (); |
59 | 72 | ||
60 | gtk_main (); | 73 | gtk_main (); |
61 | return 0; | 74 | return 0; |
62 | } | 75 | } |
63 | 76 | ||
64 | void show_musicinsertdialog () | 77 | void |
78 | show_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 * | |||
275 | get_EXTRACTORKeywords (const EXTRACTOR_ExtractorList | 331 | get_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 | */ |
296 | void | 352 | void |
297 | set_File_Keywords (const gchar * filename) | 353 | set_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 | |||
377 | activateComboBoxes () | 445 | activateComboBoxes () |
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 () | |||
410 | void | 475 | void |
411 | updateColumns () | 476 | updateColumns () |
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 | /** | 498 | gboolean |
433 | * @brief Get an EXTRACTOR_KeywordList for a specified file | 499 | insertfiles () |
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 | * | ||
437 | int 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) | |||
447 | void | 684 | void |
448 | on_musicinsertdialog_destroy (GtkObject * object, gpointer user_data) | 685 | on_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) | |||
456 | void | 695 | void |
457 | on_cancelbutton_clicked (GtkButton * button, gpointer user_data) | 696 | on_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) | |||
465 | void | 705 | void |
466 | on_okbutton_clicked (GtkButton * button, gpointer user_data) | 706 | on_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) | |||
474 | void | 716 | void |
475 | on_diraddbutton_clicked (GtkButton * button, gpointer user_data) | 717 | on_diraddbutton_clicked (GtkButton * button, gpointer user_data) |
476 | { | 718 | { |
477 | gchar *path; | 719 | gchar *path; |
478 | GtkWidget *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, | 726 | GTK_WINDOW (musicinsertdialog), |
485 | GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, | 727 | GTK_FILE_CHOOSER_ACTION_OPEN, |
486 | NULL); | 728 | GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
487 | gtk_file_chooser_set_action (GTK_FILE_CHOOSER (filechooser), | 729 | GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, |
488 | GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); | 730 | NULL); |
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 | |||
571 | void | 830 | void |
572 | on_fileaddbutton_clicked (GtkButton * button, gpointer user_data) | 831 | on_fileaddbutton_clicked (GtkButton * button, gpointer user_data) |
573 | { | 832 | { |
574 | GSList *pathlist; | 833 | GSList *pathlist; |
575 | GtkWidget *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 | |||
646 | void | 914 | void |
647 | on_radioinsert_toggled (GtkRadioButton * radiobutton, gpointer user_data) | 915 | on_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) | |||
656 | void | 926 | void |
657 | on_radioindex_toggled (GtkRadioButton * radiobutton, gpointer user_data) | 927 | on_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 | */ |
666 | void | 938 | void 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 | */ |
679 | void | 950 | void 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 | */ |
692 | void | 962 | void 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 | */ |
705 | void | 974 | void 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 | ||
719 | gboolean | 988 | gboolean |
720 | popup_delete (GtkWidget * widget, GdkEventButton * event, gpointer user_data) | 989 | popup_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) | |||
734 | void | 1003 | void |
735 | remove_file_from_list (gpointer user_data) | 1004 | remove_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) | |||
775 | void | 1048 | void |
776 | select_all_files (gpointer user_data) | 1049 | select_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 | ||
36 | GladeXML *musicinsertXML; | 34 | #include "platform.h" |
37 | GtkListStore *filelist_store; | ||
38 | GList *AlbumList, *ArtistList, *TypeList; | ||
39 | GtkComboBoxEntry *artistcombobox, *albumcombobox, *typecombobox; | ||
40 | EXTRACTOR_ExtractorList *Extractors; | ||
41 | 35 | ||
42 | GtkTreeViewColumn *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 | |||
45 | GtkWidget *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 */ |
48 | enum Types | 39 | enum Types |
@@ -82,10 +73,6 @@ const gint type_col_num = TYPE_COL; | |||
82 | const gint format_col_num = FORMAT_COL; | 73 | const gint format_col_num = FORMAT_COL; |
83 | const gint keywords_col_num = KEYWORDS_COL; | 74 | const 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 | ||
91 | EXTRACTOR_KeywordList *get_EXTRACTORKeywords (const EXTRACTOR_ExtractorList * | 78 | EXTRACTOR_KeywordList *get_EXTRACTORKeywords (const EXTRACTOR_ExtractorList * |
@@ -94,6 +81,7 @@ void set_File_Keywords (const gchar * filename); | |||
94 | void activateComboBoxes (); | 81 | void activateComboBoxes (); |
95 | void updateColumns (); | 82 | void updateColumns (); |
96 | void show_musicinsertdialog (); | 83 | void show_musicinsertdialog (); |
84 | gboolean insertfiles (); | ||
97 | 85 | ||
98 | /* Callback functions declaration */ | 86 | /* Callback functions declaration */ |
99 | void on_musicinsertdialog_destroy (GtkObject * object, gpointer user_data); | 87 | void on_musicinsertdialog_destroy (GtkObject * object, gpointer user_data); |