From 85bd7c3351b3787f472a354d0c2376a099b7beb8 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Sat, 8 Nov 2025 10:29:43 +0800 Subject: [PATCH 1/3] HistoryDao: latestEntry can be null Signed-off-by: Aayush Gupta --- .../java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt | 2 +- .../org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt b/app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt index d986d0c3b..fda46073b 100644 --- a/app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt @@ -9,5 +9,5 @@ package org.schabi.newpipe.database.history.dao import org.schabi.newpipe.database.BasicDAO interface HistoryDAO : BasicDAO { - val latestEntry: T + val latestEntry: T? } diff --git a/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt b/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt index a249721fc..e20e10de9 100644 --- a/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt @@ -15,7 +15,7 @@ import org.schabi.newpipe.database.history.model.SearchHistoryEntry interface SearchHistoryDAO : HistoryDAO { @get:Query("SELECT * FROM search_history WHERE id = (SELECT MAX(id) FROM search_history)") - override val latestEntry: SearchHistoryEntry + override val latestEntry: SearchHistoryEntry? @Query("DELETE FROM search_history") override fun deleteAll(): Int From 9702189be401708e6f5b4f837adfc3721f6c18b6 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 17 Nov 2025 14:40:38 +0800 Subject: [PATCH 2/3] Move latestEntry into SearchHistoryDao directly The StreamHistoryDao one isn't used, so remove it and streamline the logic Signed-off-by: Aayush Gupta --- .../newpipe/database/history/dao/HistoryDAO.kt | 13 ------------- .../database/history/dao/SearchHistoryDAO.kt | 5 +++-- .../database/history/dao/StreamHistoryDAO.kt | 6 ++---- 3 files changed, 5 insertions(+), 19 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt diff --git a/app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt b/app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt deleted file mode 100644 index fda46073b..000000000 --- a/app/src/main/java/org/schabi/newpipe/database/history/dao/HistoryDAO.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2017 NewPipe contributors - * SPDX-FileCopyrightText: 2025 NewPipe e.V. - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -package org.schabi.newpipe.database.history.dao - -import org.schabi.newpipe.database.BasicDAO - -interface HistoryDAO : BasicDAO { - val latestEntry: T? -} diff --git a/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt b/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt index e20e10de9..ddcb00489 100644 --- a/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/history/dao/SearchHistoryDAO.kt @@ -9,13 +9,14 @@ package org.schabi.newpipe.database.history.dao import androidx.room.Dao import androidx.room.Query import io.reactivex.rxjava3.core.Flowable +import org.schabi.newpipe.database.BasicDAO import org.schabi.newpipe.database.history.model.SearchHistoryEntry @Dao -interface SearchHistoryDAO : HistoryDAO { +interface SearchHistoryDAO : BasicDAO { @get:Query("SELECT * FROM search_history WHERE id = (SELECT MAX(id) FROM search_history)") - override val latestEntry: SearchHistoryEntry? + val latestEntry: SearchHistoryEntry? @Query("DELETE FROM search_history") override fun deleteAll(): Int diff --git a/app/src/main/java/org/schabi/newpipe/database/history/dao/StreamHistoryDAO.kt b/app/src/main/java/org/schabi/newpipe/database/history/dao/StreamHistoryDAO.kt index dfea41e12..432c93a55 100644 --- a/app/src/main/java/org/schabi/newpipe/database/history/dao/StreamHistoryDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/history/dao/StreamHistoryDAO.kt @@ -10,15 +10,13 @@ import androidx.room.Dao import androidx.room.Query import androidx.room.RewriteQueriesToDropUnusedColumns import io.reactivex.rxjava3.core.Flowable +import org.schabi.newpipe.database.BasicDAO import org.schabi.newpipe.database.history.model.StreamHistoryEntity import org.schabi.newpipe.database.history.model.StreamHistoryEntry import org.schabi.newpipe.database.stream.StreamStatisticsEntry @Dao -abstract class StreamHistoryDAO : HistoryDAO { - - @get:Query("SELECT * FROM stream_history WHERE access_date = (SELECT MAX(access_date) FROM stream_history)") - abstract override val latestEntry: StreamHistoryEntity +abstract class StreamHistoryDAO : BasicDAO { @Query("SELECT * FROM stream_history") abstract override fun getAll(): Flowable> From 93f03bab87343a1a77936f2638ce91955287aa15 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 17 Nov 2025 16:09:45 +0800 Subject: [PATCH 3/3] Call checkpoint creation from an executor java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time. Signed-off-by: Aayush Gupta --- .../newpipe/settings/BackupRestoreSettingsFragment.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java index 321ad65da..2900dee90 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/BackupRestoreSettingsFragment.java @@ -40,6 +40,8 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.Objects; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class BackupRestoreSettingsFragment extends BasePreferenceFragment { @@ -155,9 +157,9 @@ public class BackupRestoreSettingsFragment extends BasePreferenceFragment { } private void exportDatabase(final StoredFileHelper file, final Uri exportDataUri) { - try { + try (ExecutorService executor = Executors.newSingleThreadExecutor()) { //checkpoint before export - NewPipeDatabase.checkpoint(); + executor.submit(NewPipeDatabase::checkpoint).get(); final SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences(requireContext());