From bff39a2740739b2bebf76501af4fac87b05d67bd Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 16 Oct 2024 11:04:39 +0200 Subject: [PATCH] refactor: improve performance when starting background shuffle mode --- app/src/main/java/com/github/libretube/db/dao/DownloadDao.kt | 4 ++++ .../com/github/libretube/services/OfflinePlayerService.kt | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/github/libretube/db/dao/DownloadDao.kt b/app/src/main/java/com/github/libretube/db/dao/DownloadDao.kt index e0d1e0dba..5882cc672 100644 --- a/app/src/main/java/com/github/libretube/db/dao/DownloadDao.kt +++ b/app/src/main/java/com/github/libretube/db/dao/DownloadDao.kt @@ -11,6 +11,7 @@ import com.github.libretube.db.obj.Download import com.github.libretube.db.obj.DownloadChapter import com.github.libretube.db.obj.DownloadItem import com.github.libretube.db.obj.DownloadWithItems +import com.github.libretube.enums.FileType @Dao interface DownloadDao { @@ -22,6 +23,9 @@ interface DownloadDao { @Query("SELECT * FROM download WHERE videoId = :videoId") suspend fun findById(videoId: String): DownloadWithItems + @Query("SELECT videoId FROM downloadItem WHERE type = :fileType ORDER BY RANDOM() LIMIT 1") + suspend fun getRandomVideoIdByFileType(fileType: FileType): String? + @Query("SELECT * FROM downloaditem WHERE id = :id") suspend fun findDownloadItemById(id: Int): DownloadItem? diff --git a/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt b/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt index 9c61ac355..7772704b3 100644 --- a/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt +++ b/app/src/main/java/com/github/libretube/services/OfflinePlayerService.kt @@ -42,8 +42,7 @@ class OfflinePlayerService : AbstractPlayerService() { videoId = if (shuffle) { runBlocking(Dispatchers.IO) { - Database.downloadDao().getAll().filterByTab(downloadTab) - .randomOrNull()?.download?.videoId + Database.downloadDao().getRandomVideoIdByFileType(FileType.AUDIO) } } else { intent.getStringExtra(IntentData.videoId)