From 504c3cd18b9f489e8ddec6badca2e95ddfda6476 Mon Sep 17 00:00:00 2001 From: zarzet <42882290+zarzet@users.noreply.github.com> Date: Sun, 18 Oct 2026 00:46:10 +0700 Subject: [PATCH] refactor(android): share native album artist resolution --- .../zarz/spotiflac/NativeDownloadFinalizer.kt | 33 ++++++------------- .../zarz/spotiflac/NativeFinalizerMedia.kt | 7 +--- 2 files changed, 11 insertions(+), 29 deletions(-) diff --git a/android/app/src/main/kotlin/com/zarz/spotiflac/NativeDownloadFinalizer.kt b/android/app/src/main/kotlin/com/zarz/spotiflac/NativeDownloadFinalizer.kt index cac6c25f..faa65ed2 100644 --- a/android/app/src/main/kotlin/com/zarz/spotiflac/NativeDownloadFinalizer.kt +++ b/android/app/src/main/kotlin/com/zarz/spotiflac/NativeDownloadFinalizer.kt @@ -993,14 +993,7 @@ object NativeDownloadFinalizer { .put("title", trackString(input, "name", input.request.optString("track_name", ""))) .put("artist", trackString(input, "artistName", input.request.optString("artist_name", ""))) .put("album", trackString(input, "albumName", input.request.optString("album_name", ""))) - .put( - "album_artist", - NativeFinalizationPolicy.authoritativeAlbumArtist( - requestValue = requestString(input, "album_artist"), - trackValue = trackString(input, "albumArtist", ""), - providerResultValue = resultString(input, "album_artist"), - ), - ) + .put("album_artist", resolvedAlbumArtist(input)) .put("track_number", trackInt(input, "trackNumber", input.request.optInt("track_number", 0))) .put("disc_number", trackInt(input, "discNumber", input.request.optInt("disc_number", 0))) .put("isrc", trackString(input, "isrc", input.request.optString("isrc", ""))) @@ -1164,11 +1157,7 @@ object NativeDownloadFinalizer { val albumId = trackString(input, "albumId", "") if (albumId.isNotBlank()) return "id:$albumId" val albumName = trackString(input, "albumName", input.request.optString("album_name", "")) - val albumArtist = NativeFinalizationPolicy.authoritativeAlbumArtist( - requestValue = requestString(input, "album_artist"), - trackValue = trackString(input, "albumArtist", ""), - providerResultValue = resultString(input, "album_artist"), - ) + val albumArtist = resolvedAlbumArtist(input) return "name:$albumName|$albumArtist" } @@ -1187,16 +1176,7 @@ object NativeDownloadFinalizer { values.put("track_name", result.optString("title", "").ifBlank { trackString(input, "name", input.request.optString("track_name", "")) }) values.put("artist_name", result.optString("artist", "").ifBlank { trackString(input, "artistName", input.request.optString("artist_name", "")) }) values.put("album_name", result.optString("album", "").ifBlank { trackString(input, "albumName", input.request.optString("album_name", "")) }) - values.put( - "album_artist", - normalizeOptional( - NativeFinalizationPolicy.authoritativeAlbumArtist( - requestValue = requestString(input, "album_artist"), - trackValue = trackString(input, "albumArtist", ""), - providerResultValue = resultString(input, "album_artist"), - ), - ), - ) + values.put("album_artist", normalizeOptional(resolvedAlbumArtist(input))) values.put("cover_url", normalizeOptional(metadataCoverUrl(input).ifBlank { resultString(input, "cover_url") })) values.put("file_path", state.filePath) values.put("storage_mode", input.request.optString("storage_mode", "app")) @@ -1303,6 +1283,13 @@ object NativeDownloadFinalizer { internal fun resultString(input: FinalizeInput, key: String): String = cleanMetadataString(input.result.optString(key, "")) + internal fun resolvedAlbumArtist(input: FinalizeInput): String = + NativeFinalizationPolicy.authoritativeAlbumArtist( + requestValue = requestString(input, "album_artist"), + trackValue = trackString(input, "albumArtist", ""), + providerResultValue = resultString(input, "album_artist"), + ) + internal fun metadataCoverUrl(input: FinalizeInput): String = trackString(input, "coverUrl", requestString(input, "cover_url")) diff --git a/android/app/src/main/kotlin/com/zarz/spotiflac/NativeFinalizerMedia.kt b/android/app/src/main/kotlin/com/zarz/spotiflac/NativeFinalizerMedia.kt index 62f48355..5a5715f5 100644 --- a/android/app/src/main/kotlin/com/zarz/spotiflac/NativeFinalizerMedia.kt +++ b/android/app/src/main/kotlin/com/zarz/spotiflac/NativeFinalizerMedia.kt @@ -8,7 +8,6 @@ import com.zarz.spotiflac.SafDownloadHandler.normalizeExt import com.zarz.spotiflac.NativeFinalizationPolicy.applyQualityVariantFilenameLabel import com.zarz.spotiflac.NativeFinalizationPolicy.artistTagValue import com.zarz.spotiflac.NativeFinalizationPolicy.metadataTagValue -import com.zarz.spotiflac.NativeFinalizationPolicy.authoritativeAlbumArtist import com.zarz.spotiflac.NativeFinalizationPolicy.formatIndexTag import com.zarz.spotiflac.NativeFinalizationPolicy.logicalOutputFileName import com.zarz.spotiflac.NativeFinalizationPolicy.removeQualityVariantStagingLabel @@ -251,11 +250,7 @@ internal fun NativeDownloadFinalizer.embedBasicMetadata(context: Context, path: val album = resultString(input, "album").ifBlank { trackString(input, "albumName", requestString(input, "album_name")) } - val albumArtist = authoritativeAlbumArtist( - requestValue = requestString(input, "album_artist"), - trackValue = trackString(input, "albumArtist", ""), - providerResultValue = resultString(input, "album_artist"), - ) + val albumArtist = resolvedAlbumArtist(input) val date = resultString(input, "release_date").ifBlank { resultString(input, "date").ifBlank { trackString(input, "releaseDate", requestString(input, "release_date"))