Skip to content

Commit 09c7188

Browse files
committed
Fix the album art stuff, now it works fully
1 parent 3e2cdbe commit 09c7188

2 files changed

Lines changed: 18 additions & 5 deletions

File tree

app/src/main/java/org/akanework/gramophone/logic/GramophoneAlbumArtProvider.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import android.os.OperationCanceledException
1919
import android.os.ParcelFileDescriptor
2020
import android.os.ProxyFileDescriptorCallback
2121
import android.os.storage.StorageManager
22+
import android.system.ErrnoException
23+
import android.system.Os
24+
import android.system.OsConstants.SEEK_SET
2225
import android.util.Log
2326
import androidx.core.content.getSystemService
2427
import androidx.core.os.BundleCompat
@@ -161,10 +164,19 @@ class GramophoneAlbumArtProvider : ContentProvider() {
161164
})
162165
) {
163166
(result.source.metadata as ContentMetadata).assetFileDescriptor.let {
164-
cfd.complete(AssetFileDescriptor(it
165-
.parcelFileDescriptor.dup(), it.startOffset, it.declaredLength))
167+
val newFd = it.parcelFileDescriptor.dup()
168+
try {
169+
// It's only safe to give the unmodified fd to reader if it is
170+
// seekable, because otherwise (pipe?) no matter when we dup, we
171+
// would eat some data when checking for JPEG header.
172+
Os.lseek(newFd.fileDescriptor, it.startOffset,
173+
SEEK_SET)
174+
cfd.complete(AssetFileDescriptor(newFd, it.startOffset,
175+
it.declaredLength))
176+
} catch (_: ErrnoException) {}
166177
}
167-
} else {
178+
}
179+
if (!cfd.isCompleted) {
168180
writeDataCommon(cfd, scope, options.context) {
169181
if (it != null) {
170182
it.sink().buffer().writeAll(src); null

app/src/main/java/org/akanework/gramophone/logic/utils/CoilArtPipeline.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import android.os.CancellationSignal
1212
import android.os.Environment
1313
import android.os.OperationCanceledException
1414
import android.provider.MediaStore
15+
import androidx.media3.common.util.Log
1516
import coil3.ImageLoader
1617
import coil3.Uri
1718
import coil3.decode.ContentMetadata
@@ -100,7 +101,7 @@ object CoilArtPipeline {
100101
throw IllegalArgumentException("Bad data $data")
101102
val imgUri = MediaStoreCompat.getMediaUriForFile(options.context,
102103
imgFile.absolutePath)
103-
val data = if (isSmallSize(options.context, options.size) && false) // TODO(ASAP)
104+
val data = if (isSmallSize(options.context, options.size))
104105
LoadThumbnailData(imgUri)
105106
else
106107
imgUri
@@ -136,7 +137,7 @@ object CoilArtPipeline {
136137
override fun map(data: Uri, options: Options): LoadThumbnailData? {
137138
return if (data.scheme == ContentResolver.SCHEME_CONTENT &&
138139
data.authority == GramophoneAlbumArtProvider.PROVIDER_AUTHORITY &&
139-
data.pathSegments.first() == "song" && false && // TODO(ASAP)
140+
data.pathSegments.first() == "song" &&
140141
isSmallSize(options.context, options.size)) {
141142
LoadThumbnailData(ContentUris.withAppendedId(
142143
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,

0 commit comments

Comments
 (0)