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; }
static void pragha_scanner_scan_handler(PraghaScanner *scanner, const gchar *dir_name) { GDir *dir; const gchar *next_file = NULL; gchar *ab_file; GError *error = NULL; PraghaMusicobject *mobj = NULL; PraghaMediaType file_type; if(g_cancellable_is_cancelled (scanner->cancellable)) return; dir = g_dir_open(dir_name, 0, &error); if (!dir) { g_critical("Unable to open library : %s", dir_name); return; } next_file = g_dir_read_name(dir); while (next_file) { if(g_cancellable_is_cancelled (scanner->cancellable)) { g_dir_close(dir); return; } ab_file = g_strconcat(dir_name, G_DIR_SEPARATOR_S, next_file, NULL); if (g_file_test(ab_file, G_FILE_TEST_IS_DIR)) pragha_scanner_scan_handler(scanner, ab_file); 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)) g_hash_table_insert(scanner->tracks_table, g_strdup(pragha_musicobject_get_file(mobj)), mobj); break; case MEDIA_TYPE_PLAYLIST: scanner->playlists = g_slist_prepend (scanner->playlists, g_strdup(ab_file)); break; case MEDIA_TYPE_IMAGE: case MEDIA_TYPE_UNKNOWN: default: break; } g_mutex_lock (&scanner->files_scanned_mutex); scanner->files_scanned++; g_mutex_unlock (&scanner->files_scanned_mutex); } g_free(ab_file); next_file = g_dir_read_name(dir); } g_dir_close(dir); }
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; }
gboolean is_playable_file(const gchar *file) { if (!file) return FALSE; if (g_file_test(file, G_FILE_TEST_IS_REGULAR) && (pragha_file_get_media_type(file) != MEDIA_TYPE_AUDIO)) return TRUE; else return FALSE; }