diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cf728ffb..29f65c584 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Reword download reindexing message to avoid confusion ([@MajorTanya](https://github.com/MajorTanya)) ([#2874](https://github.com/mihonapp/mihon/pull/2874)) - Rework internals for better performance ([@Lolle2000la](https://github.com/Lolle2000la)) ([#2955](https://github.com/mihonapp/mihon/pull/2955)) - Optimize tracked library filter ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#2977](https://github.com/mihonapp/mihon/pull/2977)) +- Utilize tracker for library duplicate detection ([@NarwhalHorns](https://github.com/NarwhalHorns)) ([#2977](https://github.com/mihonapp/mihon/pull/2978)) ### Changed - Update tracker icons ([@AntsyLich](https://github.com/AntsyLich)) ([#2773](https://github.com/mihonapp/mihon/pull/2773)) diff --git a/data/src/main/sqldelight/tachiyomi/data/manga_sync.sq b/data/src/main/sqldelight/tachiyomi/data/manga_sync.sq index 44fa0570b..d5d9799dc 100644 --- a/data/src/main/sqldelight/tachiyomi/data/manga_sync.sq +++ b/data/src/main/sqldelight/tachiyomi/data/manga_sync.sq @@ -20,6 +20,9 @@ CREATE TABLE manga_sync( ON DELETE CASCADE ); +-- KMK: index for mangas.sq: getDuplicateLibraryManga's track_dupes +CREATE INDEX idx_manga_sync_sync_id_remote_id ON manga_sync(sync_id, remote_id, manga_id); + delete: DELETE FROM manga_sync WHERE manga_id = :mangaId AND sync_id = :syncId; diff --git a/data/src/main/sqldelight/tachiyomi/data/mangas.sq b/data/src/main/sqldelight/tachiyomi/data/mangas.sq index bf04d800e..d543b6690 100644 --- a/data/src/main/sqldelight/tachiyomi/data/mangas.sq +++ b/data/src/main/sqldelight/tachiyomi/data/mangas.sq @@ -119,12 +119,23 @@ AND source = :sourceId; getDuplicateLibraryManga: WITH +track_dupes AS ( + SELECT DISTINCT S2.manga_id + FROM manga_sync S1 + INNER JOIN manga_sync S2 + ON S1.sync_id = S2.sync_id + AND S1.remote_id = S2.remote_id + AND S1.manga_id != S2.manga_id + WHERE S1.manga_id = :id +), duplicates AS ( - SELECT * - FROM mangas + SELECT M.* + FROM mangas M + LEFT JOIN track_dupes D + ON D.manga_id = _id WHERE favorite = 1 AND _id != :id - AND lower(title) LIKE '%' || lower(:title) || '%' + AND (lower(title) LIKE '%' || lower(:title) || '%' OR D.manga_id IS NOT NULL) ), chapter_counts AS ( SELECT diff --git a/data/src/main/sqldelight/tachiyomi/migrations/45.sqm b/data/src/main/sqldelight/tachiyomi/migrations/45.sqm index 2614232b4..56b845447 100644 --- a/data/src/main/sqldelight/tachiyomi/migrations/45.sqm +++ b/data/src/main/sqldelight/tachiyomi/migrations/45.sqm @@ -7,3 +7,5 @@ CREATE INDEX IF NOT EXISTS idx_mangas_categories_category_id ON mangas_categorie DROP INDEX IF EXISTS excluded_scanlators_manga_id_index; CREATE INDEX IF NOT EXISTS idx_excluded_scanlators_manga_id_scanlator ON excluded_scanlators(manga_id, scanlator); CREATE INDEX IF NOT EXISTS idx_history_last_read ON history(last_read) WHERE last_read > 0; + +CREATE INDEX IF NOT EXISTS idx_manga_sync_sync_id_remote_id ON manga_sync(sync_id, remote_id, manga_id);