GList * append_mobj_list_from_unknown_filename(GList *list, gchar *filename) { PraghaMusicobject *mobj; PraghaMediaType file_type; if (is_dir_and_accessible(filename)) { list = append_mobj_list_from_folder (list, filename); } else { file_type = pragha_file_get_media_type (filename); switch (file_type) { case MEDIA_TYPE_AUDIO: mobj = new_musicobject_from_file (filename); if (G_LIKELY(mobj)) { list = g_list_append(list, mobj); add_recent_file(filename); } break; case MEDIA_TYPE_PLAYLIST: list = pragha_pl_parser_append_mobj_list_by_extension (list, filename); break; case MEDIA_TYPE_IMAGE: case MEDIA_TYPE_UNKNOWN: default: break; } } /* Have to give control to GTK periodically ... */ pragha_process_gtk_events (); return list; }
GList * pragha_dnd_plain_text_get_mobj_list (GtkSelectionData *data) { PraghaMusicobject *mobj = NULL; gchar *filename = NULL; GList *list = NULL; CDEBUG(DBG_VERBOSE, "Target: PLAIN_TEXT"); filename = (gchar*)gtk_selection_data_get_text(data); if (g_file_test(filename, G_FILE_TEST_IS_DIR)) { list = append_mobj_list_from_folder(list, filename); } else { mobj = new_musicobject_from_file(filename, NULL); if (G_LIKELY(mobj)) list = g_list_prepend(list, mobj); /* Have to give control to GTK periodically ... */ pragha_process_gtk_events (); } g_free(filename); return g_list_reverse (list); }
GList * pragha_dnd_uri_list_get_mobj_list (GtkSelectionData *data) { PraghaMusicobject *mobj = NULL; gchar **uris = NULL, *filename = NULL; GList *list = NULL; gint i = 0; CDEBUG(DBG_VERBOSE, "Target: URI_LIST"); uris = gtk_selection_data_get_uris(data); if(uris){ for(i = 0; uris[i] != NULL; i++) { filename = g_filename_from_uri(uris[i], NULL, NULL); if (g_file_test(filename, G_FILE_TEST_IS_DIR)){ list = append_mobj_list_from_folder(list, filename); } else { mobj = new_musicobject_from_file(filename, NULL); if (G_LIKELY(mobj)) list = g_list_prepend(list, mobj); } /* Have to give control to GTK periodically ... */ pragha_process_gtk_events (); g_free(filename); } g_strfreev(uris); } return g_list_reverse (list); }
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; }