diff --git a/app/src/main/java/org/oxycblt/auxio/music/stack/Indexer.kt b/app/src/main/java/org/oxycblt/auxio/music/stack/Indexer.kt index 32071b52b..181fda3a1 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/stack/Indexer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/stack/Indexer.kt @@ -48,7 +48,9 @@ constructor( uris: List, interpretation: Interpretation ) = coroutineScope { - val audioFiles = explorer.explore(uris).flowOn(Dispatchers.Main).buffer() - interpreter.interpret(audioFiles, emptyFlow(), interpretation) + val files = explorer.explore(uris) + val audioFiles = files.audios.flowOn(Dispatchers.IO).buffer() + val playlistFiles = files.playlists.flowOn(Dispatchers.IO).buffer() + interpreter.interpret(audioFiles, playlistFiles, interpretation) } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/stack/explore/Explorer.kt b/app/src/main/java/org/oxycblt/auxio/music/stack/explore/Explorer.kt index 2a96771f9..2fa3acd01 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/stack/explore/Explorer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/stack/explore/Explorer.kt @@ -19,25 +19,33 @@ import org.oxycblt.auxio.music.stack.explore.cache.TagCache import org.oxycblt.auxio.music.stack.explore.extractor.ExoPlayerTagExtractor import org.oxycblt.auxio.music.stack.explore.extractor.TagResult import org.oxycblt.auxio.music.stack.explore.fs.DeviceFiles +import org.oxycblt.auxio.music.stack.explore.playlists.StoredPlaylists import javax.inject.Inject interface Explorer { - fun explore(uris: List): Flow + fun explore(uris: List): Files } +data class Files( + val audios: Flow, + val playlists: Flow +) + class ExplorerImpl @Inject constructor( private val deviceFiles: DeviceFiles, private val tagCache: TagCache, - private val tagExtractor: ExoPlayerTagExtractor + private val tagExtractor: ExoPlayerTagExtractor, + private val storedPlaylists: StoredPlaylists ) : Explorer { - override fun explore(uris: List): Flow { + override fun explore(uris: List): Files { val deviceFiles = deviceFiles.explore(uris.asFlow()).flowOn(Dispatchers.IO).buffer() val tagRead = tagCache.read(deviceFiles).flowOn(Dispatchers.IO).buffer() val (cacheFiles, cacheSongs) = tagRead.results() val tagExtractor = tagExtractor.process(cacheFiles).flowOn(Dispatchers.IO).buffer() val (_, extractorSongs) = tagExtractor.results() val writtenExtractorSongs = tagCache.write(extractorSongs).flowOn(Dispatchers.IO).buffer() - return merge(cacheSongs, writtenExtractorSongs) + val playlistFiles = storedPlaylists.read() + return Files(merge(cacheSongs, writtenExtractorSongs), playlistFiles) } private fun Flow.results(): Pair, Flow> {