From e16b23f34ef67c1e942c674196385b94731a8a9e Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 13 Dec 2024 18:02:39 -0700 Subject: [PATCH] musikr: remove di --- .../org/oxycblt/auxio/music/MusicModule.kt | 3 ++ .../main/java/org/oxycblt/musikr/Musikr.kt | 11 +++-- .../java/org/oxycblt/musikr/MusikrModule.kt | 30 ------------ .../musikr/metadata/MetadataExtractor.kt | 9 ++-- .../oxycblt/musikr/metadata/MetadataModule.kt | 2 - .../oxycblt/musikr/model/LibraryFactory.kt | 7 ++- .../org/oxycblt/musikr/model/ModelModule.kt | 30 ------------ .../oxycblt/musikr/pipeline/EvaluateStep.kt | 9 ++-- .../oxycblt/musikr/pipeline/ExploreStep.kt | 11 +++-- .../oxycblt/musikr/pipeline/ExtractStep.kt | 15 ++++-- .../oxycblt/musikr/pipeline/PipelineModule.kt | 34 -------------- .../oxycblt/musikr/playlist/PlaylistModule.kt | 19 -------- .../musikr/playlist/db/PlaylistDatabase.kt | 14 +++++- .../oxycblt/musikr/playlist/db/RawPlaylist.kt | 8 ++-- .../musikr/playlist/db/StoredPlaylists.kt | 9 ++-- .../oxycblt/musikr/playlist/db/UserModule.kt | 47 ------------------- .../org/oxycblt/musikr/playlist/m3u/M3U.kt | 5 +- .../musikr/tag/interpret/InterpretModule.kt | 30 ------------ .../musikr/tag/interpret/TagInterpreter.kt | 7 ++- .../oxycblt/musikr/tag/parse/ParseModule.kt | 30 ------------ .../org/oxycblt/musikr/tag/parse/TagParser.kt | 7 ++- ktaglib/src/main/cpp/JVMMetadataBuilder.cpp | 9 ++-- ktaglib/src/main/cpp/JVMMetadataBuilder.h | 2 +- 23 files changed, 80 insertions(+), 268 deletions(-) delete mode 100644 app/src/main/java/org/oxycblt/musikr/MusikrModule.kt delete mode 100644 app/src/main/java/org/oxycblt/musikr/model/ModelModule.kt delete mode 100644 app/src/main/java/org/oxycblt/musikr/pipeline/PipelineModule.kt delete mode 100644 app/src/main/java/org/oxycblt/musikr/playlist/PlaylistModule.kt delete mode 100644 app/src/main/java/org/oxycblt/musikr/playlist/db/UserModule.kt delete mode 100644 app/src/main/java/org/oxycblt/musikr/tag/interpret/InterpretModule.kt delete mode 100644 app/src/main/java/org/oxycblt/musikr/tag/parse/ParseModule.kt diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicModule.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicModule.kt index 790217807..800abc540 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicModule.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicModule.kt @@ -26,6 +26,7 @@ import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import javax.inject.Singleton +import org.oxycblt.musikr.Musikr import org.oxycblt.musikr.cache.CacheDatabase @Module @@ -42,4 +43,6 @@ class MusikrShimModule { @Singleton @Provides fun tagDatabase(@ApplicationContext context: Context) = CacheDatabase.from(context) + + @Provides fun musikr(@ApplicationContext context: Context) = Musikr.new(context) } diff --git a/app/src/main/java/org/oxycblt/musikr/Musikr.kt b/app/src/main/java/org/oxycblt/musikr/Musikr.kt index 13f7c7b85..df3758d6a 100644 --- a/app/src/main/java/org/oxycblt/musikr/Musikr.kt +++ b/app/src/main/java/org/oxycblt/musikr/Musikr.kt @@ -18,7 +18,7 @@ package org.oxycblt.musikr -import javax.inject.Inject +import android.content.Context import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.buffer @@ -37,6 +37,11 @@ interface Musikr { interpretation: Interpretation, onProgress: suspend (IndexingProgress) -> Unit = {} ): MutableLibrary + + companion object { + fun new(context: Context): Musikr = + MusikrImpl(ExploreStep.from(context), ExtractStep.from(context), EvaluateStep.new()) + } } /** @@ -50,9 +55,7 @@ sealed interface IndexingProgress { data object Indeterminate : IndexingProgress } -class MusikrImpl -@Inject -constructor( +class MusikrImpl( private val exploreStep: ExploreStep, private val extractStep: ExtractStep, private val evaluateStep: EvaluateStep diff --git a/app/src/main/java/org/oxycblt/musikr/MusikrModule.kt b/app/src/main/java/org/oxycblt/musikr/MusikrModule.kt deleted file mode 100644 index 8b4b47c5c..000000000 --- a/app/src/main/java/org/oxycblt/musikr/MusikrModule.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2024 Auxio Project - * MusikrModule.kt is part of Auxio. - * - * 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.musikr - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent - -@Module -@InstallIn(SingletonComponent::class) -interface MusikrModule { - @Binds fun musikr(impl: MusikrImpl): Musikr -} 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 4bce9ff12..84126dfd0 100644 --- a/app/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt +++ b/app/src/main/java/org/oxycblt/musikr/metadata/MetadataExtractor.kt @@ -19,8 +19,6 @@ package org.oxycblt.musikr.metadata import android.content.Context -import dagger.hilt.android.qualifiers.ApplicationContext -import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.oxycblt.auxio.util.unlikelyToBeNull @@ -31,10 +29,13 @@ import org.oxycblt.musikr.fs.query.DeviceFile interface MetadataExtractor { suspend fun extract(file: DeviceFile): Metadata? + + companion object { + fun from(context: Context): MetadataExtractor = MetadataExtractorImpl(context) + } } -class MetadataExtractorImpl @Inject constructor(@ApplicationContext private val context: Context) : - MetadataExtractor { +private class MetadataExtractorImpl(private val context: Context) : MetadataExtractor { override suspend fun extract(file: DeviceFile) = withContext(Dispatchers.IO) { KTagLib.open(context, FileRef(unlikelyToBeNull(file.path.name), file.uri)) diff --git a/app/src/main/java/org/oxycblt/musikr/metadata/MetadataModule.kt b/app/src/main/java/org/oxycblt/musikr/metadata/MetadataModule.kt index 10746ce05..5687b798d 100644 --- a/app/src/main/java/org/oxycblt/musikr/metadata/MetadataModule.kt +++ b/app/src/main/java/org/oxycblt/musikr/metadata/MetadataModule.kt @@ -28,6 +28,4 @@ import dagger.hilt.components.SingletonComponent interface MetadataModule { @Binds fun audioPropertiesFactory(interpreter: AudioPropertiesFactoryImpl): AudioProperties.Factory - - @Binds fun metadataExtractor(extractor: MetadataExtractorImpl): MetadataExtractor } diff --git a/app/src/main/java/org/oxycblt/musikr/model/LibraryFactory.kt b/app/src/main/java/org/oxycblt/musikr/model/LibraryFactory.kt index f823fee76..37d8ebc41 100644 --- a/app/src/main/java/org/oxycblt/musikr/model/LibraryFactory.kt +++ b/app/src/main/java/org/oxycblt/musikr/model/LibraryFactory.kt @@ -18,7 +18,6 @@ package org.oxycblt.musikr.model -import javax.inject.Inject import org.oxycblt.musikr.Album import org.oxycblt.musikr.Artist import org.oxycblt.musikr.Genre @@ -32,9 +31,13 @@ import org.oxycblt.musikr.graph.SongVertex interface LibraryFactory { fun create(graph: MusicGraph): MutableLibrary + + companion object { + fun new(): LibraryFactory = LibraryFactoryImpl() + } } -class LibraryFactoryImpl @Inject constructor() : LibraryFactory { +private class LibraryFactoryImpl() : LibraryFactory { override fun create(graph: MusicGraph): MutableLibrary { val songs = graph.songVertex.mapTo(mutableSetOf()) { vertex -> diff --git a/app/src/main/java/org/oxycblt/musikr/model/ModelModule.kt b/app/src/main/java/org/oxycblt/musikr/model/ModelModule.kt deleted file mode 100644 index 0779e222e..000000000 --- a/app/src/main/java/org/oxycblt/musikr/model/ModelModule.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2024 Auxio Project - * ModelModule.kt is part of Auxio. - * - * 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.musikr.model - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent - -@Module -@InstallIn(SingletonComponent::class) -interface ModelModule { - @Binds fun libraryFactory(factory: LibraryFactoryImpl): LibraryFactory -} diff --git a/app/src/main/java/org/oxycblt/musikr/pipeline/EvaluateStep.kt b/app/src/main/java/org/oxycblt/musikr/pipeline/EvaluateStep.kt index 4ca814636..97a356973 100644 --- a/app/src/main/java/org/oxycblt/musikr/pipeline/EvaluateStep.kt +++ b/app/src/main/java/org/oxycblt/musikr/pipeline/EvaluateStep.kt @@ -18,7 +18,6 @@ package org.oxycblt.musikr.pipeline -import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow @@ -37,11 +36,13 @@ interface EvaluateStep { interpretation: Interpretation, extractedMusic: Flow ): MutableLibrary + + companion object { + fun new(): EvaluateStep = EvaluateStepImpl(TagInterpreter.new(), LibraryFactory.new()) + } } -class EvaluateStepImpl -@Inject -constructor( +private class EvaluateStepImpl( private val tagInterpreter: TagInterpreter, private val libraryFactory: LibraryFactory ) : EvaluateStep { 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 9aed33598..e73ca2cea 100644 --- a/app/src/main/java/org/oxycblt/musikr/pipeline/ExploreStep.kt +++ b/app/src/main/java/org/oxycblt/musikr/pipeline/ExploreStep.kt @@ -19,8 +19,6 @@ package org.oxycblt.musikr.pipeline import android.content.Context -import dagger.hilt.android.qualifiers.ApplicationContext -import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.asFlow @@ -33,12 +31,15 @@ import org.oxycblt.musikr.playlist.m3u.M3U interface ExploreStep { fun explore(locations: List): Flow + + companion object { + fun from(context: Context): ExploreStep = ExploreStepImpl(DeviceFiles.from(context)) + } } -class ExploreStepImpl @Inject constructor(@ApplicationContext private val context: Context) : - ExploreStep { +private class ExploreStepImpl(private val deviceFiles: DeviceFiles) : ExploreStep { override fun explore(locations: List) = - DeviceFiles.from(context) + deviceFiles .explore(locations.asFlow()) .mapNotNull { when { 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 918790a45..e1fdad254 100644 --- a/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt +++ b/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt @@ -18,7 +18,7 @@ package org.oxycblt.musikr.pipeline -import javax.inject.Inject +import android.content.Context import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow @@ -39,12 +39,17 @@ import timber.log.Timber as L interface ExtractStep { fun extract(storage: Storage, nodes: Flow): Flow + + companion object { + fun from(context: Context): ExtractStep = + ExtractStepImpl(MetadataExtractor.from(context), TagParser.new()) + } } -class ExtractStepImpl -@Inject -constructor(private val metadataExtractor: MetadataExtractor, private val tagParser: TagParser) : - ExtractStep { +private class ExtractStepImpl( + private val metadataExtractor: MetadataExtractor, + private val tagParser: TagParser +) : ExtractStep { override fun extract(storage: Storage, nodes: Flow): Flow { val cacheResults = nodes diff --git a/app/src/main/java/org/oxycblt/musikr/pipeline/PipelineModule.kt b/app/src/main/java/org/oxycblt/musikr/pipeline/PipelineModule.kt deleted file mode 100644 index 6eefc849e..000000000 --- a/app/src/main/java/org/oxycblt/musikr/pipeline/PipelineModule.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2024 Auxio Project - * PipelineModule.kt is part of Auxio. - * - * 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.musikr.pipeline - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent - -@Module -@InstallIn(SingletonComponent::class) -interface InterpretModule { - @Binds fun exploreStep(step: ExploreStepImpl): ExploreStep - - @Binds fun extractStep(step: ExtractStepImpl): ExtractStep - - @Binds fun evaluateStep(step: EvaluateStepImpl): EvaluateStep -} diff --git a/app/src/main/java/org/oxycblt/musikr/playlist/PlaylistModule.kt b/app/src/main/java/org/oxycblt/musikr/playlist/PlaylistModule.kt deleted file mode 100644 index 8e3ef0171..000000000 --- a/app/src/main/java/org/oxycblt/musikr/playlist/PlaylistModule.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2023 Auxio Project - * PlaylistModule.kt is part of Auxio. - * - * 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.musikr.playlist diff --git a/app/src/main/java/org/oxycblt/musikr/playlist/db/PlaylistDatabase.kt b/app/src/main/java/org/oxycblt/musikr/playlist/db/PlaylistDatabase.kt index 9be2422fd..b3402a6a6 100644 --- a/app/src/main/java/org/oxycblt/musikr/playlist/db/PlaylistDatabase.kt +++ b/app/src/main/java/org/oxycblt/musikr/playlist/db/PlaylistDatabase.kt @@ -18,11 +18,13 @@ package org.oxycblt.musikr.playlist.db +import android.content.Context import androidx.room.Dao import androidx.room.Database import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query +import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.Transaction import androidx.room.TypeConverters @@ -39,7 +41,15 @@ import org.oxycblt.musikr.Music exportSchema = false) @TypeConverters(Music.UID.TypeConverters::class) abstract class PlaylistDatabase : RoomDatabase() { - abstract fun playlistDao(): PlaylistDao + internal abstract fun playlistDao(): PlaylistDao + + companion object { + fun from(context: Context) = + Room.databaseBuilder( + context.applicationContext, PlaylistDatabase::class.java, "user_music.db") + .fallbackToDestructiveMigration() + .build() + } } // TODO: Handle playlist defragmentation? I really don't want dead songs to accumulate in this @@ -51,7 +61,7 @@ abstract class PlaylistDatabase : RoomDatabase() { * @author Alexander Capehart (OxygenCobalt) */ @Dao -abstract class PlaylistDao { +internal abstract class PlaylistDao { /** * Read out all playlists stored in the database. * diff --git a/app/src/main/java/org/oxycblt/musikr/playlist/db/RawPlaylist.kt b/app/src/main/java/org/oxycblt/musikr/playlist/db/RawPlaylist.kt index d2ea0357a..1353458be 100644 --- a/app/src/main/java/org/oxycblt/musikr/playlist/db/RawPlaylist.kt +++ b/app/src/main/java/org/oxycblt/musikr/playlist/db/RawPlaylist.kt @@ -31,7 +31,7 @@ import org.oxycblt.musikr.Music * * @author Alexander Capehart (OxygenCobalt) */ -data class RawPlaylist( +internal data class RawPlaylist( @Embedded val playlistInfo: PlaylistInfo, @Relation( parentColumn = "playlistUid", @@ -45,14 +45,14 @@ data class RawPlaylist( * * @author Alexander Capehart (OxygenCobalt) */ -@Entity data class PlaylistInfo(@PrimaryKey val playlistUid: Music.UID, val name: String) +@Entity internal data class PlaylistInfo(@PrimaryKey val playlistUid: Music.UID, val name: String) /** * Song information corresponding to a [RawPlaylist] entry. * * @author Alexander Capehart (OxygenCobalt) */ -@Entity data class PlaylistSong(@PrimaryKey val songUid: Music.UID) +@Entity internal data class PlaylistSong(@PrimaryKey val songUid: Music.UID) /** * Links individual songs to a playlist entry. @@ -60,7 +60,7 @@ data class RawPlaylist( * @author Alexander Capehart (OxygenCobalt) */ @Entity -data class PlaylistSongCrossRef( +internal data class PlaylistSongCrossRef( @PrimaryKey(autoGenerate = true) val id: Long = 0, @ColumnInfo(index = true) val playlistUid: Music.UID, @ColumnInfo(index = true) val songUid: Music.UID diff --git a/app/src/main/java/org/oxycblt/musikr/playlist/db/StoredPlaylists.kt b/app/src/main/java/org/oxycblt/musikr/playlist/db/StoredPlaylists.kt index 565313f53..8bcf39475 100644 --- a/app/src/main/java/org/oxycblt/musikr/playlist/db/StoredPlaylists.kt +++ b/app/src/main/java/org/oxycblt/musikr/playlist/db/StoredPlaylists.kt @@ -18,7 +18,6 @@ package org.oxycblt.musikr.playlist.db -import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.emitAll @@ -28,9 +27,13 @@ import org.oxycblt.musikr.playlist.PlaylistFile interface StoredPlaylists { fun read(): Flow + + companion object { + fun from(database: PlaylistDatabase): StoredPlaylists = + StoredPlaylistsImpl(database.playlistDao()) + } } -class StoredPlaylistsImpl @Inject constructor(private val playlistDao: PlaylistDao) : - StoredPlaylists { +private class StoredPlaylistsImpl(private val playlistDao: PlaylistDao) : StoredPlaylists { override fun read() = flow { emitAll(playlistDao.readRawPlaylists().asFlow().map { TODO() }) } } diff --git a/app/src/main/java/org/oxycblt/musikr/playlist/db/UserModule.kt b/app/src/main/java/org/oxycblt/musikr/playlist/db/UserModule.kt deleted file mode 100644 index 82fb72cf4..000000000 --- a/app/src/main/java/org/oxycblt/musikr/playlist/db/UserModule.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2023 Auxio Project - * UserModule.kt is part of Auxio. - * - * 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.musikr.playlist.db - -import android.content.Context -import androidx.room.Room -import dagger.Binds -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.components.SingletonComponent - -@Module -@InstallIn(SingletonComponent::class) -interface PlaylistModule { - @Binds fun storedPlaylists(impl: StoredPlaylistsImpl): StoredPlaylists -} - -@Module -@InstallIn(SingletonComponent::class) -class PlaylistRoomModule { - @Provides fun playlistDao(database: PlaylistDatabase) = database.playlistDao() - - @Provides - fun playlistDatabase(@ApplicationContext context: Context) = - Room.databaseBuilder( - context.applicationContext, PlaylistDatabase::class.java, "user_music.db") - .fallbackToDestructiveMigration() - .build() -} diff --git a/app/src/main/java/org/oxycblt/musikr/playlist/m3u/M3U.kt b/app/src/main/java/org/oxycblt/musikr/playlist/m3u/M3U.kt index 6a422c2d0..40f905125 100644 --- a/app/src/main/java/org/oxycblt/musikr/playlist/m3u/M3U.kt +++ b/app/src/main/java/org/oxycblt/musikr/playlist/m3u/M3U.kt @@ -25,7 +25,6 @@ import java.io.BufferedWriter import java.io.InputStream import java.io.InputStreamReader import java.io.OutputStream -import javax.inject.Inject import org.oxycblt.auxio.util.unlikelyToBeNull import org.oxycblt.musikr.Playlist import org.oxycblt.musikr.fs.Components @@ -80,9 +79,7 @@ interface M3U { } } -class M3UImpl -@Inject -constructor( +private class M3UImpl( @ApplicationContext private val context: Context, private val volumeManager: VolumeManager ) : M3U { diff --git a/app/src/main/java/org/oxycblt/musikr/tag/interpret/InterpretModule.kt b/app/src/main/java/org/oxycblt/musikr/tag/interpret/InterpretModule.kt deleted file mode 100644 index c6bb546de..000000000 --- a/app/src/main/java/org/oxycblt/musikr/tag/interpret/InterpretModule.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2024 Auxio Project - * InterpretModule.kt is part of Auxio. - * - * 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.musikr.tag.interpret - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent - -@Module -@InstallIn(SingletonComponent::class) -interface InterpretModule { - @Binds fun tagInterpreter(factory: TagInterpreterImpl): TagInterpreter -} 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 2ed6c93bc..36ee911e3 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 @@ -18,7 +18,6 @@ package org.oxycblt.musikr.tag.interpret -import javax.inject.Inject import org.oxycblt.auxio.R import org.oxycblt.auxio.playback.replaygain.ReplayGainAdjustment import org.oxycblt.auxio.util.toUuidOrNull @@ -39,9 +38,13 @@ interface TagInterpreter { cover: Cover.Single?, interpretation: Interpretation ): PreSong + + companion object { + fun new(): TagInterpreter = TagInterpreterImpl + } } -class TagInterpreterImpl @Inject constructor() : TagInterpreter { +private data object TagInterpreterImpl : TagInterpreter { override fun interpret( file: DeviceFile, parsedTags: ParsedTags, diff --git a/app/src/main/java/org/oxycblt/musikr/tag/parse/ParseModule.kt b/app/src/main/java/org/oxycblt/musikr/tag/parse/ParseModule.kt deleted file mode 100644 index 9412f1d3d..000000000 --- a/app/src/main/java/org/oxycblt/musikr/tag/parse/ParseModule.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2024 Auxio Project - * ParseModule.kt is part of Auxio. - * - * 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.musikr.tag.parse - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent - -@Module -@InstallIn(SingletonComponent::class) -interface ParseModule { - @Binds fun tagParser(factory: TagParserImpl): TagParser -} 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 696a5fc4e..d4937dfe8 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 @@ -18,17 +18,20 @@ package org.oxycblt.musikr.tag.parse -import javax.inject.Inject import org.oxycblt.ktaglib.Metadata import org.oxycblt.musikr.fs.query.DeviceFile interface TagParser { fun parse(file: DeviceFile, metadata: Metadata): ParsedTags + + companion object { + fun new(): TagParser = TagParserImpl + } } class MissingTagError(what: String) : Error("missing tag: $what") -class TagParserImpl @Inject constructor() : TagParser { +private data object TagParserImpl : TagParser { override fun parse(file: DeviceFile, metadata: Metadata): ParsedTags { return ParsedTags( durationMs = metadata.properties.durationMs, diff --git a/ktaglib/src/main/cpp/JVMMetadataBuilder.cpp b/ktaglib/src/main/cpp/JVMMetadataBuilder.cpp index 21083fd49..7ad3fae94 100644 --- a/ktaglib/src/main/cpp/JVMMetadataBuilder.cpp +++ b/ktaglib/src/main/cpp/JVMMetadataBuilder.cpp @@ -10,8 +10,8 @@ JVMMetadataBuilder::JVMMetadataBuilder(JNIEnv *env) : env(env), id3v2(env), xiph(env), mp4(env), cover(), properties(nullptr) {} -void JVMMetadataBuilder::setMimeType(const std::string_view mimeType) { - this->mimeType = mimeType; +void JVMMetadataBuilder::setMimeType(const std::string_view type) { + this->mimeType = type; } void JVMMetadataBuilder::setId3v2(const TagLib::ID3v2::Tag &tag) { @@ -124,8 +124,9 @@ jobject JVMMetadataBuilder::build() { jobject mp4Map = mp4.getObject(); jbyteArray coverArray = nullptr; if (cover.has_value()) { - coverArray = env->NewByteArray(static_cast(cover->size()); - env->SetByteArrayRegion(coverArray, 0, cover->size(), reinterpret_cast(cover->data())); + auto coverSize = static_cast(cover->size()); + coverArray = env->NewByteArray(coverSize); + env->SetByteArrayRegion(coverArray, 0, coverSize, reinterpret_cast(cover->data())); } jobject metadataObj = env->NewObject(metadataClass, metadataInit, id3v2Map, xiphMap, mp4Map, coverArray, propertiesObj); env->DeleteLocalRef(metadataClass); diff --git a/ktaglib/src/main/cpp/JVMMetadataBuilder.h b/ktaglib/src/main/cpp/JVMMetadataBuilder.h index dd150cbf9..4ad34f524 100644 --- a/ktaglib/src/main/cpp/JVMMetadataBuilder.h +++ b/ktaglib/src/main/cpp/JVMMetadataBuilder.h @@ -20,7 +20,7 @@ class JVMMetadataBuilder { public: JVMMetadataBuilder(JNIEnv *env); - void setMimeType(const std::string_view mimeType); + void setMimeType(const std::string_view type); void setId3v2(const TagLib::ID3v2::Tag &tag); void setXiph(const TagLib::Ogg::XiphComment &tag); void setMp4(const TagLib::MP4::Tag &tag);