From 0d8f0839f2a03a942189bcd18c7afd0636d7f046 Mon Sep 17 00:00:00 2001 From: Qv2ray-dev <59914293+Qv2ray-dev@users.noreply.github.com> Date: Wed, 4 Mar 2020 23:07:18 +0800 Subject: [PATCH] change: some more refactors --- makespec/BUILDVERSION | 2 +- src/components/plugins/toolbar/QvToolbar.cpp | 6 +- src/core/CoreUtils.cpp | 16 ++++ src/core/CoreUtils.hpp | 6 ++ src/core/connection/Serialization.cpp | 39 ++++++---- src/core/connection/Serialization.hpp | 6 +- src/core/handler/ConfigHandler.cpp | 23 ------ src/core/handler/ConfigHandler.hpp | 6 +- src/main.cpp | 4 +- src/ui/w_MainWindow.cpp | 79 ++++++++------------ src/ui/w_MainWindow.hpp | 32 +++----- src/ui/w_PreferencesWindow.cpp | 12 +-- src/ui/w_SubscriptionManager.cpp | 8 +- src/ui/widgets/ConnectionInfoWidget.cpp | 11 ++- src/ui/widgets/ConnectionItemWidget.cpp | 6 +- src/ui/widgets/ConnectionItemWidget.hpp | 4 +- 16 files changed, 123 insertions(+), 137 deletions(-) diff --git a/makespec/BUILDVERSION b/makespec/BUILDVERSION index 686f859d..8ea64211 100644 --- a/makespec/BUILDVERSION +++ b/makespec/BUILDVERSION @@ -1 +1 @@ -4411 +4427 diff --git a/src/components/plugins/toolbar/QvToolbar.cpp b/src/components/plugins/toolbar/QvToolbar.cpp index b04d8717..12857f75 100644 --- a/src/components/plugins/toolbar/QvToolbar.cpp +++ b/src/components/plugins/toolbar/QvToolbar.cpp @@ -44,15 +44,15 @@ namespace Qv2ray::components::plugins if (req == "START") { - emit instance->Connect(); + emit instance->StartConnection(); } else if (req == "STOP") { - emit instance->DisConnect(); + emit instance->StopConnection(); } else if (req == "RESTART") { - emit instance->ReConnect(); + emit instance->RestartConnection(); } auto BarConfig = GlobalConfig.toolBarConfig; diff --git a/src/core/CoreUtils.cpp b/src/core/CoreUtils.cpp index 6e6f731b..6fa976b2 100644 --- a/src/core/CoreUtils.cpp +++ b/src/core/CoreUtils.cpp @@ -132,4 +132,20 @@ namespace Qv2ray::core return result; } + + const QString GetDisplayName(const ConnectionId &id, int limit) + { + return TruncateString(ConnectionManager->GetConnectionMetaObject(id).displayName, limit); + } + + const QString GetDisplayName(const GroupId &id, int limit) + { + return TruncateString(ConnectionManager->GetGroupMetaObject(id).displayName, limit); + } + + const GroupId GetConnectionGroupId(const ConnectionId &id) + { + return ConnectionManager->GetConnectionMetaObject(id).groupId; + } + } // namespace Qv2ray::core diff --git a/src/core/CoreUtils.hpp b/src/core/CoreUtils.hpp index f3f9689e..a01c9798 100644 --- a/src/core/CoreUtils.hpp +++ b/src/core/CoreUtils.hpp @@ -39,7 +39,13 @@ namespace Qv2ray::core bool IsComplexConfig(const ConnectionId &id); // const QString GetConnectionProtocolString(const ConnectionId &id); + // + const QString GetDisplayName(const ConnectionId &id, int limit = -1); + const QString GetDisplayName(const GroupId &id, int limit = -1); + // + const GroupId GetConnectionGroupId(const ConnectionId &id); + // } // namespace Qv2ray::core using namespace Qv2ray::core; diff --git a/src/core/connection/Serialization.cpp b/src/core/connection/Serialization.cpp index 4cbcbf9c..a4f8a25e 100644 --- a/src/core/connection/Serialization.cpp +++ b/src/core/connection/Serialization.cpp @@ -9,6 +9,7 @@ namespace Qv2ray::core::connection { namespace Serialization { + const QString ConvertConfigToString(const QString &alias, const CONFIGROOT &server, bool isSip002); CONFIGROOT ConvertConfigFromString(const QString &link, QString *alias, QString *errMessage) { CONFIGROOT config; @@ -31,8 +32,13 @@ namespace Qv2ray::core::connection const QString ConvertConfigToString(const ConnectionId &id, bool isSip002) { + auto alias = GetDisplayName(id); + if (IsComplexConfig(id)) + { + DEBUG(MODULE_CONNECTION, "Ignored an complex config: " + alias) + return QV2RAY_SERIALIZATION_COMPLEX_CONFIG_PLACEHOLDER; + } auto server = ConnectionManager->GetConnectionRoot(id); - auto alias = ConnectionManager->GetDisplayName(id); return ConvertConfigToString(alias, server, isSip002); } @@ -65,16 +71,16 @@ namespace Qv2ray::core::connection // From // https://github.com/2dust/v2rayN/wiki/%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E(ver-2) - QString ConvertConfigToVMessString(const StreamSettingsObject &transfer, const VMessServerObject &serverConfig, const QString &alias) + const QString ConvertConfigToVMessString(const StreamSettingsObject &transfer, const VMessServerObject &server, const QString &alias) { QJsonObject vmessUriRoot; // Constant vmessUriRoot["v"] = 2; vmessUriRoot["ps"] = alias; - vmessUriRoot["add"] = serverConfig.address; - vmessUriRoot["port"] = serverConfig.port; - vmessUriRoot["id"] = serverConfig.users.front().id; - vmessUriRoot["aid"] = serverConfig.users.front().alterId; + vmessUriRoot["add"] = server.address; + vmessUriRoot["port"] = server.port; + vmessUriRoot["id"] = server.users.front().id; + vmessUriRoot["aid"] = server.users.front().alterId; vmessUriRoot["net"] = transfer.network; vmessUriRoot["tls"] = transfer.security; @@ -216,14 +222,14 @@ namespace Qv2ray::core::connection CONFIGROOT root; OUTBOUNDS outbounds; outbounds.append( - GenerateOutboundEntry("shadowsocks", GenerateShadowSocksOUT(QList() << server), QJsonObject())); + GenerateOutboundEntry("shadowsocks", GenerateShadowSocksOUT(QList{ server }), QJsonObject())); JADD(outbounds) *alias = alias->isEmpty() ? d_name : *alias + "_" + d_name; LOG(MODULE_CONNECTION, "Deduced alias: " + *alias) return root; } - QString ConvertConfigToSSString(const ShadowSocksServerObject &server, const QString &alias, bool isSip002) + const QString ConvertConfigToSSString(const ShadowSocksServerObject &server, const QString &alias, bool isSip002) { auto myAlias = QUrl::toPercentEncoding(alias); @@ -333,13 +339,17 @@ namespace Qv2ray::core::connection // used as default. // [[val.size() <= 1]] is used when only the default value // exists. + /// // - It can be empty, if so, if the key is not in - // the JSON, or the value is empty, it'll report an error. + // the JSON, or the value is empty, it'll report an error. + // // - Else if it contains one thing. if the key is not in - // the JSON, or the value is empty, it'll use that one. + // the JSON, or the value is empty, it'll use that one. + // // - Else if it contains many things, when the key IS in - // the JSON but not in those THINGS, it'll use the first - // one in the THINGS + // the JSON but not in those THINGS, it'll use the first + // one in the THINGS + // // - Else, it'll use the value found from the JSON object. // #define empty_arg @@ -464,11 +474,10 @@ namespace Qv2ray::core::connection auto outbound = GenerateOutboundEntry("vmess", vConf, GetRootObject(streaming), QJsonObject(), "0.0.0.0", OUTBOUND_TAG_PROXY); // root["outbounds"] = QJsonArray() << outbound; - // If previous alias is empty, just the PS is needed, else, append a - // "_" + // If previous alias is empty, just the PS is needed, else, append a "_" *alias = alias->trimmed().isEmpty() ? ps : *alias + "_" + ps; -#undef default return root; +#undef default } } // namespace Serialization } // namespace Qv2ray::core::connection diff --git a/src/core/connection/Serialization.hpp b/src/core/connection/Serialization.hpp index 12c6705e..0e50dacf 100644 --- a/src/core/connection/Serialization.hpp +++ b/src/core/connection/Serialization.hpp @@ -5,21 +5,21 @@ namespace Qv2ray::core::connection { namespace Serialization { + const auto QV2RAY_SERIALIZATION_COMPLEX_CONFIG_PLACEHOLDER = QObject::tr("(Complex Connection Config)"); // int VerifyVMessProtocolString(QString vmess); QString DecodeSubscriptionString(QByteArray arr); // General CONFIGROOT ConvertConfigFromString(const QString &link, QString *alias, QString *errMessage); const QString ConvertConfigToString(const ConnectionId &id, bool isSip002 = false); - const QString ConvertConfigToString(const QString &alias, const CONFIGROOT &server, bool isSip002); // VMess URI Protocol CONFIGROOT ConvertConfigFromVMessString(const QString &vmess, QString *alias, QString *errMessage); - QString ConvertConfigToVMessString(const StreamSettingsObject &transfer, const VMessServerObject &serverConfig, const QString &alias); + const QString ConvertConfigToVMessString(const StreamSettingsObject &transfer, const VMessServerObject &server, const QString &alias); // SS URI Protocol CONFIGROOT ConvertConfigFromSSString(const QString &ss, QString *alias, QString *errMessage); - QString ConvertConfigToSSString(const ShadowSocksServerObject &server, const QString &alias, bool isSip002); + const QString ConvertConfigToSSString(const ShadowSocksServerObject &server, const QString &alias, bool isSip002); } // namespace Serialization } // namespace Qv2ray::core::connection diff --git a/src/core/handler/ConfigHandler.cpp b/src/core/handler/ConfigHandler.cpp index 73e0a11f..e388159f 100644 --- a/src/core/handler/ConfigHandler.cpp +++ b/src/core/handler/ConfigHandler.cpp @@ -165,18 +165,6 @@ namespace Qv2ray::core::handlers return subsList; } - const QString QvConfigHandler::GetDisplayName(const ConnectionId &id, int limit) const - { - CheckConnectionExistance(id); - return TruncateString(connections[id].displayName, limit); - } - - const QString QvConfigHandler::GetDisplayName(const GroupId &id, int limit) const - { - CheckGroupExistance(id); - return TruncateString(groups[id].displayName, limit); - } - // Obsolated, Please use: // ConnectionId QvConnectionHandler::GetConnectionIdByDisplayName(const QString &displayName, const GroupId &group) const // @@ -218,17 +206,6 @@ namespace Qv2ray::core::handlers return NullGroupId; } - const GroupId QvConfigHandler::GetConnectionGroupId(const ConnectionId &id) const - { - CheckConnectionExistanceEx(id, NullGroupId); - if (!connections.contains(id)) - { - LOG(MODULE_CORE_HANDLER, "Cannot find id: " + id.toString()); - } - - return connections[id].groupId; - } - const optional QvConfigHandler::RenameConnection(const ConnectionId &id, const QString &newName) { CheckConnectionExistance(id); diff --git a/src/core/handler/ConfigHandler.hpp b/src/core/handler/ConfigHandler.hpp index 19be3276..27a30f90 100644 --- a/src/core/handler/ConfigHandler.hpp +++ b/src/core/handler/ConfigHandler.hpp @@ -68,11 +68,8 @@ namespace Qv2ray::core::handlers // const QList Subscriptions() const; // - // Generic Get Options - const QString GetDisplayName(const GroupId &id, int limit = -1) const; - const QString GetDisplayName(const ConnectionId &id, int limit = -1) const; + // Get Options const GroupId GetGroupIdByDisplayName(const QString &displayName) const; - // const ConnectionId GetConnectionIdByDisplayName(const QString &displayName) const; const ConnectionId GetConnectionIdByDisplayName(const QString &displayName, const GroupId &group) const; // // Connectivity Operationss @@ -89,7 +86,6 @@ namespace Qv2ray::core::handlers const ConnectionId CreateConnection(const QString &displayName, const GroupId &groupId, const CONFIGROOT &root); // // Get Conncetion Property - const GroupId GetConnectionGroupId(const ConnectionId &id) const; const CONFIGROOT GetConnectionRoot(const ConnectionId &id) const; const CONFIGROOT GetConnectionRoot(const GroupId &group, const ConnectionId &id) const; // diff --git a/src/main.cpp b/src/main.cpp index 1d069582..37ef9622 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -514,8 +514,8 @@ int main(int argc, char *argv[]) QGuiApplication::setFallbackSessionManagementEnabled(false); QObject::connect(&_qApp, &QGuiApplication::commitDataRequest, []() { LOG(MODULE_INIT, "Quit triggered by session manager.") }); #ifndef Q_OS_WIN - signal(SIGUSR1, [](int) { emit MainWindow::mwInstance->Connect(); }); - signal(SIGUSR2, [](int) { emit MainWindow::mwInstance->DisConnect(); }); + signal(SIGUSR1, [](int) { emit MainWindow::mwInstance->StartConnection(); }); + signal(SIGUSR2, [](int) { emit MainWindow::mwInstance->StopConnection(); }); #endif auto rcode = _qApp.exec(); delete ConnectionManager; diff --git a/src/ui/w_MainWindow.cpp b/src/ui/w_MainWindow.cpp index 1e0144b9..1df106c9 100644 --- a/src/ui/w_MainWindow.cpp +++ b/src/ui/w_MainWindow.cpp @@ -54,7 +54,7 @@ void MainWindow::MWAddConnectionItem_p(const ConnectionId &connection, const Gro auto groupItem = groupNodes[groupId]; auto connectionItem = make_shared(QStringList{ "", // - ConnectionManager->GetDisplayName(connection), // + GetDisplayName(connection), // NumericString(GetConnectionLatency(connection)), // "IMPORTTIME_NOT_SUPPORTED", // "LAST_CONNECTED_NOT_SUPPORTED", // @@ -69,7 +69,7 @@ void MainWindow::MWAddConnectionItem_p(const ConnectionId &connection, const Gro void MainWindow::MWAddGroupItem_p(const GroupId &groupId) { - auto groupItem = make_shared(QStringList{ "", ConnectionManager->GetDisplayName(groupId) }); + auto groupItem = make_shared(QStringList{ "", GetDisplayName(groupId) }); groupNodes[groupId] = groupItem; connectionListWidget->addTopLevelItem(groupItem.get()); connectionListWidget->setItemWidget(groupItem.get(), 0, new ConnectionItemWidget(groupId, connectionListWidget)); @@ -77,7 +77,6 @@ void MainWindow::MWAddGroupItem_p(const GroupId &groupId) void MainWindow::SortConnectionList(MW_ITEM_COL byCol, bool asending) { - connectionListWidget->sortByColumn(MW_ITEM_COL_DISPLAYNAME, Qt::AscendingOrder); for (auto i = 0; i < connectionListWidget->topLevelItemCount(); i++) { @@ -85,7 +84,7 @@ void MainWindow::SortConnectionList(MW_ITEM_COL byCol, bool asending) } } -MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) //, vinstance(), hTray(this), tcpingHelper(3, this) +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setupUi(this); MainWindow::mwInstance = this; @@ -138,25 +137,16 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) //, vinstance(), h // // Setup System tray icons and menus hTray.setToolTip(TRAY_TOOLTIP_PREFIX); + // // Basic actions - action_Tray_ShowHide = new QAction(this->windowIcon(), tr("Hide"), this); - action_Tray_ShowPreferencesWindow = new QAction(tr("Preferences"), this); - action_Tray_Quit = new QAction(tr("Quit"), this); - action_Tray_Start = new QAction(tr("Connect"), this); - action_Tray_Reconnect = new QAction(tr("Reconnect"), this); - action_Tray_Stop = new QAction(tr("Disconnect"), this); - // - action_Tray_SetSystemProxy = new QAction(tr("Enable System Proxy"), this); - action_Tray_ClearSystemProxy = new QAction(tr("Disable System Proxy"), this); - // action_Tray_Start->setEnabled(true); action_Tray_Stop->setEnabled(false); - action_Tray_Reconnect->setEnabled(false); + action_Tray_Restart->setEnabled(false); // - tray_SystemProxyMenu->addAction(action_Tray_SetSystemProxy); - tray_SystemProxyMenu->addAction(action_Tray_ClearSystemProxy); tray_SystemProxyMenu->setTitle(tr("System Proxy")); tray_SystemProxyMenu->setEnabled(false); + tray_SystemProxyMenu->addAction(action_Tray_SetSystemProxy); + tray_SystemProxyMenu->addAction(action_Tray_ClearSystemProxy); // tray_RootMenu->addAction(action_Tray_ShowHide); tray_RootMenu->addSeparator(); @@ -165,7 +155,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) //, vinstance(), h tray_RootMenu->addSeparator(); tray_RootMenu->addAction(action_Tray_Start); tray_RootMenu->addAction(action_Tray_Stop); - tray_RootMenu->addAction(action_Tray_Reconnect); + tray_RootMenu->addAction(action_Tray_Restart); tray_RootMenu->addSeparator(); tray_RootMenu->addAction(action_Tray_Quit); // @@ -174,7 +164,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) //, vinstance(), h // connect(action_Tray_Start, &QAction::triggered, [&] { ConnectionManager->StartConnection(lastConnectedId); }); connect(action_Tray_Stop, &QAction::triggered, ConnectionManager, &QvConfigHandler::StopConnection); - connect(action_Tray_Reconnect, &QAction::triggered, ConnectionManager, &QvConfigHandler::RestartConnection); + connect(action_Tray_Restart, &QAction::triggered, ConnectionManager, &QvConfigHandler::RestartConnection); // connect(action_Tray_Quit, &QAction::triggered, this, &MainWindow::on_actionExit_triggered); connect(action_Tray_SetSystemProxy, &QAction::triggered, this, &MainWindow::MWSetSystemProxy); @@ -196,9 +186,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) //, vinstance(), h connect(action_RCM_DuplicateThese, &QAction::triggered, this, &MainWindow::on_action_RCM_DuplicateThese_triggered); // // Globally invokable signals. - connect(this, &MainWindow::Connect, [&] { ConnectionManager->StartConnection(lastConnectedId); }); - connect(this, &MainWindow::DisConnect, ConnectionManager, &QvConfigHandler::StopConnection); - connect(this, &MainWindow::ReConnect, ConnectionManager, &QvConfigHandler::RestartConnection); + connect(this, &MainWindow::StartConnection, ConnectionManager, &QvConfigHandler::RestartConnection); + connect(this, &MainWindow::StopConnection, ConnectionManager, &QvConfigHandler::StopConnection); + connect(this, &MainWindow::RestartConnection, ConnectionManager, &QvConfigHandler::RestartConnection); // hTray.setContextMenu(tray_RootMenu); hTray.show(); @@ -210,13 +200,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) //, vinstance(), h connectionListMenu->addAction(action_RCM_DeleteThese); connectionListMenu->addAction(action_RCM_ConvToComplex); // - sortMenu = new QMenu(this); - sortAction_SortByName_Asc = new QAction(tr("By connection name, A-Z")); - sortAction_SortByName_Dsc = new QAction(tr("By connection name, Z-A")); - sortAction_SortByData_Asc = new QAction(tr("By data, Ascending")); - sortAction_SortByData_Dsc = new QAction(tr("By data, Descending")); - sortAction_SortByLatency_Asc = new QAction(tr("By latency, Ascending")); - sortAction_SortByLatency_Dsc = new QAction(tr("By latency, Descending")); + QMenu *sortMenu = new QMenu(tr("Sort connection list."), this); + QAction *sortAction_SortByName_Asc = new QAction(tr("By connection name, A-Z")); + QAction *sortAction_SortByName_Dsc = new QAction(tr("By connection name, Z-A")); + QAction *sortAction_SortByLatency_Asc = new QAction(tr("By data, Ascending")); + QAction *sortAction_SortByLatency_Dsc = new QAction(tr("By data, Descending")); + QAction *sortAction_SortByData_Asc = new QAction(tr("By latency, Ascending")); + QAction *sortAction_SortByData_Dsc = new QAction(tr("By latency, Descending")); // connect(sortAction_SortByName_Asc, &QAction::triggered, [&] { SortConnectionList(MW_ITEM_COL_DISPLAYNAME, true); }); connect(sortAction_SortByName_Dsc, &QAction::triggered, [&] { SortConnectionList(MW_ITEM_COL_DISPLAYNAME, false); }); @@ -411,12 +401,12 @@ void MainWindow::ToggleVisibility() QThread::msleep(20); SetWindowPos(HWND(this->winId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); #endif - tray_RootMenu->actions()[0]->setText(tr("Hide")); + action_Tray_ShowHide->setText(tr("Hide")); } else { this->hide(); - tray_RootMenu->actions()[0]->setText(tr("Show")); + action_Tray_ShowHide->setText(tr("Show")); } } @@ -549,11 +539,11 @@ void MainWindow::OnDisconnected(const ConnectionId &id) Q_UNUSED(id) action_Tray_Start->setEnabled(true); action_Tray_Stop->setEnabled(false); - action_Tray_Reconnect->setEnabled(false); + action_Tray_Restart->setEnabled(false); tray_SystemProxyMenu->setEnabled(false); lastConnectedId = id; locateBtn->setEnabled(false); - this->hTray.showMessage("Qv2ray", tr("Disconnected from: ") + ConnectionManager->GetDisplayName(id), this->windowIcon()); + this->hTray.showMessage("Qv2ray", tr("Disconnected from: ") + GetDisplayName(id), this->windowIcon()); hTray.setToolTip(TRAY_TOOLTIP_PREFIX NEWLINE); connetionStatusLabel->setText(tr("Not Connected")); if (GlobalConfig.inboundConfig.setSystemProxy) @@ -573,12 +563,12 @@ void MainWindow::OnConnected(const ConnectionId &id) Q_UNUSED(id) action_Tray_Start->setEnabled(false); action_Tray_Stop->setEnabled(true); - action_Tray_Reconnect->setEnabled(true); + action_Tray_Restart->setEnabled(true); tray_SystemProxyMenu->setEnabled(true); lastConnectedId = id; locateBtn->setEnabled(true); on_clearlogButton_clicked(); - auto name = ConnectionManager->GetDisplayName(id); + auto name = GetDisplayName(id); this->hTray.showMessage("Qv2ray", tr("Connected: ") + name, this->windowIcon()); hTray.setToolTip(TRAY_TOOLTIP_PREFIX NEWLINE + tr("Connected: ") + name); connetionStatusLabel->setText(tr("Connected: ") + name); @@ -727,8 +717,8 @@ void MainWindow::OnStatsAvailable(const ConnectionId &id, const quint64 upS, con netspeedLabel->setText(totalSpeedUp + NEWLINE + totalSpeedDown); dataamountLabel->setText(totalDataUp + NEWLINE + totalDataDown); // - hTray.setToolTip(TRAY_TOOLTIP_PREFIX NEWLINE + tr("Connected: ") + // - ConnectionManager->GetDisplayName(id) + NEWLINE "Up: " + totalSpeedUp + " Down: " + totalSpeedDown); + hTray.setToolTip(TRAY_TOOLTIP_PREFIX NEWLINE + tr("Connected: ") + GetDisplayName(id) + // + NEWLINE "Up: " + totalSpeedUp + " Down: " + totalSpeedDown); // // Set data accordingly connectionNodes[id]->setText(MW_ITEM_COL_DATAUSAGE, NumericString(GetConnectionTotalData(id))); @@ -808,7 +798,7 @@ void MainWindow::OnJsonEditRequested(const ConnectionId &id) void MainWindow::OnConnectionCreated(const ConnectionId &id, const QString &displayName) { Q_UNUSED(displayName) - MWAddConnectionItem_p(id, ConnectionManager->GetConnectionGroupId(id)); + MWAddConnectionItem_p(id, GetConnectionGroupId(id)); } void MainWindow::OnConnectionDeleted(const ConnectionId &id, const GroupId &groupId) { @@ -869,21 +859,16 @@ void MainWindow::on_action_RCM_DuplicateThese_triggered() LOG(MODULE_UI, "Selected " + QSTRN(connlist.count()) + " items") - if (connlist.isEmpty()) - { - return; - } - - if (connlist.count() > 1 && - QvMessageBoxAsk(this, tr("Duplicating Connection(s)"), tr("Are you sure to duplicate these connection(s)?")) != QMessageBox::Yes) + if (connlist.count() > 1 && QvMessageBoxAsk(this, tr("Duplicating Connection(s)"), // + tr("Are you sure to duplicate these connection(s)?")) != QMessageBox::Yes) { return; } for (auto conn : connlist) { - ConnectionManager->CreateConnection(ConnectionManager->GetDisplayName(conn) + tr(" (Copy)"), // - ConnectionManager->GetConnectionGroupId(conn), // + ConnectionManager->CreateConnection(GetDisplayName(conn) + tr(" (Copy)"), // + GetConnectionGroupId(conn), // ConnectionManager->GetConnectionRoot(conn)); } } diff --git a/src/ui/w_MainWindow.hpp b/src/ui/w_MainWindow.hpp index 77398ec2..6ff3ec0c 100644 --- a/src/ui/w_MainWindow.hpp +++ b/src/ui/w_MainWindow.hpp @@ -35,9 +35,9 @@ class MainWindow explicit MainWindow(QWidget *parent = nullptr); ~MainWindow() override; signals: - void Connect() const; - void DisConnect() const; - void ReConnect() const; + void StartConnection() const; + void StopConnection() const; + void RestartConnection() const; public slots: QvMessageBusSlotDecl; private slots: @@ -113,29 +113,19 @@ class MainWindow ConnectionInfoWidget *infoWidget; // // Actions in the system tray menu - // QMenu *tray_RootMenu = new QMenu(this); - QAction *action_Tray_ShowHide; - QAction *action_Tray_ShowPreferencesWindow; - QAction *action_Tray_Quit; + QAction *action_Tray_ShowHide = new QAction(this->windowIcon(), tr("Hide"), this); + QAction *action_Tray_ShowPreferencesWindow = new QAction(tr("Preferences"), this); + QAction *action_Tray_Quit = new QAction(tr("Quit"), this); // --> Connectivities - QAction *action_Tray_Start; - QAction *action_Tray_Reconnect; - QAction *action_Tray_Stop; + QAction *action_Tray_Start = new QAction(tr("Connect"), this); + QAction *action_Tray_Restart = new QAction(tr("Reconnect"), this); + QAction *action_Tray_Stop = new QAction(tr("Disconnect"), this); // --> System proxy settings QMenu *tray_SystemProxyMenu = new QMenu(this); - QAction *action_Tray_SetSystemProxy; - QAction *action_Tray_ClearSystemProxy; + QAction *action_Tray_SetSystemProxy = new QAction(tr("Enable System Proxy"), this); + QAction *action_Tray_ClearSystemProxy = new QAction(tr("Disable System Proxy"), this); // - QMenu *sortMenu; - QAction *sortAction_SortByName_Asc; - QAction *sortAction_SortByName_Dsc; - QAction *sortAction_SortByLatency_Asc; - QAction *sortAction_SortByLatency_Dsc; - QAction *sortAction_SortByData_Asc; - QAction *sortAction_SortByData_Dsc; - // - // Extra Headers For w_MainWindow_extra.cpp Handling V2ray Connectivities. ConnectionId lastConnectedId; void MWSetSystemProxy(); void CheckSubscriptionsUpdate(); diff --git a/src/ui/w_PreferencesWindow.cpp b/src/ui/w_PreferencesWindow.cpp index 170f4aad..bbe55dea 100644 --- a/src/ui/w_PreferencesWindow.cpp +++ b/src/ui/w_PreferencesWindow.cpp @@ -164,21 +164,21 @@ PreferencesWindow::PreferencesWindow(QWidget *parent) : QDialog(parent), Current // // Empty for global config. auto autoStartConnId = ConnectionId(CurrentConfig.autoStartId); - auto autoStartGroupId = ConnectionManager->GetConnectionGroupId(autoStartConnId); + auto autoStartGroupId = GetConnectionGroupId(autoStartConnId); for (auto group : ConnectionManager->AllGroups()) { - autoStartSubsCombo->addItem(ConnectionManager->GetDisplayName(group)); + autoStartSubsCombo->addItem(GetDisplayName(group)); } - autoStartSubsCombo->setCurrentText(ConnectionManager->GetDisplayName(autoStartGroupId)); + autoStartSubsCombo->setCurrentText(GetDisplayName(autoStartGroupId)); for (auto conn : ConnectionManager->Connections(autoStartGroupId)) { - autoStartConnCombo->addItem(ConnectionManager->GetDisplayName(conn)); + autoStartConnCombo->addItem(GetDisplayName(conn)); } - autoStartConnCombo->setCurrentText(ConnectionManager->GetDisplayName(autoStartConnId)); + autoStartConnCombo->setCurrentText(GetDisplayName(autoStartConnId)); // FP Settings if (CurrentConfig.connectionConfig.forwardProxyConfig.type.trimmed().isEmpty()) @@ -1029,7 +1029,7 @@ void PreferencesWindow::on_autoStartSubsCombo_currentIndexChanged(const QString for (auto id : list) { - autoStartConnCombo->addItem(ConnectionManager->GetDisplayName(id)); + autoStartConnCombo->addItem(GetDisplayName(id)); } } } diff --git a/src/ui/w_SubscriptionManager.cpp b/src/ui/w_SubscriptionManager.cpp index 3e25a74c..e1cbe321 100644 --- a/src/ui/w_SubscriptionManager.cpp +++ b/src/ui/w_SubscriptionManager.cpp @@ -13,7 +13,7 @@ SubscribeEditor::SubscribeEditor(QWidget *parent) : QDialog(parent) for (auto subs : ConnectionManager->Subscriptions()) { - subscriptionList->addTopLevelItem(new QTreeWidgetItem(QStringList{ ConnectionManager->GetDisplayName(subs), subs.toString() })); + subscriptionList->addTopLevelItem(new QTreeWidgetItem(QStringList{ GetDisplayName(subs), subs.toString() })); } if (subscriptionList->topLevelItemCount() > 0) { @@ -31,7 +31,7 @@ QvMessageBusSlotImpl(SubscribeEditor) tuple SubscribeEditor::GetSelectedConfig() { - return { ConnectionManager->GetDisplayName(currentConnectionId), ConnectionManager->GetConnectionRoot(currentConnectionId) }; + return { GetDisplayName(currentConnectionId), ConnectionManager->GetConnectionRoot(currentConnectionId) }; } SubscribeEditor::~SubscribeEditor() @@ -101,7 +101,7 @@ void SubscribeEditor::on_subscriptionList_itemClicked(QTreeWidgetItem *item, int groupBox_2->setEnabled(true); currentSubId = GroupId(item->text(1)); // - subNameTxt->setText(ConnectionManager->GetDisplayName(currentSubId)); + subNameTxt->setText(GetDisplayName(currentSubId)); auto const [addr, lastUpdated, updateInterval] = ConnectionManager->GetSubscriptionData(currentSubId); subAddrTxt->setText(addr); lastUpdatedLabel->setText(timeToString(lastUpdated)); @@ -111,7 +111,7 @@ void SubscribeEditor::on_subscriptionList_itemClicked(QTreeWidgetItem *item, int for (auto conn : ConnectionManager->Connections(currentSubId)) { - connectionsList->addItem(ConnectionManager->GetDisplayName(conn)); // + connectionsList->addItem(GetDisplayName(conn)); // } } diff --git a/src/ui/widgets/ConnectionInfoWidget.cpp b/src/ui/widgets/ConnectionInfoWidget.cpp index da875789..a2810b32 100644 --- a/src/ui/widgets/ConnectionInfoWidget.cpp +++ b/src/ui/widgets/ConnectionInfoWidget.cpp @@ -45,7 +45,7 @@ void ConnectionInfoWidget::ShowDetails(const tuple &_iden shareLinkTxt->setText(shareLink); protocolLabel->setText(GetConnectionProtocolString(connectionId)); // - groupLabel->setText(ConnectionManager->GetDisplayName(groupId, 175)); + groupLabel->setText(GetDisplayName(groupId, 175)); auto [protocol, host, port] = GetConnectionInfo(connectionId); Q_UNUSED(protocol) addressLabel->setText(host); @@ -65,12 +65,19 @@ void ConnectionInfoWidget::ShowDetails(const tuple &_iden else { connectBtn->setIcon(QICON_R("connect.png")); - groupNameLabel->setText(ConnectionManager->GetDisplayName(groupId)); + groupNameLabel->setText(GetDisplayName(groupId)); QStringList shareLinks; for (auto connection : ConnectionManager->Connections(groupId)) { shareLinks << ConvertConfigToString(connection, false); } + // + auto complexCount = shareLinks.removeAll(QV2RAY_SERIALIZATION_COMPLEX_CONFIG_PLACEHOLDER); + if (complexCount > 0) + { + shareLinks << tr("(Ignored %1 complex config(s))").arg(complexCount); + } + // groupShareTxt->setPlainText(shareLinks.join(NEWLINE)); groupSubsLinkLabel->setText(ConnectionManager->IsSubscription(groupId) ? get<0>(ConnectionManager->GetSubscriptionData(groupId)) : tr("Not a subscription")); diff --git a/src/ui/widgets/ConnectionItemWidget.cpp b/src/ui/widgets/ConnectionItemWidget.cpp index d23e994c..4372dddc 100644 --- a/src/ui/widgets/ConnectionItemWidget.cpp +++ b/src/ui/widgets/ConnectionItemWidget.cpp @@ -17,8 +17,8 @@ ConnectionItemWidget::ConnectionItemWidget(QWidget *parent) : QWidget(parent), c ConnectionItemWidget::ConnectionItemWidget(const ConnectionId &id, QWidget *parent) : ConnectionItemWidget(parent) { connectionId = id; - groupId = ConnectionManager->GetConnectionGroupId(id); - originalItemName = ConnectionManager->GetDisplayName(id); + groupId = GetConnectionGroupId(id); + originalItemName = GetDisplayName(id); itemType = NODE_ITEM; auto latency = GetConnectionLatency(id); @@ -55,7 +55,7 @@ ConnectionItemWidget::ConnectionItemWidget(const GroupId &id, QWidget *parent) : // groupId = id; itemType = GROUP_HEADER_ITEM; - originalItemName = ConnectionManager->GetDisplayName(id); + originalItemName = GetDisplayName(id); RecalculateConnectionsCount(); // auto font = connNameLabel->font(); diff --git a/src/ui/widgets/ConnectionItemWidget.hpp b/src/ui/widgets/ConnectionItemWidget.hpp index d7a9d349..24a216a2 100644 --- a/src/ui/widgets/ConnectionItemWidget.hpp +++ b/src/ui/widgets/ConnectionItemWidget.hpp @@ -27,7 +27,7 @@ class ConnectionItemWidget inline bool NameMatched(const QString &arg) { auto searchString = arg.toLower(); - auto headerMatched = ConnectionManager->GetDisplayName(groupId).toLower().contains(arg); + auto headerMatched = GetDisplayName(groupId).toLower().contains(arg); if (itemType != NODE_ITEM) { @@ -35,7 +35,7 @@ class ConnectionItemWidget } else { - return headerMatched || ConnectionManager->GetDisplayName(connectionId).toLower().contains(searchString); + return headerMatched || GetDisplayName(connectionId).toLower().contains(searchString); } } inline const tuple Identifier() const