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 "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,11 +357,16 @@ 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();
|
||||
NekoGui::dataStore->active_routing = name;
|
||||
NekoGui::dataStore->Save();
|
||||
auto ok = NekoGui::dataStore->routing->Load();
|
||||
if (ok) {
|
||||
NekoGui::dataStore->active_routing = name;
|
||||
NekoGui::dataStore->Save();
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
// NO default extra core
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user