diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt
index 1172a2e81..0b0a8dc3c 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-
+
package org.oxycblt.auxio.music
import android.content.Context
@@ -40,6 +40,7 @@ import org.oxycblt.musikr.Playlist
import org.oxycblt.musikr.Song
import org.oxycblt.musikr.Storage
import org.oxycblt.musikr.cache.StoredCache
+import org.oxycblt.musikr.cover.CoverIdentifier
import org.oxycblt.musikr.cover.CoverParams
import org.oxycblt.musikr.playlist.db.StoredPlaylists
import org.oxycblt.musikr.tag.interpret.Naming
@@ -244,11 +245,15 @@ constructor(
) : MusicRepository {
private val updateListeners = mutableListOf()
private val indexingListeners = mutableListOf()
- @Volatile private var indexingWorker: MusicRepository.IndexingWorker? = null
+ @Volatile
+ private var indexingWorker: MusicRepository.IndexingWorker? = null
- @Volatile override var library: MutableLibrary? = null
- @Volatile private var previousCompletedState: IndexingState.Completed? = null
- @Volatile private var currentIndexingState: IndexingState? = null
+ @Volatile
+ override var library: MutableLibrary? = null
+ @Volatile
+ private var previousCompletedState: IndexingState.Completed? = null
+ @Volatile
+ private var currentIndexingState: IndexingState? = null
override val indexingState: IndexingState?
get() = currentIndexingState ?: previousCompletedState
@@ -388,7 +393,11 @@ constructor(
val currentRevision = musicSettings.revision
val newRevision = currentRevision?.takeIf { withCache } ?: UUID.randomUUID()
val cache = if (withCache) storedCache.visible() else storedCache.invisible()
- val covers = SiloedCovers.at(context, CoverSilo(newRevision, CoverParams.of(750, 80)))
+ val covers = SiloedCovers.from(
+ context,
+ CoverSilo(newRevision, CoverParams.of(750, 80)),
+ CoverIdentifier.md5()
+ )
val storage = Storage(cache, covers, storedPlaylists)
val interpretation = Interpretation(nameFactory, separators)
@@ -414,9 +423,9 @@ constructor(
// TODO: Remove this once you start work on kindred.
deviceLibraryChanged =
this.library?.songs != newLibrary.songs ||
- this.library?.albums != newLibrary.albums ||
- this.library?.artists != newLibrary.artists ||
- this.library?.genres != newLibrary.genres
+ this.library?.albums != newLibrary.albums ||
+ this.library?.artists != newLibrary.artists ||
+ this.library?.genres != newLibrary.genres
userLibraryChanged = this.library?.playlists != newLibrary.playlists
if (!deviceLibraryChanged && !userLibraryChanged) {
L.d("Library has not changed, skipping update")
diff --git a/app/src/main/java/org/oxycblt/auxio/music/covers/CoverUtil.kt b/app/src/main/java/org/oxycblt/auxio/music/covers/CoverUtil.kt
new file mode 100644
index 000000000..2eaf76942
--- /dev/null
+++ b/app/src/main/java/org/oxycblt/auxio/music/covers/CoverUtil.kt
@@ -0,0 +1,9 @@
+package org.oxycblt.auxio.music.covers
+
+import android.content.Context
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+
+suspend fun Context.coversDir() = withContext(Dispatchers.IO) {
+ filesDir.resolve("covers").apply { mkdirs() }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/oxycblt/auxio/music/covers/NullCovers.kt b/app/src/main/java/org/oxycblt/auxio/music/covers/NullCovers.kt
new file mode 100644
index 000000000..38306694a
--- /dev/null
+++ b/app/src/main/java/org/oxycblt/auxio/music/covers/NullCovers.kt
@@ -0,0 +1,24 @@
+package org.oxycblt.auxio.music.covers
+
+import android.content.Context
+import org.oxycblt.musikr.cover.Cover
+import org.oxycblt.musikr.cover.CoverIdentifier
+import org.oxycblt.musikr.cover.Covers
+import org.oxycblt.musikr.cover.MutableCovers
+import org.oxycblt.musikr.cover.ObtainResult
+import java.io.InputStream
+
+class NullCovers(private val context: Context, private val identifier: CoverIdentifier) : MutableCovers {
+ override suspend fun obtain(id: String) = ObtainResult.Hit(NullCover(id))
+
+ override suspend fun write(data: ByteArray): Cover =
+ NullCover(identifier.identify(data))
+
+ override suspend fun cleanup(excluding: Collection) {
+ context.coversDir().listFiles()?.forEach { it.deleteRecursively() }
+ }
+}
+
+private class NullCover(override val id: String) : Cover {
+ override suspend fun open() = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/oxycblt/auxio/music/covers/SiloedCovers.kt b/app/src/main/java/org/oxycblt/auxio/music/covers/SiloedCovers.kt
index 9fffb07e3..141638721 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/covers/SiloedCovers.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/covers/SiloedCovers.kt
@@ -25,6 +25,7 @@ import kotlinx.coroutines.withContext
import org.oxycblt.musikr.cover.Cover
import org.oxycblt.musikr.cover.CoverFiles
import org.oxycblt.musikr.cover.CoverFormat
+import org.oxycblt.musikr.cover.CoverIdentifier
import org.oxycblt.musikr.cover.Covers
import org.oxycblt.musikr.cover.MutableCovers
import org.oxycblt.musikr.cover.ObtainResult
@@ -56,16 +57,16 @@ class SiloedCovers(
}
companion object {
- suspend fun at(context: Context, silo: CoverSilo): SiloedCovers {
+ suspend fun from(context: Context, silo: CoverSilo, identifier: CoverIdentifier): SiloedCovers {
val rootDir: File
val revisionDir: File
withContext(Dispatchers.IO) {
- rootDir = context.filesDir.resolve("covers").apply { mkdirs() }
+ rootDir = context.coversDir()
revisionDir = rootDir.resolve(silo.toString()).apply { mkdirs() }
}
val files = CoverFiles.at(revisionDir)
val format = CoverFormat.jpeg(silo.params)
- return SiloedCovers(rootDir, silo, Covers.from(files, format))
+ return SiloedCovers(rootDir, silo, Covers.from(files, format, identifier))
}
}
}