GList * append_mobj_list_from_folder(GList *list, gchar *dir_name) { PraghaPreferences *preferences; PraghaMusicobject *mobj = NULL; PraghaMediaType file_type; GDir *dir; const gchar *next_file = NULL; gchar *ab_file; GError *error = NULL; dir = g_dir_open(dir_name, 0, &error); if (!dir) { g_critical("Unable to open library : %s", dir_name); return list; } next_file = g_dir_read_name(dir); while (next_file) { ab_file = g_strconcat(dir_name, G_DIR_SEPARATOR_S, next_file, NULL); if (is_dir_and_accessible(ab_file)) { preferences = pragha_preferences_get(); if(pragha_preferences_get_add_recursively(preferences)) list = append_mobj_list_from_folder(list, ab_file); g_object_unref(G_OBJECT(preferences)); } else { file_type = pragha_file_get_media_type (ab_file); switch (file_type) { case MEDIA_TYPE_AUDIO: mobj = new_musicobject_from_file (ab_file); if (G_LIKELY(mobj)) list = g_list_append(list, mobj); break; case MEDIA_TYPE_PLAYLIST: list = pragha_pl_parser_append_mobj_list_by_extension (list, ab_file); break; case MEDIA_TYPE_IMAGE: case MEDIA_TYPE_UNKNOWN: default: break; } } /* Have to give control to GTK periodically ... */ pragha_process_gtk_events (); g_free(ab_file); next_file = g_dir_read_name(dir); } g_dir_close(dir); return list; }
GList * append_mobj_list_from_folder(GList *list, gchar *dir_name) { PraghaPreferences *preferences; PraghaMusicobject *mobj = NULL; GDir *dir; const gchar *next_file = NULL; gchar *ab_file; GError *error = NULL; dir = g_dir_open(dir_name, 0, &error); if (!dir) { g_critical("Unable to open library : %s", dir_name); return list; } next_file = g_dir_read_name(dir); while (next_file) { ab_file = g_strconcat(dir_name, G_DIR_SEPARATOR_S, next_file, NULL); if (is_dir_and_accessible(ab_file)) { preferences = pragha_preferences_get(); if(pragha_preferences_get_add_recursively(preferences)) list = append_mobj_list_from_folder(list, ab_file); g_object_unref(G_OBJECT(preferences)); } else { if (is_playable_file(ab_file)) { mobj = new_musicobject_from_file(ab_file); if (G_LIKELY(mobj)) list = g_list_append(list, mobj); } } /* Have to give control to GTK periodically ... */ pragha_process_gtk_events (); g_free(ab_file); next_file = g_dir_read_name(dir); } g_dir_close(dir); return list; }
void pragha_application_open_files (PraghaApplication *pragha) { PraghaPreferences *preferences; GtkWidget *window, *hbox, *vbox, *chooser, *bbox, *toggle, *close_button, *add_button; gpointer storage; gint i = 0; GtkFileFilter *media_filter, *playlist_filter, *all_filter; const gchar *last_folder = NULL; /* Create a file chooser dialog */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_title(GTK_WINDOW(window), (_("Select a file to play"))); gtk_window_set_default_size(GTK_WINDOW(window), 700, 450); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_widget_set_name (GTK_WIDGET(window), "GtkFileChooserDialog"); gtk_container_set_border_width(GTK_CONTAINER(window), 0); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name (GTK_WIDGET(vbox), "dialog-vbox1"); gtk_container_add(GTK_CONTAINER(window), vbox); chooser = gtk_file_chooser_widget_new(GTK_FILE_CHOOSER_ACTION_OPEN); /* Set various properties */ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(chooser), TRUE); preferences = pragha_application_get_preferences (pragha); last_folder = pragha_preferences_get_last_folder (preferences); if (string_is_not_empty(last_folder)) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), last_folder); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 6); toggle = gtk_check_button_new_with_label(_("Add files recursively")); if(pragha_preferences_get_add_recursively (preferences)) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), TRUE); bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); gtk_box_set_spacing(GTK_BOX(bbox), 4); close_button = gtk_button_new_with_mnemonic (_("_Cancel")); add_button = gtk_button_new_with_mnemonic (_("_Add")); gtk_container_add(GTK_CONTAINER(bbox), close_button); gtk_container_add(GTK_CONTAINER(bbox), add_button); gtk_box_pack_start(GTK_BOX(hbox), toggle, TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(hbox), bbox, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(vbox), chooser, TRUE, TRUE, 0); /* Create file filters */ media_filter = gtk_file_filter_new(); gtk_file_filter_set_name(GTK_FILE_FILTER(media_filter), _("Supported media")); while (mime_wav[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_wav[i++]); i = 0; while (mime_mpeg[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_mpeg[i++]); i = 0; while (mime_flac[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_flac[i++]); i = 0; while (mime_ogg[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_ogg[i++]); i = 0; while (mime_asf[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_asf[i++]); i = 0; while (mime_mp4[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_mp4[i++]); i = 0; while (mime_ape[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_ape[i++]); i = 0; while (mime_tracker[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_tracker[i++]); #ifdef HAVE_PLPARSER i = 0; while (mime_playlist[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_playlist[i++]); i = 0; while (mime_dual[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(media_filter), mime_dual[i++]); #else gtk_file_filter_add_pattern(GTK_FILE_FILTER(media_filter), "*.m3u"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(media_filter), "*.M3U"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(media_filter), "*.pls"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(media_filter), "*.PLS"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(media_filter), "*.xspf"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(media_filter), "*.XSPF"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(media_filter), "*.wax"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(media_filter), "*.WAX"); #endif playlist_filter = gtk_file_filter_new(); #ifdef HAVE_PLPARSER i = 0; while (mime_playlist[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(playlist_filter), mime_playlist[i++]); i = 0; while (mime_dual[i]) gtk_file_filter_add_mime_type(GTK_FILE_FILTER(playlist_filter), mime_dual[i++]); #else gtk_file_filter_add_pattern(GTK_FILE_FILTER(playlist_filter), "*.m3u"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(playlist_filter), "*.M3U"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(playlist_filter), "*.pls"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(playlist_filter), "*.PLS"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(playlist_filter), "*.xspf"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(playlist_filter), "*.XSPF"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(playlist_filter), "*.wax"); gtk_file_filter_add_pattern(GTK_FILE_FILTER(playlist_filter), "*.WAX"); #endif gtk_file_filter_set_name(GTK_FILE_FILTER(playlist_filter), _("Playlists")); all_filter = gtk_file_filter_new (); gtk_file_filter_set_name (GTK_FILE_FILTER(all_filter), _("All files")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(all_filter), "*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(chooser), GTK_FILE_FILTER(media_filter)); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(chooser), GTK_FILE_FILTER(playlist_filter)); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(chooser), GTK_FILE_FILTER(all_filter)); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(chooser), GTK_FILE_FILTER(media_filter)); storage = g_object_new(G_TYPE_OBJECT, NULL); g_object_set_data(storage, "window", window); g_object_set_data(storage, "chooser", chooser); g_object_set_data(storage, "toggle-button", toggle); g_object_set_data(storage, "pragha", pragha); g_signal_connect (add_button, "clicked", G_CALLBACK(pragha_open_files_dialog_add_button_cb), storage); g_signal_connect (chooser, "file-activated", G_CALLBACK(pragha_open_files_dialog_add_button_cb), storage); g_signal_connect (close_button, "clicked", G_CALLBACK(pragha_open_files_dialog_close_button_cb), window); g_signal_connect (window, "destroy", G_CALLBACK(gtk_widget_destroy), window); g_signal_connect (window, "key-press-event", G_CALLBACK(pragha_open_files_dialog_keypress), NULL); gtk_window_set_transient_for(GTK_WINDOW (window), GTK_WINDOW(pragha_application_get_window(pragha))); gtk_window_set_destroy_with_parent (GTK_WINDOW (window), TRUE); gtk_widget_show_all(window); }
static void pragha_preferences_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { PraghaPreferences *preferences = PRAGHA_PREFERENCES(object); switch (prop_id) { case PROP_INSTANT_SEARCH: g_value_set_boolean (value, pragha_preferences_get_instant_search(preferences)); break; case PROP_APPROXIMATE_SEARCH: g_value_set_boolean (value, pragha_preferences_get_instant_search(preferences)); break; case PROP_LIBRARY_STYLE: g_value_set_int (value, pragha_preferences_get_library_style(preferences)); break; case PROP_LIBRARY_SORT_BY_YEAR: g_value_set_boolean (value, pragha_preferences_get_sort_by_year(preferences)); break; case PROP_LIBRARY_FUSE_FOLDERS: g_value_set_boolean (value, pragha_preferences_get_fuse_folders(preferences)); break; case PROP_SHUFFLE: g_value_set_boolean (value, pragha_preferences_get_shuffle(preferences)); break; case PROP_REPEAT: g_value_set_boolean (value, pragha_preferences_get_repeat(preferences)); break; case PROP_USE_HINT: g_value_set_boolean (value, pragha_preferences_get_use_hint(preferences)); break; case PROP_RESTORE_PLAYLIST: g_value_set_boolean (value, pragha_preferences_get_restore_playlist(preferences)); break; case PROP_AUDIO_SINK: g_value_set_string (value, pragha_preferences_get_audio_sink(preferences)); break; case PROP_AUDIO_DEVICE: g_value_set_string (value, pragha_preferences_get_audio_device(preferences)); break; case PROP_SOFTWARE_MIXER: g_value_set_boolean (value, pragha_preferences_get_software_mixer(preferences)); break; case PROP_AUDIO_CD_DEVICE: g_value_set_string (value, pragha_preferences_get_audio_cd_device(preferences)); break; case PROP_LATERAL_PANEL: g_value_set_boolean (value, pragha_preferences_get_lateral_panel(preferences)); break; case PROP_SIDEBAR_SIZE: g_value_set_int (value, pragha_preferences_get_sidebar_size(preferences)); break; case PROP_SHOW_ALBUM_ART: g_value_set_boolean (value, pragha_preferences_get_show_album_art(preferences)); break; case PROP_SHOW_STATUS_BAR: g_value_set_boolean (value, pragha_preferences_get_show_status_bar(preferences)); break; case PROP_ADD_RECURSIVELY: g_value_set_boolean (value, pragha_preferences_get_add_recursively(preferences)); break; case PROP_TIMER_REMAINING_MODE: g_value_set_boolean (value, pragha_preferences_get_timer_remaining_mode(preferences)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); } }