Purification GalleryPreviewsScreen

This commit is contained in:
tarsin committed 2023-05-11 16:29:50 +08:00
1 parent dfda4c0bc2
commit 68d55f416e
3 files changed
+22 -41

No files matched your search

@@ -1273,8 +1273,8 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
private fun navigateToPreview(nextPage: Boolean = false) {
composeBindingGD?.let {
val args = Bundle()
args.putParcelable(GalleryPreviewsScene.KEY_GALLERY_DETAIL, it)
args.putBoolean(GalleryPreviewsScene.KEY_NEXT_PAGE, nextPage)
args.putParcelable(KEY_GALLERY_DETAIL, it)
args.putBoolean(KEY_NEXT_PAGE, nextPage)
navigate(R.id.galleryPreviewsScene, args)
}
}
@@ -1,18 +1,3 @@
/*
* Copyright 2016 Hippo Seven
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hippo.ehviewer.ui.scene
import android.os.Bundle
@@ -77,16 +62,14 @@ import com.hippo.ehviewer.ui.widget.rememberDialogState
import com.hippo.ehviewer.ui.widget.setMD3Content
import com.hippo.util.getParcelableCompat
import com.hippo.widget.recyclerview.getSpanCountForSuitableSize
import eu.kanade.tachiyomi.util.lang.launchIO
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import moe.tarsin.coroutines.runSuspendCatching
import java.util.Locale
import kotlin.math.roundToInt
typealias PreviewPage = List<GalleryPreview>
class GalleryPreviewsScene : Fragment() {
class GalleryPreviewsScreen : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return ComposeView(inflater.context).apply {
setMD3Content {
@@ -101,16 +84,27 @@ class GalleryPreviewsScene : Fragment() {
val state = rememberLazyGridState()
val dialogState = rememberDialogState()
dialogState.Handler()
val coroutineScope = rememberCoroutineScope()
val coroutineScope = rememberCoroutineScope { Dispatchers.IO }
val pages = galleryDetail.pages
val pgSize = galleryDetail.previewList.size
var initialKey by rememberSaveable { mutableStateOf(if (toNextPage) 2 else 1) }
suspend fun getPreviewListByPage(page: Int) = galleryDetail.run {
val url = EhUrl.getGalleryDetailUrl(gid, token, page, false)
val result = EhEngine.getPreviewList(url)
if (Settings.preloadThumbAggressively) {
coroutineScope.launch {
context.run { result.first.first.forEach { imageLoader.enqueue(imageRequest(it)) } }
}
}
result.first.first
}
suspend fun showGoToDialog() {
val goto = dialogState.show(initial = 1, title = R.string.go_to) {
var jumpTo by remember { mutableStateOf(1f) }
Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(top = 18.dp)) {
Text(text = String.format(Locale.US, "%d", 1), modifier = Modifier.padding(12.dp))
Text(text = "1", modifier = Modifier.padding(12.dp))
Slider(
value = jumpTo,
onValueChange = { jumpTo = it },
@@ -121,7 +115,7 @@ class GalleryPreviewsScene : Fragment() {
this@show shouldReturn jumpTo.roundToInt()
},
)
Text(text = String.format(Locale.US, "%d", pages), modifier = Modifier.padding(12.dp))
Text(text = pages.toString(), modifier = Modifier.padding(12.dp))
}
}
initialKey = goto
@@ -137,7 +131,7 @@ class GalleryPreviewsScene : Fragment() {
val end = up + params.loadSize - 1
runSuspendCatching {
(up..end).mapNotNull { it.takeUnless { previewPagesMap.contains(it) } }
.parMap(Dispatchers.IO) { getPreviewListByPage(galleryDetail, it - 1).apply { previewPagesMap[it] = this } }
.parMap(Dispatchers.IO) { getPreviewListByPage(it - 1).apply { previewPagesMap[it] = this } }
}.onFailure {
return LoadResult.Error(it)
}
@@ -195,20 +189,7 @@ class GalleryPreviewsScene : Fragment() {
}
}
}
private suspend fun getPreviewListByPage(galleryDetail: GalleryDetail, page: Int): List<GalleryPreview> {
galleryDetail.run {
val url = EhUrl.getGalleryDetailUrl(gid, token, page, false)
val result = EhEngine.getPreviewList(url)
if (Settings.preloadThumbAggressively) {
lifecycleScope.launchIO { context?.run { result.first.first.forEach { imageLoader.enqueue(imageRequest(it)) } } }
}
return result.first.first
}
}
companion object {
const val KEY_GALLERY_DETAIL = "gallery_detail"
const val KEY_NEXT_PAGE = "next_page"
}
}
const val KEY_GALLERY_DETAIL = "gallery_detail"
const val KEY_NEXT_PAGE = "next_page"
+1 -1
View File
@@ -54,7 +54,7 @@
android:label="GalleryCommentsScene" />
<fragment
android:id="@+id/galleryPreviewsScene"
android:name="com.hippo.ehviewer.ui.scene.GalleryPreviewsScene"
android:name="com.hippo.ehviewer.ui.scene.GalleryPreviewsScreen"
android:label="GalleryPreviewsScene" />
<fragment
android:id="@+id/nav_favourite"