From 4586b729c6696ec1c66781977c1900d07ae4ef19 Mon Sep 17 00:00:00 2001 From: Ren Tatsumoto Date: Tue, 30 Jul 2024 03:55:02 +0300 Subject: [PATCH] add action to remove duplicates across all profiles --- db/Database.cpp | 8 ++++++++ db/Database.hpp | 2 ++ ui/mainwindow.cpp | 9 +++++++-- ui/mainwindow.h | 4 +++- ui/mainwindow.ui | 9 +++++++++ 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/db/Database.cpp b/db/Database.cpp index 84e69df..8e371f7 100644 --- a/db/Database.cpp +++ b/db/Database.cpp @@ -14,6 +14,14 @@ namespace NekoGui { _add(new configItem("groups", &groupsTabOrder, itemType::integerList)); } + QList> ProfileManager::Profiles() const { + QList> ret; + for (const auto &[_, profile]: profiles) { + ret += profile; + } + return ret; + } + QList filterIntJsonFile(const QString &path) { QList result; QDir dr(path); diff --git a/db/Database.hpp b/db/Database.hpp index dc7272f..b6c9948 100644 --- a/db/Database.hpp +++ b/db/Database.hpp @@ -28,6 +28,8 @@ namespace NekoGui { [[nodiscard]] static std::shared_ptr NewGroup(); + QList> Profiles() const; + bool AddProfile(const std::shared_ptr &ent, int gid = -1); void DeleteProfile(int id); diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index d7ed7c4..1549fb0 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -1358,11 +1358,12 @@ void MainWindow::on_menu_select_all_triggered() { ui->proxyListTable->selectAll(); } -void MainWindow::on_menu_delete_repeat_triggered() { +void MainWindow::on_menu_delete_repeat_triggered(bool const search_across_all_profiles) { QList> out; QList> out_del; - NekoGui::ProfileFilter::Uniq(NekoGui::profileManager->CurrentGroup()->Profiles(), out, true, false); + auto const profiles = search_across_all_profiles ? NekoGui::profileManager->Profiles() : NekoGui::profileManager->CurrentGroup()->Profiles(); + NekoGui::ProfileFilter::Uniq(profiles, out, true, false); NekoGui::ProfileFilter::OnlyInSrc_ByPointer(NekoGui::profileManager->CurrentGroup()->Profiles(), out, out_del); int remove_display_count = 0; @@ -1384,6 +1385,10 @@ void MainWindow::on_menu_delete_repeat_triggered() { } } +void MainWindow::on_menu_delete_duplicates_global_triggered() { + return on_menu_delete_repeat_triggered(true); +} + bool mw_sub_updating = false; void MainWindow::on_menu_update_subscription_triggered() { diff --git a/ui/mainwindow.h b/ui/mainwindow.h index 9f95c4d..00cb99d 100644 --- a/ui/mainwindow.h +++ b/ui/mainwindow.h @@ -121,7 +121,9 @@ private slots: void on_menu_select_all_triggered(); - void on_menu_delete_repeat_triggered(); + void on_menu_delete_repeat_triggered(bool const search_across_all_profiles = false); + + void on_menu_delete_duplicates_global_triggered(); void on_menu_remove_unavailable_triggered(); diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 8618965..5174f94 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -542,6 +542,7 @@ + @@ -729,6 +730,14 @@ Ctrl+Shift+D + + + Remove Duplicates Across All Groups + + + + + fake