From 1c569b465bc17c1ba34022e67262c14059c83e4c Mon Sep 17 00:00:00 2001 From: Kelvin Date: Sat, 15 Nov 2025 03:42:04 +0100 Subject: [PATCH] Possible crash fix --- .../platformplayer/states/StateLibrary.kt | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/states/StateLibrary.kt b/app/src/main/java/com/futo/platformplayer/states/StateLibrary.kt index 3a7b1e4a..ada16ee0 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateLibrary.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateLibrary.kt @@ -7,6 +7,7 @@ import android.net.Uri import android.provider.MediaStore import android.provider.MediaStore.Audio.Artists import android.webkit.MimeTypeMap +import androidx.core.database.getStringOrNull import androidx.core.net.toFile import androidx.core.net.toUri import androidx.documentfile.provider.DocumentFile @@ -185,29 +186,39 @@ class StateLibrary { fun getVideoBucketNames(): List { if(_cacheBucketNames != null) return _cacheBucketNames ?: listOf(); - val cur: Cursor = StateApp.instance.contextOrNull?.contentResolver?.query( - MediaStore.Video.Media.EXTERNAL_CONTENT_URI, arrayOf( - MediaStore.Video.Media.BUCKET_ID, - MediaStore.Video.Media.BUCKET_DISPLAY_NAME, - ), null, null, null - ) ?: return listOf(); + try { + val cur: Cursor = StateApp.instance.contextOrNull?.contentResolver?.query( + MediaStore.Video.Media.EXTERNAL_CONTENT_URI, arrayOf( + MediaStore.Video.Media.BUCKET_ID, + MediaStore.Video.Media.BUCKET_DISPLAY_NAME, + ), null, null, null + ) ?: return listOf(); - val buckets = mutableListOf(); - val list = HashSet(); - if (cur.moveToFirst()) { - var id: Long; - var bucket: String - do { - id = cur.getLong(0); - bucket = cur.getString(1) - if(!list.contains(id)) { - list.add(id); - buckets.add(Bucket(id, bucket)); - } - } while (cur.moveToNext()) + val buckets = mutableListOf(); + val list = HashSet(); + if (cur.moveToFirst()) { + var id: Long; + var bucket: String + do { + try { + id = cur.getLong(0); + bucket = cur.getStringOrNull(1) ?: continue; + if (!list.contains(id)) { + list.add(id); + buckets.add(Bucket(id, bucket)); + } + } catch (ex: Throwable) { + Logger.e(TAG, "Failed to parse bucket due to ${ex.message}", ex); + } + } while (cur.moveToNext()) + } + _cacheBucketNames = buckets.toList() + return _cacheBucketNames ?: listOf(); + } + catch(ex: Throwable) { + Logger.e(TAG, "Buckets loading failed, returning empty"); + return listOf(); } - _cacheBucketNames = buckets.toList() - return _cacheBucketNames ?: listOf(); }