From 0f8294bf4335f0741ed9819e56ee18b7a2a4ff29 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Mon, 9 Dec 2024 08:55:48 -0700 Subject: [PATCH] musikr: refactor fs - Move MimeType back into fs - Move DeviceFiles into a new query module --- .../music/service/SystemContentObserver.kt | 2 +- app/src/main/java/org/oxycblt/musikr/Music.kt | 1 + .../java/org/oxycblt/musikr/fs/FsModule.kt | 16 +++-------- .../org/oxycblt/musikr/{ => fs}/MimeType.kt | 2 +- .../org/oxycblt/musikr/fs/MusicLocation.kt | 2 +- .../musikr/fs/path/DocumentPathFactory.kt | 4 +-- .../musikr/fs/{ => query}/DeviceFiles.kt | 12 +++++---- .../oxycblt/musikr/fs/query/QueryModule.kt | 27 +++++++++++++++++++ .../musikr/fs/{util => query}/QueryUtil.kt | 2 +- .../musikr/metadata/AudioProperties.kt | 5 ++-- .../musikr/metadata/MetadataExtractor.kt | 2 +- .../oxycblt/musikr/pipeline/ExploreStep.kt | 4 +-- .../oxycblt/musikr/pipeline/ExtractStep.kt | 2 +- .../playlist/ExternalPlaylistManager.kt | 2 +- .../org/oxycblt/musikr/tag/cache/TagCache.kt | 2 +- .../oxycblt/musikr/tag/cache/TagDatabase.kt | 2 +- .../oxycblt/musikr/tag/interpret/PreMusic.kt | 2 +- .../musikr/tag/interpret/TagInterpreter.kt | 4 +-- .../org/oxycblt/musikr/tag/parse/TagParser.kt | 2 +- 19 files changed, 59 insertions(+), 36 deletions(-) rename app/src/main/java/org/oxycblt/musikr/{ => fs}/MimeType.kt (99%) rename app/src/main/java/org/oxycblt/musikr/fs/{ => query}/DeviceFiles.kt (95%) create mode 100644 app/src/main/java/org/oxycblt/musikr/fs/query/QueryModule.kt rename app/src/main/java/org/oxycblt/musikr/fs/{util => query}/QueryUtil.kt (98%) diff --git a/app/src/main/java/org/oxycblt/auxio/music/service/SystemContentObserver.kt b/app/src/main/java/org/oxycblt/auxio/music/service/SystemContentObserver.kt index 426172cb3..66c351f86 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/service/SystemContentObserver.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/service/SystemContentObserver.kt @@ -27,7 +27,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import org.oxycblt.auxio.music.MusicRepository import org.oxycblt.auxio.music.MusicSettings -import org.oxycblt.musikr.fs.util.contentResolverSafe +import org.oxycblt.musikr.fs.query.contentResolverSafe import timber.log.Timber as L /** diff --git a/app/src/main/java/org/oxycblt/musikr/Music.kt b/app/src/main/java/org/oxycblt/musikr/Music.kt index 18219547e..291655f2e 100644 --- a/app/src/main/java/org/oxycblt/musikr/Music.kt +++ b/app/src/main/java/org/oxycblt/musikr/Music.kt @@ -33,6 +33,7 @@ import org.oxycblt.auxio.playback.replaygain.ReplayGainAdjustment import org.oxycblt.auxio.util.concatLocalized import org.oxycblt.auxio.util.toUuidOrNull import org.oxycblt.musikr.cover.Cover +import org.oxycblt.musikr.fs.MimeType import org.oxycblt.musikr.fs.Path import org.oxycblt.musikr.tag.Date import org.oxycblt.musikr.tag.Disc diff --git a/app/src/main/java/org/oxycblt/musikr/fs/FsModule.kt b/app/src/main/java/org/oxycblt/musikr/fs/FsModule.kt index 74b4bc55b..ffcc7e7b0 100644 --- a/app/src/main/java/org/oxycblt/musikr/fs/FsModule.kt +++ b/app/src/main/java/org/oxycblt/musikr/fs/FsModule.kt @@ -26,21 +26,13 @@ import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import org.oxycblt.musikr.fs.util.contentResolverSafe +import org.oxycblt.musikr.fs.query.DeviceFiles +import org.oxycblt.musikr.fs.query.DeviceFilesImpl +import org.oxycblt.musikr.fs.query.contentResolverSafe @Module @InstallIn(SingletonComponent::class) -class FsProvidesModule { - @Provides - fun contentResolver(@ApplicationContext context: Context): ContentResolver = - context.contentResolverSafe -} - -@Module -@InstallIn(SingletonComponent::class) -interface FsBindsModule { - @Binds fun deviceFiles(deviceFilesImpl: DeviceFilesImpl): DeviceFiles - +interface FsModule { @Binds fun musicLocationFactory( musicLocationFactoryImpl: MusicLocationFactoryImpl diff --git a/app/src/main/java/org/oxycblt/musikr/MimeType.kt b/app/src/main/java/org/oxycblt/musikr/fs/MimeType.kt similarity index 99% rename from app/src/main/java/org/oxycblt/musikr/MimeType.kt rename to app/src/main/java/org/oxycblt/musikr/fs/MimeType.kt index e618efbb4..563f692ca 100644 --- a/app/src/main/java/org/oxycblt/musikr/MimeType.kt +++ b/app/src/main/java/org/oxycblt/musikr/fs/MimeType.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.musikr +package org.oxycblt.musikr.fs import android.content.Context import android.media.MediaFormat diff --git a/app/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt b/app/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt index 2438626b7..a93925343 100644 --- a/app/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt +++ b/app/src/main/java/org/oxycblt/musikr/fs/MusicLocation.kt @@ -25,7 +25,7 @@ import android.provider.DocumentsContract import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import org.oxycblt.musikr.fs.path.DocumentPathFactory -import org.oxycblt.musikr.fs.util.contentResolverSafe +import org.oxycblt.musikr.fs.query.contentResolverSafe class MusicLocation internal constructor(val uri: Uri, val path: Path) { override fun equals(other: Any?) = diff --git a/app/src/main/java/org/oxycblt/musikr/fs/path/DocumentPathFactory.kt b/app/src/main/java/org/oxycblt/musikr/fs/path/DocumentPathFactory.kt index a17b869eb..035e98ecf 100644 --- a/app/src/main/java/org/oxycblt/musikr/fs/path/DocumentPathFactory.kt +++ b/app/src/main/java/org/oxycblt/musikr/fs/path/DocumentPathFactory.kt @@ -28,8 +28,8 @@ import javax.inject.Inject import org.oxycblt.musikr.fs.Components import org.oxycblt.musikr.fs.Path import org.oxycblt.musikr.fs.Volume -import org.oxycblt.musikr.fs.util.contentResolverSafe -import org.oxycblt.musikr.fs.util.useQuery +import org.oxycblt.musikr.fs.query.contentResolverSafe +import org.oxycblt.musikr.fs.query.useQuery /** * A factory for parsing the reverse-engineered format of the URIs obtained from document picker. diff --git a/app/src/main/java/org/oxycblt/musikr/fs/DeviceFiles.kt b/app/src/main/java/org/oxycblt/musikr/fs/query/DeviceFiles.kt similarity index 95% rename from app/src/main/java/org/oxycblt/musikr/fs/DeviceFiles.kt rename to app/src/main/java/org/oxycblt/musikr/fs/query/DeviceFiles.kt index 024e55281..e9231614d 100644 --- a/app/src/main/java/org/oxycblt/musikr/fs/DeviceFiles.kt +++ b/app/src/main/java/org/oxycblt/musikr/fs/query/DeviceFiles.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.musikr.fs +package org.oxycblt.musikr.fs.query import android.content.ContentResolver import android.content.Context @@ -31,8 +31,8 @@ import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.flatMapMerge import kotlinx.coroutines.flow.flattenMerge import kotlinx.coroutines.flow.flow -import org.oxycblt.musikr.fs.util.contentResolverSafe -import org.oxycblt.musikr.fs.util.useQuery +import org.oxycblt.musikr.fs.MusicLocation +import org.oxycblt.musikr.fs.Path interface DeviceFiles { fun explore(locations: Flow): Flow @@ -68,7 +68,8 @@ class DeviceFilesImpl @Inject constructor(@ApplicationContext private val contex ): Flow = flow { contentResolver.useQuery( DocumentsContract.buildChildDocumentsUriUsingTree(rootUri, treeDocumentId), - PROJECTION) { cursor -> + PROJECTION + ) { cursor -> val childUriIndex = cursor.getColumnIndexOrThrow(DocumentsContract.Document.COLUMN_DOCUMENT_ID) val displayNameIndex = @@ -100,7 +101,8 @@ class DeviceFilesImpl @Inject constructor(@ApplicationContext private val contex mimeType, newPath, size, - lastModified)) + lastModified) + ) } } emitAll(recursive.asFlow().flattenMerge()) diff --git a/app/src/main/java/org/oxycblt/musikr/fs/query/QueryModule.kt b/app/src/main/java/org/oxycblt/musikr/fs/query/QueryModule.kt new file mode 100644 index 000000000..8874a01a0 --- /dev/null +++ b/app/src/main/java/org/oxycblt/musikr/fs/query/QueryModule.kt @@ -0,0 +1,27 @@ +package org.oxycblt.musikr.fs.query + +import android.content.ContentResolver +import android.content.Context +import dagger.Binds +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import org.oxycblt.musikr.fs.MusicLocation +import org.oxycblt.musikr.fs.MusicLocationFactoryImpl + +@Module +@InstallIn(SingletonComponent::class) +class QueryProvidesModule { + @Provides + fun contentResolver(@ApplicationContext context: Context): ContentResolver = + context.contentResolverSafe +} + +@Module +@InstallIn(SingletonComponent::class) +interface QueryBindsModule { + @Binds + fun deviceFiles(deviceFilesImpl: DeviceFilesImpl): DeviceFiles +} diff --git a/app/src/main/java/org/oxycblt/musikr/fs/util/QueryUtil.kt b/app/src/main/java/org/oxycblt/musikr/fs/query/QueryUtil.kt similarity index 98% rename from app/src/main/java/org/oxycblt/musikr/fs/util/QueryUtil.kt rename to app/src/main/java/org/oxycblt/musikr/fs/query/QueryUtil.kt index 9f1732745..15b139506 100644 --- a/app/src/main/java/org/oxycblt/musikr/fs/util/QueryUtil.kt +++ b/app/src/main/java/org/oxycblt/musikr/fs/query/QueryUtil.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package org.oxycblt.musikr.fs.util +package org.oxycblt.musikr.fs.query import android.content.ContentResolver import android.content.Context diff --git a/app/src/main/java/org/oxycblt/musikr/metadata/AudioProperties.kt b/app/src/main/java/org/oxycblt/musikr/metadata/AudioProperties.kt index a5733057d..15753cc0a 100644 --- a/app/src/main/java/org/oxycblt/musikr/metadata/AudioProperties.kt +++ b/app/src/main/java/org/oxycblt/musikr/metadata/AudioProperties.kt @@ -23,7 +23,7 @@ import android.media.MediaExtractor import android.media.MediaFormat import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject -import org.oxycblt.musikr.MimeType +import org.oxycblt.musikr.fs.MimeType import org.oxycblt.musikr.Song import timber.log.Timber as L @@ -119,6 +119,7 @@ constructor(@ApplicationContext private val context: Context) : AudioProperties. return AudioProperties( bitrate, sampleRate, - MimeType(fromExtension = song.mimeType.fromExtension, fromFormat = formatMimeType)) + MimeType(fromExtension = song.mimeType.fromExtension, fromFormat = formatMimeType) + ) } } diff --git a/app/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt b/app/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt index b1a756d04..a5fe97f71 100644 --- a/app/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt +++ b/app/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt @@ -28,7 +28,7 @@ import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.guava.await import kotlinx.coroutines.withContext -import org.oxycblt.musikr.fs.DeviceFile +import org.oxycblt.musikr.fs.query.DeviceFile interface MetadataExtractor { suspend fun extract(file: DeviceFile): AudioMetadata diff --git a/app/src/main/java/org/oxycblt/musikr/pipeline/ExploreStep.kt b/app/src/main/java/org/oxycblt/musikr/pipeline/ExploreStep.kt index 7631a5ff9..b5d826a3c 100644 --- a/app/src/main/java/org/oxycblt/musikr/pipeline/ExploreStep.kt +++ b/app/src/main/java/org/oxycblt/musikr/pipeline/ExploreStep.kt @@ -24,8 +24,8 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.mapNotNull -import org.oxycblt.musikr.fs.DeviceFile -import org.oxycblt.musikr.fs.DeviceFiles +import org.oxycblt.musikr.fs.query.DeviceFile +import org.oxycblt.musikr.fs.query.DeviceFiles import org.oxycblt.musikr.fs.MusicLocation import org.oxycblt.musikr.playlist.m3u.M3U diff --git a/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt b/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt index 8ffa84e32..79f37c231 100644 --- a/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt +++ b/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt @@ -27,7 +27,7 @@ import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge -import org.oxycblt.musikr.fs.DeviceFile +import org.oxycblt.musikr.fs.query.DeviceFile import org.oxycblt.musikr.metadata.MetadataExtractor import org.oxycblt.musikr.tag.cache.TagCache import org.oxycblt.musikr.tag.parse.ParsedTags diff --git a/app/src/main/java/org/oxycblt/musikr/playlist/ExternalPlaylistManager.kt b/app/src/main/java/org/oxycblt/musikr/playlist/ExternalPlaylistManager.kt index 8b1dd2eca..86a477438 100644 --- a/app/src/main/java/org/oxycblt/musikr/playlist/ExternalPlaylistManager.kt +++ b/app/src/main/java/org/oxycblt/musikr/playlist/ExternalPlaylistManager.kt @@ -26,7 +26,7 @@ import org.oxycblt.musikr.Playlist import org.oxycblt.musikr.fs.Components import org.oxycblt.musikr.fs.Path import org.oxycblt.musikr.fs.path.DocumentPathFactory -import org.oxycblt.musikr.fs.util.contentResolverSafe +import org.oxycblt.musikr.fs.query.contentResolverSafe import org.oxycblt.musikr.playlist.m3u.M3U import timber.log.Timber as L diff --git a/app/src/main/java/org/oxycblt/musikr/tag/cache/TagCache.kt b/app/src/main/java/org/oxycblt/musikr/tag/cache/TagCache.kt index 600430f6c..fba4b7733 100644 --- a/app/src/main/java/org/oxycblt/musikr/tag/cache/TagCache.kt +++ b/app/src/main/java/org/oxycblt/musikr/tag/cache/TagCache.kt @@ -19,7 +19,7 @@ package org.oxycblt.musikr.tag.cache import javax.inject.Inject -import org.oxycblt.musikr.fs.DeviceFile +import org.oxycblt.musikr.fs.query.DeviceFile import org.oxycblt.musikr.tag.parse.ParsedTags interface TagCache { diff --git a/app/src/main/java/org/oxycblt/musikr/tag/cache/TagDatabase.kt b/app/src/main/java/org/oxycblt/musikr/tag/cache/TagDatabase.kt index d6a359c56..627345a64 100644 --- a/app/src/main/java/org/oxycblt/musikr/tag/cache/TagDatabase.kt +++ b/app/src/main/java/org/oxycblt/musikr/tag/cache/TagDatabase.kt @@ -28,7 +28,7 @@ import androidx.room.Query import androidx.room.RoomDatabase import androidx.room.TypeConverter import androidx.room.TypeConverters -import org.oxycblt.musikr.fs.DeviceFile +import org.oxycblt.musikr.fs.query.DeviceFile import org.oxycblt.musikr.tag.Date import org.oxycblt.musikr.tag.parse.ParsedTags import org.oxycblt.musikr.tag.util.correctWhitespace diff --git a/app/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt b/app/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt index 5f0c486e6..e0798dc45 100644 --- a/app/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt +++ b/app/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt @@ -23,7 +23,7 @@ import java.util.UUID import org.oxycblt.auxio.music.MusicType import org.oxycblt.auxio.playback.replaygain.ReplayGainAdjustment import org.oxycblt.auxio.util.update -import org.oxycblt.musikr.MimeType +import org.oxycblt.musikr.fs.MimeType import org.oxycblt.musikr.Music import org.oxycblt.musikr.fs.Path import org.oxycblt.musikr.playlist.PlaylistHandle diff --git a/app/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt b/app/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt index d280f75bb..834d77d31 100644 --- a/app/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt +++ b/app/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt @@ -22,8 +22,8 @@ import javax.inject.Inject import org.oxycblt.auxio.R import org.oxycblt.auxio.playback.replaygain.ReplayGainAdjustment import org.oxycblt.auxio.util.toUuidOrNull -import org.oxycblt.musikr.MimeType -import org.oxycblt.musikr.fs.DeviceFile +import org.oxycblt.musikr.fs.MimeType +import org.oxycblt.musikr.fs.query.DeviceFile import org.oxycblt.musikr.tag.Disc import org.oxycblt.musikr.tag.Interpretation import org.oxycblt.musikr.tag.Name diff --git a/app/src/main/java/org/oxycblt/musikr/tag/parse/TagParser.kt b/app/src/main/java/org/oxycblt/musikr/tag/parse/TagParser.kt index 3f06833ca..bf1071c42 100644 --- a/app/src/main/java/org/oxycblt/musikr/tag/parse/TagParser.kt +++ b/app/src/main/java/org/oxycblt/musikr/tag/parse/TagParser.kt @@ -19,7 +19,7 @@ package org.oxycblt.musikr.tag.parse import javax.inject.Inject -import org.oxycblt.musikr.fs.DeviceFile +import org.oxycblt.musikr.fs.query.DeviceFile import org.oxycblt.musikr.metadata.AudioMetadata interface TagParser {