From 163fe56947263328d0e1597c88f9a4fba74d66f5 Mon Sep 17 00:00:00 2001 From: arm64v8a <48624112+arm64v8a@users.noreply.github.com> Date: Wed, 30 Nov 2022 09:55:41 +0900 Subject: [PATCH] feat: require restart after profile change --- db/ConfigBuilder.cpp | 5 +++++ db/ConfigBuilder.hpp | 1 + main/NekoRay_DataStore.hpp | 1 + ui/edit/dialog_edit_profile.cpp | 8 ++++++-- ui/mainwindow.cpp | 9 ++++++++- ui/mainwindow_grpc.cpp | 1 + 6 files changed, 22 insertions(+), 3 deletions(-) diff --git a/db/ConfigBuilder.cpp b/db/ConfigBuilder.cpp index 45914bb..1199fc6 100644 --- a/db/ConfigBuilder.cpp +++ b/db/ConfigBuilder.cpp @@ -381,6 +381,11 @@ namespace NekoRay { tagOut = "proxy"; } + // ignoreConnTag + if (index != 0) { + status->result->ignoreConnTag << tagOut; + } + if (needGlobal) { if (status->globalProfiles.contains(ent->id)) { continue; diff --git a/db/ConfigBuilder.hpp b/db/ConfigBuilder.hpp index c4d3191..d658337 100644 --- a/db/ConfigBuilder.hpp +++ b/db/ConfigBuilder.hpp @@ -12,6 +12,7 @@ namespace NekoRay { QList> outboundStats; // all, but not including "bypass" "block" QSharedPointer outboundStat; // main + QStringList ignoreConnTag; QList ext; }; diff --git a/main/NekoRay_DataStore.hpp b/main/NekoRay_DataStore.hpp index a8e8492..16090ba 100644 --- a/main/NekoRay_DataStore.hpp +++ b/main/NekoRay_DataStore.hpp @@ -47,6 +47,7 @@ namespace NekoRay { bool core_prepare_exit = false; int running_spmode = NekoRay::SystemProxyMode::DISABLE; bool need_keep_vpn_off = false; + QStringList ignoreConnTag = {}; Routing *routing = new Routing; int imported_count = 0; diff --git a/ui/edit/dialog_edit_profile.cpp b/ui/edit/dialog_edit_profile.cpp index a65a9b8..efb4742 100644 --- a/ui/edit/dialog_edit_profile.cpp +++ b/ui/edit/dialog_edit_profile.cpp @@ -334,16 +334,20 @@ void DialogEditProfile::accept() { *((QString *) custom_item->ptr) = CACHE.custom; } + // finish + QStringList msg = {"accept"}; + if (newEnt) { auto ok = NekoRay::profileManager->AddProfile(ent); if (!ok) { MessageBoxWarning("???", "id exists"); } } else { - ent->Save(); + auto changed = ent->Save(); + if (changed && NekoRay::dataStore->started_id == ent->id) msg << "restart"; } - MW_dialog_message(Dialog_DialogEditProfile, "accept"); + MW_dialog_message(Dialog_DialogEditProfile, msg.join(",")); QDialog::accept(); } diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index 337e5ba..7332a7f 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -462,8 +462,14 @@ void MainWindow::dialog_message_impl(const QString &sender, const QString &info) } // sender if (sender == Dialog_DialogEditProfile) { - if (info == "accept") { + auto msg = info.split(","); + if (msg.contains("accept")) { refresh_proxy_list(); + if (msg.contains("restart")) { + if (QMessageBox::question(GetMessageBoxParent(), tr("Confirmation"), tr("Settings changed, restart proxy?")) == QMessageBox::StandardButton::Yes) { + neko_start(NekoRay::dataStore->started_id); + } + } } } else if (sender == Dialog_DialogManageGroups) { if (info.startsWith("refresh")) { @@ -1342,6 +1348,7 @@ void MainWindow::refresh_connection_list(const QJsonArray &arr) { int row = -1; for (const auto &_item: arr) { auto item = _item.toObject(); + if (NekoRay::dataStore->ignoreConnTag.contains(item["Tag"].toString())) continue; row++; ui->tableWidget_conn->insertRow(row); diff --git a/ui/mainwindow_grpc.cpp b/ui/mainwindow_grpc.cpp index a6a8f7e..36df6d0 100644 --- a/ui/mainwindow_grpc.cpp +++ b/ui/mainwindow_grpc.cpp @@ -232,6 +232,7 @@ void MainWindow::neko_start(int _id) { // NekoRay::traffic::trafficLooper->proxy = result->outboundStat.get(); NekoRay::traffic::trafficLooper->items = result->outboundStats; + NekoRay::dataStore->ignoreConnTag = result->ignoreConnTag; NekoRay::traffic::trafficLooper->loop_enabled = true; #endif