musikr: hide cache database

This commit is contained in:
Alexander Capehart 2024-12-21 11:50:56 -05:00
parent 503a4854c3
commit 9a38877c2e
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
4 changed files with 15 additions and 15 deletions

View file

@ -25,8 +25,8 @@ import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent import dagger.hilt.components.SingletonComponent
import org.oxycblt.musikr.cache.Cache
import javax.inject.Singleton import javax.inject.Singleton
import org.oxycblt.musikr.cache.CacheDatabase
import org.oxycblt.musikr.playlist.db.StoredPlaylists import org.oxycblt.musikr.playlist.db.StoredPlaylists
@Module @Module
@ -42,7 +42,7 @@ interface MusicModule {
class MusikrShimModule { class MusikrShimModule {
@Singleton @Singleton
@Provides @Provides
fun tagDatabase(@ApplicationContext context: Context) = CacheDatabase.from(context) fun cache(@ApplicationContext context: Context) = Cache.from(context)
@Singleton @Singleton
@Provides @Provides

View file

@ -38,7 +38,7 @@ import org.oxycblt.musikr.Playlist
import org.oxycblt.musikr.Song import org.oxycblt.musikr.Song
import org.oxycblt.musikr.Storage import org.oxycblt.musikr.Storage
import org.oxycblt.musikr.cache.Cache import org.oxycblt.musikr.cache.Cache
import org.oxycblt.musikr.cache.CacheDatabase import org.oxycblt.musikr.cache.WriteOnlyCache
import org.oxycblt.musikr.playlist.db.StoredPlaylists import org.oxycblt.musikr.playlist.db.StoredPlaylists
import org.oxycblt.musikr.tag.interpret.Naming import org.oxycblt.musikr.tag.interpret.Naming
import org.oxycblt.musikr.tag.interpret.Separators import org.oxycblt.musikr.tag.interpret.Separators
@ -214,7 +214,7 @@ class MusicRepositoryImpl
@Inject @Inject
constructor( constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val cacheDatabase: CacheDatabase, private val cache: Cache,
private val storedPlaylists: StoredPlaylists, private val storedPlaylists: StoredPlaylists,
private val musicSettings: MusicSettings private val musicSettings: MusicSettings
) : MusicRepository { ) : MusicRepository {
@ -368,14 +368,14 @@ constructor(
revision = musicSettings.revision revision = musicSettings.revision
storage = storage =
Storage( Storage(
Cache.full(cacheDatabase), cache,
MutableRevisionedStoredCovers(context, revision), MutableRevisionedStoredCovers(context, revision),
storedPlaylists) storedPlaylists)
} else { } else {
revision = UUID.randomUUID() revision = UUID.randomUUID()
storage = storage =
Storage( Storage(
Cache.writeOnly(cacheDatabase), WriteOnlyCache(cache),
MutableRevisionedStoredCovers(context, revision), MutableRevisionedStoredCovers(context, revision),
storedPlaylists) storedPlaylists)
} }

View file

@ -18,6 +18,7 @@
package org.oxycblt.musikr.cache package org.oxycblt.musikr.cache
import android.content.Context
import org.oxycblt.musikr.cover.StoredCovers import org.oxycblt.musikr.cover.StoredCovers
import org.oxycblt.musikr.fs.DeviceFile import org.oxycblt.musikr.fs.DeviceFile
import org.oxycblt.musikr.pipeline.RawSong import org.oxycblt.musikr.pipeline.RawSong
@ -28,9 +29,7 @@ abstract class Cache {
internal abstract suspend fun write(song: RawSong) internal abstract suspend fun write(song: RawSong)
companion object { companion object {
fun full(db: CacheDatabase): Cache = FullCache(db.cachedSongsDao()) fun from(context: Context): Cache = CacheImpl(CacheDatabase.from(context).cachedSongsDao())
fun writeOnly(db: CacheDatabase): Cache = WriteOnlyCache(db.cachedSongsDao())
} }
} }
@ -40,7 +39,7 @@ internal sealed interface CacheResult {
data class Miss(val file: DeviceFile) : CacheResult data class Miss(val file: DeviceFile) : CacheResult
} }
private class FullCache(private val cacheInfoDao: CacheInfoDao) : Cache() { private class CacheImpl(private val cacheInfoDao: CacheInfoDao) : Cache() {
override suspend fun read(file: DeviceFile, storedCovers: StoredCovers) = override suspend fun read(file: DeviceFile, storedCovers: StoredCovers) =
cacheInfoDao.selectSong(file.uri.toString(), file.lastModified)?.let { cacheInfoDao.selectSong(file.uri.toString(), file.lastModified)?.let {
CacheResult.Hit(it.intoRawSong(file, storedCovers)) CacheResult.Hit(it.intoRawSong(file, storedCovers))
@ -50,9 +49,10 @@ private class FullCache(private val cacheInfoDao: CacheInfoDao) : Cache() {
cacheInfoDao.updateSong(CachedSong.fromRawSong(song)) cacheInfoDao.updateSong(CachedSong.fromRawSong(song))
} }
private class WriteOnlyCache(private val cacheInfoDao: CacheInfoDao) : Cache() { class WriteOnlyCache(private val inner: Cache) : Cache() {
override suspend fun read(file: DeviceFile, storedCovers: StoredCovers) = CacheResult.Miss(file) override suspend fun read(file: DeviceFile, storedCovers: StoredCovers) =
CacheResult.Miss(file)
override suspend fun write(song: RawSong) = override suspend fun write(song: RawSong) =
cacheInfoDao.updateSong(CachedSong.fromRawSong(song)) inner.write(song)
} }

View file

@ -40,8 +40,8 @@ import org.oxycblt.musikr.util.correctWhitespace
import org.oxycblt.musikr.util.splitEscaped import org.oxycblt.musikr.util.splitEscaped
@Database(entities = [CachedSong::class], version = 50, exportSchema = false) @Database(entities = [CachedSong::class], version = 50, exportSchema = false)
abstract class CacheDatabase : RoomDatabase() { internal abstract class CacheDatabase : RoomDatabase() {
internal abstract fun cachedSongsDao(): CacheInfoDao abstract fun cachedSongsDao(): CacheInfoDao
companion object { companion object {
fun from(context: Context) = fun from(context: Context) =