music: connect stored playlists to loader
This commit is contained in:
parent
c4f4797028
commit
73ff7e2c7f
2 changed files with 16 additions and 6 deletions
|
@ -48,7 +48,9 @@ constructor(
|
||||||
uris: List<Uri>,
|
uris: List<Uri>,
|
||||||
interpretation: Interpretation
|
interpretation: Interpretation
|
||||||
) = coroutineScope {
|
) = coroutineScope {
|
||||||
val audioFiles = explorer.explore(uris).flowOn(Dispatchers.Main).buffer()
|
val files = explorer.explore(uris)
|
||||||
interpreter.interpret(audioFiles, emptyFlow(), interpretation)
|
val audioFiles = files.audios.flowOn(Dispatchers.IO).buffer()
|
||||||
|
val playlistFiles = files.playlists.flowOn(Dispatchers.IO).buffer()
|
||||||
|
interpreter.interpret(audioFiles, playlistFiles, interpretation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.ExoPlayerTagExtractor
|
||||||
import org.oxycblt.auxio.music.stack.explore.extractor.TagResult
|
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.fs.DeviceFiles
|
||||||
|
import org.oxycblt.auxio.music.stack.explore.playlists.StoredPlaylists
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
interface Explorer {
|
interface Explorer {
|
||||||
fun explore(uris: List<Uri>): Flow<AudioFile>
|
fun explore(uris: List<Uri>): Files
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class Files(
|
||||||
|
val audios: Flow<AudioFile>,
|
||||||
|
val playlists: Flow<PlaylistFile>
|
||||||
|
)
|
||||||
|
|
||||||
class ExplorerImpl @Inject constructor(
|
class ExplorerImpl @Inject constructor(
|
||||||
private val deviceFiles: DeviceFiles,
|
private val deviceFiles: DeviceFiles,
|
||||||
private val tagCache: TagCache,
|
private val tagCache: TagCache,
|
||||||
private val tagExtractor: ExoPlayerTagExtractor
|
private val tagExtractor: ExoPlayerTagExtractor,
|
||||||
|
private val storedPlaylists: StoredPlaylists
|
||||||
) : Explorer {
|
) : Explorer {
|
||||||
override fun explore(uris: List<Uri>): Flow<AudioFile> {
|
override fun explore(uris: List<Uri>): Files {
|
||||||
val deviceFiles = deviceFiles.explore(uris.asFlow()).flowOn(Dispatchers.IO).buffer()
|
val deviceFiles = deviceFiles.explore(uris.asFlow()).flowOn(Dispatchers.IO).buffer()
|
||||||
val tagRead = tagCache.read(deviceFiles).flowOn(Dispatchers.IO).buffer()
|
val tagRead = tagCache.read(deviceFiles).flowOn(Dispatchers.IO).buffer()
|
||||||
val (cacheFiles, cacheSongs) = tagRead.results()
|
val (cacheFiles, cacheSongs) = tagRead.results()
|
||||||
val tagExtractor = tagExtractor.process(cacheFiles).flowOn(Dispatchers.IO).buffer()
|
val tagExtractor = tagExtractor.process(cacheFiles).flowOn(Dispatchers.IO).buffer()
|
||||||
val (_, extractorSongs) = tagExtractor.results()
|
val (_, extractorSongs) = tagExtractor.results()
|
||||||
val writtenExtractorSongs = tagCache.write(extractorSongs).flowOn(Dispatchers.IO).buffer()
|
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<TagResult>.results(): Pair<Flow<DeviceFile>, Flow<AudioFile>> {
|
private fun Flow<TagResult>.results(): Pair<Flow<DeviceFile>, Flow<AudioFile>> {
|
||||||
|
|
Loading…
Reference in a new issue