From 2a77232d80b6e5a2ee3804ebcb2b9a0f2feb5e94 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Mon, 5 Aug 2024 17:52:45 +0700 Subject: [PATCH] avoid adding duplicate feed/saved search --- .../source/FeedSavedSearchRepositoryImpl.kt | 28 ++++++++++++----- .../data/source/SavedSearchRepositoryImpl.kt | 31 ++++++++++++++----- .../tachiyomi/data/feed_saved_search.sq | 5 +++ 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/data/src/main/java/tachiyomi/data/source/FeedSavedSearchRepositoryImpl.kt b/data/src/main/java/tachiyomi/data/source/FeedSavedSearchRepositoryImpl.kt index 4c498a486..4bc284bda 100644 --- a/data/src/main/java/tachiyomi/data/source/FeedSavedSearchRepositoryImpl.kt +++ b/data/src/main/java/tachiyomi/data/source/FeedSavedSearchRepositoryImpl.kt @@ -49,13 +49,27 @@ class FeedSavedSearchRepositoryImpl( } override suspend fun insert(feedSavedSearch: FeedSavedSearch): Long { - return handler.awaitOneExecutable(true) { - feed_saved_searchQueries.insert( - feedSavedSearch.source, - feedSavedSearch.savedSearch, - feedSavedSearch.global, - ) - feed_saved_searchQueries.selectLastInsertedRowId() + // KMK --> + return handler.await(true) { + val currentFeeds = handler.awaitList { + feed_saved_searchQueries.selectAll(FeedSavedSearchMapper::map) + } + val existedFeedId = currentFeeds.find { currentFeed -> + currentFeed.source == feedSavedSearch.source && + currentFeed.savedSearch == feedSavedSearch.savedSearch && + currentFeed.global == feedSavedSearch.global + }?.id + + existedFeedId + // KMK <-- + ?: handler.awaitOneExecutable(true) { + feed_saved_searchQueries.insert( + feedSavedSearch.source, + feedSavedSearch.savedSearch, + feedSavedSearch.global, + ) + feed_saved_searchQueries.selectLastInsertedRowId() + } } } diff --git a/data/src/main/java/tachiyomi/data/source/SavedSearchRepositoryImpl.kt b/data/src/main/java/tachiyomi/data/source/SavedSearchRepositoryImpl.kt index 5a29693ab..3e894e2dc 100644 --- a/data/src/main/java/tachiyomi/data/source/SavedSearchRepositoryImpl.kt +++ b/data/src/main/java/tachiyomi/data/source/SavedSearchRepositoryImpl.kt @@ -26,14 +26,29 @@ class SavedSearchRepositoryImpl( } override suspend fun insert(savedSearch: SavedSearch): Long { - return handler.awaitOneExecutable(true) { - saved_searchQueries.insert( - savedSearch.source, - savedSearch.name, - savedSearch.query, - savedSearch.filtersJson, - ) - saved_searchQueries.selectLastInsertedRowId() + // KMK --> + return handler.await(true) { + val currentSavedSearches = handler.awaitList { + saved_searchQueries.selectAll(SavedSearchMapper::map) + } + val existedSavedSearchId = currentSavedSearches.find { currentSavedSearch -> + currentSavedSearch.source == savedSearch.source && + currentSavedSearch.name == savedSearch.name && + currentSavedSearch.query == savedSearch.query && + currentSavedSearch.filtersJson == savedSearch.filtersJson + }?.id + + existedSavedSearchId + // KMK <-- + ?: handler.awaitOneExecutable(true) { + saved_searchQueries.insert( + savedSearch.source, + savedSearch.name, + savedSearch.query, + savedSearch.filtersJson, + ) + saved_searchQueries.selectLastInsertedRowId() + } } } diff --git a/data/src/main/sqldelight/tachiyomi/data/feed_saved_search.sq b/data/src/main/sqldelight/tachiyomi/data/feed_saved_search.sq index e5b0e7958..b493580e1 100644 --- a/data/src/main/sqldelight/tachiyomi/data/feed_saved_search.sq +++ b/data/src/main/sqldelight/tachiyomi/data/feed_saved_search.sq @@ -12,6 +12,11 @@ CREATE TABLE feed_saved_search ( CREATE INDEX feed_saved_search_saved_search_index ON feed_saved_search(saved_search); +-- KMK --> +selectAll: +SELECT * FROM feed_saved_search ORDER BY feed_order; +-- KMK <-- + selectAllGlobal: SELECT * FROM feed_saved_search WHERE global = 1 ORDER BY feed_order;