mirror of
https://github.com/MatsuriDayo/nekoray.git
synced 2025-12-17 20:44:38 +03:00
fix switch routing
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
#include "NekoGui.hpp"
|
#include "NekoGui.hpp"
|
||||||
|
#include "fmt/Preset.hpp"
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@@ -314,6 +315,10 @@ namespace NekoGui {
|
|||||||
"domain:crashlytics.com\n"
|
"domain:crashlytics.com\n"
|
||||||
"domain:google-analytics.com";
|
"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_ip", &this->direct_ip, itemType::string));
|
||||||
_add(new configItem("direct_domain", &this->direct_domain, itemType::string));
|
_add(new configItem("direct_domain", &this->direct_domain, itemType::string));
|
||||||
_add(new configItem("proxy_ip", &this->proxy_ip, itemType::string));
|
_add(new configItem("proxy_ip", &this->proxy_ip, itemType::string));
|
||||||
@@ -337,12 +342,12 @@ namespace NekoGui {
|
|||||||
|
|
||||||
QString Routing::DisplayRouting() const {
|
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")
|
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_domain).join(","), 10)
|
||||||
.arg(SplitLinesSkipSharp(proxy_ip).join(","))
|
.arg(SplitLinesSkipSharp(proxy_ip).join(","), 10)
|
||||||
.arg(SplitLinesSkipSharp(direct_domain).join(","))
|
.arg(SplitLinesSkipSharp(direct_domain).join(","), 10)
|
||||||
.arg(SplitLinesSkipSharp(direct_ip).join(","))
|
.arg(SplitLinesSkipSharp(direct_ip).join(","), 10)
|
||||||
.arg(SplitLinesSkipSharp(block_domain).join(","))
|
.arg(SplitLinesSkipSharp(block_domain).join(","), 10)
|
||||||
.arg(SplitLinesSkipSharp(block_ip).join(","))
|
.arg(SplitLinesSkipSharp(block_ip).join(","), 10)
|
||||||
.arg(def_outbound)
|
.arg(def_outbound)
|
||||||
.arg(use_dns_object ? "DNS Object" : "Simple DNS");
|
.arg(use_dns_object ? "DNS Object" : "Simple DNS");
|
||||||
}
|
}
|
||||||
@@ -352,12 +357,17 @@ namespace NekoGui {
|
|||||||
return dr.entryList(QDir::Files);
|
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->fn = ROUTES_PREFIX + name;
|
||||||
NekoGui::dataStore->routing->Load();
|
auto ok = NekoGui::dataStore->routing->Load();
|
||||||
|
if (ok) {
|
||||||
NekoGui::dataStore->active_routing = name;
|
NekoGui::dataStore->active_routing = name;
|
||||||
NekoGui::dataStore->Save();
|
NekoGui::dataStore->Save();
|
||||||
}
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
// NO default extra core
|
// NO default extra core
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace NekoGui {
|
|||||||
|
|
||||||
static QStringList List();
|
static QStringList List();
|
||||||
|
|
||||||
static void SetToActive(const QString &name);
|
static bool SetToActive(const QString &name);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ExtraCore : public JsonStore {
|
class ExtraCore : public JsonStore {
|
||||||
@@ -74,7 +74,7 @@ namespace NekoGui {
|
|||||||
QString appdataDir = "";
|
QString appdataDir = "";
|
||||||
QStringList ignoreConnTag = {};
|
QStringList ignoreConnTag = {};
|
||||||
|
|
||||||
Routing *routing = new Routing;
|
std::unique_ptr<Routing> routing;
|
||||||
int imported_count = 0;
|
int imported_count = 0;
|
||||||
bool refreshing_group_list = false;
|
bool refreshing_group_list = false;
|
||||||
bool refreshing_group = false;
|
bool refreshing_group = false;
|
||||||
|
|||||||
@@ -30,12 +30,14 @@ QStringList SplitLines(const QString &_string) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList SplitLinesSkipSharp(const QString &_string) {
|
QStringList SplitLinesSkipSharp(const QString &_string, int maxLine) {
|
||||||
auto lines = SplitLines(_string);
|
auto lines = SplitLines(_string);
|
||||||
QStringList newLines;
|
QStringList newLines;
|
||||||
|
int i = 0;
|
||||||
for (const auto &line: lines) {
|
for (const auto &line: lines) {
|
||||||
if (line.trimmed().startsWith("#")) continue;
|
if (line.trimmed().startsWith("#")) continue;
|
||||||
newLines << line;
|
newLines << line;
|
||||||
|
if (maxLine > 0 && ++i >= maxLine) break;
|
||||||
}
|
}
|
||||||
return newLines;
|
return newLines;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ QString QStringList2Command(const QStringList &list);
|
|||||||
|
|
||||||
QStringList SplitLines(const QString &_string);
|
QStringList SplitLines(const QString &_string);
|
||||||
|
|
||||||
QStringList SplitLinesSkipSharp(const QString &_string);
|
QStringList SplitLinesSkipSharp(const QString &_string, int maxLine = 0);
|
||||||
|
|
||||||
// Base64
|
// Base64
|
||||||
|
|
||||||
|
|||||||
@@ -219,6 +219,7 @@ int main(int argc, char* argv[]) {
|
|||||||
if (NekoGui::dataStore->start_minimal) NekoGui::dataStore->flag_tray = true;
|
if (NekoGui::dataStore->start_minimal) NekoGui::dataStore->flag_tray = true;
|
||||||
|
|
||||||
// load routing
|
// load routing
|
||||||
|
NekoGui::dataStore->routing = std::make_unique<NekoGui::Routing>();
|
||||||
NekoGui::dataStore->routing->fn = ROUTES_PREFIX + NekoGui::dataStore->active_routing;
|
NekoGui::dataStore->routing->fn = ROUTES_PREFIX + NekoGui::dataStore->active_routing;
|
||||||
isLoaded = NekoGui::dataStore->routing->Load();
|
isLoaded = NekoGui::dataStore->routing->Load();
|
||||||
if (!isLoaded) {
|
if (!isLoaded) {
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ DialogManageRoutes::DialogManageRoutes(QWidget *parent) : QDialog(parent), ui(ne
|
|||||||
ui->proxyIPLayout->addWidget(proxyIPTxt, 0, 0);
|
ui->proxyIPLayout->addWidget(proxyIPTxt, 0, 0);
|
||||||
ui->blockIPLayout->addWidget(blockIPTxt, 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)
|
ADD_ASTERISK(this)
|
||||||
}
|
}
|
||||||
@@ -102,7 +102,7 @@ void DialogManageRoutes::accept() {
|
|||||||
D_C_SAVE_STRING(custom_route_global)
|
D_C_SAVE_STRING(custom_route_global)
|
||||||
bool routeChanged = false;
|
bool routeChanged = false;
|
||||||
if (NekoGui::dataStore->active_routing != active_routing) routeChanged = true;
|
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->active_routing = active_routing;
|
||||||
NekoGui::dataStore->routing->fn = ROUTES_PREFIX + NekoGui::dataStore->active_routing;
|
NekoGui::dataStore->routing->fn = ROUTES_PREFIX + NekoGui::dataStore->active_routing;
|
||||||
if (NekoGui::dataStore->routing->Save()) routeChanged = true;
|
if (NekoGui::dataStore->routing->Save()) routeChanged = true;
|
||||||
@@ -211,7 +211,7 @@ void DialogManageRoutes::on_load_save_clicked() {
|
|||||||
r->fn = ROUTES_PREFIX + fn;
|
r->fn = ROUTES_PREFIX + fn;
|
||||||
if (r->Load()) {
|
if (r->Load()) {
|
||||||
if (QMessageBox::question(nullptr, software_name, tr("Load routing: %1").arg(fn) + "\n" + r->DisplayRouting()) == QMessageBox::Yes) {
|
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();
|
w->accept();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -238,7 +238,7 @@ void DialogManageRoutes::on_load_save_clicked() {
|
|||||||
f.remove();
|
f.remove();
|
||||||
if (NekoGui::dataStore->active_routing == fn) {
|
if (NekoGui::dataStore->active_routing == fn) {
|
||||||
NekoGui::Routing::SetToActive(NekoGui::Routing::List().first());
|
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();
|
w->accept();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,8 +94,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
|||||||
software_core_name = "sing-box";
|
software_core_name = "sing-box";
|
||||||
// replace default values
|
// replace default values
|
||||||
if (NekoGui::dataStore->log_level == "warning") NekoGui::dataStore->log_level = "info";
|
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 (NekoGui::dataStore->mux_protocol.isEmpty()) NekoGui::dataStore->mux_protocol = "h2mux";
|
||||||
//
|
//
|
||||||
if (QDir("dashboard").count() == 0) {
|
if (QDir("dashboard").count() == 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user