fix switch routing

This commit is contained in:
arm64v8a
2023-07-22 15:46:35 +09:00
parent 9afa9f3128
commit 2fc17e86e7
7 changed files with 31 additions and 20 deletions

View File

@@ -1,4 +1,5 @@
#include "NekoGui.hpp"
#include "fmt/Preset.hpp"
#include <QFile>
#include <QDir>
@@ -314,6 +315,10 @@ namespace NekoGui {
"domain:crashlytics.com\n"
"domain:google-analytics.com";
}
if (IS_NEKO_BOX) {
if (!Preset::SingBox::DomainStrategy.contains(domain_strategy)) domain_strategy = "";
if (!Preset::SingBox::DomainStrategy.contains(outbound_domain_strategy)) outbound_domain_strategy = "";
}
_add(new configItem("direct_ip", &this->direct_ip, itemType::string));
_add(new configItem("direct_domain", &this->direct_domain, itemType::string));
_add(new configItem("proxy_ip", &this->proxy_ip, itemType::string));
@@ -337,12 +342,12 @@ namespace NekoGui {
QString Routing::DisplayRouting() const {
return QString("[Proxy] %1\n[Proxy] %2\n[Direct] %3\n[Direct] %4\n[Block] %5\n[Block] %6\n[Default Outbound] %7\n[DNS] %8")
.arg(SplitLinesSkipSharp(proxy_domain).join(","))
.arg(SplitLinesSkipSharp(proxy_ip).join(","))
.arg(SplitLinesSkipSharp(direct_domain).join(","))
.arg(SplitLinesSkipSharp(direct_ip).join(","))
.arg(SplitLinesSkipSharp(block_domain).join(","))
.arg(SplitLinesSkipSharp(block_ip).join(","))
.arg(SplitLinesSkipSharp(proxy_domain).join(","), 10)
.arg(SplitLinesSkipSharp(proxy_ip).join(","), 10)
.arg(SplitLinesSkipSharp(direct_domain).join(","), 10)
.arg(SplitLinesSkipSharp(direct_ip).join(","), 10)
.arg(SplitLinesSkipSharp(block_domain).join(","), 10)
.arg(SplitLinesSkipSharp(block_ip).join(","), 10)
.arg(def_outbound)
.arg(use_dns_object ? "DNS Object" : "Simple DNS");
}
@@ -352,12 +357,17 @@ namespace NekoGui {
return dr.entryList(QDir::Files);
}
void Routing::SetToActive(const QString &name) {
bool Routing::SetToActive(const QString &name) {
NekoGui::dataStore->routing = std::make_unique<Routing>();
NekoGui::dataStore->routing->load_control_must = true;
NekoGui::dataStore->routing->fn = ROUTES_PREFIX + name;
NekoGui::dataStore->routing->Load();
auto ok = NekoGui::dataStore->routing->Load();
if (ok) {
NekoGui::dataStore->active_routing = name;
NekoGui::dataStore->Save();
}
return ok;
}
// NO default extra core

View File

@@ -33,7 +33,7 @@ namespace NekoGui {
static QStringList List();
static void SetToActive(const QString &name);
static bool SetToActive(const QString &name);
};
class ExtraCore : public JsonStore {
@@ -74,7 +74,7 @@ namespace NekoGui {
QString appdataDir = "";
QStringList ignoreConnTag = {};
Routing *routing = new Routing;
std::unique_ptr<Routing> routing;
int imported_count = 0;
bool refreshing_group_list = false;
bool refreshing_group = false;

View File

@@ -30,12 +30,14 @@ QStringList SplitLines(const QString &_string) {
#endif
}
QStringList SplitLinesSkipSharp(const QString &_string) {
QStringList SplitLinesSkipSharp(const QString &_string, int maxLine) {
auto lines = SplitLines(_string);
QStringList newLines;
int i = 0;
for (const auto &line: lines) {
if (line.trimmed().startsWith("#")) continue;
newLines << line;
if (maxLine > 0 && ++i >= maxLine) break;
}
return newLines;
}

View File

@@ -50,7 +50,7 @@ QString QStringList2Command(const QStringList &list);
QStringList SplitLines(const QString &_string);
QStringList SplitLinesSkipSharp(const QString &_string);
QStringList SplitLinesSkipSharp(const QString &_string, int maxLine = 0);
// Base64

View File

@@ -219,6 +219,7 @@ int main(int argc, char* argv[]) {
if (NekoGui::dataStore->start_minimal) NekoGui::dataStore->flag_tray = true;
// load routing
NekoGui::dataStore->routing = std::make_unique<NekoGui::Routing>();
NekoGui::dataStore->routing->fn = ROUTES_PREFIX + NekoGui::dataStore->active_routing;
isLoaded = NekoGui::dataStore->routing->Load();
if (!isLoaded) {

View File

@@ -89,7 +89,7 @@ DialogManageRoutes::DialogManageRoutes(QWidget *parent) : QDialog(parent), ui(ne
ui->proxyIPLayout->addWidget(proxyIPTxt, 0, 0);
ui->blockIPLayout->addWidget(blockIPTxt, 0, 0);
//
REFRESH_ACTIVE_ROUTING(NekoGui::dataStore->active_routing, NekoGui::dataStore->routing)
REFRESH_ACTIVE_ROUTING(NekoGui::dataStore->active_routing, NekoGui::dataStore->routing.get())
ADD_ASTERISK(this)
}
@@ -102,7 +102,7 @@ void DialogManageRoutes::accept() {
D_C_SAVE_STRING(custom_route_global)
bool routeChanged = false;
if (NekoGui::dataStore->active_routing != active_routing) routeChanged = true;
SaveDisplayRouting(NekoGui::dataStore->routing);
SaveDisplayRouting(NekoGui::dataStore->routing.get());
NekoGui::dataStore->active_routing = active_routing;
NekoGui::dataStore->routing->fn = ROUTES_PREFIX + NekoGui::dataStore->active_routing;
if (NekoGui::dataStore->routing->Save()) routeChanged = true;
@@ -211,7 +211,7 @@ void DialogManageRoutes::on_load_save_clicked() {
r->fn = ROUTES_PREFIX + fn;
if (r->Load()) {
if (QMessageBox::question(nullptr, software_name, tr("Load routing: %1").arg(fn) + "\n" + r->DisplayRouting()) == QMessageBox::Yes) {
REFRESH_ACTIVE_ROUTING(fn, r.get())
REFRESH_ACTIVE_ROUTING(fn, r.get()) // temp save to the window
w->accept();
}
}
@@ -238,7 +238,7 @@ void DialogManageRoutes::on_load_save_clicked() {
f.remove();
if (NekoGui::dataStore->active_routing == fn) {
NekoGui::Routing::SetToActive(NekoGui::Routing::List().first());
REFRESH_ACTIVE_ROUTING(NekoGui::dataStore->active_routing, NekoGui::dataStore->routing)
REFRESH_ACTIVE_ROUTING(NekoGui::dataStore->active_routing, NekoGui::dataStore->routing.get())
}
w->accept();
}

View File

@@ -94,8 +94,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
software_core_name = "sing-box";
// replace default values
if (NekoGui::dataStore->log_level == "warning") NekoGui::dataStore->log_level = "info";
if (!Preset::SingBox::DomainStrategy.contains(NekoGui::dataStore->routing->domain_strategy)) NekoGui::dataStore->routing->domain_strategy = "";
if (!Preset::SingBox::DomainStrategy.contains(NekoGui::dataStore->routing->outbound_domain_strategy)) NekoGui::dataStore->routing->outbound_domain_strategy = "";
if (NekoGui::dataStore->mux_protocol.isEmpty()) NekoGui::dataStore->mux_protocol = "h2mux";
//
if (QDir("dashboard").count() == 0) {