music: move other metadata into model
This commit is contained in:
parent
523d3cdd30
commit
dfff01bd28
38 changed files with 108 additions and 105 deletions
|
@ -32,8 +32,8 @@ import org.oxycblt.auxio.music.MusicRepository
|
||||||
import org.oxycblt.auxio.music.MusicType
|
import org.oxycblt.auxio.music.MusicType
|
||||||
import org.oxycblt.auxio.music.Playlist
|
import org.oxycblt.auxio.music.Playlist
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.info.Disc
|
import org.oxycblt.auxio.musikr.model.Disc
|
||||||
import org.oxycblt.auxio.music.info.ReleaseType
|
import org.oxycblt.auxio.musikr.model.ReleaseType
|
||||||
import timber.log.Timber as L
|
import timber.log.Timber as L
|
||||||
|
|
||||||
interface DetailGenerator {
|
interface DetailGenerator {
|
||||||
|
|
|
@ -34,7 +34,7 @@ import org.oxycblt.auxio.detail.list.SongPropertyAdapter
|
||||||
import org.oxycblt.auxio.list.adapter.UpdateInstructions
|
import org.oxycblt.auxio.list.adapter.UpdateInstructions
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
import org.oxycblt.auxio.music.metadata.AudioProperties
|
import org.oxycblt.auxio.music.metadata.AudioProperties
|
||||||
import org.oxycblt.auxio.music.resolveNames
|
import org.oxycblt.auxio.music.resolveNames
|
||||||
import org.oxycblt.auxio.playback.formatDurationMs
|
import org.oxycblt.auxio.playback.formatDurationMs
|
||||||
|
|
|
@ -37,8 +37,8 @@ import org.oxycblt.auxio.list.adapter.SelectionIndicatorAdapter
|
||||||
import org.oxycblt.auxio.list.adapter.SimpleDiffCallback
|
import org.oxycblt.auxio.list.adapter.SimpleDiffCallback
|
||||||
import org.oxycblt.auxio.music.Album
|
import org.oxycblt.auxio.music.Album
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.info.Disc
|
import org.oxycblt.auxio.musikr.model.Disc
|
||||||
import org.oxycblt.auxio.music.info.resolveNumber
|
import org.oxycblt.auxio.musikr.model.resolveNumber
|
||||||
import org.oxycblt.auxio.playback.formatDurationMs
|
import org.oxycblt.auxio.playback.formatDurationMs
|
||||||
import org.oxycblt.auxio.util.context
|
import org.oxycblt.auxio.util.context
|
||||||
import org.oxycblt.auxio.util.getAttrColorCompat
|
import org.oxycblt.auxio.util.getAttrColorCompat
|
||||||
|
|
|
@ -29,10 +29,10 @@ import kotlinx.parcelize.IgnoredOnParcel
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.oxycblt.auxio.image.Cover
|
import org.oxycblt.auxio.image.Cover
|
||||||
import org.oxycblt.auxio.list.Item
|
import org.oxycblt.auxio.list.Item
|
||||||
import org.oxycblt.auxio.music.info.Date
|
import org.oxycblt.auxio.musikr.model.Date
|
||||||
import org.oxycblt.auxio.music.info.Disc
|
import org.oxycblt.auxio.musikr.model.Disc
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
import org.oxycblt.auxio.music.info.ReleaseType
|
import org.oxycblt.auxio.musikr.model.ReleaseType
|
||||||
import org.oxycblt.auxio.musikr.fs.MimeType
|
import org.oxycblt.auxio.musikr.fs.MimeType
|
||||||
import org.oxycblt.auxio.musikr.fs.Path
|
import org.oxycblt.auxio.musikr.fs.Path
|
||||||
import org.oxycblt.auxio.playback.replaygain.ReplayGainAdjustment
|
import org.oxycblt.auxio.playback.replaygain.ReplayGainAdjustment
|
||||||
|
|
|
@ -25,12 +25,12 @@ import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import kotlinx.coroutines.yield
|
import kotlinx.coroutines.yield
|
||||||
import org.oxycblt.auxio.music.MusicRepository.IndexingWorker
|
import org.oxycblt.auxio.music.MusicRepository.IndexingWorker
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
import org.oxycblt.auxio.music.metadata.Separators
|
import org.oxycblt.auxio.music.metadata.Separators
|
||||||
import org.oxycblt.auxio.musikr.Indexer
|
import org.oxycblt.auxio.musikr.Indexer
|
||||||
import org.oxycblt.auxio.musikr.IndexingProgress
|
import org.oxycblt.auxio.musikr.IndexingProgress
|
||||||
import org.oxycblt.auxio.musikr.model.Interpretation
|
import org.oxycblt.auxio.musikr.interpret.Interpretation
|
||||||
import org.oxycblt.auxio.musikr.model.impl.MutableLibrary
|
import org.oxycblt.auxio.musikr.model.MutableLibrary
|
||||||
import timber.log.Timber as L
|
import timber.log.Timber as L
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -35,7 +35,7 @@ import org.oxycblt.auxio.music.MusicRepository
|
||||||
import org.oxycblt.auxio.music.MusicType
|
import org.oxycblt.auxio.music.MusicType
|
||||||
import org.oxycblt.auxio.music.Playlist
|
import org.oxycblt.auxio.music.Playlist
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.info.resolveNumber
|
import org.oxycblt.auxio.musikr.model.resolveNumber
|
||||||
import org.oxycblt.auxio.search.SearchEngine
|
import org.oxycblt.auxio.search.SearchEngine
|
||||||
|
|
||||||
class MusicBrowser
|
class MusicBrowser
|
||||||
|
|
|
@ -28,9 +28,9 @@ import kotlinx.coroutines.flow.buffer
|
||||||
import kotlinx.coroutines.flow.flow
|
import kotlinx.coroutines.flow.flow
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import org.oxycblt.auxio.musikr.explore.Explorer
|
import org.oxycblt.auxio.musikr.explore.Explorer
|
||||||
import org.oxycblt.auxio.musikr.model.Interpretation
|
import org.oxycblt.auxio.musikr.interpret.Interpretation
|
||||||
import org.oxycblt.auxio.musikr.model.Modeler
|
import org.oxycblt.auxio.musikr.interpret.Modeler
|
||||||
import org.oxycblt.auxio.musikr.model.impl.MutableLibrary
|
import org.oxycblt.auxio.musikr.model.MutableLibrary
|
||||||
|
|
||||||
interface Indexer {
|
interface Indexer {
|
||||||
suspend fun run(
|
suspend fun run(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2024 Auxio Project
|
* Copyright (c) 2023 Auxio Project
|
||||||
* PrepareModule.kt is part of Auxio.
|
* InterpretModule.kt is part of Auxio.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.interpret
|
package org.oxycblt.auxio.musikr.interpret
|
||||||
|
|
||||||
import dagger.Binds
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
|
@ -26,5 +26,5 @@ import dagger.hilt.components.SingletonComponent
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@InstallIn(SingletonComponent::class)
|
||||||
interface InterpretModule {
|
interface InterpretModule {
|
||||||
@Binds fun prepare(factory: InterpreterImpl): Interpreter
|
@Binds fun interpreter(interpreter: ModelerImpl): Modeler
|
||||||
}
|
}
|
|
@ -16,9 +16,9 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model
|
package org.oxycblt.auxio.musikr.interpret
|
||||||
|
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
import org.oxycblt.auxio.music.metadata.Separators
|
import org.oxycblt.auxio.music.metadata.Separators
|
||||||
|
|
||||||
data class Interpretation(val nameFactory: Name.Known.Factory, val separators: Separators)
|
data class Interpretation(val nameFactory: Name.Known.Factory, val separators: Separators)
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2024 Auxio Project
|
* Copyright (c) 2024 Auxio Project
|
||||||
* Modeler.kt is part of Auxio.
|
* Interpreter.kt is part of Auxio.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model
|
package org.oxycblt.auxio.musikr.interpret
|
||||||
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
@ -30,19 +30,19 @@ import kotlinx.coroutines.flow.toList
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.musikr.tag.AudioFile
|
import org.oxycblt.auxio.musikr.tag.AudioFile
|
||||||
import org.oxycblt.auxio.musikr.playlist.PlaylistFile
|
import org.oxycblt.auxio.musikr.playlist.PlaylistFile
|
||||||
import org.oxycblt.auxio.musikr.model.link.AlbumLinker
|
import org.oxycblt.auxio.musikr.interpret.link.AlbumLinker
|
||||||
import org.oxycblt.auxio.musikr.model.link.ArtistLinker
|
import org.oxycblt.auxio.musikr.interpret.link.ArtistLinker
|
||||||
import org.oxycblt.auxio.musikr.model.link.GenreLinker
|
import org.oxycblt.auxio.musikr.interpret.link.GenreLinker
|
||||||
import org.oxycblt.auxio.musikr.model.link.Linked
|
import org.oxycblt.auxio.musikr.interpret.link.Linked
|
||||||
import org.oxycblt.auxio.musikr.model.link.LinkedSong
|
import org.oxycblt.auxio.musikr.interpret.link.LinkedSong
|
||||||
import org.oxycblt.auxio.musikr.model.impl.AlbumImpl
|
import org.oxycblt.auxio.musikr.model.AlbumImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.ArtistImpl
|
import org.oxycblt.auxio.musikr.model.ArtistImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.GenreImpl
|
import org.oxycblt.auxio.musikr.model.GenreImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.LibraryImpl
|
import org.oxycblt.auxio.musikr.model.LibraryImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.MutableLibrary
|
import org.oxycblt.auxio.musikr.model.MutableLibrary
|
||||||
import org.oxycblt.auxio.musikr.model.impl.SongImpl
|
import org.oxycblt.auxio.musikr.model.SongImpl
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreSong
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreSong
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.Interpreter
|
import org.oxycblt.auxio.musikr.interpret.prepare.Preparer
|
||||||
import timber.log.Timber as L
|
import timber.log.Timber as L
|
||||||
|
|
||||||
interface Modeler {
|
interface Modeler {
|
||||||
|
@ -53,14 +53,14 @@ interface Modeler {
|
||||||
): MutableLibrary
|
): MutableLibrary
|
||||||
}
|
}
|
||||||
|
|
||||||
class ModelerImpl @Inject constructor(private val interpreter: Interpreter) : Modeler {
|
class ModelerImpl @Inject constructor(private val preparer: Preparer) : Modeler {
|
||||||
override suspend fun model(
|
override suspend fun model(
|
||||||
audioFiles: Flow<AudioFile>,
|
audioFiles: Flow<AudioFile>,
|
||||||
playlistFiles: Flow<PlaylistFile>,
|
playlistFiles: Flow<PlaylistFile>,
|
||||||
interpretation: Interpretation
|
interpretation: Interpretation
|
||||||
): MutableLibrary {
|
): MutableLibrary {
|
||||||
val preSongs =
|
val preSongs =
|
||||||
interpreter
|
preparer
|
||||||
.interpret(audioFiles, interpretation)
|
.interpret(audioFiles, interpretation)
|
||||||
.flowOn(Dispatchers.Main)
|
.flowOn(Dispatchers.Main)
|
||||||
.buffer(Channel.UNLIMITED)
|
.buffer(Channel.UNLIMITED)
|
|
@ -16,13 +16,13 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.link
|
package org.oxycblt.auxio.musikr.interpret.link
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import org.oxycblt.auxio.musikr.model.impl.AlbumImpl
|
import org.oxycblt.auxio.musikr.model.AlbumImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.SongImpl
|
import org.oxycblt.auxio.musikr.model.SongImpl
|
||||||
|
|
||||||
class AlbumLinker {
|
class AlbumLinker {
|
||||||
private val tree = mutableMapOf<String?, MutableMap<UUID?, AlbumLink>>()
|
private val tree = mutableMapOf<String?, MutableMap<UUID?, AlbumLink>>()
|
|
@ -16,17 +16,17 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.link
|
package org.oxycblt.auxio.musikr.interpret.link
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.musikr.model.impl.AlbumImpl
|
import org.oxycblt.auxio.musikr.model.AlbumImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.ArtistImpl
|
import org.oxycblt.auxio.musikr.model.ArtistImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.SongImpl
|
import org.oxycblt.auxio.musikr.model.SongImpl
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreAlbum
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreAlbum
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreArtist
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreArtist
|
||||||
|
|
||||||
class ArtistLinker {
|
class ArtistLinker {
|
||||||
private val tree = mutableMapOf<String?, MutableMap<UUID?, ArtistLink>>()
|
private val tree = mutableMapOf<String?, MutableMap<UUID?, ArtistLink>>()
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.link
|
package org.oxycblt.auxio.musikr.interpret.link
|
||||||
|
|
||||||
class Contribution<T> {
|
class Contribution<T> {
|
||||||
private val map = mutableMapOf<T, Int>()
|
private val map = mutableMapOf<T, Int>()
|
|
@ -16,14 +16,14 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.link
|
package org.oxycblt.auxio.musikr.interpret.link
|
||||||
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import org.oxycblt.auxio.musikr.model.impl.GenreImpl
|
import org.oxycblt.auxio.musikr.model.GenreImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.SongImpl
|
import org.oxycblt.auxio.musikr.model.SongImpl
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreGenre
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreGenre
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreSong
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreSong
|
||||||
|
|
||||||
class GenreLinker {
|
class GenreLinker {
|
||||||
private val tree = mutableMapOf<String?, GenreLink>()
|
private val tree = mutableMapOf<String?, GenreLink>()
|
|
@ -16,16 +16,16 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.link
|
package org.oxycblt.auxio.musikr.interpret.link
|
||||||
|
|
||||||
import org.oxycblt.auxio.musikr.model.impl.AlbumImpl
|
import org.oxycblt.auxio.musikr.model.AlbumImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.ArtistImpl
|
import org.oxycblt.auxio.musikr.model.ArtistImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.GenreImpl
|
import org.oxycblt.auxio.musikr.model.GenreImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.PlaylistImpl
|
import org.oxycblt.auxio.musikr.model.PlaylistImpl
|
||||||
import org.oxycblt.auxio.musikr.model.impl.SongImpl
|
import org.oxycblt.auxio.musikr.model.SongImpl
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreAlbum
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreAlbum
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PrePlaylist
|
import org.oxycblt.auxio.musikr.interpret.prepare.PrePlaylist
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreSong
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreSong
|
||||||
|
|
||||||
interface LinkedSong {
|
interface LinkedSong {
|
||||||
val preSong: PreSong
|
val preSong: PreSong
|
|
@ -16,12 +16,12 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.link
|
package org.oxycblt.auxio.musikr.interpret.link
|
||||||
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.emptyFlow
|
import kotlinx.coroutines.flow.emptyFlow
|
||||||
import org.oxycblt.auxio.musikr.playlist.PlaylistFile
|
import org.oxycblt.auxio.musikr.playlist.PlaylistFile
|
||||||
import org.oxycblt.auxio.musikr.model.impl.PlaylistImpl
|
import org.oxycblt.auxio.musikr.model.PlaylistImpl
|
||||||
|
|
||||||
class PlaylistLinker {
|
class PlaylistLinker {
|
||||||
fun register(
|
fun register(
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.interpret
|
package org.oxycblt.auxio.musikr.interpret.prepare
|
||||||
|
|
||||||
/// --- ID3v2 PARSING ---
|
/// --- ID3v2 PARSING ---
|
||||||
|
|
|
@ -16,16 +16,16 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.interpret
|
package org.oxycblt.auxio.musikr.interpret.prepare
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.music.MusicType
|
import org.oxycblt.auxio.music.MusicType
|
||||||
import org.oxycblt.auxio.music.info.Date
|
import org.oxycblt.auxio.musikr.model.Date
|
||||||
import org.oxycblt.auxio.music.info.Disc
|
import org.oxycblt.auxio.musikr.model.Disc
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
import org.oxycblt.auxio.music.info.ReleaseType
|
import org.oxycblt.auxio.musikr.model.ReleaseType
|
||||||
import org.oxycblt.auxio.musikr.playlist.PlaylistHandle
|
import org.oxycblt.auxio.musikr.playlist.PlaylistHandle
|
||||||
import org.oxycblt.auxio.musikr.fs.MimeType
|
import org.oxycblt.auxio.musikr.fs.MimeType
|
||||||
import org.oxycblt.auxio.musikr.fs.Path
|
import org.oxycblt.auxio.musikr.fs.Path
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2023 Auxio Project
|
* Copyright (c) 2024 Auxio Project
|
||||||
* InterpretModule.kt is part of Auxio.
|
* PrepareModule.kt is part of Auxio.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model
|
package org.oxycblt.auxio.musikr.interpret.prepare
|
||||||
|
|
||||||
import dagger.Binds
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
|
@ -25,6 +25,6 @@ import dagger.hilt.components.SingletonComponent
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@InstallIn(SingletonComponent::class)
|
@InstallIn(SingletonComponent::class)
|
||||||
interface ModelModule {
|
interface PrepareModule {
|
||||||
@Binds fun interpreter(interpreter: ModelerImpl): Modeler
|
@Binds fun prepare(factory: PreparerImpl): Preparer
|
||||||
}
|
}
|
|
@ -16,26 +16,26 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.interpret
|
package org.oxycblt.auxio.musikr.interpret.prepare
|
||||||
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.music.info.Disc
|
import org.oxycblt.auxio.musikr.model.Disc
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
import org.oxycblt.auxio.music.info.ReleaseType
|
import org.oxycblt.auxio.musikr.model.ReleaseType
|
||||||
import org.oxycblt.auxio.musikr.tag.AudioFile
|
import org.oxycblt.auxio.musikr.tag.AudioFile
|
||||||
import org.oxycblt.auxio.musikr.fs.MimeType
|
import org.oxycblt.auxio.musikr.fs.MimeType
|
||||||
import org.oxycblt.auxio.musikr.model.Interpretation
|
import org.oxycblt.auxio.musikr.interpret.Interpretation
|
||||||
import org.oxycblt.auxio.playback.replaygain.ReplayGainAdjustment
|
import org.oxycblt.auxio.playback.replaygain.ReplayGainAdjustment
|
||||||
import org.oxycblt.auxio.util.toUuidOrNull
|
import org.oxycblt.auxio.util.toUuidOrNull
|
||||||
|
|
||||||
interface Interpreter {
|
interface Preparer {
|
||||||
fun interpret(audioFiles: Flow<AudioFile>, interpretation: Interpretation): Flow<PreSong>
|
fun interpret(audioFiles: Flow<AudioFile>, interpretation: Interpretation): Flow<PreSong>
|
||||||
}
|
}
|
||||||
|
|
||||||
class InterpreterImpl @Inject constructor() : Interpreter {
|
class PreparerImpl @Inject constructor() : Preparer {
|
||||||
override fun interpret(audioFiles: Flow<AudioFile>, interpretation: Interpretation) =
|
override fun interpret(audioFiles: Flow<AudioFile>, interpretation: Interpretation) =
|
||||||
audioFiles.map { audioFile ->
|
audioFiles.map { audioFile ->
|
||||||
val individualPreArtists =
|
val individualPreArtists =
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.music.info
|
package org.oxycblt.auxio.musikr.model
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import java.text.ParseException
|
import java.text.ParseException
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.impl
|
package org.oxycblt.auxio.musikr.model
|
||||||
|
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
import org.oxycblt.auxio.image.Cover
|
import org.oxycblt.auxio.image.Cover
|
||||||
|
@ -27,11 +27,10 @@ import org.oxycblt.auxio.music.Genre
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.music.MusicType
|
import org.oxycblt.auxio.music.MusicType
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.info.Date
|
import org.oxycblt.auxio.musikr.interpret.link.LinkedAlbum
|
||||||
import org.oxycblt.auxio.musikr.model.link.LinkedAlbum
|
import org.oxycblt.auxio.musikr.interpret.link.LinkedSong
|
||||||
import org.oxycblt.auxio.musikr.model.link.LinkedSong
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreArtist
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreArtist
|
import org.oxycblt.auxio.musikr.interpret.prepare.PreGenre
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.PreGenre
|
|
||||||
import org.oxycblt.auxio.util.update
|
import org.oxycblt.auxio.util.update
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.music.info
|
package org.oxycblt.auxio.musikr.model
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.impl
|
package org.oxycblt.auxio.musikr.model
|
||||||
|
|
||||||
import org.oxycblt.auxio.music.Library
|
import org.oxycblt.auxio.music.Library
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.music.info
|
package org.oxycblt.auxio.musikr.model
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
|
@ -16,12 +16,11 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.musikr.model.impl
|
package org.oxycblt.auxio.musikr.model
|
||||||
|
|
||||||
import org.oxycblt.auxio.image.Cover
|
import org.oxycblt.auxio.image.Cover
|
||||||
import org.oxycblt.auxio.music.Playlist
|
import org.oxycblt.auxio.music.Playlist
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.interpret.link.LinkedPlaylist
|
||||||
import org.oxycblt.auxio.musikr.model.link.LinkedPlaylist
|
|
||||||
|
|
||||||
class PlaylistImpl(linkedPlaylist: LinkedPlaylist) : Playlist {
|
class PlaylistImpl(linkedPlaylist: LinkedPlaylist) : Playlist {
|
||||||
private val prePlaylist = linkedPlaylist.prePlaylist
|
private val prePlaylist = linkedPlaylist.prePlaylist
|
|
@ -16,10 +16,10 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oxycblt.auxio.music.info
|
package org.oxycblt.auxio.musikr.model
|
||||||
|
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.music.info.ReleaseType.Album
|
import org.oxycblt.auxio.musikr.model.ReleaseType.Album
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type of release an [Album] is considered. This includes EPs, Singles, Compilations, etc.
|
* The type of release an [Album] is considered. This includes EPs, Singles, Compilations, etc.
|
|
@ -1,6 +1,6 @@
|
||||||
package org.oxycblt.auxio.musikr.tag
|
package org.oxycblt.auxio.musikr.tag
|
||||||
|
|
||||||
import org.oxycblt.auxio.music.info.Date
|
import org.oxycblt.auxio.musikr.model.Date
|
||||||
import org.oxycblt.auxio.musikr.fs.DeviceFile
|
import org.oxycblt.auxio.musikr.fs.DeviceFile
|
||||||
|
|
||||||
data class AudioFile(
|
data class AudioFile(
|
||||||
|
|
|
@ -28,7 +28,7 @@ import androidx.room.Query
|
||||||
import androidx.room.RoomDatabase
|
import androidx.room.RoomDatabase
|
||||||
import androidx.room.TypeConverter
|
import androidx.room.TypeConverter
|
||||||
import androidx.room.TypeConverters
|
import androidx.room.TypeConverters
|
||||||
import org.oxycblt.auxio.music.info.Date
|
import org.oxycblt.auxio.musikr.model.Date
|
||||||
import org.oxycblt.auxio.musikr.tag.AudioFile
|
import org.oxycblt.auxio.musikr.tag.AudioFile
|
||||||
import org.oxycblt.auxio.musikr.fs.DeviceFile
|
import org.oxycblt.auxio.musikr.fs.DeviceFile
|
||||||
import org.oxycblt.auxio.musikr.tag.extractor.correctWhitespace
|
import org.oxycblt.auxio.musikr.tag.extractor.correctWhitespace
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
package org.oxycblt.auxio.musikr.tag.extractor
|
package org.oxycblt.auxio.musikr.tag.extractor
|
||||||
|
|
||||||
import androidx.core.text.isDigitsOnly
|
import androidx.core.text.isDigitsOnly
|
||||||
import org.oxycblt.auxio.music.info.Date
|
import org.oxycblt.auxio.musikr.model.Date
|
||||||
import org.oxycblt.auxio.util.nonZeroOrNull
|
import org.oxycblt.auxio.util.nonZeroOrNull
|
||||||
|
|
||||||
// Song
|
// Song
|
||||||
|
|
|
@ -38,7 +38,7 @@ import org.oxycblt.auxio.music.MusicParent
|
||||||
import org.oxycblt.auxio.music.MusicRepository
|
import org.oxycblt.auxio.music.MusicRepository
|
||||||
import org.oxycblt.auxio.music.Playlist
|
import org.oxycblt.auxio.music.Playlist
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
import org.oxycblt.auxio.music.service.MediaSessionUID
|
import org.oxycblt.auxio.music.service.MediaSessionUID
|
||||||
import org.oxycblt.auxio.music.service.MusicBrowser
|
import org.oxycblt.auxio.music.service.MusicBrowser
|
||||||
import org.oxycblt.auxio.playback.state.PlaybackCommand
|
import org.oxycblt.auxio.playback.state.PlaybackCommand
|
||||||
|
|
|
@ -28,7 +28,7 @@ import org.oxycblt.auxio.music.Genre
|
||||||
import org.oxycblt.auxio.music.Music
|
import org.oxycblt.auxio.music.Music
|
||||||
import org.oxycblt.auxio.music.Playlist
|
import org.oxycblt.auxio.music.Playlist
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.music.info.Name
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
import timber.log.Timber as L
|
import timber.log.Timber as L
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -22,7 +22,7 @@ import java.security.MessageDigest
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
import org.oxycblt.auxio.BuildConfig
|
import org.oxycblt.auxio.BuildConfig
|
||||||
import org.oxycblt.auxio.music.info.Date
|
import org.oxycblt.auxio.musikr.model.Date
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sanitizes a value that is unlikely to be null. On debug builds, this aliases to [requireNotNull],
|
* Sanitizes a value that is unlikely to be null. On debug builds, this aliases to [requireNotNull],
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.oxycblt.auxio.music.info
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Assert.assertTrue
|
import org.junit.Assert.assertTrue
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.oxycblt.auxio.musikr.model.Date
|
||||||
|
|
||||||
class DateTest {
|
class DateTest {
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.oxycblt.auxio.music.info
|
||||||
|
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.oxycblt.auxio.musikr.model.Disc
|
||||||
|
|
||||||
class DiscTest {
|
class DiscTest {
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -21,6 +21,8 @@ package org.oxycblt.auxio.music.info
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Assert.assertNotEquals
|
import org.junit.Assert.assertNotEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.oxycblt.auxio.musikr.model.Name
|
||||||
|
import org.oxycblt.auxio.musikr.model.SortToken
|
||||||
|
|
||||||
class NameTest {
|
class NameTest {
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.oxycblt.auxio.music.info
|
||||||
|
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.oxycblt.auxio.musikr.model.ReleaseType
|
||||||
|
|
||||||
class ReleaseTypeTest {
|
class ReleaseTypeTest {
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -24,7 +24,7 @@ import org.oxycblt.auxio.musikr.tag.extractor.correctWhitespace
|
||||||
import org.oxycblt.auxio.musikr.tag.extractor.parseId3v2PositionField
|
import org.oxycblt.auxio.musikr.tag.extractor.parseId3v2PositionField
|
||||||
import org.oxycblt.auxio.musikr.tag.extractor.parseVorbisPositionField
|
import org.oxycblt.auxio.musikr.tag.extractor.parseVorbisPositionField
|
||||||
import org.oxycblt.auxio.musikr.tag.extractor.splitEscaped
|
import org.oxycblt.auxio.musikr.tag.extractor.splitEscaped
|
||||||
import org.oxycblt.auxio.musikr.model.interpret.parseId3GenreNames
|
import org.oxycblt.auxio.musikr.interpret.prepare.parseId3GenreNames
|
||||||
|
|
||||||
class TagUtilTest {
|
class TagUtilTest {
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in a new issue