diff --git a/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt b/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt
index 8515f3b26..0420594ff 100644
--- a/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt
+++ b/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt
@@ -26,18 +26,15 @@ import android.database.Cursor
import android.net.Uri
import android.os.ParcelFileDescriptor
import dagger.hilt.android.AndroidEntryPoint
+import javax.inject.Inject
import kotlinx.coroutines.runBlocking
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.image.covers.SettingCovers
-import org.oxycblt.auxio.image.covers.SiloedCoverId
-import org.oxycblt.auxio.image.covers.SiloedCovers
import org.oxycblt.musikr.cover.CoverResult
-import javax.inject.Inject
@AndroidEntryPoint
-class CoverProvider @Inject constructor(
- private val settingCovers: SettingCovers
-) : ContentProvider() {
+class CoverProvider @Inject constructor(private val settingCovers: SettingCovers) :
+ ContentProvider() {
override fun onCreate(): Boolean = true
override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor? {
diff --git a/app/src/main/java/org/oxycblt/auxio/image/covers/CompatCovers.kt b/app/src/main/java/org/oxycblt/auxio/image/covers/CompatCovers.kt
index 8a52e428f..4949d78d7 100644
--- a/app/src/main/java/org/oxycblt/auxio/image/covers/CompatCovers.kt
+++ b/app/src/main/java/org/oxycblt/auxio/image/covers/CompatCovers.kt
@@ -1,6 +1,23 @@
+/*
+ * Copyright (c) 2025 Auxio Project
+ * CompatCovers.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.auxio.image.covers
-
import android.content.Context
import android.net.Uri
import android.os.Build
@@ -16,7 +33,8 @@ import org.oxycblt.musikr.cover.MutableCovers
import org.oxycblt.musikr.fs.DeviceFile
import org.oxycblt.musikr.metadata.Metadata
-open class CompatCovers(private val context: Context, private val inner: Covers) : Covers {
+open class CompatCovers(private val context: Context, private val inner: Covers) :
+ Covers {
override suspend fun obtain(id: String): CoverResult {
when (val innerResult = inner.obtain(id)) {
is CoverResult.Hit -> return CoverResult.Hit(innerResult.cover)
@@ -29,7 +47,10 @@ open class CompatCovers(private val context: Context, private val inner: Covers<
}
}
-class MutableCompatCovers(private val context: Context, private val inner: MutableCovers) : CompatCovers(context, inner), MutableCovers {
+class MutableCompatCovers(
+ private val context: Context,
+ private val inner: MutableCovers
+) : CompatCovers(context, inner), MutableCovers {
override suspend fun create(file: DeviceFile, metadata: Metadata): CoverResult {
when (val innerResult = inner.create(file, metadata)) {
is CoverResult.Hit -> return CoverResult.Hit(innerResult.cover)
@@ -37,20 +58,22 @@ class MutableCompatCovers(private val context: Context, private val inner: Mutab
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
return CoverResult.Miss()
}
- val mediaStoreUri = MediaStore.getMediaUri(context, file.uri) ?: return CoverResult.Miss()
+ val mediaStoreUri =
+ MediaStore.getMediaUri(context, file.uri) ?: return CoverResult.Miss()
val proj = arrayOf(MediaStore.MediaColumns._ID)
val cursor = context.contentResolver.query(mediaStoreUri, proj, null, null, null)
- val uri = cursor.use {
- if (it == null || !it.moveToFirst()) {
- return CoverResult.Miss()
+ val uri =
+ cursor.use {
+ if (it == null || !it.moveToFirst()) {
+ return CoverResult.Miss()
+ }
+ val id = it.getLong(it.getColumnIndexOrThrow(MediaStore.MediaColumns._ID))
+ MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.buildUpon().run {
+ appendPath(id.toString())
+ appendPath("albumart")
+ build()
+ }
}
- val id = it.getLong(it.getColumnIndexOrThrow(MediaStore.MediaColumns._ID))
- MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.buildUpon().run {
- appendPath(id.toString())
- appendPath("albumart")
- build()
- }
- }
return CoverResult.Hit(CompatCover(context, uri))
}
}
@@ -66,7 +89,6 @@ class CompatCover(private val context: Context, private val uri: Uri) : FileCove
return context.contentResolver.openFileDescriptor(uri, "r")
}
- override suspend fun open() = withContext(Dispatchers.IO) {
- context.contentResolver.openInputStream(uri)
- }
-}
\ No newline at end of file
+ override suspend fun open() =
+ withContext(Dispatchers.IO) { context.contentResolver.openInputStream(uri) }
+}
diff --git a/app/src/main/java/org/oxycblt/auxio/image/covers/NullCovers.kt b/app/src/main/java/org/oxycblt/auxio/image/covers/NullCovers.kt
index 46ac9eee7..cde9db80a 100644
--- a/app/src/main/java/org/oxycblt/auxio/image/covers/NullCovers.kt
+++ b/app/src/main/java/org/oxycblt/auxio/image/covers/NullCovers.kt
@@ -19,7 +19,6 @@
package org.oxycblt.auxio.image.covers
import android.content.Context
-import org.apache.commons.lang3.ObjectUtils.Null
import org.oxycblt.musikr.cover.Cover
import org.oxycblt.musikr.cover.CoverResult
import org.oxycblt.musikr.cover.MutableCovers
diff --git a/app/src/main/java/org/oxycblt/auxio/image/covers/SettingCovers.kt b/app/src/main/java/org/oxycblt/auxio/image/covers/SettingCovers.kt
index e2f68e6be..0f2d928a6 100644
--- a/app/src/main/java/org/oxycblt/auxio/image/covers/SettingCovers.kt
+++ b/app/src/main/java/org/oxycblt/auxio/image/covers/SettingCovers.kt
@@ -32,6 +32,7 @@ import org.oxycblt.musikr.cover.MutableCovers
interface SettingCovers {
suspend fun obtain(context: Context, id: String): CoverResult
+
suspend fun mutate(context: Context, revision: UUID): MutableCovers
}
@@ -55,5 +56,6 @@ constructor(private val imageSettings: ImageSettings, private val identifier: Co
}
private suspend fun siloedCovers(context: Context, revision: UUID, with: CoverParams) =
- MutableCompatCovers(context, MutableSiloedCovers.from(context, CoverSilo(revision, with), identifier))
+ MutableCompatCovers(
+ context, MutableSiloedCovers.from(context, CoverSilo(revision, with), identifier))
}
diff --git a/app/src/main/java/org/oxycblt/auxio/image/covers/SiloedCovers.kt b/app/src/main/java/org/oxycblt/auxio/image/covers/SiloedCovers.kt
index 6ace70edf..30985dfac 100644
--- a/app/src/main/java/org/oxycblt/auxio/image/covers/SiloedCovers.kt
+++ b/app/src/main/java/org/oxycblt/auxio/image/covers/SiloedCovers.kt
@@ -35,7 +35,8 @@ import org.oxycblt.musikr.fs.DeviceFile
import org.oxycblt.musikr.fs.app.AppFiles
import org.oxycblt.musikr.metadata.Metadata
-open class SiloedCovers(private val silo: CoverSilo, private val fileCovers: FileCovers) : Covers {
+open class SiloedCovers(private val silo: CoverSilo, private val fileCovers: FileCovers) :
+ Covers {
override suspend fun obtain(id: String): CoverResult {
val coverId = SiloedCoverId.parse(id) ?: return CoverResult.Miss()
if (coverId.silo != silo) return CoverResult.Miss()