code refactors

This commit is contained in:
Qv2ray-Bot 2020-01-27 21:50:05 +08:00
parent 4992a6a020
commit 58b0d4d3b5
25 changed files with 361 additions and 317 deletions

View File

@ -1 +1 @@
3157 3166

View File

@ -60,12 +60,13 @@ SOURCES += \
src/QvCoreConfigOperations_Convertion.cpp \ src/QvCoreConfigOperations_Convertion.cpp \
src/QvCoreConfigOperations_Generation.cpp \ src/QvCoreConfigOperations_Generation.cpp \
src/QvUtils.cpp \ src/QvUtils.cpp \
src/ui/routeNodeModels/QvInboundNodeModel.cpp \ src/ui/RouteNodeModels/QvInboundNodeModel.cpp \
src/ui/routeNodeModels/QvOutboundNodeModel.cpp \ src/ui/RouteNodeModels/QvOutboundNodeModel.cpp \
src/ui/routeNodeModels/QvRuleNodeModel.cpp \ src/ui/RouteNodeModels/QvRuleNodeModel.cpp \
src/ui/w_MainWindow_extra.cpp \ src/ui/w_MainWindow_extra.cpp \
src/ui/w_PreferencesWindow.cpp \ src/ui/w_PreferencesWindow.cpp \
src/ui/w_RoutesEditor_extra.cpp \ src/ui/w_RoutesEditor_extra.cpp \
src/utils/QvGlobalVarsInstantiation.cpp \
src/utils/QvHelpers.cpp \ src/utils/QvHelpers.cpp \
src/utils/QJsonModel.cpp \ src/utils/QJsonModel.cpp \
src/ui/w_ExportConfig.cpp \ src/ui/w_ExportConfig.cpp \
@ -103,10 +104,10 @@ HEADERS += \
src/components/QvPACHandler.hpp \ src/components/QvPACHandler.hpp \
src/components/QvSystemProxyConfigurator.hpp \ src/components/QvSystemProxyConfigurator.hpp \
src/components/QvTCPing.hpp \ src/components/QvTCPing.hpp \
src/ui/routeNodeModels/QvInboundNodeModel.hpp \ src/ui/RouteNodeModels/QvInboundNodeModel.hpp \
src/ui/routeNodeModels/QvNodeModelsBase.hpp \ src/ui/RouteNodeModels/QvNodeModelsBase.hpp \
src/ui/routeNodeModels/QvOutboundNodeModel.hpp \ src/ui/RouteNodeModels/QvOutboundNodeModel.hpp \
src/ui/routeNodeModels/QvRuleNodeModel.hpp \ src/ui/RouteNodeModels/QvRuleNodeModel.hpp \
src/ui/w_ExportConfig.hpp \ src/ui/w_ExportConfig.hpp \
src/ui/w_ImportConfig.hpp \ src/ui/w_ImportConfig.hpp \
src/ui/w_InboundEditor.hpp \ src/ui/w_InboundEditor.hpp \
@ -118,6 +119,7 @@ HEADERS += \
src/ui/w_SubscriptionEditor.hpp \ src/ui/w_SubscriptionEditor.hpp \
src/ui/w_ScreenShot_Core.hpp \ src/ui/w_ScreenShot_Core.hpp \
src/utils/QvHelpers.hpp \ src/utils/QvHelpers.hpp \
src/utils/QvRuntimeConfig.hpp \
src/utils/QvTinyLog.hpp \ src/utils/QvTinyLog.hpp \
src/utils/QJsonModel.hpp \ src/utils/QJsonModel.hpp \
src/utils/QJsonObjectInsertMacros.h src/utils/QJsonObjectInsertMacros.h

View File

@ -18,7 +18,7 @@ const int QV2RAY_CONFIG_VERSION = 8;
# endif # endif
#endif #endif
extern bool isDebug; extern const bool isDebugBuild;
// Base folder suffix. // Base folder suffix.
#ifdef QT_DEBUG #ifdef QT_DEBUG
# define QV2RAY_CONFIG_DIR_SUFFIX "_debug/" # define QV2RAY_CONFIG_DIR_SUFFIX "_debug/"

View File

