Selaa lähdekoodia

Avoid some crashes

arkon 2 vuotta sitten
vanhempi
commit
a3f3f9d562

+ 0 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt

@@ -20,7 +20,6 @@ import kotlinx.coroutines.flow.collectLatest
 
 class CategoryScreen : Screen {
 
-    // Fix certain crash when wrapped inside a Controller
     override val key = uniqueScreenKey
 
     @Composable

+ 8 - 9
app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt

@@ -589,7 +589,7 @@ class LibraryScreenModel(
         return withIOContext {
             state.value
                 .getLibraryItemsByCategoryId(activeCategory.toLong())
-                .randomOrNull()
+                ?.randomOrNull()
         }
     }
 
@@ -624,7 +624,7 @@ class LibraryScreenModel(
                 }
 
                 val items = state.getLibraryItemsByCategoryId(manga.category)
-                    .fastMap { it.libraryManga }
+                    ?.fastMap { it.libraryManga }.orEmpty()
                 val lastMangaIndex = items.indexOf(lastSelected)
                 val curMangaIndex = items.indexOf(manga)
 
@@ -649,12 +649,11 @@ class LibraryScreenModel(
             val newSelection = state.selection.toMutableList().apply {
                 val categoryId = state.categories.getOrNull(index)?.id ?: -1
                 val selectedIds = fastMap { it.id }
-                val newSelections = state.getLibraryItemsByCategoryId(categoryId)
-                    .fastMapNotNull { item ->
+                state.getLibraryItemsByCategoryId(categoryId)
+                    ?.fastMapNotNull { item ->
                         item.libraryManga.takeUnless { it.id in selectedIds }
                     }
-
-                addAll(newSelections)
+                    ?.let { addAll(it) }
             }
             state.copy(selection = newSelection)
         }
@@ -664,7 +663,7 @@ class LibraryScreenModel(
         mutableState.update { state ->
             val newSelection = state.selection.toMutableList().apply {
                 val categoryId = state.categories[index].id
-                val items = state.getLibraryItemsByCategoryId(categoryId).fastMap { it.libraryManga }
+                val items = state.getLibraryItemsByCategoryId(categoryId)?.fastMap { it.libraryManga }.orEmpty()
                 val selectedIds = fastMap { it.id }
                 val (toRemove, toAdd) = items.fastPartition { it.id in selectedIds }
                 val toRemoveIds = toRemove.fastMap { it.id }
@@ -755,8 +754,8 @@ class LibraryScreenModel(
                 .size
         }
 
-        fun getLibraryItemsByCategoryId(categoryId: Long): List<LibraryItem> {
-            return library.firstNotNullOf { (k, v) -> v.takeIf { k.id == categoryId } }
+        fun getLibraryItemsByCategoryId(categoryId: Long): List<LibraryItem>? {
+            return library.firstNotNullOfOrNull { (k, v) -> v.takeIf { k.id == categoryId } }
         }
 
         fun getLibraryItemsByPage(page: Int): List<LibraryItem> {