From 395a48ddeb18fee8d510837d717a20a93f5dd3fb Mon Sep 17 00:00:00 2001 From: GG Bond Date: Sat, 10 Feb 2024 12:38:59 +0800 Subject: [PATCH] Implement random walk in localFav --- app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt | 2 ++ .../kotlin/com/hippo/ehviewer/dao/LocalFavoritesDao.kt | 4 ++++ .../com/hippo/ehviewer/ui/screen/FavoritesScreen.kt | 10 ++++++++++ 3 files changed, 16 insertions(+) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt b/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt index f0849b548..28875b706 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt @@ -74,6 +74,8 @@ object EhDB { deleteGalleryInfo(downloadInfo.galleryInfo) } + suspend fun randomLocalFav() = db.localFavoritesDao().random() + suspend fun removeDownloadInfo(downloadInfo: List) { val dao = db.downloadsDao() downloadInfo.forEach { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoritesDao.kt b/app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoritesDao.kt index 76cb48504..aef1fe8f1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoritesDao.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/dao/LocalFavoritesDao.kt @@ -26,6 +26,10 @@ interface LocalFavoritesDao { @Query("SELECT * FROM LOCAL_FAVORITES JOIN GALLERIES USING(GID) WHERE TITLE LIKE :title ORDER BY TIME DESC") fun joinListLazy(title: String): PagingSource + @RewriteQueriesToDropUnusedColumns + @Query("SELECT * FROM LOCAL_FAVORITES JOIN GALLERIES USING(GID) ORDER BY RANDOM() DESC LIMIT 1") + suspend fun random(): BaseGalleryInfo + @Query("SELECT EXISTS(SELECT * FROM LOCAL_FAVORITES WHERE GID = :gid)") suspend fun contains(gid: Long): Boolean diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt index 652bb47d7..7158c2323 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/FavoritesScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.DoneAll import androidx.compose.material.icons.filled.Download import androidx.compose.material.icons.filled.Refresh +import androidx.compose.material.icons.filled.Shuffle import androidx.compose.material.icons.outlined.FolderSpecial import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -84,6 +85,7 @@ import com.hippo.ehviewer.util.mapToLongArray import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator import eu.kanade.tachiyomi.util.lang.withIOContext +import eu.kanade.tachiyomi.util.lang.withUIContext import kotlin.math.roundToInt import kotlinx.coroutines.CancellationException import kotlinx.coroutines.delay @@ -338,6 +340,14 @@ fun FavouritesScreen(navigator: DestinationsNavigator) { autoCancel = !selectMode, ) { if (!selectMode) { + if (isLocalFav) { + onClick(Icons.Default.Shuffle) { + val random = EhDB.randomLocalFav() + withUIContext { + navigator.navigate(GalleryDetailScreenDestination(GalleryInfoArgs(random))) + } + } + } onClick(EhIcons.Default.GoTo) { coroutineScope.launch { val date = dialogState.showDatePicker()