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()