44 #include <glib/gi18n.h>
45 #include <glib/gstdio.h>
52 #include "preferences_tab.h"
53 #include "utilities.h"
54 #include "mp3splt-gtk.h"
57 GtkWidget *freedb_handle_box;
60 GtkWidget *freedb_entry;
63 GtkWidget *freedb_tree;
65 gint freedb_table_number = 0;
77 gint selected_id = -1;
80 GtkWidget *freedb_add_button;
81 GtkWidget *freedb_search_button;
84 gboolean executed_lock = FALSE;
89 extern gint spin_mins,spin_secs,
91 extern gchar current_description[255];
94 extern gint debug_is_active;
100 gint revisions_number)
105 GtkTreeIter child_iter;
107 GtkTreeView *
tree_view = (GtkTreeView *)freedb_tree;
110 model = gtk_tree_view_get_model(tree_view);
112 gtk_tree_store_append (GTK_TREE_STORE(model), &iter,NULL);
114 gtk_tree_store_set (GTK_TREE_STORE(model), &iter,
115 ALBUM_NAME, album_name,
120 gint malloc_number = strlen(album_name) + 20;
122 number = malloc(malloc_number *
sizeof(gchar *));
124 for(i = 0; i < revisions_number; i++)
126 g_snprintf(number,malloc_number,
127 _(
"%s Revision %d"),album_name, revisions[i]);
130 gtk_tree_store_append (GTK_TREE_STORE(model),
132 gtk_tree_store_set (GTK_TREE_STORE(model),
135 NUMBER, album_id+i+1,
138 freedb_table_number++;
146 GtkTreeStore *model = gtk_tree_store_new(FREEDB_TABLE, G_TYPE_STRING, G_TYPE_INT);
147 return GTK_TREE_MODEL(model);
154 GtkTreeView *
tree_view = (GtkTreeView *)gtk_tree_view_new_with_model(model);
161 GtkCellRendererText *renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new ());
162 g_object_set_data(G_OBJECT(renderer),
"col", GINT_TO_POINTER(ALBUM_NAME));
163 GtkTreeViewColumn *name_column = gtk_tree_view_column_new_with_attributes
164 (_(
"Album title"), GTK_CELL_RENDERER(renderer),
165 "text", ALBUM_NAME, NULL);
168 gtk_tree_view_insert_column(GTK_TREE_VIEW(tree_view),
169 GTK_TREE_VIEW_COLUMN(name_column), ALBUM_NAME);
172 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(name_column), 0.5);
173 gtk_tree_view_column_set_sizing(GTK_TREE_VIEW_COLUMN(name_column),
174 GTK_TREE_VIEW_COLUMN_AUTOSIZE);
175 gtk_tree_view_column_set_expand(GTK_TREE_VIEW_COLUMN(name_column), TRUE);
177 gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(name_column), TRUE);
183 GtkWidget *window_child = gtk_bin_get_child(GTK_BIN(window));
184 gtk_widget_reparent(GTK_WIDGET(window_child), GTK_WIDGET(freedb_handle_box));
185 gtk_widget_destroy(window);
192 GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
193 gtk_widget_reparent(GTK_WIDGET(widget), GTK_WIDGET(window));
194 g_signal_connect(G_OBJECT(window),
"delete_event",
196 gtk_widget_show(GTK_WIDGET(window));
203 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(freedb_tree));
205 if (gtk_tree_selection_get_selected(selection, &model, &iter))
208 gtk_tree_model_get (model, &iter,
210 NUMBER, &selected_id,
214 gtk_widget_set_sensitive(GTK_WIDGET(freedb_add_button), TRUE);
217 gtk_widget_set_sensitive(GTK_WIDGET(freedb_add_button), FALSE);
224 GtkTreeView *
tree_view = (GtkTreeView *)freedb_tree;
225 GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
227 while (freedb_table_number > 0)
230 gtk_tree_model_get_iter_first(model, &iter);
231 gtk_tree_store_remove(GTK_TREE_STORE(model), &iter);
232 freedb_table_number--;
241 executed_lock = TRUE;
243 gtk_widget_hide(freedb_search_button);
244 gtk_widget_show(spinner);
245 gtk_spinner_start(GTK_SPINNER(spinner));
247 gtk_widget_set_sensitive(GTK_WIDGET(freedb_add_button), FALSE);
248 gtk_editable_set_editable(GTK_EDITABLE(freedb_entry), FALSE);
252 const gchar *
freedb_search = gtk_entry_get_text(GTK_ENTRY(freedb_entry));
269 for (i = 0; i< search_results->
number;i++)
274 TRUE, &must_be_free);
281 if (search_results->
number > 0)
287 GtkTreeSelection *selection;
288 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(freedb_tree));
290 model = gtk_tree_view_get_model(GTK_TREE_VIEW(freedb_tree));
291 path = gtk_tree_path_new_from_indices (0 ,-1);
292 gtk_tree_model_get_iter(model, &iter, path);
293 gtk_tree_selection_select_iter(selection, &iter);
294 gtk_tree_path_free(path);
298 gtk_widget_show(freedb_search_button);
299 gtk_spinner_stop(GTK_SPINNER(spinner));
300 gtk_widget_hide(spinner);
302 gtk_editable_set_editable(GTK_EDITABLE(freedb_entry), TRUE);
304 executed_lock = FALSE;
314 if (executed_lock) {
return; }
341 gchar *filename = NULL;
349 gchar mp3splt_dir[14] =
".mp3splt-gtk";
351 const gchar *home_dir = g_get_home_dir();
352 gint malloc_number = strlen(mp3splt_dir) + strlen(home_dir) + 20;
353 filename = malloc(malloc_number *
sizeof(gchar *));
355 g_snprintf(filename,malloc_number,
356 "%s%s%s%s%s", home_dir,
357 G_DIR_SEPARATOR_S, mp3splt_dir,
358 G_DIR_SEPARATOR_S,
"query.cddb");
363 mp3splt_write_freedb_file_result(the_state, selected_id,
366 SPLT_FREEDB_GET_FILE_TYPE_CDDB_CGI,
383 const char *data = gtk_entry_get_text(GTK_ENTRY(
output_entry));
384 gint error = SPLT_OUTPUT_FORMAT_OK;
385 mp3splt_set_oformat(the_state, data, &error);
391 mp3splt_put_cddb_splitpoints_from_file(the_state,filename, err);
402 gint *mins,gint *secs,
405 *mins = (gint)(time / 6000);
406 *secs = (gint)(time - (*mins * 6000))
408 *hundr = (gint)(time - (*mins * 6000)
437 for(i = 0; i < max_splits;i++)
441 long old_point_value = points[i].
value;
442 int point_value = (int) old_point_value;
443 if (old_point_value > INT_MAX)
445 point_value = INT_MAX;
450 &spin_mins, &spin_secs,
453 gint must_be_free = FALSE;
454 gchar *result_utf8 = points[i].
name;
456 if (result_utf8 != NULL)
459 FALSE, &must_be_free);
461 g_snprintf(current_description,255,
466 g_snprintf(current_description, 255,
"%s", _(
"description here"));
476 if (points[i].type == SPLT_SPLITPOINT)
480 else if (points[i].type == SPLT_SKIPPOINT)
487 g_snprintf(current_description, 255,
"%s",
488 _(
"description here"));
497 gpointer put_freedb_splitpoints(gpointer data)
502 gtk_widget_set_sensitive(GTK_WIDGET(freedb_add_button), FALSE);
511 gtk_widget_set_sensitive(GTK_WIDGET(freedb_add_button), TRUE);
522 create_thread(put_freedb_splitpoints, NULL, TRUE, NULL);
528 GtkWidget *freedb_hbox = gtk_hbox_new(FALSE, 0);
529 gtk_container_set_border_width(GTK_CONTAINER(freedb_hbox), 0);
532 freedb_handle_box = gtk_handle_box_new();
533 gtk_container_add(GTK_CONTAINER(freedb_handle_box), GTK_WIDGET(freedb_hbox));
534 g_signal_connect(freedb_handle_box,
"child-detached",
538 GtkWidget *freedb_vbox = gtk_vbox_new(FALSE, 0);
539 gtk_box_pack_start(GTK_BOX(freedb_hbox), freedb_vbox, TRUE, TRUE, 4);
542 GtkWidget *search_hbox = gtk_hbox_new(FALSE, 0);
543 gtk_box_pack_start(GTK_BOX(freedb_vbox), search_hbox , FALSE, FALSE, 2);
545 GtkWidget *label = gtk_label_new(_(
"Search tracktype.org:"));
546 gtk_box_pack_start(GTK_BOX(search_hbox), label, FALSE, FALSE, 0);
548 freedb_entry = gtk_entry_new();
549 gtk_editable_set_editable(GTK_EDITABLE(freedb_entry), TRUE);
550 gtk_box_pack_start(GTK_BOX(search_hbox), freedb_entry, TRUE, TRUE, 6);
552 g_signal_connect(G_OBJECT(freedb_entry),
"activate",
555 freedb_search_button = (GtkWidget *)
557 g_signal_connect(G_OBJECT(freedb_search_button),
"clicked",
559 gtk_box_pack_start(GTK_BOX(search_hbox), freedb_search_button, FALSE, FALSE, 0);
561 spinner = gtk_spinner_new();
562 gtk_box_pack_start(GTK_BOX(search_hbox), spinner, FALSE, FALSE, 4);
567 GtkWidget *scrolled_window;
568 scrolled_window = gtk_scrolled_window_new(NULL, NULL);
569 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_NONE);
570 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
571 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
572 gtk_box_pack_start(GTK_BOX(freedb_vbox), scrolled_window, TRUE, TRUE, 1);
576 gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(freedb_tree));
578 GtkWidget *freedb_tree_selection;
579 freedb_tree_selection = (GtkWidget *)
580 gtk_tree_view_get_selection(GTK_TREE_VIEW(freedb_tree));
581 g_signal_connect(G_OBJECT(freedb_tree_selection),
"changed",
585 GtkWidget *selected_hbox = gtk_hbox_new(FALSE, 0);
586 gtk_box_pack_start(GTK_BOX(freedb_vbox), selected_hbox , FALSE, FALSE, 2);
588 freedb_add_button = (GtkWidget *)
591 gtk_widget_set_sensitive(GTK_WIDGET(freedb_add_button), FALSE);
592 g_signal_connect(G_OBJECT(freedb_add_button),
"clicked",
594 gtk_box_pack_start(GTK_BOX(selected_hbox), freedb_add_button, FALSE, FALSE, 0);
595 gtk_widget_set_tooltip_text(freedb_add_button,
596 _(
"Set splitpoints to the splitpoints table"));
598 return freedb_handle_box;
601 void hide_freedb_spinner()
603 gtk_widget_hide(spinner);