@ -5,9 +5,6 @@ namespace Qv2ray
{ {
namespace Utils namespace Utils
{ {
static bool _isQv2rayExiting = false;
Qv2rayConfig GlobalConfig = Qv2rayConfig();
QString Qv2rayConfigPath = "";
void SaveGlobalConfig(Qv2rayConfig conf) void SaveGlobalConfig(Qv2rayConfig conf)
{ {
GlobalConfig = conf; GlobalConfig = conf;
@ -31,21 +28,17 @@ namespace Qv2ray
file.open(QFile::ReadOnly); file.open(QFile::ReadOnly);
QTextStream stream(&file); QTextStream stream(&file);
auto str = stream.readAll(); auto str = stream.readAll();
auto config = StructFromJsonString<Qv2rayConfig>(str); auto config = StructFromJsonString<Qv2rayConfig>(str);
SaveGlobalConfig(config); SaveGlobalConfig(config);
file.close(); file.close();
} }
void ExitQv2ray() void ExitQv2ray()
{ {
_isQv2rayExiting = true; isExiting = true;
QApplication::quit(); QApplication::quit();
} }
bool isExiting()
{
return _isQv2rayExiting;
}
tuple<QString, int, QString> GetConnectionInfo(const CONFIGROOT &root) tuple<QString, int, QString> GetConnectionInfo(const CONFIGROOT &root)
{ {
bool validOutboundFound = false; bool validOutboundFound = false;

View File

@ -11,6 +11,7 @@ namespace Qv2ray
{ {
extern QString Qv2rayConfigPath; extern QString Qv2rayConfigPath;
extern Qv2rayConfig GlobalConfig; extern Qv2rayConfig GlobalConfig;
extern bool isExiting;
// //
void SaveGlobalConfig(Qv2rayConfig conf); void SaveGlobalConfig(Qv2rayConfig conf);
void LoadGlobalConfig(); void LoadGlobalConfig();
@ -27,7 +28,6 @@ namespace Qv2ray
} }
void ExitQv2ray(); void ExitQv2ray();
bool isExiting();
tuple<QString, int, QString> GetConnectionInfo(const CONFIGROOT &alias); tuple<QString, int, QString> GetConnectionInfo(const CONFIGROOT &alias);
bool GetOutboundData(const OUTBOUND &out, QString *host, int *port, QString *protocol); bool GetOutboundData(const OUTBOUND &out, QString *host, int *port, QString *protocol);
} }

View File

@ -7,9 +7,6 @@ namespace Qv2ray
{ {
namespace CommandArgOperations namespace CommandArgOperations
{ {
// Instantiation
QvStartupOptions StartupOption = QvStartupOptions{};
QvCommandArgParser::QvCommandArgParser() : QObject(), QvCommandArgParser::QvCommandArgParser() : QObject(),
noAPIOption("noAPI", QObject::tr("Disable gRPC API subsystems.")), noAPIOption("noAPI", QObject::tr("Disable gRPC API subsystems.")),
runAsRootOption("I-just-wanna-run-with-root", QObject::tr("Explicitly run Qv2ray as root.")), runAsRootOption("I-just-wanna-run-with-root", QObject::tr("Explicitly run Qv2ray as root.")),

View File

@ -242,6 +242,9 @@ namespace Qv2ray
{ {
KernelStarted = false; KernelStarted = false;
vProcess->close(); vProcess->close();
// Block until V2ray core exits
// Should we use -1 instead of waiting for 30secs?
vProcess->waitForFinished();
killTimer(apiTimerId); killTimer(apiTimerId);
apiFailedCounter = 0; apiFailedCounter = 0;
transferData.clear(); transferData.clear();

View File

@ -42,7 +42,7 @@ namespace Qv2ray
QvTCPingData QvTCPingModel::startTestLatency(QvTCPingData data, const int count) QvTCPingData QvTCPingModel::startTestLatency(QvTCPingData data, const int count)
{ {
if (isExiting()) return QvTCPingData(); if (isExiting) return QvTCPingData();
double successCount = 0, errorCount = 0; double successCount = 0, errorCount = 0;
addrinfo *resolved; addrinfo *resolved;
@ -61,7 +61,7 @@ namespace Qv2ray
int currentCount = 0; int currentCount = 0;
while (currentCount < count) { while (currentCount < count) {
if (isExiting()) return QvTCPingData(); if (isExiting) return QvTCPingData();
timeval rtt; timeval rtt;
@ -102,7 +102,7 @@ namespace Qv2ray
int QvTCPingModel::resolveHost(const string &host, int port, addrinfo **res) int QvTCPingModel::resolveHost(const string &host, int port, addrinfo **res)
{ {
if (isExiting()) return 0; if (isExiting) return 0;
addrinfo hints; addrinfo hints;
#ifdef _WIN32 #ifdef _WIN32
@ -120,7 +120,7 @@ namespace Qv2ray
int QvTCPingModel::testLatency(struct addrinfo *addr, struct timeval *rtt) int QvTCPingModel::testLatency(struct addrinfo *addr, struct timeval *rtt)
{ {
if (isExiting()) return 0; if (isExiting) return 0;
int fd; int fd;
struct timeval start; struct timeval start;
@ -131,7 +131,7 @@ namespace Qv2ray
/* try to connect for each of the entries: */ /* try to connect for each of the entries: */
while (addr != nullptr) { while (addr != nullptr) {
if (isExiting()) return 0; if (isExiting) return 0;
/* create socket */ /* create socket */
if ((fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol)) == -1) if ((fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol)) == -1)

View File

@ -16,9 +16,6 @@
#include "unistd.h" #include "unistd.h"
#endif #endif
bool isDebug = false;
void signalHandler(int signum) void signalHandler(int signum)
{ {
cout << "Interrupt signal (" << signum << ") received." << endl; cout << "Interrupt signal (" << signum << ") received." << endl;
@ -269,12 +266,10 @@ int main(int argc, char *argv[])
// //
#ifdef QT_DEBUG #ifdef QT_DEBUG
// ----------------------------> For debug build... // ----------------------------> For debug build...
isDebug = true;
SingleApplication::setApplicationName("Qv2ray - DEBUG"); SingleApplication::setApplicationName("Qv2ray - DEBUG");
#endif #endif
// if (isDebugBuild || StartupOption.debugLog) {
if (StartupOption.debugLog) {
DEBUG(MODULE_INIT, "Debug log enabled") DEBUG(MODULE_INIT, "Debug log enabled")
} }

View File

@ -18,6 +18,7 @@
#include "w_SubscriptionEditor.hpp" #include "w_SubscriptionEditor.hpp"
#include "w_RoutesEditor.hpp" #include "w_RoutesEditor.hpp"
#include "QvRuntimeConfig.hpp"
ImportConfigWindow::ImportConfigWindow(QWidget *parent) ImportConfigWindow::ImportConfigWindow(QWidget *parent)
: QDialog(parent) : QDialog(parent)
@ -25,6 +26,7 @@ ImportConfigWindow::ImportConfigWindow(QWidget *parent)
setupUi(this); setupUi(this);
nameTxt->setText(QDateTime::currentDateTime().toString("MMdd_hhmm")); nameTxt->setText(QDateTime::currentDateTime().toString("MMdd_hhmm"));
REGISTER_WINDOW REGISTER_WINDOW
RESTORE_RUNTIME_CONFIG(screenShotHideQv2ray, hideQv2rayCB->setChecked)
} }
ImportConfigWindow::~ImportConfigWindow() ImportConfigWindow::~ImportConfigWindow()
@ -280,3 +282,9 @@ void ImportConfigWindow::on_routeEditBtn_clicked()
return; return;
} }
} }
void ImportConfigWindow::on_hideQv2rayCB_stateChanged(int arg1)
{
Q_UNUSED(arg1)
SET_RUNTIME_CONFIG(screenShotHideQv2ray, hideQv2rayCB->isChecked)
}

View File

@ -34,6 +34,8 @@ class ImportConfigWindow : public QDialog, private Ui::ImportConfigWindow
void on_routeEditBtn_clicked(); void on_routeEditBtn_clicked();
void on_hideQv2rayCB_stateChanged(int arg1);
private: private:
QMap<QString, CONFIGROOT> connections; QMap<QString, CONFIGROOT> connections;
QMap<QString, QString> vmessErrors; QMap<QString, QString> vmessErrors;

View File

@ -10,9 +10,17 @@
#include "w_InboundEditor.hpp" #include "w_InboundEditor.hpp"
#include "w_ImportConfig.hpp" #include "w_ImportConfig.hpp"
#include "RouteNodeModels/QvRuleNodeModel.hpp"
#include "RouteNodeModels/QvInboundNodeModel.hpp"
#include "RouteNodeModels/QvOutboundNodeModel.hpp"
#include "NodeStyle.hpp" #include "NodeStyle.hpp"
#include "FlowView.hpp"
#include "FlowViewStyle.hpp" #include "FlowViewStyle.hpp"
using QtNodes::FlowView;
using namespace Qv2ray::Components::Nodes;
static bool isLoading = false; static bool isLoading = false;
#define CurrentRule this->rules[this->currentRuleTag] #define CurrentRule this->rules[this->currentRuleTag]
#define LOADINGCHECK if(isLoading) return; #define LOADINGCHECK if(isLoading) return;
@ -115,7 +123,7 @@ void RouteEditor::onNodeClicked(Node &n)
{ {
LOADINGCHECK LOADINGCHECK
if (isExiting()) return; if (isExiting) return;
auto isOut = outboundNodes.values().contains(&n); auto isOut = outboundNodes.values().contains(&n);
auto isIn = inboundNodes.values().contains(&n); auto isIn = inboundNodes.values().contains(&n);
@ -160,7 +168,7 @@ void RouteEditor::onConnectionCreated(QtNodes::Connection const &c)
{ {
LOADINGCHECK LOADINGCHECK
if (isExiting()) return; if (isExiting) return;
// Connection Established // Connection Established
auto const sourceNode = c.getNode(PortType::Out); auto const sourceNode = c.getNode(PortType::Out);
@ -211,7 +219,7 @@ void RouteEditor::onConnectionDeleted(QtNodes::Connection const &c)
{ {
LOADINGCHECK LOADINGCHECK
if (isExiting()) return; if (isExiting) return;
// Connection Deleted // Connection Deleted
auto const source = c.getNode(PortType::Out); auto const source = c.getNode(PortType::Out);

View File

@ -7,30 +7,14 @@
#include <QListWidgetItem> #include <QListWidgetItem>
#include "QvUtils.hpp" #include "QvUtils.hpp"
#include "Node.hpp"
#include "FlowScene.hpp"
#include "FlowView.hpp"
#include "ConnectionStyle.hpp"
#include "Node.hpp" #include "Node.hpp"
#include "NodeData.hpp" #include "NodeData.hpp"
#include "ConnectionStyle.hpp"
#include "FlowScene.hpp" #include "FlowScene.hpp"
#include "FlowView.hpp"
#include "DataModelRegistry.hpp"
#include "routeNodeModels/QvRuleNodeModel.hpp"
#include "routeNodeModels/QvInboundNodeModel.hpp"
#include "routeNodeModels/QvOutboundNodeModel.hpp"
using QtNodes::DataModelRegistry;
using QtNodes::FlowScene;
using QtNodes::FlowView;
using QtNodes::Node; using QtNodes::Node;
using QtNodes::FlowScene;
using QtNodes::ConnectionStyle; using QtNodes::ConnectionStyle;
using QtNodes::TypeConverter;
using QtNodes::TypeConverterId;
using namespace Qv2ray::Components::Nodes;
#include "ui_w_RoutesEditor.h" #include "ui_w_RoutesEditor.h"

View File

@ -63,7 +63,6 @@ QImage ScreenShotWindow::DoScreenShot()
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
this->showFullScreen(); this->showFullScreen();
this->exec(); this->exec();
this->close();
return resultImage; return resultImage;
} }

View File

@ -0,0 +1,30 @@
// Instantiation for Qv2ray global objects.
#include "Qv2rayBase.hpp"
#include "QvUtils.hpp"
#include "QvRuntimeConfig.hpp"
#include "QvCore/QvCommandLineArgs.hpp"
// Global scope variable.
#ifdef QT_DEBUG
const bool isDebugBuild = true;
#else
const bool isDebugBuild = false;
#endif
namespace Qv2ray
{
namespace Utils
{
// Qv2ray runtime config
Qv2rayRuntimeConfig RuntimeConfig = Qv2rayRuntimeConfig();
bool isExiting = false;
Qv2rayConfig GlobalConfig = Qv2rayConfig();
QString Qv2rayConfigPath = "";
}
namespace CommandArgOperations
{
QvStartupOptions StartupOption = QvStartupOptions{};
}
}

View File

@ -9,7 +9,7 @@ void __QV2RAY_LOG_FUNC__(int type, const std::string &func, int line, const QStr
{ {
auto logString = "[" + module + "]: " + log; auto logString = "[" + module + "]: " + log;
if (StartupOption.debugLog || (isDebug && type == QV2RAY_LOG_DEBUG)) { if (StartupOption.debugLog || (isDebugBuild && type == QV2RAY_LOG_DEBUG)) {
logString.prepend(QString::fromStdString(func + ":" + to_string(line) + " ")); logString.prepend(QString::fromStdString(func + ":" + to_string(line) + " "));
} }

View File

@ -0,0 +1,17 @@
#ifndef QVRUNTIMECONFIG_HPP
#define QVRUNTIMECONFIG_HPP
#define SET_RUNTIME_CONFIG(conf, val) RuntimeConfig.conf = val();
#define RESTORE_RUNTIME_CONFIG(conf, func) func(RuntimeConfig.conf);
namespace Qv2ray
{
namespace Utils
{
struct Qv2rayRuntimeConfig {
bool screenShotHideQv2ray;
};
extern Qv2rayRuntimeConfig RuntimeConfig;
}
}
#endif // QVRUNTIMECONFIG_HPP

File diff suppressed because it is too large Load Diff