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 * 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; }