From c6fa8a43e3f6003a5dc409a2140f7b6c1bc0c3b7 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Wed, 18 Sep 2019 19:39:48 +0800 Subject: [PATCH 01/29] Update README.md Former-commit-id: e92907944d7974dcff129b9430b31a7042cc0459 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f257ae9..881f9ea1 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Himeki.net 的 Jenkins 编译服务器提供开发分支 `dev` 的 Linux AppImag Travis per machine badge provided by: [badge-matrix](https://github.com/exogen/badge-matrix) -| OS | 主分支 [master](https://github.com/lhy0403/Qv2ray/tree/master) | 开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) | 版本分支 [v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) | +| OS | 主分支 [master](https://github.com/lhy0403/Qv2ray/tree/master) | 开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) | 版本补丁分支 [v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) | | ------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | [Linux](https://travis-ci.com/lhy0403/Qv2ray) | ![Build Status Linux in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-dev&branch=dev) | ![Build Status Linux in v1.0.0](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-v1&branch=version-v1) | | [MacOS](https://travis-ci.com/lhy0403/Qv2ray) | ![Build Status MacOS in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-dev&branch=dev) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-v1&branch=version-v1) | From 359d81dd7a6d69d1d5bb30b06cb5e82dcbe7b6e2 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Wed, 18 Sep 2019 20:16:57 +0800 Subject: [PATCH 02/29] Update README.md Former-commit-id: 5751b94ed4f95d4e43ea63a2853757d2225d0fee --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 881f9ea1..6cf59828 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,10 @@ qmake ../ mingw32-make.exe ``` +# 部分 Linux 系统的 UI 丑的解决办法 + + - 命令行参数添加 `--style fusion` 即可使用 fusion 界面主题 + # License [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) From 7c5fb7a872552033c5236a797463cc4d3027caac Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Thu, 19 Sep 2019 10:55:47 +0800 Subject: [PATCH 03/29] Update issue templates Former-commit-id: 82ece16ad3a968cdfa07e57f7ae2b331ad945bbe --- .github/ISSUE_TEMPLATE/bug---.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug---.md diff --git a/.github/ISSUE_TEMPLATE/bug---.md b/.github/ISSUE_TEMPLATE/bug---.md new file mode 100644 index 00000000..d6d804f5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug---.md @@ -0,0 +1,32 @@ +--- +name: Bug 反馈 +about: 用来反馈bug +title: '' +labels: '' +assignees: '' + +--- + +**简单描述这个 bug:** + + +**如何复现这个bug:** +1. +2. +3. +4. + +**Qv2ray 本应该是怎样工作的?** + + +**相关截图** +如果合适的话,可以在这里粘贴截图 + +**系统信息** + - 系统类型(windows, linux, macos): + - 是从release下载的还是自己编译的: + - 首选项里的版本号: + +**其他信息** +你认为对我们修复bug有帮助的任何信息都可以在这里写出来: +*在提供自己的vmess或者配置文件时,注意隐藏好服务器地址和uuid* From f327e32f0e7aecc8c8e994bc0eccbf294aadc1a1 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Thu, 19 Sep 2019 11:00:30 +0800 Subject: [PATCH 04/29] Update issue templates Former-commit-id: bb3c85b0ab9446f88b3fb3984ac022a997910295 --- .github/ISSUE_TEMPLATE/bug---.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug---.md b/.github/ISSUE_TEMPLATE/bug---.md index d6d804f5..3bda5436 100644 --- a/.github/ISSUE_TEMPLATE/bug---.md +++ b/.github/ISSUE_TEMPLATE/bug---.md @@ -2,7 +2,7 @@ name: Bug 反馈 about: 用来反馈bug title: '' -labels: '' +labels: Bugs, help wanted assignees: '' --- From 7182ac6486efb6d868d4e19cfec98c21129ba56b Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Thu, 19 Sep 2019 16:51:25 +0800 Subject: [PATCH 05/29] [change] Changed default v2ray search path Former-commit-id: 840240513d6cbdc73b5d9817b7d8d27d053c7c09 --- src/Qv2rayBase.h | 22 ++- src/QvConfigUpgrade.cpp | 20 +- src/QvCoreConfigOperations_Convertion.cpp | 5 +- src/QvCoreInteractions.cpp | 42 +++-- src/QvCoreInteractions.h | 2 +- src/QvUtils.cpp | 10 +- src/QvUtils.h | 4 +- src/main.cpp | 87 ++++----- src/w_ImportConfig.cpp | 3 +- src/w_MainWindow.cpp | 79 ++++---- src/w_MainWindow.h | 4 +- src/w_MainWindow.ui | 2 +- src/w_PrefrencesWindow.cpp | 55 ++---- src/w_PrefrencesWindow.h | 4 - src/w_PrefrencesWindow.ui | 23 +-- translations/en-US.ts | 215 ++++++++++++---------- 16 files changed, 280 insertions(+), 297 deletions(-) diff --git a/src/Qv2rayBase.h b/src/Qv2rayBase.h index 60e3a006..759c2058 100644 --- a/src/Qv2rayBase.h +++ b/src/Qv2rayBase.h @@ -7,10 +7,22 @@ #define QV2RAY_VERSION_STRING "v" QV_MAJOR_VERSION -#define QV2RAY_CONFIG_VERSION 2 +#define QV2RAY_CONFIG_VERSION 3 +// Base folder. #define QV2RAY_CONFIG_DIR_PATH (Qv2ray::Utils::GetConfigDirPath() + "/") #define QV2RAY_CONFIG_FILE_PATH (QV2RAY_CONFIG_DIR_PATH + "Qv2ray.conf") +// We need v2ray.exe/v2ray executables here! +#define QV2RAY_V2RAY_CORE_DIR_PATH (QV2RAY_CONFIG_DIR_PATH + "vcore/") + +#ifdef __WIN32 +// Win32 has .exe +#define QV2RAY_V2RAY_CORE_PATH (QV2RAY_V2RAY_CORE_DIR_PATH + "v2ray.exe") +#else +// MacOS and Linux.... +#define QV2RAY_V2RAY_CORE_PATH (QV2RAY_V2RAY_CORE_DIR_PATH + "v2ray") +#endif + #define QV2RAY_CONNECTION_FILE_EXTENSION ".qv2ray.json" #define QV2RAY_GENERATED_FILE_PATH (QV2RAY_CONFIG_DIR_PATH + "generated/config.gen.json") @@ -25,8 +37,6 @@ #define QV2RAY_CONFIG_TYPE_SUBSCRIPTION "Subscription" #define QV2RAY_CONFIG_TYPE_JSON_KEY "_qv2ray.configSource" - - // GUI TOOLS #define RED(obj) \ auto _temp = ui->obj->palette(); \ @@ -77,7 +87,6 @@ namespace Qv2ray int logLevel; // string language; - string v2CorePath; string v2AssetsPath; string autoStartConfig; // @@ -97,13 +106,12 @@ namespace Qv2ray map subscribes; MuxObject mux; Qv2rayConfig(): config_version(QV2RAY_CONFIG_VERSION), runAsRoot(false), logLevel(), proxyDefault(), proxyCN(), withLocalDNS(), inBoundSettings(), configs(), subscribes(), mux() { } - Qv2rayConfig(string lang, string exePath, string assetsPath, int log, Qv2rayBasicInboundsConfig _inBoundSettings): Qv2rayConfig() + Qv2rayConfig(string lang, string assetsPath, int log, Qv2rayBasicInboundsConfig _inBoundSettings): Qv2rayConfig() { // These settings below are defaults. ignoredVersion = ""; autoStartConfig = ""; language = lang; - v2CorePath = exePath; v2AssetsPath = assetsPath; logLevel = log; inBoundSettings = _inBoundSettings; @@ -116,7 +124,7 @@ namespace Qv2ray proxyDefault = true; withLocalDNS = true; } - XTOSTRUCT(O(config_version, runAsRoot, logLevel, language, autoStartConfig, ignoredVersion, v2CorePath, v2AssetsPath, proxyDefault, proxyCN, withLocalDNS, dnsList, inBoundSettings, mux, configs, subscribes)) + XTOSTRUCT(O(config_version, runAsRoot, logLevel, language, autoStartConfig, ignoredVersion, v2AssetsPath, proxyDefault, proxyCN, withLocalDNS, dnsList, inBoundSettings, mux, configs, subscribes)) }; QJsonObject UpgradeConfig(int fromVersion, int toVersion, QJsonObject root); diff --git a/src/QvConfigUpgrade.cpp b/src/QvConfigUpgrade.cpp index 87f0a839..49a6c402 100644 --- a/src/QvConfigUpgrade.cpp +++ b/src/QvConfigUpgrade.cpp @@ -3,7 +3,7 @@ // from old to newer versions of Qv2ray. // -#include "Qv2rayBase.h" +#include "QvUtils.h" #define UPGRADELOG(item, old, _new) LOG(MODULE_CONFIG, "Upgrading " item " from old value " + old + " to " + _new); #define XConfLog(oldVersion, newVersion) LOG(MODULE_CONFIG, "Migrating config from version " + oldVersion + " to " + newVersion); @@ -18,15 +18,31 @@ namespace Qv2ray XConfLog(to_string(fromVersion), to_string(fromVersion + 1)) switch (fromVersion) { - case 1: + case 1: { // From 1 to 2, we changed the config_version from 'string' to 'int' auto old_config_version = root["config_version"].toString(); root.remove("config_version"); root["config_version"] = 2; UPGRADELOG("config_version", old_config_version.toStdString(), "2") break; + } + + case 2 : { + auto vCoreFilePath = root["v2CorePath"].toString(); + auto vCoreDestPath = QV2RAY_V2RAY_CORE_PATH; + // We also need v2ctl + auto v2CtlFilePath = QFileInfo(vCoreFilePath).dir().path() + "/v2ctl"; + auto v2CtlDestPath = QFileInfo(vCoreDestPath).dir().path() + "/v2ctl"; + QFile::copy(vCoreFilePath, vCoreDestPath); + QFile::copy(v2CtlFilePath, v2CtlDestPath); + root.remove("v2CorePath"); + UPGRADELOG("v2CorePath", vCoreFilePath.toStdString(), vCoreDestPath.toStdString()) + UPGRADELOG("v2CtlFilePath", v2CtlFilePath.toStdString(), v2CtlDestPath.toStdString()) + break; + } } + root["config_version"] = root["config_version"].toInt() + 1; return root; } diff --git a/src/QvCoreConfigOperations_Convertion.cpp b/src/QvCoreConfigOperations_Convertion.cpp index edca6160..b2d6425d 100644 --- a/src/QvCoreConfigOperations_Convertion.cpp +++ b/src/QvCoreConfigOperations_Convertion.cpp @@ -7,7 +7,8 @@ namespace Qv2ray bool SaveConnectionConfig(QJsonObject obj, const QString *alias) { QFile config(QV2RAY_CONFIG_DIR_PATH + *alias + QV2RAY_CONNECTION_FILE_EXTENSION); - return StringToFile(JSONToString(obj), &config); + auto str = JSONToString(obj); + return StringToFile(&str, &config); } // This generates global config containing only one outbound.... @@ -107,7 +108,7 @@ namespace Qv2ray int StartPreparation(QJsonObject fullConfig) { QString json = JSONToString(fullConfig); - StringToFile(json, new QFile(QV2RAY_GENERATED_FILE_PATH)); + StringToFile(&json, new QFile(QV2RAY_GENERATED_FILE_PATH)); return 0; } } diff --git a/src/QvCoreInteractions.cpp b/src/QvCoreInteractions.cpp index e3d17832..e7b5c27e 100644 --- a/src/QvCoreInteractions.cpp +++ b/src/QvCoreInteractions.cpp @@ -1,56 +1,58 @@ #include #include +#include #include "QvCoreInteractions.h" #include "QvCoreConfigOperations.h" +#include "QvTinyLog.h" #include "w_MainWindow.h" namespace Qv2ray { - bool Qv2Instance::VerifyVConfigFile(const QString path) + bool Qv2Instance::VerifyVConfigFile(const QString *path) { if (ValidateV2rayCoreExe()) { QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("V2RAY_LOCATION_ASSET", QString::fromStdString(GetGlobalConfig().v2AssetsPath)); QProcess process; process.setProcessEnvironment(env); - process.start(QString::fromStdString(Utils::GetGlobalConfig().v2CorePath), QStringList() << "-test" - << "-config" << path, - QIODevice::ReadWrite | QIODevice::Text); + process.start(QV2RAY_V2RAY_CORE_PATH, QStringList() << "-test" << "-config" << *path, QIODevice::ReadWrite | QIODevice::Text); if (!process.waitForFinished()) { - qDebug() << "v2ray core failed with exit code " << process.exitCode(); + LOG(MODULE_VCORE, "v2ray core failed with exitcode: " << process.exitCode()) return false; } QString output = QString(process.readAllStandardOutput()); - if (!output.contains("Configuration OK")) { - Utils::QvMessageBox(nullptr, QObject::tr("ConfigurationError"), output.mid(output.indexOf("anti-censorship.") + 17)); + if (process.exitCode() != 0) { + Utils::QvMessageBox(nullptr, QObject::tr("Configuration Error"), output.mid(output.indexOf("anti-censorship.") + 17)); return false; - } else - return true; - } else - return false; + } + + return true; + } + + return false; } Qv2Instance::Qv2Instance(QWidget *parent) { - QProcess *proc = new QProcess(); + auto proc = new QProcess(); vProcess = proc; QObject::connect(vProcess, &QProcess::readyReadStandardOutput, static_cast(parent), &MainWindow::UpdateLog); Status = STOPPED; } + QString Qv2Instance::ReadProcessOutput() { return vProcess->readAllStandardOutput(); } + bool Qv2Instance::ValidateV2rayCoreExe() { - auto path = QString::fromStdString(Utils::GetGlobalConfig().v2CorePath); - - if (!QFile::exists(path)) { - Utils::QvMessageBox(nullptr, QObject::tr("CoreNotFound"), QObject::tr("CoreFileNotFoundExplainationAt:") + path); + if (!QFile::exists(QV2RAY_V2RAY_CORE_PATH)) { + Utils::QvMessageBox(nullptr, QObject::tr("Cannot start v2ray"), QObject::tr("v2ray core file cannot be found at:") + QV2RAY_V2RAY_CORE_PATH); return false; } else return true; } @@ -64,13 +66,13 @@ namespace Qv2ray Status = STARTING; if (ValidateV2rayCoreExe()) { - if (VerifyVConfigFile(QV2RAY_GENERATED_FILE_PATH)) { + auto filePath = QV2RAY_GENERATED_FILE_PATH; + + if (VerifyVConfigFile(&filePath)) { QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("V2RAY_LOCATION_ASSET", QString::fromStdString(GetGlobalConfig().v2AssetsPath)); vProcess->setProcessEnvironment(env); - vProcess->start(QString::fromStdString(GetGlobalConfig().v2CorePath), QStringList() << "-config" - << QV2RAY_GENERATED_FILE_PATH, - QIODevice::ReadWrite | QIODevice::Text); + vProcess->start(QV2RAY_V2RAY_CORE_PATH, QStringList() << "-config" << filePath, QIODevice::ReadWrite | QIODevice::Text); vProcess->waitForStarted(); Status = STARTED; return true; diff --git a/src/QvCoreInteractions.h b/src/QvCoreInteractions.h index 32003fc2..5e92cfbf 100644 --- a/src/QvCoreInteractions.h +++ b/src/QvCoreInteractions.h @@ -20,7 +20,7 @@ namespace Qv2ray bool Start(); void Stop(); V2RAY_INSTANCE_STARTUP_STATUS Status; - static bool VerifyVConfigFile(QString path); + static bool VerifyVConfigFile(const QString *path); static bool ValidateV2rayCoreExe(); QString ReadProcessOutput(); diff --git a/src/QvUtils.cpp b/src/QvUtils.cpp index fdac502f..a8872bc2 100644 --- a/src/QvUtils.cpp +++ b/src/QvUtils.cpp @@ -22,24 +22,24 @@ namespace Qv2ray return ConfigDirPath; } - void SetConfigDirPath(QString path) + void SetConfigDirPath(const QString *path) { - ConfigDirPath = path; + ConfigDirPath = *path; } void SaveGlobalConfig() { QFile config(QV2RAY_CONFIG_FILE_PATH); QString str = StructToJSONString(GetGlobalConfig()); - StringToFile(str, &config); + StringToFile(&str, &config); } - bool StringToFile(QString text, QFile *targetFile) + bool StringToFile(const QString *text, QFile *targetFile) { bool override = targetFile->exists(); targetFile->open(QFile::WriteOnly); QTextStream stream(targetFile); - stream << text << endl; + stream << *text << endl; stream.flush(); targetFile->close(); return override; diff --git a/src/QvUtils.h b/src/QvUtils.h index 27908e75..e10b2342 100644 --- a/src/QvUtils.h +++ b/src/QvUtils.h @@ -18,7 +18,7 @@ namespace Qv2ray bool CheckFile(QDir *dir, QString fileName); - void SetConfigDirPath(QString path); + void SetConfigDirPath(const QString *path); QString GetConfigDirPath(); void SetGlobalConfig(Qv2rayConfig conf); @@ -30,7 +30,7 @@ namespace Qv2ray void QvMessageBox(QWidget *parent, QString title, QString text); int QvMessageBoxAsk(QWidget *parent, QString title, QString text, QMessageBox::StandardButton extraButtons = QMessageBox::NoButton); // - bool StringToFile(QString text, QFile *target); + bool StringToFile(const QString *text, QFile *target); QString StringFromFile(QFile *sourceFile); // QJsonObject JSONFromString(QString string); diff --git a/src/main.cpp b/src/main.cpp index 2a6a1a49..0ee14cb3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,68 +7,36 @@ #include "QvRunguard.h" #include "w_MainWindow.h" -using namespace Qv2ray; -using namespace Qv2ray::Utils; -using namespace Qv2ray::QvConfigModels; - bool initQv() { -#ifdef QT_DEBUG - QString configPath = QDir::homePath() + "/.qv2ray_debug"; -#else - QString configPath = QDir::homePath() + "/.qv2ray"; -#endif - /// Qv2ray Config Path and ends with "/" - QString exeDefaultPath = configPath + "/vcore/v2ray"; - QString v2AssetsPath = configPath + "/vcore"; - // -#if defined(__WIN32) - exeDefaultPath = exeDefaultPath + ".exe"; -#elif defined(__linux__) - // Special case for GNU/Linux - // - // Unused these values - Q_UNUSED(v2AssetsPath) - Q_UNUSED(exeDefaultPath) - v2AssetsPath = "/etc/v2ray"; - exeDefaultPath = "/bin/v2ray"; -#endif - // - SetConfigDirPath(configPath); - auto ConfigDir = new QDir(configPath); - - if (!ConfigDir->exists()) { - auto result = QDir().mkdir(QV2RAY_CONFIG_DIR_PATH); - - if (result) { - LOG(MODULE_INIT, "Created Qv2ray config dir at: " + QV2RAY_CONFIG_DIR_PATH.toStdString()) - } else { - LOG(MODULE_INIT, "Failed to create config dir at: " + QV2RAY_CONFIG_DIR_PATH.toStdString()) - return false; - } + if (!QDir(QV2RAY_CONFIG_DIR_PATH).exists()) { + QDir().mkdir(QV2RAY_CONFIG_DIR_PATH); + LOG(MODULE_INIT, "Created Qv2ray config dir at: " + QV2RAY_CONFIG_DIR_PATH.toStdString()) } - auto genPath = QV2RAY_CONFIG_DIR_PATH + "generated/"; - - if (!QDir(genPath).exists()) { - auto result2 = QDir().mkdir(genPath); - - if (result2) { - LOG(MODULE_INIT, "Created config generation dir at: " + genPath.toStdString()) - } else { - LOG(MODULE_INIT, "Failed to create config generation dir at: " + genPath.toStdString()) - return false; - } + if (!QDir(QV2RAY_CONFIG_DIR_PATH + "generated/").exists()) { + QDir().mkdir(QV2RAY_CONFIG_DIR_PATH + "generated/"); + LOG(MODULE_INIT, "Created config generation dir.") } - QFile configFile(QV2RAY_CONFIG_FILE_PATH); + if (!QDir(QV2RAY_V2RAY_CORE_DIR_PATH).exists()) { + QDir().mkdir(QV2RAY_V2RAY_CORE_DIR_PATH); + LOG(MODULE_INIT, "Created dir for v2ray core and assets.") + QFile _readmeFile(QV2RAY_V2RAY_CORE_DIR_PATH + "Put your v2ray.exe here.txt"); + _readmeFile.open(QIODevice::WriteOnly); + _readmeFile.write("Please put your v2ray.exe and assets here!"); + _readmeFile.close(); + LOG(MODULE_INIT, "Done generating readme.") + } - if (!configFile.exists()) { - // This is first run! + QFile qvConfigFile(QV2RAY_CONFIG_FILE_PATH); + + if (!qvConfigFile.exists()) { + // This is first run, even the config file does not exist... // // These below genenrated very basic global config. Qv2rayBasicInboundsConfig inboundSetting = Qv2rayBasicInboundsConfig("127.0.0.1", 1080, 8000); - Qv2rayConfig conf = Qv2rayConfig("zh-CN", exeDefaultPath.toStdString(), v2AssetsPath.toStdString(), 2, inboundSetting); + Qv2rayConfig conf = Qv2rayConfig("zh-CN", QV2RAY_V2RAY_CORE_DIR_PATH.toStdString(), 4, inboundSetting); // // Save initial config. SetGlobalConfig(conf); @@ -77,11 +45,18 @@ bool initQv() LOG(MODULE_INIT, "Created initial config file.") } else { // Some config file upgrades. - auto conf = JSONFromString(StringFromFile(&configFile)); + auto conf = JSONFromString(StringFromFile(&qvConfigFile)); auto confVersion = conf["config_version"].toVariant().toString(); auto newVersion = QSTRING(to_string(QV2RAY_CONFIG_VERSION)); - if (QString::compare(confVersion, newVersion) != 0) { + // Config version is larger than the current version... + if (stoi(confVersion.toStdString()) > QV2RAY_CONFIG_VERSION) { + QvMessageBox(nullptr, QObject::tr("Qv2ray Cannot Continue"), QObject::tr("You are running a lower version of Qv2ray compared to the current config file.") + + "\r\n" + + QObject::tr("Please report if you think this is an error.") + "\r\n" + + QObject::tr("Qv2ray will now exit.")); + return false; + } else if (QString::compare(confVersion, newVersion) != 0) { conf = UpgradeConfig(stoi(confVersion.toStdString()), QV2RAY_CONFIG_VERSION, conf); } @@ -110,7 +85,11 @@ int main(int argc, char *argv[]) // #ifdef QT_DEBUG LOG("DEBUG", "============================== This is a debug build, many features are not stable enough. ==============================") + QString configPath = QDir::homePath() + "/.qv2ray_debug"; +#else + QString configPath = QDir::homePath() + "/.qv2ray"; #endif + SetConfigDirPath(&configPath); QDirIterator it(":/translations"); if (!it.hasNext()) { diff --git a/src/w_ImportConfig.cpp b/src/w_ImportConfig.cpp index a684022a..83d6c2e7 100644 --- a/src/w_ImportConfig.cpp +++ b/src/w_ImportConfig.cpp @@ -45,8 +45,9 @@ void ImportConfigWindow::on_buttonBox_accepted() if (ui->importSourceCombo->currentIndex() == 0) { // From File... bool overrideInBound = !ui->keepImportedInboundCheckBox->isChecked(); + auto fileName = ui->fileLineTxt->text(); - if (!Qv2Instance::VerifyVConfigFile(ui->fileLineTxt->text())) { + if (!Qv2Instance::VerifyVConfigFile(&fileName)) { QvMessageBox(this, tr("Import config file"), tr("Failed to check the validity of the config file.")); return; } diff --git a/src/w_MainWindow.cpp b/src/w_MainWindow.cpp index c9d8b7ee..6340d5e2 100644 --- a/src/w_MainWindow.cpp +++ b/src/w_MainWindow.cpp @@ -15,10 +15,10 @@ #include #endif -#include "w_PrefrencesWindow.h" -#include "w_ImportConfig.h" #include "w_ConnectionEditWindow.h" +#include "w_ImportConfig.h" #include "w_MainWindow.h" +#include "w_PrefrencesWindow.h" #include "w_SubscribeEditor.h" #define TRAY_TOOLTIP_PREFIX "Qv2ray " QV2RAY_VERSION_STRING "\r\n" @@ -75,23 +75,23 @@ MainWindow::MainWindow(QWidget *parent) // if (!vinstance->ValidateV2rayCoreExe()) { - on_prefrencesBtn_clicked(); - } - - auto conf = GetGlobalConfig(); - - if (conf.autoStartConfig != "" && QList::fromStdList(conf.configs).contains(conf.autoStartConfig)) { - CurrentConnectionName = QSTRING(conf.autoStartConfig); - auto item = ui->connectionListWidget->findItems(QSTRING(conf.autoStartConfig), Qt::MatchExactly).front(); - item->setSelected(true); - ui->connectionListWidget->setCurrentItem(item); - on_connectionListWidget_itemClicked(item); - on_startButton_clicked(); - //ToggleVisibility(); - this->hide(); - trayMenu->actions()[0]->setText(tr("Show")); + QDesktopServices::openUrl(QUrl::fromLocalFile(QV2RAY_V2RAY_CORE_DIR_PATH)); } else { - this->show(); + auto conf = GetGlobalConfig(); + + if (conf.autoStartConfig != "" && QList::fromStdList(conf.configs).contains(conf.autoStartConfig)) { + CurrentConnectionName = QSTRING(conf.autoStartConfig); + auto item = ui->connectionListWidget->findItems(QSTRING(conf.autoStartConfig), Qt::MatchExactly).front(); + item->setSelected(true); + ui->connectionListWidget->setCurrentItem(item); + on_connectionListWidget_itemClicked(item); + on_startButton_clicked(); + //ToggleVisibility(); + this->hide(); + trayMenu->actions()[0]->setText(tr("Show")); + } else { + this->show(); + } } } @@ -305,11 +305,8 @@ void MainWindow::QTextScrollToBottom() if (bar->value() >= bar->maximum() - 10) bar->setValue(bar->maximum()); } -void MainWindow::ShowAndSetConnection(int index, bool SetConnection, bool ApplyConnection) +void MainWindow::ShowAndSetConnection(QString guiConnectionName, bool SetConnection, bool ApplyConnection) { - if (index < 0) return; - - auto guiConnectionName = ui->connectionListWidget->item(index)->text(); // --------- BRGIN Show Connection auto outBoundRoot = (connections[guiConnectionName])["outbounds"].toArray().first().toObject(); // @@ -362,7 +359,12 @@ void MainWindow::on_connectionListWidget_itemClicked(QListWidgetItem *item) { Q_UNUSED(item) int currentRow = ui->connectionListWidget->currentRow(); - ShowAndSetConnection(currentRow, !isRenamingInProgress && (vinstance->Status != STARTED), false); + + if (currentRow < 0) return; + + QString currentText = ui->connectionListWidget->currentItem()->text(); + bool canSetConnection = !isRenamingInProgress && vinstance->Status != STARTED ; + ShowAndSetConnection(currentText, canSetConnection, false); } void MainWindow::on_prefrencesBtn_clicked() @@ -374,7 +376,13 @@ void MainWindow::on_prefrencesBtn_clicked() void MainWindow::on_connectionListWidget_doubleClicked(const QModelIndex &index) { - ShowAndSetConnection(index.row(), true, true); + Q_UNUSED(index) + int currentRow = ui->connectionListWidget->currentRow(); + + if (currentRow < 0) return; + + QString currentText = ui->connectionListWidget->currentItem()->text(); + ShowAndSetConnection(currentText, true, true); } void MainWindow::on_clearlogButton_clicked() @@ -385,7 +393,7 @@ void MainWindow::on_clearlogButton_clicked() void MainWindow::on_connectionListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { Q_UNUSED(previous) - isRenamingInProgress = true; + isRenamingInProgress = false; on_connectionListWidget_itemClicked(current); } @@ -401,14 +409,14 @@ void MainWindow::on_action_RenameConnection_triggered() item->setFlags(item->flags() | Qt::ItemIsEditable); ui->connectionListWidget->editItem(item); originalName = item->text(); - isRenamingInProgress = false; + isRenamingInProgress = true; } void MainWindow::on_connectionListWidget_itemChanged(QListWidgetItem *item) { LOG(MODULE_UI, "A connection ListViewItem is changed.") - if (!isRenamingInProgress) { + if (isRenamingInProgress) { // In this case it's after we entered the name. LOG(MODULE_CONNECTION, "RENAME: " + originalName.toStdString() + " -> " + item->text().toStdString()) auto newName = item->text(); @@ -416,16 +424,16 @@ void MainWindow::on_connectionListWidget_itemChanged(QListWidgetItem *item) auto configList = QList::fromStdList(config.configs); if (newName.trimmed().isEmpty()) { - QvMessageBox(this, tr("Rename A Connection"), tr("A name cannot be empty")); + QvMessageBox(this, tr("Rename a Connection"), tr("The name cannot be empty")); return; } - // If I really did some changes. LOG("RENAME", "ORIGINAL: " + originalName.toStdString() + ", NEW: " + newName.toStdString()) + // If I really did some changes. if (originalName != newName) { if (configList.contains(newName.toStdString())) { - QvMessageBox(this, tr("Rename A Connection"), tr("The name has been used already, Please choose another.")); + QvMessageBox(this, tr("Rename a Connection"), tr("The name has been used already, Please choose another.")); return; } @@ -452,7 +460,7 @@ void MainWindow::on_connectionListWidget_itemChanged(QListWidgetItem *item) void MainWindow::on_removeConfigButton_clicked() { - if (QvMessageBoxAsk(this, tr("Removing A Connection"), tr("Are you sure to remove this connection?")) == QMessageBox::Yes) { + if (QvMessageBoxAsk(this, tr("Removing this Connection"), tr("Are you sure to remove this connection?")) == QMessageBox::Yes) { auto conf = GetGlobalConfig(); QList list = QList::fromStdList(conf.configs); auto currentSelected = ui->connectionListWidget->currentIndex().row(); @@ -489,9 +497,7 @@ void MainWindow::on_addConfigButton_clicked() void MainWindow::on_editConfigButton_clicked() { // Check if we have a connection selected... - auto index = ui->connectionListWidget->currentIndex().row(); - - if (index < 0) { + if (ui->connectionListWidget->currentIndex().row() < 0) { QvMessageBox(this, tr("NoConfigSelected"), tr("PleaseSelectAConfig")); return; } @@ -508,3 +514,8 @@ void MainWindow::on_pushButton_clicked() SubscribeEditor *w = new SubscribeEditor(this); w->show(); } + +void MainWindow::on_reconnectButton_clicked() +{ + on_restartButton_clicked(); +} diff --git a/src/w_MainWindow.h b/src/w_MainWindow.h index da43b09f..74db2da3 100644 --- a/src/w_MainWindow.h +++ b/src/w_MainWindow.h @@ -59,6 +59,8 @@ class MainWindow : public QMainWindow void on_pushButton_clicked(); + void on_reconnectButton_clicked(); + private: void on_action_StartThis_triggered(); void on_action_RenameConnection_triggered(); @@ -75,7 +77,7 @@ class MainWindow : public QMainWindow QString originalName; bool isRenamingInProgress; // - void ShowAndSetConnection(int index, bool SetConnection, bool Apply); + void ShowAndSetConnection(QString currentText, bool SetConnection, bool Apply); void LoadConnections(); void closeEvent(QCloseEvent *); }; diff --git a/src/w_MainWindow.ui b/src/w_MainWindow.ui index 170cd318..1cac39d9 100644 --- a/src/w_MainWindow.ui +++ b/src/w_MainWindow.ui @@ -59,7 +59,7 @@ - + Reconnect diff --git a/src/w_PrefrencesWindow.cpp b/src/w_PrefrencesWindow.cpp index 518540a1..aacb88d3 100644 --- a/src/w_PrefrencesWindow.cpp +++ b/src/w_PrefrencesWindow.cpp @@ -5,10 +5,6 @@ #include -#ifdef __linux -#include -#endif - #define NEEDRESTART if(finishedLoading) IsConnectionPropertyChanged = true; PrefrencesWindow::PrefrencesWindow(QWidget *parent) : QDialog(parent), @@ -63,7 +59,6 @@ PrefrencesWindow::PrefrencesWindow(QWidget *parent) : QDialog(parent), ui->socksPortLE->setValidator(new QIntValidator()); // // - ui->vCoreExePathTxt->setText(QSTRING(CurrentConfig.v2CorePath)); ui->vCoreAssetsPathTxt->setText(QSTRING(CurrentConfig.v2AssetsPath)); // // @@ -178,12 +173,6 @@ void PrefrencesWindow::on_logLevelComboBox_currentIndexChanged(int index) CurrentConfig.logLevel = index; } -void PrefrencesWindow::on_vCoreExePathTxt_textEdited(const QString &arg1) -{ - NEEDRESTART - CurrentConfig.v2CorePath = arg1.toStdString(); -} - void PrefrencesWindow::on_vCoreAssetsPathTxt_textEdited(const QString &arg1) { NEEDRESTART @@ -262,23 +251,6 @@ void PrefrencesWindow::on_localDNSCb_stateChanged(int arg1) CurrentConfig.withLocalDNS = arg1 == Qt::Checked; } -void PrefrencesWindow::on_selectVCoreBtn_clicked() -{ - NEEDRESTART - QString path = QFileDialog::getOpenFileName(this, tr("Open v2ray core file"), QDir::currentPath()); - ui->vCoreExePathTxt->setText(path); - on_vCoreExePathTxt_textEdited(path); - - // If we enabled tProxy feature... then not to change this automatically - if (CurrentConfig.runAsRoot) { - LOG(MODULE_CONFIG, "Not to automatically update v2ray assets path, because tProxy feature is enabled.") - } else { - auto dir = QFileInfo(path).dir().path(); - ui->vCoreAssetsPathTxt->setText(dir); - on_vCoreAssetsPathTxt_textEdited(dir); - } -} - void PrefrencesWindow::on_selectVAssetBtn_clicked() { NEEDRESTART @@ -328,27 +300,24 @@ void PrefrencesWindow::on_cancelIgnoreVersionBtn_clicked() void PrefrencesWindow::on_tProxyCheckBox_stateChanged(int arg1) { #ifdef __linux - LOG(MODULE_UI, "WARN: This feature is on development.") + // Set UID and GID for linux // Steps: // --> 1. Copy v2ray core files to the #CONFIG_DIR#/vcore/ dir. // --> 2. Change GlobalConfig.v2CorePath. - // --> 3. Call `pkexec setcap SOMECAP` on the v2ray core. - QString vCorePath = QString::fromStdString(CurrentConfig.v2CorePath); - QFileInfo v2rayCoreExeFile(vCorePath); + // --> 3. Call `pkexec setcap CAP_NET_ADMIN,CAP_NET_RAW,CAP_NET_BIND_SERVICE=eip` on the v2ray core. - if (arg1 == Qt::Checked && v2rayCoreExeFile.ownerId() != 0) { - QProcess::execute("pkexec", QStringList() << "bash" - << "-c" - << "chown root:root " + vCorePath + " && " - << "chmod +s " + vCorePath); + if (arg1 == Qt::Checked) { + // We enable it! + if (QvMessageBoxAsk(this, tr("Enable tProxy Support"), tr("This will add 3 capabilities on the v2ray executable.")) != QMessageBox::Yes) { + ui->tProxyCheckBox->setChecked(false); + LOG(MODULE_UI, "Canceled enabling tProxy feature.") + } + + QProcess::execute(""); CurrentConfig.runAsRoot = true; - } else if (arg1 != Qt::Checked && v2rayCoreExeFile.ownerId() == 0) { - uid_t uid = getuid(); - gid_t gid = getgid(); - QProcess::execute("pkexec", QStringList() - << "chown" << QString::number(uid) + ":" + QString::number(gid) - << vCorePath); + } else { + QProcess::execute(""); CurrentConfig.runAsRoot = false; } diff --git a/src/w_PrefrencesWindow.h b/src/w_PrefrencesWindow.h index 5e58d438..93c53f63 100644 --- a/src/w_PrefrencesWindow.h +++ b/src/w_PrefrencesWindow.h @@ -35,8 +35,6 @@ class PrefrencesWindow : public QDialog void on_logLevelComboBox_currentIndexChanged(int index); - void on_vCoreExePathTxt_textEdited(const QString &arg1); - void on_vCoreAssetsPathTxt_textEdited(const QString &arg1); void on_muxEnabledCB_stateChanged(int arg1); @@ -63,8 +61,6 @@ class PrefrencesWindow : public QDialog void on_localDNSCb_stateChanged(int arg1); - void on_selectVCoreBtn_clicked(); - void on_selectVAssetBtn_clicked(); void on_DNSListTxt_textChanged(); diff --git a/src/w_PrefrencesWindow.ui b/src/w_PrefrencesWindow.ui index ab7dd79d..20843932 100644 --- a/src/w_PrefrencesWindow.ui +++ b/src/w_PrefrencesWindow.ui @@ -142,34 +142,13 @@ - - - v2ray Core Path - - - - - - - - - - - - #Select - - - - - - v2ray Assets Path - + diff --git a/translations/en-US.ts b/translations/en-US.ts index 7c974c90..50198d4a 100644 --- a/translations/en-US.ts +++ b/translations/en-US.ts @@ -297,28 +297,28 @@ - + Import config file - + Failed to check the validity of the config file. - - + + VMess String Check - + VMess string is not valid - + Some internal error occured @@ -486,19 +486,35 @@ - + Show - + + + Rename a Connection + + + + + The name cannot be empty + + + + + Removing this Connection + + + + NoConfigSelected - + PleaseSelectAConfig @@ -549,58 +565,42 @@ - + UUID - + AlterID - + Transport - + Email - + Encryption - + Username - - - Rename A Connection - - - - - A name cannot be empty - - - - + The name has been used already, Please choose another. - - Removing A Connection - - - - + Are you sure to remove this connection? @@ -609,7 +609,7 @@ PrefrencesWindow - + Prefrences @@ -668,38 +668,32 @@ Automatically Connect To - - - v2ray Core Path - - - #Select - + v2ray Assets Path - + Mux Settings - - - - - - + + + + + + + - - + Enabled @@ -709,151 +703,156 @@ - + Concurrency - + InBound Settings - + Listen IP - + SOCKS InBound Settings - - + + Port - - + + Authentication - - + + Username - - + + Password - + HTTP InBound Settings - + Route Settings - + Enable Proxy - + Chinese Addresses - + Use Local DNS - + DNS List - + About - + Qv2ray - + Version: - + Official Repo: - + <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - + License: - + <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - + About Qt - + Ingore Next Version - + Cancel - + Port numbers cannot be the same - - Open v2ray core file - - - - + Open v2ray assets folder - + + Enable tProxy Support + + + + + This will add 3 capabilities on the v2ray executable. + + + + tProxy - + tProxy is not supported on MacOS and Windows @@ -866,45 +865,65 @@ - - ConfigurationError + + Qv2ray Cannot Continue - - CoreNotFound + + You are running a lower version of Qv2ray compared to the current config file. - - CoreFileNotFoundExplainationAt: + + Please report if you think this is an error. - + + Qv2ray will now exit. + + + + DependencyMissing - + Cannot find openssl libs - + This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - + If you are using AppImage, please report a bug. - + Another instance of Qv2ray is already running. + + + Configuration Error + + + + + Cannot start v2ray + + + + + v2ray core file cannot be found at: + + RouteEditor From 05623e13fb455b2562b15fea410202b03e02d16a Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sat, 21 Sep 2019 15:34:24 +0800 Subject: [PATCH 06/29] Update README.md Former-commit-id: ff2f7140f09c83646c43647c3bc48dc3e1ea6bd3 --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6cf59828..3f838dbb 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ 支持连接编辑,支持导入配置和 VMess +Special thanks to: [Hv2ray](https://github.com/aliyuchang33/Hv2ray) by aliyuchang33 + # 项目主页,下载链接和使用方法 - 项目网站: https://lhy0403.github.io/Qv2ray - 最新 [Release](https://github.com/lhy0403/Qv2ray/releases/latest) @@ -14,7 +16,7 @@ ## Jenkins (Linux) Himeki.net 的 Jenkins 编译服务器提供开发分支 `dev` 的 Linux AppImage 版本 - 访问链接: [https://jenkins.himeki.net/job/Qv2ray-AppImage-dev/](https://jenkins.himeki.net/job/Qv2ray-AppImage-dev/) - - 开发分支仅供测试使用 + - 开发分支仅供测试 - 提供者 [@aliyuchang33](https://github.com/aliyuchang33) ------------------------- From 4ff88e103adcd0e9c665dfaf93293e362356ca9a Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sat, 21 Sep 2019 16:53:01 +0800 Subject: [PATCH 07/29] Created FAQ and fixed #59 Former-commit-id: d7a3375ec8b94c90d4d347db3566042126375253 --- docs/FAQ.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/FAQ.md diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 00000000..6ce15ace --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,8 @@ +# 经常出现的问题 + +## 在启用了 tPtoxy 支持后 v2ray 启动失败 +详细内容:启动 v2ray 时出现 `Segmentation Fault` +此问题是部分 linux 的 suid 功能受限引起的,具体错误分析可以参考 [#59](https://github.com/lhy0403/Qv2ray/issues/59) + - 解决方案:`sudo sysctl fs.suid_dumpable=1` + - 此操作不会保存 sysctl 设置,重启之后会失效。如果需要持久性修改此参数,请参考 [这篇blog](http://ssdxiao.github.io/linux/2017/03/20/Sysctl-not-applay-on-boot.html) + From 7cb1feca605d739742254f8bb292e520a80ce0d7 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sat, 21 Sep 2019 19:33:02 +0800 Subject: [PATCH 08/29] [fix] Added tProxy setcap on Linux and should contain the solutions for #57 and #58 Former-commit-id: 5a733dc07a9cbf2829eb07c79469dc594d57c75c --- src/Qv2rayBase.h | 7 -- src/QvCoreConfigObjects.h | 4 - src/QvCoreConfigOperations.h | 2 +- src/QvCoreConfigOperations_Convertion.cpp | 53 ++++++++----- src/QvCoreConfigOperations_Verification.cpp | 11 ++- src/QvTinyLog.h | 4 + src/w_ConnectionEditWindow.cpp | 5 +- src/w_ConnectionEditWindow.h | 2 +- src/w_MainWindow.cpp | 8 +- src/w_PrefrencesWindow.cpp | 57 +++++++++----- src/w_SubscribeEditor.cpp | 2 +- translations/en-US.ts | 86 +++++++++++---------- 12 files changed, 139 insertions(+), 102 deletions(-) diff --git a/src/Qv2rayBase.h b/src/Qv2rayBase.h index 759c2058..7e2d55a9 100644 --- a/src/Qv2rayBase.h +++ b/src/Qv2rayBase.h @@ -30,13 +30,6 @@ #define QV2RAY_VCORE_ACCESS_LOG_FILENAME "access.log" #define QV2RAY_VCORE_ERROR_LOG_FILENAME "error.log" -// These is for early-2.0 version, final 2.0 will move these content into global config. -#define QV2RAY_CONFIG_TYPE_FILE "File" -#define QV2RAY_CONFIG_TYPE_MANUAL "Manual" -#define QV2RAY_CONFIG_TYPE_CONNECTIONSTRING "ConnectionString" -#define QV2RAY_CONFIG_TYPE_SUBSCRIPTION "Subscription" -#define QV2RAY_CONFIG_TYPE_JSON_KEY "_qv2ray.configSource" - // GUI TOOLS #define RED(obj) \ auto _temp = ui->obj->palette(); \ diff --git a/src/QvCoreConfigObjects.h b/src/QvCoreConfigObjects.h index da3e4498..b353e8cf 100644 --- a/src/QvCoreConfigObjects.h +++ b/src/QvCoreConfigObjects.h @@ -16,10 +16,6 @@ namespace Qv2ray { namespace V2ConfigModels { - struct VMessProtocolConfigObject { - string v, ps, add, port, id, aid, net, type, host, path, tls; - XTOSTRUCT(O(v, ps, add, port, id, aid, net, type, host, path, tls)) - }; // // Used in config generation struct AccountObject { diff --git a/src/QvCoreConfigOperations.h b/src/QvCoreConfigOperations.h index 5ee7797c..5a112d02 100644 --- a/src/QvCoreConfigOperations.h +++ b/src/QvCoreConfigOperations.h @@ -57,7 +57,7 @@ namespace Qv2ray bool SaveConnectionConfig(QJsonObject obj, const QString *alias); bool RenameConnection(QString originalName, QString newName); // VMess Protocol - QJsonObject ConvertConfigFromVMessString(QString vmess, QString source = QV2RAY_CONFIG_TYPE_CONNECTIONSTRING); + QJsonObject ConvertConfigFromVMessString(QString vmess); QJsonObject ConvertConfigFromFile(QString sourceFilePath, bool overrideInbounds); // Load Configs QMap GetConnections(list connections); diff --git a/src/QvCoreConfigOperations_Convertion.cpp b/src/QvCoreConfigOperations_Convertion.cpp index b2d6425d..df8a6809 100644 --- a/src/QvCoreConfigOperations_Convertion.cpp +++ b/src/QvCoreConfigOperations_Convertion.cpp @@ -12,21 +12,34 @@ namespace Qv2ray } // This generates global config containing only one outbound.... - QJsonObject ConvertConfigFromVMessString(QString str, QString source) + QJsonObject ConvertConfigFromVMessString(QString str) { DROOT QStringRef vmessJsonB64(&str, 8, str.length() - 8); - auto vmessConf = StructFromJSONString(Base64Decode(vmessJsonB64.toString())); + auto vmessConf = JSONFromString(Base64Decode(vmessJsonB64.toString())); + string ps, add, id, net, type, host, path, tls; + int port, aid; + ps = vmessConf["ps"].toVariant().toString().toStdString(); + add = vmessConf["add"].toVariant().toString().toStdString(); + id = vmessConf["id"].toVariant().toString().toStdString(); + net = vmessConf["net"].toVariant().toString().toStdString(); + type = vmessConf["type"].toVariant().toString().toStdString(); + host = vmessConf["host"].toVariant().toString().toStdString(); + path = vmessConf["path"].toVariant().toString().toStdString(); + tls = vmessConf["tls"].toVariant().toString().toStdString(); + // + port = vmessConf["port"].toVariant().toInt(); + aid = vmessConf["aid"].toVariant().toInt(); // // User VMessServerObject::UserObject user; - user.id = vmessConf.id; - user.alterId = stoi(vmessConf.aid); + user.id = id; + user.alterId = aid; // // Server VMessServerObject serv; - serv.port = stoi(vmessConf.port); - serv.address = vmessConf.add; + serv.port = port; + serv.address = add; serv.users.push_back(user); // // VMess root config @@ -39,35 +52,34 @@ namespace Qv2ray StreamSettingsObject streaming; // Fill hosts for HTTP - foreach (auto host, QString::fromStdString(vmessConf.host).split(',')) { - streaming.httpSettings.host.push_back(host.toStdString()); + foreach (auto _host, QString::fromStdString(host).split(',')) { + streaming.httpSettings.host.push_back(_host.toStdString()); } // hosts for ws, h2 and security for QUIC - streaming.wsSettings.headers.insert(make_pair("Host", vmessConf.host)); - streaming.quicSettings.security = vmessConf.host; + streaming.wsSettings.headers.insert(make_pair("Host", host)); + streaming.quicSettings.security = host; // // Fake type for tcp, kcp and QUIC - streaming.tcpSettings.header.type = vmessConf.type; - streaming.kcpSettings.header.type = vmessConf.type; - streaming.quicSettings.header.type = vmessConf.type; + streaming.tcpSettings.header.type = type; + streaming.kcpSettings.header.type = type; + streaming.quicSettings.header.type = type; // // Path for ws, h2, Quic - streaming.wsSettings.path = vmessConf.path; - streaming.httpSettings.path = vmessConf.path; - streaming.quicSettings.key = vmessConf.path; - streaming.security = vmessConf.tls; + streaming.wsSettings.path = path; + streaming.httpSettings.path = path; + streaming.quicSettings.key = path; + streaming.security = tls; // // Network type - streaming.network = vmessConf.net; + streaming.network = net; // auto outbound = GenerateOutboundEntry("vmess", vConf, GetRootObject(streaming), GetRootObject(GetGlobalConfig().mux), "0.0.0.0", OUTBOUND_TAG_PROXY); // QJsonArray outbounds; outbounds.append(outbound); root.insert("outbounds", outbounds); - root.insert("QV2RAY_ALIAS", QString::fromStdString(vmessConf.ps)); - root.insert(QV2RAY_CONFIG_TYPE_JSON_KEY, source); + root.insert("QV2RAY_ALIAS", QString::fromStdString(ps)); RROOT } @@ -83,7 +95,6 @@ namespace Qv2ray JSON_ROOT_TRY_REMOVE("api") JSON_ROOT_TRY_REMOVE("stats") JSON_ROOT_TRY_REMOVE("dns") - root.insert(QV2RAY_CONFIG_TYPE_JSON_KEY, QV2RAY_CONFIG_TYPE_FILE); return root; } diff --git a/src/QvCoreConfigOperations_Verification.cpp b/src/QvCoreConfigOperations_Verification.cpp index a8e229dc..27e8ce1f 100644 --- a/src/QvCoreConfigOperations_Verification.cpp +++ b/src/QvCoreConfigOperations_Verification.cpp @@ -16,10 +16,15 @@ namespace Qv2ray try { QStringRef vmessJsonB64(&vmess, 8, vmess.length() - 8); auto vmessString = Base64Decode(vmessJsonB64.toString()); - auto vmessConf = StructFromJSONString(vmessString); - return 0; + auto vmessConf = JSONFromString(vmessString); + // C is a quick hack... +#define C(k) vmessConf.contains(k) + //string v, ps, add, port, id, aid, net, type, host, path, tls; + bool flag = C("v") && C("ps") && C("add") && C("port") && C("id") && C("aid") && C("net") && C("type") && C("host") && C("path") && C("tls"); +#undef C + return flag ? 0 : 1; } catch (exception *e) { - LOG(MODULE_CONNECTION, QObject::tr("#VMessDecodeError").toStdString() << e->what()) + LOG(MODULE_CONNECTION, "Failed to decode vmess string: " << e->what()) return -2; } } diff --git a/src/QvTinyLog.h b/src/QvTinyLog.h index 582881e6..809337c8 100644 --- a/src/QvTinyLog.h +++ b/src/QvTinyLog.h @@ -19,4 +19,8 @@ using namespace std; #define MODULE_FILE "FILE" #define MODULE_SUBSCRIPTION "SUBSCRIPTION" +#define WARN "WARN" +#define INFO "INFO" +#define ERROR "ERROR" + #endif // QVTINYLOG_H diff --git a/src/w_ConnectionEditWindow.cpp b/src/w_ConnectionEditWindow.cpp index 50420272..f1f98522 100644 --- a/src/w_ConnectionEditWindow.cpp +++ b/src/w_ConnectionEditWindow.cpp @@ -30,10 +30,10 @@ ConnectionEditWindow::ConnectionEditWindow(QWidget *parent) GEN_JSON } -ConnectionEditWindow::ConnectionEditWindow(QJsonObject editRootObject, QString alias, QWidget *parent) +ConnectionEditWindow::ConnectionEditWindow(QJsonObject editRootObject, const QString *alias, QWidget *parent) : ConnectionEditWindow(parent) { - _alias = alias; + _alias = *alias; originalRoot = editRootObject; auto outBoundRoot = originalRoot["outbounds"].toArray().first().toObject(); OutboundType = outBoundRoot["protocol"].toString(); @@ -156,7 +156,6 @@ void ConnectionEditWindow::on_buttonBox_accepted() } originalRoot.insert("outbounds", outbounds); - originalRoot.insert(QV2RAY_CONFIG_TYPE_JSON_KEY, QV2RAY_CONFIG_TYPE_MANUAL); SaveConnectionConfig(originalRoot, &alias); auto globalConf = GetGlobalConfig(); diff --git a/src/w_ConnectionEditWindow.h b/src/w_ConnectionEditWindow.h index 6cba411e..6893ea0d 100644 --- a/src/w_ConnectionEditWindow.h +++ b/src/w_ConnectionEditWindow.h @@ -17,7 +17,7 @@ class ConnectionEditWindow : public QDialog public: explicit ConnectionEditWindow(QWidget *parent = nullptr); - explicit ConnectionEditWindow(QJsonObject editRootObject, QString alias, QWidget *parent = nullptr); + explicit ConnectionEditWindow(QJsonObject editRootObject, const QString *alias, QWidget *parent = nullptr); ~ConnectionEditWindow(); signals: void s_reload_config(bool need_restart); diff --git a/src/w_MainWindow.cpp b/src/w_MainWindow.cpp index 6340d5e2..e61fefc3 100644 --- a/src/w_MainWindow.cpp +++ b/src/w_MainWindow.cpp @@ -91,6 +91,12 @@ MainWindow::MainWindow(QWidget *parent) trayMenu->actions()[0]->setText(tr("Show")); } else { this->show(); + + if (ui->connectionListWidget->count() != 0) { + // The first one is default. + ui->connectionListWidget->setCurrentRow(0); + ShowAndSetConnection(ui->connectionListWidget->item(0)->text(), true, false); + } } } } @@ -504,7 +510,7 @@ void MainWindow::on_editConfigButton_clicked() auto alias = ui->connectionListWidget->currentItem()->text(); auto outBoundRoot = connections[alias]; - ConnectionEditWindow *w = new ConnectionEditWindow(outBoundRoot, alias, this); + ConnectionEditWindow *w = new ConnectionEditWindow(outBoundRoot, &alias, this); connect(w, &ConnectionEditWindow::s_reload_config, this, &MainWindow::save_reload_globalconfig); w->show(); } diff --git a/src/w_PrefrencesWindow.cpp b/src/w_PrefrencesWindow.cpp index aacb88d3..5d4ad3fb 100644 --- a/src/w_PrefrencesWindow.cpp +++ b/src/w_PrefrencesWindow.cpp @@ -301,31 +301,50 @@ void PrefrencesWindow::on_tProxyCheckBox_stateChanged(int arg1) { #ifdef __linux - // Set UID and GID for linux - // Steps: - // --> 1. Copy v2ray core files to the #CONFIG_DIR#/vcore/ dir. - // --> 2. Change GlobalConfig.v2CorePath. - // --> 3. Call `pkexec setcap CAP_NET_ADMIN,CAP_NET_RAW,CAP_NET_BIND_SERVICE=eip` on the v2ray core. + if (finishedLoading) { + //LOG(MODULE_UI, "Running getcap....") + //QProcess::execute("getcap " + QV2RAY_V2RAY_CORE_PATH); - if (arg1 == Qt::Checked) { - // We enable it! - if (QvMessageBoxAsk(this, tr("Enable tProxy Support"), tr("This will add 3 capabilities on the v2ray executable.")) != QMessageBox::Yes) { - ui->tProxyCheckBox->setChecked(false); - LOG(MODULE_UI, "Canceled enabling tProxy feature.") + // Set UID and GID for linux + // Steps: + // --> 1. Copy v2ray core files to the #CONFIG_DIR#/vcore/ dir. + // --> 2. Change GlobalConfig.v2CorePath. + // --> 3. Call `pkexec setcap CAP_NET_ADMIN,CAP_NET_RAW,CAP_NET_BIND_SERVICE=eip` on the v2ray core. + if (arg1 == Qt::Checked) { + // We enable it! + if (QvMessageBoxAsk(this, tr("Enable tProxy Support"), tr("This will append capabilities to the v2ray executable.") + "\r\n" + + tr("If anything goes wrong after enabling this, please refer to issue #57 or the link below:") + "\r\n" + + " https://github.com/lhy0403/Qv2ray/blob/master/docs/FAQ.md ") != QMessageBox::Yes) { + ui->tProxyCheckBox->setChecked(false); + LOG(MODULE_UI, "Canceled enabling tProxy feature.") + } + + int ret = QProcess::execute("pkexec setcap CAP_NET_ADMIN,CAP_NET_RAW,CAP_NET_BIND_SERVICE=eip " + QV2RAY_V2RAY_CORE_PATH); + + if (ret != 0) { + LOG(MODULE_UI, "WARN: setcap exits with code: " + to_string(ret)) + QvMessageBox(this, tr("Prefrences"), tr("Failed to setcap onto v2ray executable. You may need to run `setcap` manually.")); + } + + CurrentConfig.runAsRoot = true; + NEEDRESTART + } else { + int ret = QProcess::execute("pkexec setcap -r " + QV2RAY_V2RAY_CORE_PATH); + + if (ret != 0) { + LOG(MODULE_UI, "WARN: setcap exits with code: " + to_string(ret)) + QvMessageBox(this, tr("Prefrences"), tr("Failed to setcap onto v2ray executable. You may need to run `setcap` manually.")); + } + + CurrentConfig.runAsRoot = false; + NEEDRESTART } - - QProcess::execute(""); - CurrentConfig.runAsRoot = true; - } else { - QProcess::execute(""); - CurrentConfig.runAsRoot = false; } - NEEDRESTART #else Q_UNUSED(arg1) ui->tProxyCheckBox->setChecked(false); - // No such uid gid thing on Windows and MacOS is in TODO .... - QvMessageBox(this, tr("tProxy"), tr("tProxy is not supported on MacOS and Windows")); + // No such uid gid thing on Windows and MacOS + QvMessageBox(this, tr("Prefrences"), tr("tProxy is not supported on MacOS and Windows")); #endif } diff --git a/src/w_SubscribeEditor.cpp b/src/w_SubscribeEditor.cpp index 36a47cc6..f5cdbb5c 100644 --- a/src/w_SubscribeEditor.cpp +++ b/src/w_SubscribeEditor.cpp @@ -69,7 +69,7 @@ void SubscribeEditor::ProcessSubscriptionEntry(QByteArray result, QString subsci auto vmessList = content.split("\n"); for (auto vmess : vmessList) { - auto config = ConvertConfigFromVMessString(vmess, QV2RAY_CONFIG_TYPE_SUBSCRIPTION); + auto config = ConvertConfigFromVMessString(vmess); if (subscriptions.contains(subsciptionName)) { } diff --git a/translations/en-US.ts b/translations/en-US.ts index 50198d4a..543e1ede 100644 --- a/translations/en-US.ts +++ b/translations/en-US.ts @@ -211,14 +211,14 @@ - - + + #JsonPrettify - - + + #JsonContainsError @@ -465,7 +465,7 @@ - + Hide @@ -487,34 +487,34 @@ - - + + Show - - + + Rename a Connection - + The name cannot be empty - + Removing this Connection - + NoConfigSelected - + PleaseSelectAConfig @@ -524,83 +524,83 @@ - + Update - + Found a new version: - + Download Link: - + No connection selected! - + Please select a config from the list. - - + + Connected To Server: - + Connected - + Disconnected - + UUID - + AlterID - + Transport - + Email - + Encryption - + Username - + The name has been used already, Please choose another. - + Are you sure to remove this connection? @@ -610,6 +610,9 @@ + + + Prefrences @@ -837,33 +840,34 @@ - + Enable tProxy Support - - This will add 3 capabilities on the v2ray executable. + + This will append capabilities to the v2ray executable. - - tProxy + + If anything goes wrong after enabling this, please refer to issue #57 or the link below: - + + + Failed to setcap onto v2ray executable. You may need to run `setcap` manually. + + + + tProxy is not supported on MacOS and Windows QObject - - - #VMessDecodeError - - Qv2ray Cannot Continue From bffaa026c6c0b4c7552b8b5dc4befc7067973ce8 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sat, 21 Sep 2019 21:11:58 +0800 Subject: [PATCH 09/29] [version] Getting ready to release version 1.3.7 Former-commit-id: 42f1037b7c0205515cefcf1a49df1a4bd28dbb30 --- .github/ISSUE_TEMPLATE/bug---english.md | 34 +++++++++++++++++++ docs/Features.md | 9 +++-- docs/History.md | 25 +++++++------- docs/README.md | 6 +++- .../1.0/v0.9.9.0.md | 0 .../1.0/v1.0.0.0.md | 0 .../1.0/v1.0.1.0.md | 0 .../1.2/v1.2.0.0.md | 0 .../1.3/v1.3.0.0.md | 0 .../1.3/v1.3.2.0.md | 0 .../1.3/v1.3.3.0.md | 0 .../1.3/v1.3.5.0.md | 0 .../1.3/v1.3.5.2.md | 0 .../1.3/v1.3.5.3.md | 0 .../1.3/v1.3.6.0.md | 0 .../1.3/v1.3.6.1.md | 0 docs/ReleaseNotes/1.3/v1.3.7.0.md | 34 +++++++++++++++++++ 17 files changed, 93 insertions(+), 15 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug---english.md rename docs/{ReleaseNote => ReleaseNotes}/1.0/v0.9.9.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.0/v1.0.0.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.0/v1.0.1.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.2/v1.2.0.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.3/v1.3.0.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.3/v1.3.2.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.3/v1.3.3.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.3/v1.3.5.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.3/v1.3.5.2.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.3/v1.3.5.3.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.3/v1.3.6.0.md (100%) rename docs/{ReleaseNote => ReleaseNotes}/1.3/v1.3.6.1.md (100%) create mode 100644 docs/ReleaseNotes/1.3/v1.3.7.0.md diff --git a/.github/ISSUE_TEMPLATE/bug---english.md b/.github/ISSUE_TEMPLATE/bug---english.md new file mode 100644 index 00000000..9dc50d8b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug---english.md @@ -0,0 +1,34 @@ +--- +name: Bug Report - English Version +about: Used to report a bug... +title: '' +labels: Bugs, help wanted +assignees: '' + +--- + +**Briefly describe this bug:** + +**How can I trigger this bug:** + +1. +2. +3. +4. + +**What is expected to happen** + +**Screenshots** +If appropriate, please attach some screenshots. + +**System Information** + + - OS Type: (Windows, Linux or MacOS) + - Built from the source or download from the release? + - Version string in the Preferences Window + +**Other Info** + +You may want to write anything if you think it helps us to fix the bug. + +*Please hide your server address and UUID if you wish to post the vmess string or your connection setting.* \ No newline at end of file diff --git a/docs/Features.md b/docs/Features.md index 02c923c6..5bfd6e60 100644 --- a/docs/Features.md +++ b/docs/Features.md @@ -18,7 +18,7 @@ Qv2ray 是一款跨平台,真正支持 Linux 桌面环境的 v2ray 客户端 ## 3. 自动连接 - 在启动时不显示主窗口,直接连接到设置的服务器 -- 该功能自 [v1.2.0](./ReleaseNote/1.2/ReleaseNote-v1.2.md) 版本添加 +- 该功能自 [v1.2.0](./ReleaseNotes/1.2/ReleaseNote-v1.2.md) 版本添加 ### 如要将某个连接设为自动连接,请打开首选项 @@ -40,4 +40,9 @@ Qv2ray 是一款跨平台,真正支持 Linux 桌面环境的 v2ray 客户端 ## 6. 实时显示 v2ray 的输出 -- 查看 bug 更方便 \ No newline at end of file +- 查看 bug 更方便 + +## 7. 自动 tProxy 支持 (Linux) + +- 一键对 v2ray 主程序启用透明代理功能 (`setcap`) + diff --git a/docs/History.md b/docs/History.md index 7a4f2deb..628ba0bd 100644 --- a/docs/History.md +++ b/docs/History.md @@ -4,18 +4,19 @@ ## 1.3.x -- [v1.3.6.1](./ReleaseNote/1.3/v1.3.6.1.md) UI 图标,翻译更新和一个列表顺序修复 -- [v1.3.6.0](./ReleaseNote/1.3/v1.3.6.0.md) 没有发布 -- [v1.3.5-3](./ReleaseNote/1.3/v1.3.5.3.md) 针对 OpenSSL 1.1.1b-c-d 的更新 -- [v1.3.5-2](./ReleaseNote/1.3/v1.3.5.2.md) 修复连接列表顺序问题,修复 1.3.5 带来的 Bug -- [v1.3.5-0](./ReleaseNote/1.3/v1.3.5.0.md) 此版本具有严重 Bug ,仅提供更新回滚方法 -- [v1.3.3](./ReleaseNote/1.3/v1.3.3.0.md) Windows 版自动更新功能修复 -- [v1.3.2](./ReleaseNote/1.3/v1.3.2.0.md) 此版本共 7 个功能更新,3 个问题修复 -- [v1.3.0](./ReleaseNote/1.3/v1.3.0.0.md) 增加对于 ShadowSocks 的支持 +- [v1.3.7](./ReleaseNotes/1.3/v1.3.7.0.md) 增加 tProxy 支持,修复 vmess:// 导入等多个问题,此版本包含 4 个功能更新和 8 个 bug 修复 +- [v1.3.6.1](./ReleaseNotes/1.3/v1.3.6.1.md) UI 图标更新,翻译更新和一个列表顺序修复 +- [v1.3.6.0](./ReleaseNotes/1.3/v1.3.6.0.md) 没有发布 +- [v1.3.5-3](./ReleaseNotes/1.3/v1.3.5.3.md) 针对 OpenSSL 1.1.1b-c-d 的更新 +- [v1.3.5-2](./ReleaseNotes/1.3/v1.3.5.2.md) 修复连接列表顺序问题,修复 1.3.5 带来的 Bug +- [v1.3.5-0](./ReleaseNotes/1.3/v1.3.5.0.md) 此版本具有严重 Bug ,仅提供更新回滚方法 +- [v1.3.3](./ReleaseNotes/1.3/v1.3.3.0.md) Windows 版自动更新功能修复 +- [v1.3.2](./ReleaseNotes/1.3/v1.3.2.0.md) 此版本共 7 个功能更新,3 个问题修复 +- [v1.3.0](./ReleaseNotes/1.3/v1.3.0.0.md) 增加对于 ShadowSocks 的支持 ## 1.2.x -- [v1.2.0](./ReleaseNote/1.2/v1.2.0.0.md) 此版本共 7 个功能更新,2 个问题修复,3 个功能改善 +- [v1.2.0](./ReleaseNotes/1.2/v1.2.0.0.md) 此版本共 7 个功能更新,2 个问题修复,3 个功能改善 ## 1.1.x @@ -23,10 +24,10 @@ ## 1.0.x -- [v1.0.1](./ReleaseNote/1.0/v1.0.1.0.md) 修复 RC 版本中的拼写错误 -- [v1.0.0](./ReleaseNote/1.0/v1.0.0.0.md) Qv2ray v1 发布候选版本 RC1 +- [v1.0.1](./ReleaseNotes/1.0/v1.0.1.0.md) 修复 RC 版本中的拼写错误 +- [v1.0.0](./ReleaseNotes/1.0/v1.0.0.0.md) Qv2ray v1 发布候选版本 RC1 ## 0.9.x -- [v0.9.9 (BETA)](./ReleaseNote/1.0/v0.9.9.0.md) - 第一个公开测试版 +- [v0.9.9 (BETA)](./ReleaseNotes/1.0/v0.9.9.0.md) - 第一个公开测试版 diff --git a/docs/README.md b/docs/README.md index 72e6b7c7..cf1b58e9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,7 +25,11 @@ 见 [更新历史记录](./History.md) -## 4. 共同翻译 Qv2ray +## 4. 常见问题 FAQ + +见 [FAQ.md](./FAQ.md) + +## 5. 共同翻译 Qv2ray 翻译平台使用 Crowdin,[https://crowdin.com/project/qv2ray](https://crowdin.com/project/qv2ray) diff --git a/docs/ReleaseNote/1.0/v0.9.9.0.md b/docs/ReleaseNotes/1.0/v0.9.9.0.md similarity index 100% rename from docs/ReleaseNote/1.0/v0.9.9.0.md rename to docs/ReleaseNotes/1.0/v0.9.9.0.md diff --git a/docs/ReleaseNote/1.0/v1.0.0.0.md b/docs/ReleaseNotes/1.0/v1.0.0.0.md similarity index 100% rename from docs/ReleaseNote/1.0/v1.0.0.0.md rename to docs/ReleaseNotes/1.0/v1.0.0.0.md diff --git a/docs/ReleaseNote/1.0/v1.0.1.0.md b/docs/ReleaseNotes/1.0/v1.0.1.0.md similarity index 100% rename from docs/ReleaseNote/1.0/v1.0.1.0.md rename to docs/ReleaseNotes/1.0/v1.0.1.0.md diff --git a/docs/ReleaseNote/1.2/v1.2.0.0.md b/docs/ReleaseNotes/1.2/v1.2.0.0.md similarity index 100% rename from docs/ReleaseNote/1.2/v1.2.0.0.md rename to docs/ReleaseNotes/1.2/v1.2.0.0.md diff --git a/docs/ReleaseNote/1.3/v1.3.0.0.md b/docs/ReleaseNotes/1.3/v1.3.0.0.md similarity index 100% rename from docs/ReleaseNote/1.3/v1.3.0.0.md rename to docs/ReleaseNotes/1.3/v1.3.0.0.md diff --git a/docs/ReleaseNote/1.3/v1.3.2.0.md b/docs/ReleaseNotes/1.3/v1.3.2.0.md similarity index 100% rename from docs/ReleaseNote/1.3/v1.3.2.0.md rename to docs/ReleaseNotes/1.3/v1.3.2.0.md diff --git a/docs/ReleaseNote/1.3/v1.3.3.0.md b/docs/ReleaseNotes/1.3/v1.3.3.0.md similarity index 100% rename from docs/ReleaseNote/1.3/v1.3.3.0.md rename to docs/ReleaseNotes/1.3/v1.3.3.0.md diff --git a/docs/ReleaseNote/1.3/v1.3.5.0.md b/docs/ReleaseNotes/1.3/v1.3.5.0.md similarity index 100% rename from docs/ReleaseNote/1.3/v1.3.5.0.md rename to docs/ReleaseNotes/1.3/v1.3.5.0.md diff --git a/docs/ReleaseNote/1.3/v1.3.5.2.md b/docs/ReleaseNotes/1.3/v1.3.5.2.md similarity index 100% rename from docs/ReleaseNote/1.3/v1.3.5.2.md rename to docs/ReleaseNotes/1.3/v1.3.5.2.md diff --git a/docs/ReleaseNote/1.3/v1.3.5.3.md b/docs/ReleaseNotes/1.3/v1.3.5.3.md similarity index 100% rename from docs/ReleaseNote/1.3/v1.3.5.3.md rename to docs/ReleaseNotes/1.3/v1.3.5.3.md diff --git a/docs/ReleaseNote/1.3/v1.3.6.0.md b/docs/ReleaseNotes/1.3/v1.3.6.0.md similarity index 100% rename from docs/ReleaseNote/1.3/v1.3.6.0.md rename to docs/ReleaseNotes/1.3/v1.3.6.0.md diff --git a/docs/ReleaseNote/1.3/v1.3.6.1.md b/docs/ReleaseNotes/1.3/v1.3.6.1.md similarity index 100% rename from docs/ReleaseNote/1.3/v1.3.6.1.md rename to docs/ReleaseNotes/1.3/v1.3.6.1.md diff --git a/docs/ReleaseNotes/1.3/v1.3.7.0.md b/docs/ReleaseNotes/1.3/v1.3.7.0.md new file mode 100644 index 00000000..6d4271a3 --- /dev/null +++ b/docs/ReleaseNotes/1.3/v1.3.7.0.md @@ -0,0 +1,34 @@ +# Version 1.3.7 包含以下功能性更新和修复 + +Github Release: [v1.3.7](https://github.com/lhy0403/Qv2ray/releases/tag/v1.3.7) + +## 此版本包含以下更改 + +*此版本共包含 4 个功能更新和 8 个 bug 修复* + +- 建议所有用户更新到此版本 + + + +**功能更新** + +1. 使用配置文件夹目录下的 `vcore` 子文件夹作为默认(且唯一的) `v2ray`/`v2ctl` 的搜索路径 +2. 停止支持自定义的 `v2ray` 内核路径,现有 `v2ray` 主程序和 `v2ctl` 将被自动复制到新路径,无需进行手动迁移 + - 注意:`assets` 路径保持不变,请不要删除原文件夹 +3. 移除了首选项中 “使用 root 运行 v2ray” 的选项 +4. 增加 Linux 系统的 `tProxy` 功能支持,使用 `pkexec` 和 `setcap`,避免了使用 `sudo` 权限过大的问题 [[Issue: #59]](https://github.com/lhy0403/Qv2ray/issues/59) +5. 移除了在每个连接文件中的 `_qv2ray.configSource` 标识符,导入或手动添加的连接将不再有此项内容 +6. 增加了在检测不到 `v2ray` 内核时,自动打开搜索路径并提示下载文件的功能 + + + +**Bug 修复** + +1. 修复了某些情况下 vmess:// 链接导入失败的bug [[Issue: #58]](https://github.com/lhy0403/Qv2ray/issues/58) +2. 修复了某些情况下,导入文件在连接时出现 Tag 缺失的情况 +3. (部分修复了)某些情况下,由于 Qv2ray 配置文件版本不一致导致的崩溃问题 +4. 修复了在只有一个连接配置时,Qv2ray 启动后即使选择了一个连接,仍然会提示“未选择连接”的 bug [[Issue: #57]](https://github.com/lhy0403/Qv2ray/issues/57) +5. 修复了在显示部分未完全翻译的文字时出现单词间空格缺失的 bug +6. 修复了上个版本由于使用云翻译引起的托盘图标处出现两个冒号的问题 +7. 修复了在主界面进行添加,重命名,删除连接等复杂列表操作后选择连接,出现 连接配置与选择的配置不一致的 bug +8. 修复了某些极端情况下,在一个连接进行重命名时更换当前连接(即双击其他配置)时出现的重命名失败的 bug \ No newline at end of file From f0c632cdb68bb81dafeaf0f1a935c6be11d18272 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sat, 21 Sep 2019 21:17:04 +0800 Subject: [PATCH 10/29] [version] Bumped version to v1.3.7 Former-commit-id: 2f8d5ffcecac4f994a84d965b1895f81bc9d608c --- Qv2ray.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Qv2ray.pro b/Qv2ray.pro index 8101cb4b..0797cd84 100644 --- a/Qv2ray.pro +++ b/Qv2ray.pro @@ -14,7 +14,7 @@ CONFIG += c++11 openssl openssl-linked lrelease embed_translations win32: QMAKE_TARGET_DESCRIPTION = "Qv2ray, a cross-platform v2ray GUI client." win32: QMAKE_TARGET_PRODUCT = "Qv2ray" -VERSION = 1.3.6.1 +VERSION = 1.3.7.0 DEFINES += QV_MAJOR_VERSION=\"\\\"$${VERSION}\\\"\" SOURCES += \ From 25bf01fb0b49f2cdd0211f8d9ceef5d9bb082d7c Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sat, 21 Sep 2019 21:20:00 +0800 Subject: [PATCH 11/29] [version] Removed Untranslated Languages Former-commit-id: 4bac43798329c1157940f66144307e32520fa816 --- translations/ja-JP.ts | 1038 ----------------------------------------- translations/ko-KR.ts | 1038 ----------------------------------------- 2 files changed, 2076 deletions(-) delete mode 100644 translations/ja-JP.ts delete mode 100644 translations/ko-KR.ts diff --git a/translations/ja-JP.ts b/translations/ja-JP.ts deleted file mode 100644 index 58350261..00000000 --- a/translations/ja-JP.ts +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - ConnectionEditWindow - - - #EditConnectionSettings - #EditConnectionSettings - - - - - Host - Host - - - - Port - Port - - - - Outbound Type - Outbound Type - - - - Socks - Socks - - - - Use TLS - Use TLS - - - - UUID - UUID - - - - Alter ID - Alter ID - - - - - Security - Security - - - - Transport Method - Transport Method - - - - Outbound Settings - Outbound Settings - - - - - - - Enabled - Enabled - - - - Transport Settings - Transport Settings - - - - - Type - Type - - - - Request - Request - - - - - Prettify - Prettify - - - - Response - Response - - - - - Default - Default - - - - - - Path - Path - - - - - Headers - Headers - - - - Format: key|value - Format: key|value - - - - MTU - MTU - - - - TTI (ms) - TTI (ms) - - - - Uplink (MB/s) - Uplink (MB/s) - - - - Congestion Control - Congestion Control - - - - Downlink (MB/s) - Downlink (MB/s) - - - - Read Buffer (MB) - Read Buffer (MB) - - - - Write Buffer (MB) - Write Buffer (MB) - - - - Key - Key - - - - Mark - Mark - - - - TCP Fast Open - TCP Fast Open - - - - tProxy - tProxy - - - - EMail - EMail - - - - - Password - Password - - - - Encryption - Encryption - - - - User Level - User Level - - - - OTA - OTA - - - - Username - Username - - - - Json Preview - Json Preview - - - - - #JsonPrettify - #JsonPrettify - - - - - #JsonContainsError - #JsonContainsError - - - - ImportConfigWindow - - - Import file - Import file - - - - Name - Name - - - - Import Source - Import Source - - - - File - File - - - - VMess String - VMess String - - - - - Subscription Link - Subscription Link - - - - #Import - #Import - - - - Path - Path - - - - Select - Select - - - - Inbound - Inbound - - - - Keep imported inbound settings - Keep imported inbound settings - - - - VMess Connection String - VMess Connection String - - - - TO DO IN VERSION 2 - TO DO IN VERSION 2 - - - - OpenConfigFile - OpenConfigFile - - - - #InvalidConfigFile - #InvalidConfigFile - - - - ConfigFileCheckFailed - ConfigFileCheckFailed - - - - - #VMessCheck - #VMessCheck - - - - #NotValidVMessProtocolString - #NotValidVMessProtocolString - - - - #INTERNAL_ERROR - #INTERNAL_ERROR - - - - MainWindow - - - Qv2ray - Qv2ray - - - - - Connect - Connect - - - - - Disconnect - Disconnect - - - - Clear Log - Clear Log - - - - Prefrences - Prefrences - - - - Stopped - Stopped - - - - Host List - Host List - - - - Config Details - Config Details - - - - Type - Type - - - - Host - Host - - - - Port - Port - - - - Detail - Detail - - - - #AddConnection - #AddConnection - - - - A - A - - - - - #ImportConnection - #ImportConnection - - - - I - I - - - - #RemoveConnection - #RemoveConnection - - - - R - R - - - - #EditConnection - #EditConnection - - - - ... - ... - - - - Log - Log - - - - #ManuallyCreateConnection - #ManuallyCreateConnection - - - - #Exit - #Exit - - - - #Preferences - #Preferences - - - - #Start - #Start - - - - #Stop - #Stop - - - - #Restart - #Restart - - - - - Hide - Hide - - - - Quit - Quit - - - - Reconnect - Reconnect - - - - Rename - Rename - - - - - - Show - Show - - - - NoConfigSelected - NoConfigSelected - - - - PleaseSelectAConfig - PleaseSelectAConfig - - - - Connect to this - Connect to this - - - - Update - Update - - - - Found a new version: - Found a new version: - - - - Download Link: - Download Link: - - - - No connection selected! - No connection selected! - - - - Please select a config from the list. - Please select a config from the list. - - - - - Connected To Server: - Connected To Server: - - - - Connected - Connected - - - - Disconnected - Disconnected - - - - UUID - UUID - - - - AlterID - AlterID - - - - Transport - Transport - - - - Email - Email - - - - Encryption - Encryption - - - - Username - Username - - - - - Rename A Connection - Rename A Connection - - - - A name cannot be empty - A name cannot be empty - - - - The name has been used already, Please choose another. - The name has been used already, Please choose another. - - - - Removing A Connection - Removing A Connection - - - - Are you sure to remove this connection? - Are you sure to remove this connection? - - - - PrefrencesWindow - - - - - Prefrences - Prefrences - - - - General - General - - - - Language - Language - - - - zh-CN - zh-CN - - - - en-US - en-US - - - - Run As Root - Run As Root - - - - Log Level - Log Level - - - - none - none - - - - debug - debug - - - - info - info - - - - warning - warning - - - - error - error - - - - Automatically Connect To - Automatically Connect To - - - - v2ray Core Path - v2ray Core Path - - - - - #Select - #Select - - - - v2ray Assets Path - v2ray Assets Path - - - - Mux Settings - Mux Settings - - - - - - - - - - - - - Enabled - Enabled - - - - Concurrency - Concurrency - - - - InBound Settings - InBound Settings - - - - Listen IP - Listen IP - - - - SOCKS InBound Settings - SOCKS InBound Settings - - - - - Port - Port - - - - - Authentication - Authentication - - - - - Username - Username - - - - - Password - Password - - - - HTTP InBound Settings - HTTP InBound Settings - - - - Route Settings - Route Settings - - - - Enable Proxy - Enable Proxy - - - - Chinese Addresses - Chinese Addresses - - - - Use Local DNS - Use Local DNS - - - - DNS List - DNS List - - - - About - About - - - - Qv2ray - Qv2ray - - - - Version: - Version: - - - - Official Repo: - Official Repo: - - - - <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - - - - License: - License: - - - - <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - - - - About Qt - About Qt - - - - Ingore Next Version - Ingore Next Version - - - - Cancel - Cancel - - - - PortNumbersCannotBeSame - PortNumbersCannotBeSame - - - - RunAsRootNotOnWindows - RunAsRootNotOnWindows - - - - #OpenVCoreFile - #OpenVCoreFile - - - - OpenVAssetsDir - OpenVAssetsDir - - - - QObject - - - #VMessDecodeError - #VMessDecodeError - - - - ConfigurationError - ConfigurationError - - - - CoreNotFound - CoreNotFound - - - - CoreFileNotFoundExplainationAt: - CoreFileNotFoundExplainationAt: - - - - DependencyMissing - DependencyMissing - - - - Cannot find openssl libs - Cannot find openssl libs - - - - This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - - - - If you are using AppImage, please report a bug. - If you are using AppImage, please report a bug. - - - - Another instance of Qv2ray is already running. - Another instance of Qv2ray is already running. - - - - RouteEditor - - - Dialog - Dialog - - - - #Outbounds - #Outbounds - - - - #OutboundDetail - #OutboundDetail - - - - #Tag - #Tag - - - - #Type - #Type - - - - #Address - #Address - - - - #Port - #Port - - - - #EditCurrentOutbound - #EditCurrentOutbound - - - - SubscribeEditor - - - #UpdateInProcess - #UpdateInProcess - - - - #TryLater - #TryLater - - - - w_SubscribeEditor - - - SubscribeEditor - SubscribeEditor - - - - #AddConnection - #AddConnection - - - - A - A - - - - #RemoveConnection - #RemoveConnection - - - - R - R - - - - ... - ... - - - - Name - Name - - - - URL - URL - - - - Config List - Config List - - - - Update Subscription - Update Subscription - - - - Config Detail - Config Detail - - - - Type - Type - - - - Server - Server - - - - Config - Config - - - - Port - Port - - - diff --git a/translations/ko-KR.ts b/translations/ko-KR.ts deleted file mode 100644 index ce0ce632..00000000 --- a/translations/ko-KR.ts +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - ConnectionEditWindow - - - #EditConnectionSettings - #EditConnectionSettings - - - - - Host - 호스트 - - - - Port - 포트 - - - - Outbound Type - Outbound Type - - - - Socks - Socks - - - - Use TLS - TLS 사용 - - - - UUID - UUID - - - - Alter ID - Alter ID - - - - - Security - 보안 - - - - Transport Method - 수송 수단 - - - - Outbound Settings - Outbound Settings - - - - - - - Enabled - 사용 가능 - - - - Transport Settings - Transport Settings - - - - - Type - 유형 - - - - Request - 요청 - - - - - Prettify - 정리하기 - - - - Response - 응답 - - - - - Default - 기본 - - - - - - Path - 경로 - - - - - Headers - 헤더 설정 - - - - Format: key|value - Format: key|value - - - - MTU - MTU - - - - TTI (ms) - TTI (ms) - - - - Uplink (MB/s) - Uplink (MB/s) - - - - Congestion Control - Congestion Control - - - - Downlink (MB/s) - Downlink (MB/s) - - - - Read Buffer (MB) - Read Buffer (MB) - - - - Write Buffer (MB) - Write Buffer (MB) - - - - Key - - - - - Mark - 표시 - - - - TCP Fast Open - TCP Fast Open - - - - tProxy - tProxy - - - - EMail - EMail - - - - - Password - 비밀 번호 - - - - Encryption - 암호화 - - - - User Level - 당신의 레벨 - - - - OTA - OTA - - - - Username - 사용자이름 - - - - Json Preview - Json Preview - - - - - #JsonPrettify - #JsonPrettify - - - - - #JsonContainsError - #JsonContainsError - - - - ImportConfigWindow - - - Import file - 가져오기 - - - - Name - 이름 - - - - Import Source - Import Source - - - - File - 파일 - - - - VMess String - VMess String - - - - - Subscription Link - 정액제 계약 - - - - #Import - #Import - - - - Path - Path - - - - Select - Select - - - - Inbound - Inbound - - - - Keep imported inbound settings - Keep imported inbound settings - - - - VMess Connection String - VMess Connection String - - - - TO DO IN VERSION 2 - TO DO IN VERSION 2 - - - - OpenConfigFile - OpenConfigFile - - - - #InvalidConfigFile - #InvalidConfigFile - - - - ConfigFileCheckFailed - ConfigFileCheckFailed - - - - - #VMessCheck - #VMessCheck - - - - #NotValidVMessProtocolString - #NotValidVMessProtocolString - - - - #INTERNAL_ERROR - #INTERNAL_ERROR - - - - MainWindow - - - Qv2ray - Qv2ray - - - - - Connect - Connect - - - - - Disconnect - Disconnect - - - - Clear Log - Clear Log - - - - Prefrences - Prefrences - - - - Stopped - Stopped - - - - Host List - Host List - - - - Config Details - Config Details - - - - Type - Type - - - - Host - Host - - - - Port - Port - - - - Detail - Detail - - - - #AddConnection - #AddConnection - - - - A - A - - - - - #ImportConnection - #ImportConnection - - - - I - I - - - - #RemoveConnection - #RemoveConnection - - - - R - R - - - - #EditConnection - #EditConnection - - - - ... - ... - - - - Log - Log - - - - #ManuallyCreateConnection - #ManuallyCreateConnection - - - - #Exit - #Exit - - - - #Preferences - #Preferences - - - - #Start - #Start - - - - #Stop - #Stop - - - - #Restart - #Restart - - - - - Hide - Hide - - - - Quit - Quit - - - - Reconnect - Reconnect - - - - Rename - Rename - - - - - - Show - Show - - - - NoConfigSelected - NoConfigSelected - - - - PleaseSelectAConfig - PleaseSelectAConfig - - - - Connect to this - Connect to this - - - - Update - Update - - - - Found a new version: - Found a new version: - - - - Download Link: - Download Link: - - - - No connection selected! - No connection selected! - - - - Please select a config from the list. - Please select a config from the list. - - - - - Connected To Server: - Connected To Server: - - - - Connected - Connected - - - - Disconnected - Disconnected - - - - UUID - UUID - - - - AlterID - AlterID - - - - Transport - Transport - - - - Email - Email - - - - Encryption - Encryption - - - - Username - Username - - - - - Rename A Connection - Rename A Connection - - - - A name cannot be empty - A name cannot be empty - - - - The name has been used already, Please choose another. - The name has been used already, Please choose another. - - - - Removing A Connection - Removing A Connection - - - - Are you sure to remove this connection? - Are you sure to remove this connection? - - - - PrefrencesWindow - - - - - Prefrences - Prefrences - - - - General - General - - - - Language - Language - - - - zh-CN - zh-CN - - - - en-US - en-US - - - - Run As Root - Run As Root - - - - Log Level - Log Level - - - - none - none - - - - debug - debug - - - - info - info - - - - warning - warning - - - - error - error - - - - Automatically Connect To - Automatically Connect To - - - - v2ray Core Path - v2ray Core Path - - - - - #Select - #Select - - - - v2ray Assets Path - v2ray Assets Path - - - - Mux Settings - Mux Settings - - - - - - - - - - - - - Enabled - Enabled - - - - Concurrency - Concurrency - - - - InBound Settings - InBound Settings - - - - Listen IP - Listen IP - - - - SOCKS InBound Settings - SOCKS InBound Settings - - - - - Port - Port - - - - - Authentication - Authentication - - - - - Username - Username - - - - - Password - Password - - - - HTTP InBound Settings - HTTP InBound Settings - - - - Route Settings - Route Settings - - - - Enable Proxy - Enable Proxy - - - - Chinese Addresses - Chinese Addresses - - - - Use Local DNS - Use Local DNS - - - - DNS List - DNS List - - - - About - About - - - - Qv2ray - Qv2ray - - - - Version: - Version: - - - - Official Repo: - Official Repo: - - - - <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - - - - License: - License: - - - - <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - - - - About Qt - About Qt - - - - Ingore Next Version - Ingore Next Version - - - - Cancel - Cancel - - - - PortNumbersCannotBeSame - PortNumbersCannotBeSame - - - - RunAsRootNotOnWindows - RunAsRootNotOnWindows - - - - #OpenVCoreFile - #OpenVCoreFile - - - - OpenVAssetsDir - OpenVAssetsDir - - - - QObject - - - #VMessDecodeError - #VMessDecodeError - - - - ConfigurationError - ConfigurationError - - - - CoreNotFound - CoreNotFound - - - - CoreFileNotFoundExplainationAt: - CoreFileNotFoundExplainationAt: - - - - DependencyMissing - DependencyMissing - - - - Cannot find openssl libs - Cannot find openssl libs - - - - This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - - - - If you are using AppImage, please report a bug. - If you are using AppImage, please report a bug. - - - - Another instance of Qv2ray is already running. - Another instance of Qv2ray is already running. - - - - RouteEditor - - - Dialog - Dialog - - - - #Outbounds - #Outbounds - - - - #OutboundDetail - #OutboundDetail - - - - #Tag - #Tag - - - - #Type - #Type - - - - #Address - #Address - - - - #Port - #Port - - - - #EditCurrentOutbound - #EditCurrentOutbound - - - - SubscribeEditor - - - #UpdateInProcess - #UpdateInProcess - - - - #TryLater - #TryLater - - - - w_SubscribeEditor - - - SubscribeEditor - SubscribeEditor - - - - #AddConnection - #AddConnection - - - - A - A - - - - #RemoveConnection - #RemoveConnection - - - - R - R - - - - ... - ... - - - - Name - Name - - - - URL - URL - - - - Config List - Config List - - - - Update Subscription - Update Subscription - - - - Config Detail - Config Detail - - - - Type - Type - - - - Server - Server - - - - Config - Config - - - - Port - Port - - - From 5fb56d0e20e24d4c304a5100dee4390565033156 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sat, 21 Sep 2019 21:54:41 +0800 Subject: [PATCH 12/29] Update README.md Former-commit-id: 7ac387a26d32fbf585f94e4cbd0b4f9f250f98f4 --- docs/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index cf1b58e9..79ddb374 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ - 基于 Qt 的跨平台 v2ray 图形客户端 -- #### 当前最新版本: [v1.3.6.1](./ReleaseNote/1.3/v1.3.6.1.md) +- #### 当前最新版本: [v1.3.6.1](./ReleaseNotes/1.3/v1.3.6.1.md) -------- @@ -35,4 +35,4 @@ # 开源协议 Open Source License -GPLv3 \ No newline at end of file +GPLv3 From 8df42a48ca7772e2565359a0d0278db7391c7faa Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sun, 22 Sep 2019 10:06:08 +0800 Subject: [PATCH 13/29] New translations en-US.ts (Chinese Simplified) Former-commit-id: a3786f071be8a10a85d75f51b9e822c36cdcb0c4 --- translations/zh-CN.ts | 382 +++++++++++++++++++++++------------------- 1 file changed, 205 insertions(+), 177 deletions(-) diff --git a/translations/zh-CN.ts b/translations/zh-CN.ts index 2e775d3b..2c01787b 100644 --- a/translations/zh-CN.ts +++ b/translations/zh-CN.ts @@ -172,7 +172,7 @@ tProxy - tProxy + tProxy @@ -211,14 +211,14 @@ Json 预览 - - + + #JsonPrettify 美化 JSON - - + + #JsonContainsError JSON 格式错误 @@ -293,34 +293,34 @@ - OpenConfigFile - 打开配置文件 + Select file to import + Select file to import - - #InvalidConfigFile - 配置文件无效 + + Import config file + Import config file - - ConfigFileCheckFailed - 配置文件检查失败 - - - - - #VMessCheck - VMess 检查 - - - - #NotValidVMessProtocolString - VMess 连接字符串不合法 + + Failed to check the validity of the config file. + Failed to check the validity of the config file. - #INTERNAL_ERROR - 内部错误 + + VMess String Check + VMess String Check + + + + VMess string is not valid + VMess string is not valid + + + + Some internal error occured + Some internal error occured @@ -343,129 +343,129 @@ 断开连接 - + Clear Log 清除日志 - + Prefrences 首选项 - + Stopped 已停止 - + Host List 主机列表 - + Config Details 配置详细信息 - + Type 类型 - + Host 主机 - + Port 端口 - + Detail 详细信息 - + #AddConnection 添加连接 - + A A - - + + #ImportConnection 导入连接 - + I I - + #RemoveConnection 删除连接 - + R R - + #EditConnection 编辑连接 - + ... ... - + Log 日志 - + #ManuallyCreateConnection 手动添加连接配置 - + #Exit 退出 - + #Preferences 首选项 - + #Start 开始 - + #Stop 停止 - + #Restart 重启 - + Hide 隐藏 @@ -475,6 +475,7 @@ 退出 + Reconnect 重新连接 @@ -485,19 +486,35 @@ 重命名 - - - + + + Show 显示 - + + + Rename a Connection + Rename a Connection + + + + The name cannot be empty + The name cannot be empty + + + + Removing this Connection + Removing this Connection + + + NoConfigSelected 没有选择配置 - + PleaseSelectAConfig 请选择一个配置文件 @@ -507,99 +524,83 @@ 连接到此服务器 - + Update 更新 - + Found a new version: 找到新的版本: - + Download Link: 下载链接: - + No connection selected! 没有选择连接! - + Please select a config from the list. 请从列表中选择一个配置。 - - + + Connected To Server: 已连接到服务器: - + Connected 已连接 - + Disconnected 已断开 - + UUID UUID - + AlterID Alter Id - + Transport 传输 - + Email 邮箱 - + Encryption 加密方式 - + Username 用户名 - - - Rename A Connection - 重命名连接 - - - - A name cannot be empty - 名称不能为空 - - - + The name has been used already, Please choose another. 名称已被使用,请选择另一个。 - - Removing A Connection - 删除连接 - - - + Are you sure to remove this connection? 您确定要删除此连接吗? @@ -608,8 +609,10 @@ PrefrencesWindow - - + + + + Prefrences 首选项 @@ -635,271 +638,296 @@ - Run As Root - 作为 root 运行 - - - Log Level 日志等级 - + none 不使用 - + debug 调试 - + info 信息 - + warning 警告 - + error 错误 - + Automatically Connect To 自动连接到 - - - v2ray Core Path - v2ray 核心路径 - - #Select 选择 - + v2ray Assets Path v2ray Assets 路径 - + Mux Settings Mux 设置 - - - - - - - + + + + + + + + - - + Enabled 已启用 - + + Transparent Proxy Support + Transparent Proxy Support + + + Concurrency 并发连接数 - + InBound Settings 入站设置 - + Listen IP 监听 IP - + SOCKS InBound Settings Socks 入站设置 - - + + Port 端口 - - + + Authentication 身份验证 - - + + Username 用户名 - - + + Password 密码 - + HTTP InBound Settings HTTP 入站设置 - + Route Settings 路由设置 - + Enable Proxy 启用代理 - + Chinese Addresses 对国内地址启用代理 - + Use Local DNS 使用本地DNS - + DNS List DNS 列表 - + About 关于 - + Qv2ray Qv2ray - + Version: 版本: - + Official Repo: 官方Repo: - + <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - + License: 许可证: - + <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - + About Qt 关于 Qt - + Ingore Next Version 忽略下个版本 - + Cancel 取消 - - PortNumbersCannotBeSame - 端口号不能相同 + + Port numbers cannot be the same + Port numbers cannot be the same - - RunAsRootNotOnWindows - 此选项在 Windows 上无效 + + Open v2ray assets folder + Open v2ray assets folder - - #OpenVCoreFile - 打开 v2ray core 文件 + + Enable tProxy Support + Enable tProxy Support - - OpenVAssetsDir - 打开 v2ray Assets 文件夹 + + This will append capabilities to the v2ray executable. + This will append capabilities to the v2ray executable. + + + + If anything goes wrong after enabling this, please refer to issue #57 or the link below: + If anything goes wrong after enabling this, please refer to issue #57 or the link below: + + + + + Failed to setcap onto v2ray executable. You may need to run `setcap` manually. + Failed to setcap onto v2ray executable. You may need to run `setcap` manually. + + + + tProxy is not supported on MacOS and Windows + tProxy is not supported on MacOS and Windows QObject - - #VMessDecodeError - VMess 解析失败 + + Qv2ray Cannot Continue + Qv2ray Cannot Continue - - ConfigurationError - 配置错误 + + You are running a lower version of Qv2ray compared to the current config file. + You are running a lower version of Qv2ray compared to the current config file. - - CoreNotFound - V2ray 内核文件未找到 + + Please report if you think this is an error. + Please report if you think this is an error. - - CoreFileNotFoundExplainationAt: - V2ray 核心文件未能在以下位置找到: + + Qv2ray will now exit. + Qv2ray will now exit. - + DependencyMissing 依赖项缺失 - + Cannot find openssl libs 找不到 OpenSSL 库 - + This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. 这可能是由于系统中缺少 `openssl` 包造成的,或者是 AppImage 问题。 - + If you are using AppImage, please report a bug. 如果您正在使用 AppImage,请反馈一个 Bug - + Another instance of Qv2ray is already running. Qv2ray 的另一个实例已经运行。 + + + Configuration Error + Configuration Error + + + + Cannot start v2ray + Cannot start v2ray + + + + v2ray core file cannot be found at: + v2ray core file cannot be found at: + RouteEditor From 30d6241c651ab0f936906673fd6bb4fd598ac445 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sun, 22 Sep 2019 10:06:10 +0800 Subject: [PATCH 14/29] New translations en-US.ts (Russian) Former-commit-id: 6e5adfdb5bcf77e42d8396ed33a2413d4c083794 --- translations/ru-RU.ts | 382 +++++++++++++++++++++++------------------- 1 file changed, 205 insertions(+), 177 deletions(-) diff --git a/translations/ru-RU.ts b/translations/ru-RU.ts index 2e1871f5..e663bede 100644 --- a/translations/ru-RU.ts +++ b/translations/ru-RU.ts @@ -172,7 +172,7 @@ tProxy - tProxy + tProxy @@ -211,14 +211,14 @@ Просмотр Json - - + + #JsonPrettify #JsonPrettify - - + + #JsonContainsError #JsonContainsError @@ -293,34 +293,34 @@ - OpenConfigFile - ОткрытьФайлКонфигурации + Select file to import + Select file to import - - #InvalidConfigFile - #InvalidConfigFile + + Import config file + Import config file - - ConfigFileCheckFailed - ConfigFileCheckFailed - - - - - #VMessCheck - #VMessCheck - - - - #NotValidVMessProtocolString - #NotValidVMessProtocolString + + Failed to check the validity of the config file. + Failed to check the validity of the config file. - #INTERNAL_ERROR - #INTERNAL_ERROR + + VMess String Check + VMess String Check + + + + VMess string is not valid + VMess string is not valid + + + + Some internal error occured + Some internal error occured @@ -343,129 +343,129 @@ Отключен - + Clear Log Очистить логи - + Prefrences Настройки - + Stopped Остановлен - + Host List Список Узлов - + Config Details Детали конфигурации - + Type Тип - + Host Хост - + Port Порт - + Detail Сведения - + #AddConnection #AddConnection - + A А - - + + #ImportConnection #ImportConnection - + I I - + #RemoveConnection #RemoveConnection - + R R - + #EditConnection #EditConnection - + ... ... - + Log Лог - + #ManuallyCreateConnection #ManuallyCreateConnection - + #Exit #Выход - + #Preferences #Параметры - + #Start #Запустить - + #Stop #Стоп - + #Restart #Перезапуск - + Hide Скрыть @@ -475,6 +475,7 @@ Выход + Reconnect Переподключить @@ -485,19 +486,35 @@ Переименование - - - + + + Show Показать - + + + Rename a Connection + Rename a Connection + + + + The name cannot be empty + The name cannot be empty + + + + Removing this Connection + Removing this Connection + + + NoConfigSelected NoConfigSelected - + PleaseSelectAConfig PleaseSelectAConfig @@ -507,99 +524,83 @@ Подключиться к этому - + Update Обновить - + Found a new version: Найдена новая версия: - + Download Link: Ссылка для скачивания: - + No connection selected! Не выбрано соединение! - + Please select a config from the list. Пожалуйста, выберите конфигурацию из списка - - + + Connected To Server: Соединяется с Сервером: - + Connected Подключен - + Disconnected Отключен - + UUID UUID - + AlterID AlterID - + Transport Протокол - + Email Email - + Encryption Шифрование - + Username Имя пользователя - - - Rename A Connection - Переименовать подключение - - - - A name cannot be empty - Имя не может быть пустым - - - + The name has been used already, Please choose another. Имя уже используется, пожалуйста, выберите другое. - - Removing A Connection - Удалить из списка - - - + Are you sure to remove this connection? Вы уверены, что хотите удалить это подключение? @@ -608,8 +609,10 @@ PrefrencesWindow - - + + + + Prefrences Настройки @@ -635,271 +638,296 @@ - Run As Root - Запустить под root - - - Log Level Детализация журнала - + none Отсутствует - + debug отладка - + info Информация - + warning внимание - + error ошибка - + Automatically Connect To Автоматически подключаться к - - - v2ray Core Path - путь к ядру v2ray - - #Select #Выбрать - + v2ray Assets Path путь к директории v2ray - + Mux Settings Настройки Mux - - - - - - - + + + + + + + + - - + Enabled Включено - + + Transparent Proxy Support + Transparent Proxy Support + + + Concurrency Согласие - + InBound Settings Настройки соединения - + Listen IP Слушать IP - + SOCKS InBound Settings Настройки SOCKS InBound - - + + Port Порт - - + + Authentication Аутентификация - - + + Username Имя пользователя - - + + Password Пароль - + HTTP InBound Settings Параметры HTTP InBound - + Route Settings Настройки маршрута - + Enable Proxy Включить прокси - + Chinese Addresses Китайские адреса - + Use Local DNS Использовать локальный DNS - + DNS List Список DNS - + About О программе - + Qv2ray Qv2ray - + Version: Версия: - + Official Repo: Официальный репозиторий: - + <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - + License: Лицензия: - + <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - + About Qt Об инструментарии Qt - + Ingore Next Version Игнорировать следующую версию - + Cancel Отменить - - PortNumbersCannotBeSame - PortNumbersCannotBeSame + + Port numbers cannot be the same + Port numbers cannot be the same - - RunAsRootNotOnWindows - RunAsRootNotOnWindows + + Open v2ray assets folder + Open v2ray assets folder - - #OpenVCoreFile - #OpenVCoreFile + + Enable tProxy Support + Enable tProxy Support - - OpenVAssetsDir - OpenVAssetsDir + + This will append capabilities to the v2ray executable. + This will append capabilities to the v2ray executable. + + + + If anything goes wrong after enabling this, please refer to issue #57 or the link below: + If anything goes wrong after enabling this, please refer to issue #57 or the link below: + + + + + Failed to setcap onto v2ray executable. You may need to run `setcap` manually. + Failed to setcap onto v2ray executable. You may need to run `setcap` manually. + + + + tProxy is not supported on MacOS and Windows + tProxy is not supported on MacOS and Windows QObject - - #VMessDecodeError - #VMessDecodeError + + Qv2ray Cannot Continue + Qv2ray Cannot Continue - - ConfigurationError - Ошибка конфигурации + + You are running a lower version of Qv2ray compared to the current config file. + You are running a lower version of Qv2ray compared to the current config file. - - CoreNotFound - CoreNotFound + + Please report if you think this is an error. + Please report if you think this is an error. - - CoreFileNotFoundExplainationAt: - CoreFileNotFoundExplainationAt: + + Qv2ray will now exit. + Qv2ray will now exit. - + DependencyMissing DependencyMissing - + Cannot find openssl libs Не удается найти openssl libs - + This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. Это может быть вызвано отсутствием пакета `openssl` в вашей системе. Или проблемой AppImage. - + If you are using AppImage, please report a bug. Если вы используете AppImage, пожалуйста, сообщите об ошибке. - + Another instance of Qv2ray is already running. Другой экземпляр Qv2ray уже запущен. + + + Configuration Error + Configuration Error + + + + Cannot start v2ray + Cannot start v2ray + + + + v2ray core file cannot be found at: + v2ray core file cannot be found at: + RouteEditor From 5313bdb1162d360662d7050627417dce8803ae14 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sun, 22 Sep 2019 10:15:07 +0800 Subject: [PATCH 15/29] New translations en-US.ts (Chinese Simplified) Former-commit-id: 019a6582c918bbfc61a8b68af5f5e3e71567e19c --- translations/zh-CN.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/translations/zh-CN.ts b/translations/zh-CN.ts index 2c01787b..78e28470 100644 --- a/translations/zh-CN.ts +++ b/translations/zh-CN.ts @@ -172,7 +172,7 @@ tProxy - tProxy + 透明代理 @@ -496,17 +496,17 @@ Rename a Connection - Rename a Connection + 重命名连接 The name cannot be empty - The name cannot be empty + 名称不能为空 Removing this Connection - Removing this Connection + 删除连接 @@ -842,23 +842,23 @@ Enable tProxy Support - Enable tProxy Support + 启用 tProxy 支持 This will append capabilities to the v2ray executable. - This will append capabilities to the v2ray executable. + 这将在 v2ray 可执行程序上添加 Capability If anything goes wrong after enabling this, please refer to issue #57 or the link below: - If anything goes wrong after enabling this, please refer to issue #57 or the link below: + 如果在启用之后出现任何错误,请参阅 issue #57 或 以下链接: Failed to setcap onto v2ray executable. You may need to run `setcap` manually. - Failed to setcap onto v2ray executable. You may need to run `setcap` manually. + 无法执行 setcap,你可能需要手动进行操作 @@ -871,22 +871,22 @@ Qv2ray Cannot Continue - Qv2ray Cannot Continue + Qv2ray 无法继续 You are running a lower version of Qv2ray compared to the current config file. - You are running a lower version of Qv2ray compared to the current config file. + 你正在运行一个比配置文件版本低的 Qv2ray Please report if you think this is an error. - Please report if you think this is an error. + 如果你认为这是一个 bug,请反馈 Issues Qv2ray will now exit. - Qv2ray will now exit. + Qv2ray 现在将会退出 @@ -916,17 +916,17 @@ Configuration Error - Configuration Error + 配置错误 Cannot start v2ray - Cannot start v2ray + 无法启动 v2ray v2ray core file cannot be found at: - v2ray core file cannot be found at: + v2ray 核心文件未能在这里找到: From 13c73a7f5fca46e97f5e98e1ab655e171f7e50f2 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sun, 22 Sep 2019 10:15:09 +0800 Subject: [PATCH 16/29] New translations en-US.ts (Russian) Former-commit-id: 39f577187750917e3cd424202ee2c837467be7e3 --- translations/ru-RU.ts | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/translations/ru-RU.ts b/translations/ru-RU.ts index e663bede..8edc67c5 100644 --- a/translations/ru-RU.ts +++ b/translations/ru-RU.ts @@ -496,17 +496,17 @@ Rename a Connection - Rename a Connection + Переименовать подключение The name cannot be empty - The name cannot be empty + Имя не может быть пустым Removing this Connection - Removing this Connection + Удалить из списка @@ -842,23 +842,23 @@ Enable tProxy Support - Enable tProxy Support + Включить tProxy поддержку This will append capabilities to the v2ray executable. - This will append capabilities to the v2ray executable. + Это добавит возможности к исполняемому файлу v2ray. If anything goes wrong after enabling this, please refer to issue #57 or the link below: - If anything goes wrong after enabling this, please refer to issue #57 or the link below: + Если что-либо пошло не так после включения, пожалуйста, обратитесь к проблеме #57 или к ссылке ниже: Failed to setcap onto v2ray executable. You may need to run `setcap` manually. - Failed to setcap onto v2ray executable. You may need to run `setcap` manually. + Не удалось установить параметр на v2ray исполняемый файл. Возможно, вам нужно запустить `setcap` вручную. @@ -871,22 +871,22 @@ Qv2ray Cannot Continue - Qv2ray Cannot Continue + Qv2ray не может продолжить You are running a lower version of Qv2ray compared to the current config file. - You are running a lower version of Qv2ray compared to the current config file. + Вы используете более низкую версию Qv2ray по сравнению с текущим конфигурационным файлом. Please report if you think this is an error. - Please report if you think this is an error. + Пожалуйста, сообщите, если вы считаете, что это ошибка. Qv2ray will now exit. - Qv2ray will now exit. + Qv2ray теперь выйдет. @@ -916,17 +916,17 @@ Configuration Error - Configuration Error + Ошибка конфигурации Cannot start v2ray - Cannot start v2ray + Невозможно запустить v2ray v2ray core file cannot be found at: - v2ray core file cannot be found at: + v2ray core файл не найден в: @@ -939,12 +939,12 @@ #Outbounds - #Outbounds + Исходящее соединение #OutboundDetail - #OutboundDetail + #Детали границы From db75d5ec8b387237ce47cacc3b7755443e89ea2f Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sun, 22 Sep 2019 14:51:55 +0800 Subject: [PATCH 17/29] [vmess] Fixed a vmess import bug. See #63 Former-commit-id: a9cd17446cc38513c44c053f11a0d710d5e4b3ce --- src/QvCoreConfigOperations_Convertion.cpp | 36 +++++++++++++---------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/QvCoreConfigOperations_Convertion.cpp b/src/QvCoreConfigOperations_Convertion.cpp index df8a6809..fbf485b4 100644 --- a/src/QvCoreConfigOperations_Convertion.cpp +++ b/src/QvCoreConfigOperations_Convertion.cpp @@ -51,24 +51,28 @@ namespace Qv2ray // Stream Settings StreamSettingsObject streaming; - // Fill hosts for HTTP - foreach (auto _host, QString::fromStdString(host).split(',')) { - streaming.httpSettings.host.push_back(_host.toStdString()); + if (net == "tcp") { + streaming.tcpSettings.header.type = type; + } else if (net == "http") { + // Fill hosts for HTTP + foreach (auto _host, QString::fromStdString(host).split(',')) { + streaming.httpSettings.host.push_back(_host.toStdString()); + } + + streaming.httpSettings.path = path; + } else if (net == "ws") { + streaming.wsSettings.headers.insert(make_pair("Host", host)); + streaming.wsSettings.path = path; + } else if (net == "kcp") { + streaming.kcpSettings.header.type = type; + } else if (net == "domainsocket") { + streaming.dsSettings.path = path; + } else if (net == "quic") { + streaming.quicSettings.security = host; + streaming.quicSettings.header.type = type; + streaming.quicSettings.key = path; } - // hosts for ws, h2 and security for QUIC - streaming.wsSettings.headers.insert(make_pair("Host", host)); - streaming.quicSettings.security = host; - // - // Fake type for tcp, kcp and QUIC - streaming.tcpSettings.header.type = type; - streaming.kcpSettings.header.type = type; - streaming.quicSettings.header.type = type; - // - // Path for ws, h2, Quic - streaming.wsSettings.path = path; - streaming.httpSettings.path = path; - streaming.quicSettings.key = path; streaming.security = tls; // // Network type From e428b37eb07cf8b6f8d6daf4293368e11621562a Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sun, 22 Sep 2019 16:10:17 +0800 Subject: [PATCH 18/29] [doc] Updated issue template. Former-commit-id: ae97149de37adb80cf2e4b9c1981efddd12f8616 --- .github/ISSUE_TEMPLATE/bug---.md | 27 ++++++-- README.md | 108 +++++++++++++++++++++++-------- 2 files changed, 103 insertions(+), 32 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug---.md b/.github/ISSUE_TEMPLATE/bug---.md index 3bda5436..68ebfebe 100644 --- a/.github/ISSUE_TEMPLATE/bug---.md +++ b/.github/ISSUE_TEMPLATE/bug---.md @@ -10,6 +10,8 @@ assignees: '' **简单描述这个 bug:** + + **如何复现这个bug:** 1. 2. @@ -19,14 +21,31 @@ assignees: '' **Qv2ray 本应该是怎样工作的?** -**相关截图** -如果合适的话,可以在这里粘贴截图 + +**如果是连接问题,在其他 v2ray 客户端里出现过吗?** + + + +**相关截图或日志** + +``` +日志: + +``` + + **系统信息** - - 系统类型(windows, linux, macos): - - 是从release下载的还是自己编译的: + - 系统类型(windows, linux, macos) + - + - 是从release下载的还是自己编译的 + - - 首选项里的版本号: + - **其他信息** 你认为对我们修复bug有帮助的任何信息都可以在这里写出来: *在提供自己的vmess或者配置文件时,注意隐藏好服务器地址和uuid* + +- + diff --git a/README.md b/README.md index 3f838dbb..fd5e09d8 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,56 @@ -# Qv2ray [![Codacy Badge](https://api.codacy.com/project/badge/Grade/a034dd186c36408c92ffb04449fb6996)](https://app.codacy.com/app/lhy0403/Qv2ray?utm_source=github.com&utm_medium=referral&utm_content=lhy0403/Qv2ray&utm_campaign=Badge_Grade_Dashboard) [![HitCount](http://hits.dwyl.io/lhy0403/Qv2ray.svg)](http://hits.dwyl.io/lhy0403/Qv2ray) +# Qv2ray + +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/a034dd186c36408c92ffb04449fb6996)](https://app.codacy.com/app/lhy0403/Qv2ray?utm_source=github.com&utm_medium=referral&utm_content=lhy0403/Qv2ray&utm_campaign=Badge_Grade_Dashboard) [![HitCount](http://hits.dwyl.io/lhy0403/Qv2ray.svg)](http://hits.dwyl.io/lhy0403/Qv2ray) 使用 Qt 框架的跨平台 v2ray 客户端. 支持 Windows, Linux, MacOS 支持连接编辑,支持导入配置和 VMess -Special thanks to: [Hv2ray](https://github.com/aliyuchang33/Hv2ray) by aliyuchang33 +Special thanks to: [Hv2ray](https://github.com/aliyuchang33/Hv2ray) by [@aliyuchang33](https://github.com/aliyuchang33) -# 项目主页,下载链接和使用方法 - - 项目网站: https://lhy0403.github.io/Qv2ray - - 最新 [Release](https://github.com/lhy0403/Qv2ray/releases/latest) - - AppImage 编译平台: [主分支/Release 版本](https://jenkins.himeki.net/job/Qv2ray-AppImage-master/) - - Crowdin 翻译平台 (Public Translation Platform): [Crowdin](https://crowdin.com/project/qv2ray) [开始翻译](https://crwd.in/qv2ray) - - ArchLinux - AUR: [qv2ray](https://aur.archlinux.org/packages/qv2ray/) 由 @aliyuchang33 维护 + - **项目网站: https://lhy0403.github.io/Qv2ray** + - **最新 [Release](https://github.com/lhy0403/Qv2ray/releases/latest)** + - **AppImage 编译平台: [主分支/Release 版本](https://jenkins.himeki.net/job/Qv2ray-AppImage-master/)** + - **Crowdin 翻译平台 (Public Translation Platform): [开始翻译](https://crwd.in/qv2ray)** + - **ArchLinux - AUR: [qv2ray](https://aur.archlinux.org/packages/qv2ray/) 由 [@aliyuchang33](https://github.com/aliyuchang33) 维护** -## Jenkins (Linux) -Himeki.net 的 Jenkins 编译服务器提供开发分支 `dev` 的 Linux AppImage 版本 - - 访问链接: [https://jenkins.himeki.net/job/Qv2ray-AppImage-dev/](https://jenkins.himeki.net/job/Qv2ray-AppImage-dev/) - - 开发分支仅供测试 - - 提供者 [@aliyuchang33](https://github.com/aliyuchang33) - -------------------------- -Travis per machine badge provided by: [badge-matrix](https://github.com/exogen/badge-matrix) -| OS | 主分支 [master](https://github.com/lhy0403/Qv2ray/tree/master) | 开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) | 版本补丁分支 [v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) | -| ------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [Linux](https://travis-ci.com/lhy0403/Qv2ray) | ![Build Status Linux in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-dev&branch=dev) | ![Build Status Linux in v1.0.0](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-v1&branch=version-v1) | -| [MacOS](https://travis-ci.com/lhy0403/Qv2ray) | ![Build Status MacOS in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-dev&branch=dev) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-v1&branch=version-v1) | +## Jenkins AppImage (Linux) + +Himeki.net 的 Jenkins 编译服务器提供 `master` `dev` 和 `version-v1` 分支的 Linux AppImage 版本 + +- 访问链接: [https://jenkins.himeki.net/](https://jenkins.himeki.net/) +- 提供者 [@aliyuchang33](https://github.com/aliyuchang33) + + + +## Qv2ray 项目状态 + +### Linux AppImage + +| Master | Development | Versioning - v1 | Pull Requests | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [![Build Status](https://jenkins.himeki.net/job/Qv2ray-AppImage-master/badge/icon)](https://jenkins.himeki.net/job/Qv2ray-AppImage-master/) | [![Build Status](https://jenkins.himeki.net/job/Qv2ray-AppImage-dev/badge/icon)](https://jenkins.himeki.net/job/Qv2ray-AppImage-dev/) | [![Build Status](https://jenkins.himeki.net/job/Qv2ray-AppImage-version-v1/badge/icon)](https://jenkins.himeki.net/job/Qv2ray-AppImage-version-v1/) | [![Build Status](https://jenkins.himeki.net/job/Qv2ray-AppImage-PR/badge/icon)](https://jenkins.himeki.net/job/Qv2ray-AppImage-PR/) | + +### 跨平台 CI + +*Travis per machine badge provided by: [badge-matrix](https://github.com/exogen/badge-matrix)* + +| OS | 主分支 [master](https://github.com/lhy0403/Qv2ray/tree/master) | 开发分支 [dev](https://github.com/lhy0403/Qv2ray/tree/dev) | 版本分支 [version-v1](https://github.com/lhy0403/Qv2ray/tree/version-v1) | +| --------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [Linux](https://travis-ci.com/lhy0403/Qv2ray) | ![Build Status Linux in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-dev&branch=dev) | ![Build Status Linux in v1.0.0](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=linux&label=Linux-v1&branch=version-v1) | +| [MacOS](https://travis-ci.com/lhy0403/Qv2ray) | ![Build Status MacOS in master](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-master&branch=master) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-dev&branch=dev) | ![Build Status Linux in dev](http://badges.herokuapp.com/travis.com/lhy0403/Qv2ray?style=flat-square&env=BADGE=osx&label=MacOS-v1&branch=version-v1) | | [Windows](https://ci.appveyor.com/project/lhy0403/qv2ray) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/master?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/dev?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/dev) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/version-v1?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/version-v1) | ----------------- -# 编译 +## 编译 + + - 依赖项:`Qt >= 5.12` `gcc >=8` 或 `MinGW` (Windows) 或 `clang` (MacOS) - 建议使用 QtCreator -## Linux & MacOS +### Linux & MacOS - 对于 MacOS,需要额外使用 HomeBrew 安装 Qt 并正确设定 $PATH 环境变量,或者使用 Qt 官方包 (包含 QtCreator) - 对于 Linux,请根据不同发行版安装对应的 Qt 开发包 @@ -52,7 +67,7 @@ qmake ../ make ``` -## Windows +### Windows - 建议使用 Qt Creator @@ -70,10 +85,47 @@ qmake ../ mingw32-make.exe ``` -# 部分 Linux 系统的 UI 丑的解决办法 - - 命令行参数添加 `--style fusion` 即可使用 fusion 界面主题 -# License +## Contributors -[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) +``` + Leroy.H.Y (@lhy0403) ---> Qv2ray Current Maintainer + Hork (@aliyuchang33) ---> Hv2ray Initial Idea and Designs + SOneWinstone (@SoneWinstone) ---> Hv2ray/Qv2ray HTTP Request Helper + ArielAxionL (@axionl) ---> Qv2ray ArtWork + TheBadGateway (@thebadgateway) ---> Russian Translation +``` + + + +## License + +Qv2ray is licensed under [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) + +[X2Struct](https://github.com/xyz347/x2struct) is licensed ![License: GPL v3](https://img.shields.io/badge/License-MIT-blue.svg) + +``` + Qv2ray, A Qt frontend for v2ray. Written in c++ + Copyright (C) 2019 Leroy.H.Y (@lhy0403) ---> Qv2ray Current Maintainer + Copyright (C) 2019 Hork (@aliyuchang33) ---> Hv2ray Initial Idea and Designs + Copyright (C) 2019 SOneWinstone (@SoneWinstone) ---> Hv2ray/Qv2ray HTTP Request Helper + Copyright (C) 2019 ArielAxionL (@axionl) ---> Qv2ray ArtWork + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +``` + +注意:Qv2ray 仅能用于 Qt/c++/linux/CI/自动化 等相关技术的学习和在法律允许范围内的使用,任何个人或集体不得使用 Qv2ray 进行任何违反相关法律法规的操作。 + +启动 Qv2ray 即代表您同意本项目作者不承担任何由于您违反以上准则所带来的任何法律责任。 \ No newline at end of file From b55340e00ed526fc51b68d4beadbefa84b71793d Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sun, 22 Sep 2019 18:08:52 +0800 Subject: [PATCH 19/29] [fix] Bumped to version v1.3.7.1 and fixed #64 Former-commit-id: b8fc8a18004ea790aaddaee2d816553ad160e041 --- Qv2ray.pro | 2 +- src/Qv2rayBase.h | 11 +++++----- src/QvConfigUpgrade.cpp | 11 ++++++++++ src/QvCoreConfigOperations.h | 2 +- src/QvCoreConfigOperations_Generation.cpp | 25 ++++++++++++++--------- src/w_PrefrencesWindow.cpp | 4 ++-- 6 files changed, 36 insertions(+), 19 deletions(-) diff --git a/Qv2ray.pro b/Qv2ray.pro index 0797cd84..0173af7b 100644 --- a/Qv2ray.pro +++ b/Qv2ray.pro @@ -14,7 +14,7 @@ CONFIG += c++11 openssl openssl-linked lrelease embed_translations win32: QMAKE_TARGET_DESCRIPTION = "Qv2ray, a cross-platform v2ray GUI client." win32: QMAKE_TARGET_PRODUCT = "Qv2ray" -VERSION = 1.3.7.0 +VERSION = 1.3.7.1 DEFINES += QV_MAJOR_VERSION=\"\\\"$${VERSION}\\\"\" SOURCES += \ diff --git a/src/Qv2rayBase.h b/src/Qv2rayBase.h index 7e2d55a9..22758341 100644 --- a/src/Qv2rayBase.h +++ b/src/Qv2rayBase.h @@ -7,7 +7,7 @@ #define QV2RAY_VERSION_STRING "v" QV_MAJOR_VERSION -#define QV2RAY_CONFIG_VERSION 3 +#define QV2RAY_CONFIG_VERSION 4 // Base folder. #define QV2RAY_CONFIG_DIR_PATH (Qv2ray::Utils::GetConfigDirPath() + "/") #define QV2RAY_CONFIG_FILE_PATH (QV2RAY_CONFIG_DIR_PATH + "Qv2ray.conf") @@ -85,7 +85,7 @@ namespace Qv2ray // string ignoredVersion; // - bool proxyDefault; + bool enableProxy; bool proxyCN; bool withLocalDNS; list dnsList; @@ -98,7 +98,7 @@ namespace Qv2ray #endif map subscribes; MuxObject mux; - Qv2rayConfig(): config_version(QV2RAY_CONFIG_VERSION), runAsRoot(false), logLevel(), proxyDefault(), proxyCN(), withLocalDNS(), inBoundSettings(), configs(), subscribes(), mux() { } + Qv2rayConfig(): config_version(QV2RAY_CONFIG_VERSION), runAsRoot(false), logLevel(), enableProxy(), proxyCN(), withLocalDNS(), inBoundSettings(), configs(), subscribes(), mux() { } Qv2rayConfig(string lang, string assetsPath, int log, Qv2rayBasicInboundsConfig _inBoundSettings): Qv2rayConfig() { // These settings below are defaults. @@ -114,12 +114,13 @@ namespace Qv2ray dnsList.push_back("1.1.1.1"); dnsList.push_back("4.4.4.4"); proxyCN = false; - proxyDefault = true; + enableProxy = true; withLocalDNS = true; } - XTOSTRUCT(O(config_version, runAsRoot, logLevel, language, autoStartConfig, ignoredVersion, v2AssetsPath, proxyDefault, proxyCN, withLocalDNS, dnsList, inBoundSettings, mux, configs, subscribes)) + XTOSTRUCT(O(config_version, runAsRoot, logLevel, language, autoStartConfig, ignoredVersion, v2AssetsPath, enableProxy, proxyCN, withLocalDNS, dnsList, inBoundSettings, mux, configs, subscribes)) }; + // Extra header for QvConfigUpgrade.cpp QJsonObject UpgradeConfig(int fromVersion, int toVersion, QJsonObject root); } } diff --git a/src/QvConfigUpgrade.cpp b/src/QvConfigUpgrade.cpp index 49a6c402..e6ea04bc 100644 --- a/src/QvConfigUpgrade.cpp +++ b/src/QvConfigUpgrade.cpp @@ -28,6 +28,7 @@ namespace Qv2ray } case 2 : { + // We copied those files. auto vCoreFilePath = root["v2CorePath"].toString(); auto vCoreDestPath = QV2RAY_V2RAY_CORE_PATH; // We also need v2ctl @@ -40,6 +41,16 @@ namespace Qv2ray UPGRADELOG("v2CtlFilePath", v2CtlFilePath.toStdString(), v2CtlDestPath.toStdString()) break; } + + case 3 : { + // We changed a key name in the config file. + //proxyDefault + auto oldProxyDefault = root["proxyDefault"].toBool(); + root.remove("proxyDefault"); + root["enableProxy"] = oldProxyDefault; + //enableProxy + UPGRADELOG("key: proxyDefault->enableProxy", to_string(oldProxyDefault), to_string(oldProxyDefault)) + } } root["config_version"] = root["config_version"].toInt() + 1; diff --git a/src/QvCoreConfigOperations.h b/src/QvCoreConfigOperations.h index 5a112d02..9de8976d 100644 --- a/src/QvCoreConfigOperations.h +++ b/src/QvCoreConfigOperations.h @@ -17,7 +17,7 @@ namespace Qv2ray namespace ConfigOperations { // -------------------------- BEGIN CONFIG GENERATIONS --------------------------------------------- - QJsonObject GenerateRoutes(bool globalProxy, bool cnProxy); + QJsonObject GenerateRoutes(bool enableProxy, bool cnProxy); QJsonObject GenerateSingleRouteRule(QStringList list, bool isDomain, QString outboundTag, QString type = "field"); QJsonObject GenerateDNS(bool withLocalhost, QStringList dnsServers); // diff --git a/src/QvCoreConfigOperations_Generation.cpp b/src/QvCoreConfigOperations_Generation.cpp index e1a4d410..7630b2a4 100644 --- a/src/QvCoreConfigOperations_Generation.cpp +++ b/src/QvCoreConfigOperations_Generation.cpp @@ -6,23 +6,28 @@ namespace Qv2ray { static const QStringList vLogLevels = {"none", "debug", "info", "warning", "error"}; // -------------------------- BEGIN CONFIG GENERATIONS ---------------------------------------------------------------------------- - QJsonObject GenerateRoutes(bool globalProxy, bool cnProxy) + QJsonObject GenerateRoutes(bool enableProxy, bool cnProxy) { DROOT root.insert("domainStrategy", "IPIfNonMatch"); // // For Rules list QJsonArray rulesList; - // + + if (!enableProxy) { + // This is added to disable all proxies, as a alternative influence of #64 + rulesList.append(GenerateSingleRouteRule(QStringList() << "regexp:.*", true, OUTBOUND_TAG_DIRECT)); + } + // Private IPs should always NOT TO PROXY! - rulesList.append(GenerateSingleRouteRule(QStringList({"geoip:private"}), false, OUTBOUND_TAG_DIRECT)); + rulesList.append(GenerateSingleRouteRule(QStringList() << "geoip:private", false, OUTBOUND_TAG_DIRECT)); // // Check if CN needs proxy, or direct. - rulesList.append(GenerateSingleRouteRule(QStringList({"geoip:cn"}), false, cnProxy ? OUTBOUND_TAG_PROXY : OUTBOUND_TAG_DIRECT)); - rulesList.append(GenerateSingleRouteRule(QStringList({"geosite:cn"}), true, cnProxy ? OUTBOUND_TAG_PROXY : OUTBOUND_TAG_DIRECT)); + rulesList.append(GenerateSingleRouteRule(QStringList() << "geoip:cn", false, cnProxy ? OUTBOUND_TAG_PROXY : OUTBOUND_TAG_DIRECT)); + rulesList.append(GenerateSingleRouteRule(QStringList() << "geosite:cn", true, cnProxy ? OUTBOUND_TAG_PROXY : OUTBOUND_TAG_DIRECT)); // - // Check global proxy, or direct. - rulesList.append(GenerateSingleRouteRule(QStringList({"regexp:.*"}), true, globalProxy ? OUTBOUND_TAG_PROXY : OUTBOUND_TAG_DIRECT)); + // As a bug fix of #64, this default rule has been disabled. + //rulesList.append(GenerateSingleRouteRule(QStringList({"regexp:.*"}), true, globalProxy ? OUTBOUND_TAG_PROXY : OUTBOUND_TAG_DIRECT)); root.insert("rules", rulesList); RROOT } @@ -76,6 +81,8 @@ namespace Qv2ray QJsonArray servers(QJsonArray::fromStringList(dnsServers)); if (withLocalhost) { + // https://github.com/lhy0403/Qv2ray/issues/64 + // The fix patch didn't touch this line below. servers.append("localhost"); } @@ -185,11 +192,9 @@ namespace Qv2ray // Note: The part below always makes the whole functionality in trouble...... // BE EXTREME CAREFUL when changing these code below... - // // For SOME configs, there is no "route" entries, so, we add some... - // We don't use QV2RAY_CONFIG_TYPE_FILE to check because not all IMPORTED connections have routings. if (!root.contains("routing")) { if (root["outbounds"].toArray().count() != 1) { // There are no ROUTING but 2 or more outbounds.... This is rare, but possible. @@ -198,7 +203,7 @@ namespace Qv2ray } LOG(MODULE_CONNECTION, "Current connection has NO ROUTING section, we insert default values.") - auto routeObject = GenerateRoutes(gConf.proxyDefault, gConf.proxyCN); + auto routeObject = GenerateRoutes(gConf.enableProxy, gConf.proxyCN); root.insert("routing", routeObject); QJsonArray outbounds = root["outbounds"].toArray(); outbounds.append(GenerateOutboundEntry("freedom", GenerateFreedomOUT("AsIs", ":0", 0), QJsonObject(), QJsonObject(), "0.0.0.0", OUTBOUND_TAG_DIRECT)); diff --git a/src/w_PrefrencesWindow.cpp b/src/w_PrefrencesWindow.cpp index 5d4ad3fb..3d59fa6e 100644 --- a/src/w_PrefrencesWindow.cpp +++ b/src/w_PrefrencesWindow.cpp @@ -66,7 +66,7 @@ PrefrencesWindow::PrefrencesWindow(QWidget *parent) : QDialog(parent), ui->muxConcurrencyTxt->setValue(CurrentConfig.mux.concurrency); // ui->proxyCNCb->setChecked(CurrentConfig.proxyCN); - ui->proxyDefaultCb->setChecked(CurrentConfig.proxyDefault); + ui->proxyDefaultCb->setChecked(CurrentConfig.enableProxy); ui->localDNSCb->setChecked(CurrentConfig.withLocalDNS); // ui->DNSListTxt->clear(); @@ -242,7 +242,7 @@ void PrefrencesWindow::on_proxyCNCb_stateChanged(int arg1) void PrefrencesWindow::on_proxyDefaultCb_stateChanged(int arg1) { NEEDRESTART - CurrentConfig.proxyDefault = arg1 == Qt::Checked; + CurrentConfig.enableProxy = arg1 == Qt::Checked; } void PrefrencesWindow::on_localDNSCb_stateChanged(int arg1) From 203b839a29940bb8c322034d51ae39473000a52d Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Sun, 22 Sep 2019 18:13:14 +0800 Subject: [PATCH 20/29] [lang] Removed language Jap and Kor Former-commit-id: 6743e461e125e95d466d7bbc0eaff7607ff4fd44 --- translations/ja-JP.ts | 1038 ----------------------------------------- translations/ko-KR.ts | 1038 ----------------------------------------- 2 files changed, 2076 deletions(-) delete mode 100644 translations/ja-JP.ts delete mode 100644 translations/ko-KR.ts diff --git a/translations/ja-JP.ts b/translations/ja-JP.ts deleted file mode 100644 index 58350261..00000000 --- a/translations/ja-JP.ts +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - ConnectionEditWindow - - - #EditConnectionSettings - #EditConnectionSettings - - - - - Host - Host - - - - Port - Port - - - - Outbound Type - Outbound Type - - - - Socks - Socks - - - - Use TLS - Use TLS - - - - UUID - UUID - - - - Alter ID - Alter ID - - - - - Security - Security - - - - Transport Method - Transport Method - - - - Outbound Settings - Outbound Settings - - - - - - - Enabled - Enabled - - - - Transport Settings - Transport Settings - - - - - Type - Type - - - - Request - Request - - - - - Prettify - Prettify - - - - Response - Response - - - - - Default - Default - - - - - - Path - Path - - - - - Headers - Headers - - - - Format: key|value - Format: key|value - - - - MTU - MTU - - - - TTI (ms) - TTI (ms) - - - - Uplink (MB/s) - Uplink (MB/s) - - - - Congestion Control - Congestion Control - - - - Downlink (MB/s) - Downlink (MB/s) - - - - Read Buffer (MB) - Read Buffer (MB) - - - - Write Buffer (MB) - Write Buffer (MB) - - - - Key - Key - - - - Mark - Mark - - - - TCP Fast Open - TCP Fast Open - - - - tProxy - tProxy - - - - EMail - EMail - - - - - Password - Password - - - - Encryption - Encryption - - - - User Level - User Level - - - - OTA - OTA - - - - Username - Username - - - - Json Preview - Json Preview - - - - - #JsonPrettify - #JsonPrettify - - - - - #JsonContainsError - #JsonContainsError - - - - ImportConfigWindow - - - Import file - Import file - - - - Name - Name - - - - Import Source - Import Source - - - - File - File - - - - VMess String - VMess String - - - - - Subscription Link - Subscription Link - - - - #Import - #Import - - - - Path - Path - - - - Select - Select - - - - Inbound - Inbound - - - - Keep imported inbound settings - Keep imported inbound settings - - - - VMess Connection String - VMess Connection String - - - - TO DO IN VERSION 2 - TO DO IN VERSION 2 - - - - OpenConfigFile - OpenConfigFile - - - - #InvalidConfigFile - #InvalidConfigFile - - - - ConfigFileCheckFailed - ConfigFileCheckFailed - - - - - #VMessCheck - #VMessCheck - - - - #NotValidVMessProtocolString - #NotValidVMessProtocolString - - - - #INTERNAL_ERROR - #INTERNAL_ERROR - - - - MainWindow - - - Qv2ray - Qv2ray - - - - - Connect - Connect - - - - - Disconnect - Disconnect - - - - Clear Log - Clear Log - - - - Prefrences - Prefrences - - - - Stopped - Stopped - - - - Host List - Host List - - - - Config Details - Config Details - - - - Type - Type - - - - Host - Host - - - - Port - Port - - - - Detail - Detail - - - - #AddConnection - #AddConnection - - - - A - A - - - - - #ImportConnection - #ImportConnection - - - - I - I - - - - #RemoveConnection - #RemoveConnection - - - - R - R - - - - #EditConnection - #EditConnection - - - - ... - ... - - - - Log - Log - - - - #ManuallyCreateConnection - #ManuallyCreateConnection - - - - #Exit - #Exit - - - - #Preferences - #Preferences - - - - #Start - #Start - - - - #Stop - #Stop - - - - #Restart - #Restart - - - - - Hide - Hide - - - - Quit - Quit - - - - Reconnect - Reconnect - - - - Rename - Rename - - - - - - Show - Show - - - - NoConfigSelected - NoConfigSelected - - - - PleaseSelectAConfig - PleaseSelectAConfig - - - - Connect to this - Connect to this - - - - Update - Update - - - - Found a new version: - Found a new version: - - - - Download Link: - Download Link: - - - - No connection selected! - No connection selected! - - - - Please select a config from the list. - Please select a config from the list. - - - - - Connected To Server: - Connected To Server: - - - - Connected - Connected - - - - Disconnected - Disconnected - - - - UUID - UUID - - - - AlterID - AlterID - - - - Transport - Transport - - - - Email - Email - - - - Encryption - Encryption - - - - Username - Username - - - - - Rename A Connection - Rename A Connection - - - - A name cannot be empty - A name cannot be empty - - - - The name has been used already, Please choose another. - The name has been used already, Please choose another. - - - - Removing A Connection - Removing A Connection - - - - Are you sure to remove this connection? - Are you sure to remove this connection? - - - - PrefrencesWindow - - - - - Prefrences - Prefrences - - - - General - General - - - - Language - Language - - - - zh-CN - zh-CN - - - - en-US - en-US - - - - Run As Root - Run As Root - - - - Log Level - Log Level - - - - none - none - - - - debug - debug - - - - info - info - - - - warning - warning - - - - error - error - - - - Automatically Connect To - Automatically Connect To - - - - v2ray Core Path - v2ray Core Path - - - - - #Select - #Select - - - - v2ray Assets Path - v2ray Assets Path - - - - Mux Settings - Mux Settings - - - - - - - - - - - - - Enabled - Enabled - - - - Concurrency - Concurrency - - - - InBound Settings - InBound Settings - - - - Listen IP - Listen IP - - - - SOCKS InBound Settings - SOCKS InBound Settings - - - - - Port - Port - - - - - Authentication - Authentication - - - - - Username - Username - - - - - Password - Password - - - - HTTP InBound Settings - HTTP InBound Settings - - - - Route Settings - Route Settings - - - - Enable Proxy - Enable Proxy - - - - Chinese Addresses - Chinese Addresses - - - - Use Local DNS - Use Local DNS - - - - DNS List - DNS List - - - - About - About - - - - Qv2ray - Qv2ray - - - - Version: - Version: - - - - Official Repo: - Official Repo: - - - - <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - - - - License: - License: - - - - <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - - - - About Qt - About Qt - - - - Ingore Next Version - Ingore Next Version - - - - Cancel - Cancel - - - - PortNumbersCannotBeSame - PortNumbersCannotBeSame - - - - RunAsRootNotOnWindows - RunAsRootNotOnWindows - - - - #OpenVCoreFile - #OpenVCoreFile - - - - OpenVAssetsDir - OpenVAssetsDir - - - - QObject - - - #VMessDecodeError - #VMessDecodeError - - - - ConfigurationError - ConfigurationError - - - - CoreNotFound - CoreNotFound - - - - CoreFileNotFoundExplainationAt: - CoreFileNotFoundExplainationAt: - - - - DependencyMissing - DependencyMissing - - - - Cannot find openssl libs - Cannot find openssl libs - - - - This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - - - - If you are using AppImage, please report a bug. - If you are using AppImage, please report a bug. - - - - Another instance of Qv2ray is already running. - Another instance of Qv2ray is already running. - - - - RouteEditor - - - Dialog - Dialog - - - - #Outbounds - #Outbounds - - - - #OutboundDetail - #OutboundDetail - - - - #Tag - #Tag - - - - #Type - #Type - - - - #Address - #Address - - - - #Port - #Port - - - - #EditCurrentOutbound - #EditCurrentOutbound - - - - SubscribeEditor - - - #UpdateInProcess - #UpdateInProcess - - - - #TryLater - #TryLater - - - - w_SubscribeEditor - - - SubscribeEditor - SubscribeEditor - - - - #AddConnection - #AddConnection - - - - A - A - - - - #RemoveConnection - #RemoveConnection - - - - R - R - - - - ... - ... - - - - Name - Name - - - - URL - URL - - - - Config List - Config List - - - - Update Subscription - Update Subscription - - - - Config Detail - Config Detail - - - - Type - Type - - - - Server - Server - - - - Config - Config - - - - Port - Port - - - diff --git a/translations/ko-KR.ts b/translations/ko-KR.ts deleted file mode 100644 index ce0ce632..00000000 --- a/translations/ko-KR.ts +++ /dev/null @@ -1,1038 +0,0 @@ - - - - - ConnectionEditWindow - - - #EditConnectionSettings - #EditConnectionSettings - - - - - Host - 호스트 - - - - Port - 포트 - - - - Outbound Type - Outbound Type - - - - Socks - Socks - - - - Use TLS - TLS 사용 - - - - UUID - UUID - - - - Alter ID - Alter ID - - - - - Security - 보안 - - - - Transport Method - 수송 수단 - - - - Outbound Settings - Outbound Settings - - - - - - - Enabled - 사용 가능 - - - - Transport Settings - Transport Settings - - - - - Type - 유형 - - - - Request - 요청 - - - - - Prettify - 정리하기 - - - - Response - 응답 - - - - - Default - 기본 - - - - - - Path - 경로 - - - - - Headers - 헤더 설정 - - - - Format: key|value - Format: key|value - - - - MTU - MTU - - - - TTI (ms) - TTI (ms) - - - - Uplink (MB/s) - Uplink (MB/s) - - - - Congestion Control - Congestion Control - - - - Downlink (MB/s) - Downlink (MB/s) - - - - Read Buffer (MB) - Read Buffer (MB) - - - - Write Buffer (MB) - Write Buffer (MB) - - - - Key - - - - - Mark - 표시 - - - - TCP Fast Open - TCP Fast Open - - - - tProxy - tProxy - - - - EMail - EMail - - - - - Password - 비밀 번호 - - - - Encryption - 암호화 - - - - User Level - 당신의 레벨 - - - - OTA - OTA - - - - Username - 사용자이름 - - - - Json Preview - Json Preview - - - - - #JsonPrettify - #JsonPrettify - - - - - #JsonContainsError - #JsonContainsError - - - - ImportConfigWindow - - - Import file - 가져오기 - - - - Name - 이름 - - - - Import Source - Import Source - - - - File - 파일 - - - - VMess String - VMess String - - - - - Subscription Link - 정액제 계약 - - - - #Import - #Import - - - - Path - Path - - - - Select - Select - - - - Inbound - Inbound - - - - Keep imported inbound settings - Keep imported inbound settings - - - - VMess Connection String - VMess Connection String - - - - TO DO IN VERSION 2 - TO DO IN VERSION 2 - - - - OpenConfigFile - OpenConfigFile - - - - #InvalidConfigFile - #InvalidConfigFile - - - - ConfigFileCheckFailed - ConfigFileCheckFailed - - - - - #VMessCheck - #VMessCheck - - - - #NotValidVMessProtocolString - #NotValidVMessProtocolString - - - - #INTERNAL_ERROR - #INTERNAL_ERROR - - - - MainWindow - - - Qv2ray - Qv2ray - - - - - Connect - Connect - - - - - Disconnect - Disconnect - - - - Clear Log - Clear Log - - - - Prefrences - Prefrences - - - - Stopped - Stopped - - - - Host List - Host List - - - - Config Details - Config Details - - - - Type - Type - - - - Host - Host - - - - Port - Port - - - - Detail - Detail - - - - #AddConnection - #AddConnection - - - - A - A - - - - - #ImportConnection - #ImportConnection - - - - I - I - - - - #RemoveConnection - #RemoveConnection - - - - R - R - - - - #EditConnection - #EditConnection - - - - ... - ... - - - - Log - Log - - - - #ManuallyCreateConnection - #ManuallyCreateConnection - - - - #Exit - #Exit - - - - #Preferences - #Preferences - - - - #Start - #Start - - - - #Stop - #Stop - - - - #Restart - #Restart - - - - - Hide - Hide - - - - Quit - Quit - - - - Reconnect - Reconnect - - - - Rename - Rename - - - - - - Show - Show - - - - NoConfigSelected - NoConfigSelected - - - - PleaseSelectAConfig - PleaseSelectAConfig - - - - Connect to this - Connect to this - - - - Update - Update - - - - Found a new version: - Found a new version: - - - - Download Link: - Download Link: - - - - No connection selected! - No connection selected! - - - - Please select a config from the list. - Please select a config from the list. - - - - - Connected To Server: - Connected To Server: - - - - Connected - Connected - - - - Disconnected - Disconnected - - - - UUID - UUID - - - - AlterID - AlterID - - - - Transport - Transport - - - - Email - Email - - - - Encryption - Encryption - - - - Username - Username - - - - - Rename A Connection - Rename A Connection - - - - A name cannot be empty - A name cannot be empty - - - - The name has been used already, Please choose another. - The name has been used already, Please choose another. - - - - Removing A Connection - Removing A Connection - - - - Are you sure to remove this connection? - Are you sure to remove this connection? - - - - PrefrencesWindow - - - - - Prefrences - Prefrences - - - - General - General - - - - Language - Language - - - - zh-CN - zh-CN - - - - en-US - en-US - - - - Run As Root - Run As Root - - - - Log Level - Log Level - - - - none - none - - - - debug - debug - - - - info - info - - - - warning - warning - - - - error - error - - - - Automatically Connect To - Automatically Connect To - - - - v2ray Core Path - v2ray Core Path - - - - - #Select - #Select - - - - v2ray Assets Path - v2ray Assets Path - - - - Mux Settings - Mux Settings - - - - - - - - - - - - - Enabled - Enabled - - - - Concurrency - Concurrency - - - - InBound Settings - InBound Settings - - - - Listen IP - Listen IP - - - - SOCKS InBound Settings - SOCKS InBound Settings - - - - - Port - Port - - - - - Authentication - Authentication - - - - - Username - Username - - - - - Password - Password - - - - HTTP InBound Settings - HTTP InBound Settings - - - - Route Settings - Route Settings - - - - Enable Proxy - Enable Proxy - - - - Chinese Addresses - Chinese Addresses - - - - Use Local DNS - Use Local DNS - - - - DNS List - DNS List - - - - About - About - - - - Qv2ray - Qv2ray - - - - Version: - Version: - - - - Official Repo: - Official Repo: - - - - <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - <html><head/><body><p><a href="https://github.com/lhy0403/Qv2ray"><span style=" text-decoration: underline; color:#2980b9;">https://github.com/lhy0403/Qv2ray</span></a></p></body></html> - - - - License: - License: - - - - <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - <html><head/><body><p><a href="https://www.gnu.org/licenses/gpl-3.0.txt"><span style=" text-decoration: underline; color:#2980b9;">GPLv3 (https://www.gnu.org/licenses/gpl-3.0.txt)</span></a></p></body></html> - - - - About Qt - About Qt - - - - Ingore Next Version - Ingore Next Version - - - - Cancel - Cancel - - - - PortNumbersCannotBeSame - PortNumbersCannotBeSame - - - - RunAsRootNotOnWindows - RunAsRootNotOnWindows - - - - #OpenVCoreFile - #OpenVCoreFile - - - - OpenVAssetsDir - OpenVAssetsDir - - - - QObject - - - #VMessDecodeError - #VMessDecodeError - - - - ConfigurationError - ConfigurationError - - - - CoreNotFound - CoreNotFound - - - - CoreFileNotFoundExplainationAt: - CoreFileNotFoundExplainationAt: - - - - DependencyMissing - DependencyMissing - - - - Cannot find openssl libs - Cannot find openssl libs - - - - This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - This could be caused by a missing of `openssl` package in your system. Or an AppImage issue. - - - - If you are using AppImage, please report a bug. - If you are using AppImage, please report a bug. - - - - Another instance of Qv2ray is already running. - Another instance of Qv2ray is already running. - - - - RouteEditor - - - Dialog - Dialog - - - - #Outbounds - #Outbounds - - - - #OutboundDetail - #OutboundDetail - - - - #Tag - #Tag - - - - #Type - #Type - - - - #Address - #Address - - - - #Port - #Port - - - - #EditCurrentOutbound - #EditCurrentOutbound - - - - SubscribeEditor - - - #UpdateInProcess - #UpdateInProcess - - - - #TryLater - #TryLater - - - - w_SubscribeEditor - - - SubscribeEditor - SubscribeEditor - - - - #AddConnection - #AddConnection - - - - A - A - - - - #RemoveConnection - #RemoveConnection - - - - R - R - - - - ... - ... - - - - Name - Name - - - - URL - URL - - - - Config List - Config List - - - - Update Subscription - Update Subscription - - - - Config Detail - Config Detail - - - - Type - Type - - - - Server - Server - - - - Config - Config - - - - Port - Port - - - From 5fd796de9bc1743fe7a6da43691280569ba54778 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Mon, 23 Sep 2019 14:05:11 +0800 Subject: [PATCH 21/29] [added] Added complex config notices. Former-commit-id: 3ebd87e9bc647d388a9991f02dcf81c4a9f00418 --- src/w_MainWindow.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/w_MainWindow.cpp b/src/w_MainWindow.cpp index e61fefc3..ab505736 100644 --- a/src/w_MainWindow.cpp +++ b/src/w_MainWindow.cpp @@ -504,12 +504,23 @@ void MainWindow::on_editConfigButton_clicked() { // Check if we have a connection selected... if (ui->connectionListWidget->currentIndex().row() < 0) { - QvMessageBox(this, tr("NoConfigSelected"), tr("PleaseSelectAConfig")); + QvMessageBox(this, tr("No Config Selected"), tr("Please Select a Config")); return; } auto alias = ui->connectionListWidget->currentItem()->text(); auto outBoundRoot = connections[alias]; + + if (outBoundRoot["outbounds"].toArray().count() > 1) { + // Complicated version, currently not support editing. + if (QvMessageBoxAsk(this, tr("Not Supported"), tr("Qv2ray currently does not support editing complex configs.") + "\r\n" + + tr("Do you want to edit the config file manually?")) == QMessageBox::StandardButton::Yes) { + QDesktopServices::openUrl(QUrl::fromLocalFile(QV2RAY_CONFIG_DIR_PATH + alias + QV2RAY_CONNECTION_FILE_EXTENSION)); + } + + return; + } + ConnectionEditWindow *w = new ConnectionEditWindow(outBoundRoot, &alias, this); connect(w, &ConnectionEditWindow::s_reload_config, this, &MainWindow::save_reload_globalconfig); w->show(); From 02f913d374a08c45ea2242e9a9a2b86de35a92f1 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Mon, 23 Sep 2019 21:47:41 +0800 Subject: [PATCH 22/29] [doc] Release v1.3.7.1 Former-commit-id: 43d9f1d9ca55ba15edb6385be70b41f760d07c29 --- docs/Features.md | 6 ++++- docs/History.md | 3 ++- docs/README.md | 2 +- docs/ReleaseNotes/1.3/v1.3.7.1.md | 37 +++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 docs/ReleaseNotes/1.3/v1.3.7.1.md diff --git a/docs/Features.md b/docs/Features.md index 5bfd6e60..2f5c83b7 100644 --- a/docs/Features.md +++ b/docs/Features.md @@ -4,7 +4,11 @@ Qv2ray 是一款跨平台,真正支持 Linux 桌面环境的 v2ray 客户端 ## 1. 连接导入 -- Qv2ray 支持从文件导入,VMess 连接字符串导入配置文件 +Qv2ray 支持以下位置导入配置文件 + +- 文件导入 +- VMess 连接字符串 +- 手动添加 ## 2. 连接编辑 diff --git a/docs/History.md b/docs/History.md index 628ba0bd..bd86e3d6 100644 --- a/docs/History.md +++ b/docs/History.md @@ -4,7 +4,8 @@ ## 1.3.x -- [v1.3.7](./ReleaseNotes/1.3/v1.3.7.0.md) 增加 tProxy 支持,修复 vmess:// 导入等多个问题,此版本包含 4 个功能更新和 8 个 bug 修复 +- [v1.3.7.1](./ReleaseNotes/1.3/v1.3.7.1.md)增加 tProxy 支持,修复 vmess:// 导入等多个问题,此版本包含 6 个功能更新和 11 个 bug 修复 +- [v1.3.7](./ReleaseNotes/1.3/v1.3.7.0.md) 未发布 - [v1.3.6.1](./ReleaseNotes/1.3/v1.3.6.1.md) UI 图标更新,翻译更新和一个列表顺序修复 - [v1.3.6.0](./ReleaseNotes/1.3/v1.3.6.0.md) 没有发布 - [v1.3.5-3](./ReleaseNotes/1.3/v1.3.5.3.md) 针对 OpenSSL 1.1.1b-c-d 的更新 diff --git a/docs/README.md b/docs/README.md index 79ddb374..73f7cdd2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ - 基于 Qt 的跨平台 v2ray 图形客户端 -- #### 当前最新版本: [v1.3.6.1](./ReleaseNotes/1.3/v1.3.6.1.md) +- #### 当前最新版本: [v1.3.7.1](./ReleaseNotes/1.3/v1.3.7.1.md) -------- diff --git a/docs/ReleaseNotes/1.3/v1.3.7.1.md b/docs/ReleaseNotes/1.3/v1.3.7.1.md new file mode 100644 index 00000000..8932a62c --- /dev/null +++ b/docs/ReleaseNotes/1.3/v1.3.7.1.md @@ -0,0 +1,37 @@ +# Version 1.3.7.1 包含以下功能性更新和修复 + +Github Release: [v1.3.7.1](https://github.com/lhy0403/Qv2ray/releases/tag/v1.3.7.1) + +## 此版本包含以下更改 + +*此版本共包含 6 个功能更新和 11 个 bug 修复* + +- 建议所有用户更新到此版本 + + + +**功能更新** + +1. 使用配置文件夹目录下的 `vcore` 子文件夹作为默认(且唯一的) `v2ray`/`v2ctl` 的搜索路径 +2. 停止支持自定义的 `v2ray` 内核路径,现有 `v2ray` 主程序和 `v2ctl` 将被自动复制到新路径,无需进行手动迁移 + - 注意:`assets` 路径保持不变,请不要删除原文件夹 +3. 移除了首选项中 “使用 root 运行 v2ray” 的选项 +4. 增加 Linux 系统的 `tProxy` 功能支持,使用 `pkexec` 和 `setcap`,避免了使用 `sudo` 权限过大的问题 [#59](https://github.com/lhy0403/Qv2ray/issues/59) +5. 移除了在每个连接文件中的 `_qv2ray.configSource` 标识符,导入或手动添加的连接将不再有此项内容 +6. 增加了在检测不到 `v2ray` 内核时,自动打开路径的功能 + + + +**Bug 修复** + +1. 修复了某些情况下 vmess:// 链接导入失败的bug [#58](https://github.com/lhy0403/Qv2ray/issues/58) +2. 修复了某些情况下,导入文件在连接时出现 Tag 缺失的情况 +3. (部分修复了)某些情况下,由于 Qv2ray 配置文件版本不一致导致的崩溃问题 +4. 修复了在只有一个连接配置时,Qv2ray 启动后即使选择了一个连接,仍然会提示“未选择连接”的 bug [#57](https://github.com/lhy0403/Qv2ray/issues/57) +5. 修复了在显示部分未完全翻译的文字时出现单词间空格缺失的 bug +6. 修复了上个版本由于使用云翻译引起的托盘图标处出现两个冒号的问题 +7. 修复了在主界面进行添加,重命名,删除连接等复杂列表操作后再选择连接,出现连接的配置与选择配置不一致的 bug +8. 修复了某些极端情况下,在一个连接进行重命名时更换当前连接(即双击其他配置)时出现的重命名失败的 bug +9. 修复了在导入包含特定头部伪装的 vmess:// 字符串时,TCP Header 被错误设置导致 v2ray 无法运行的 bug +10. 修复了某些情况下,国内网站无法被正确分流到直连的 bug +11. 修复了在尝试编辑尚未支持的复杂连接配置时,Qv2ray 闪退的 bug \ No newline at end of file From d8d876bb1fddd6cb5506035228fb131ab09f0580 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Mon, 23 Sep 2019 21:47:41 +0800 Subject: [PATCH 23/29] [doc] Release v1.3.7.1 Former-commit-id: ed7eb2d6f4348aeb4c2e6903f74df85eae1c361e --- docs/Features.md | 6 ++++- docs/History.md | 3 ++- docs/README.md | 2 +- docs/ReleaseNotes/1.3/v1.3.7.1.md | 37 +++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 docs/ReleaseNotes/1.3/v1.3.7.1.md diff --git a/docs/Features.md b/docs/Features.md index 5bfd6e60..2f5c83b7 100644 --- a/docs/Features.md +++ b/docs/Features.md @@ -4,7 +4,11 @@ Qv2ray 是一款跨平台,真正支持 Linux 桌面环境的 v2ray 客户端 ## 1. 连接导入 -- Qv2ray 支持从文件导入,VMess 连接字符串导入配置文件 +Qv2ray 支持以下位置导入配置文件 + +- 文件导入 +- VMess 连接字符串 +- 手动添加 ## 2. 连接编辑 diff --git a/docs/History.md b/docs/History.md index 628ba0bd..bd86e3d6 100644 --- a/docs/History.md +++ b/docs/History.md @@ -4,7 +4,8 @@ ## 1.3.x -- [v1.3.7](./ReleaseNotes/1.3/v1.3.7.0.md) 增加 tProxy 支持,修复 vmess:// 导入等多个问题,此版本包含 4 个功能更新和 8 个 bug 修复 +- [v1.3.7.1](./ReleaseNotes/1.3/v1.3.7.1.md)增加 tProxy 支持,修复 vmess:// 导入等多个问题,此版本包含 6 个功能更新和 11 个 bug 修复 +- [v1.3.7](./ReleaseNotes/1.3/v1.3.7.0.md) 未发布 - [v1.3.6.1](./ReleaseNotes/1.3/v1.3.6.1.md) UI 图标更新,翻译更新和一个列表顺序修复 - [v1.3.6.0](./ReleaseNotes/1.3/v1.3.6.0.md) 没有发布 - [v1.3.5-3](./ReleaseNotes/1.3/v1.3.5.3.md) 针对 OpenSSL 1.1.1b-c-d 的更新 diff --git a/docs/README.md b/docs/README.md index 79ddb374..73f7cdd2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,7 +2,7 @@ - 基于 Qt 的跨平台 v2ray 图形客户端 -- #### 当前最新版本: [v1.3.6.1](./ReleaseNotes/1.3/v1.3.6.1.md) +- #### 当前最新版本: [v1.3.7.1](./ReleaseNotes/1.3/v1.3.7.1.md) -------- diff --git a/docs/ReleaseNotes/1.3/v1.3.7.1.md b/docs/ReleaseNotes/1.3/v1.3.7.1.md new file mode 100644 index 00000000..8932a62c --- /dev/null +++ b/docs/ReleaseNotes/1.3/v1.3.7.1.md @@ -0,0 +1,37 @@ +# Version 1.3.7.1 包含以下功能性更新和修复 + +Github Release: [v1.3.7.1](https://github.com/lhy0403/Qv2ray/releases/tag/v1.3.7.1) + +## 此版本包含以下更改 + +*此版本共包含 6 个功能更新和 11 个 bug 修复* + +- 建议所有用户更新到此版本 + + + +**功能更新** + +1. 使用配置文件夹目录下的 `vcore` 子文件夹作为默认(且唯一的) `v2ray`/`v2ctl` 的搜索路径 +2. 停止支持自定义的 `v2ray` 内核路径,现有 `v2ray` 主程序和 `v2ctl` 将被自动复制到新路径,无需进行手动迁移 + - 注意:`assets` 路径保持不变,请不要删除原文件夹 +3. 移除了首选项中 “使用 root 运行 v2ray” 的选项 +4. 增加 Linux 系统的 `tProxy` 功能支持,使用 `pkexec` 和 `setcap`,避免了使用 `sudo` 权限过大的问题 [#59](https://github.com/lhy0403/Qv2ray/issues/59) +5. 移除了在每个连接文件中的 `_qv2ray.configSource` 标识符,导入或手动添加的连接将不再有此项内容 +6. 增加了在检测不到 `v2ray` 内核时,自动打开路径的功能 + + + +**Bug 修复** + +1. 修复了某些情况下 vmess:// 链接导入失败的bug [#58](https://github.com/lhy0403/Qv2ray/issues/58) +2. 修复了某些情况下,导入文件在连接时出现 Tag 缺失的情况 +3. (部分修复了)某些情况下,由于 Qv2ray 配置文件版本不一致导致的崩溃问题 +4. 修复了在只有一个连接配置时,Qv2ray 启动后即使选择了一个连接,仍然会提示“未选择连接”的 bug [#57](https://github.com/lhy0403/Qv2ray/issues/57) +5. 修复了在显示部分未完全翻译的文字时出现单词间空格缺失的 bug +6. 修复了上个版本由于使用云翻译引起的托盘图标处出现两个冒号的问题 +7. 修复了在主界面进行添加,重命名,删除连接等复杂列表操作后再选择连接,出现连接的配置与选择配置不一致的 bug +8. 修复了某些极端情况下,在一个连接进行重命名时更换当前连接(即双击其他配置)时出现的重命名失败的 bug +9. 修复了在导入包含特定头部伪装的 vmess:// 字符串时,TCP Header 被错误设置导致 v2ray 无法运行的 bug +10. 修复了某些情况下,国内网站无法被正确分流到直连的 bug +11. 修复了在尝试编辑尚未支持的复杂连接配置时,Qv2ray 闪退的 bug \ No newline at end of file From 7bf5428ef70fd6aeee36747ebd74a33524799068 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Mon, 23 Sep 2019 22:23:43 +0800 Subject: [PATCH 24/29] [fix] Fixed Window Config Migration Bug Former-commit-id: 75e5e1897083e1be8934e462741de99915eb6350 --- src/QvConfigUpgrade.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/QvConfigUpgrade.cpp b/src/QvConfigUpgrade.cpp index e6ea04bc..6b94cd81 100644 --- a/src/QvConfigUpgrade.cpp +++ b/src/QvConfigUpgrade.cpp @@ -34,6 +34,10 @@ namespace Qv2ray // We also need v2ctl auto v2CtlFilePath = QFileInfo(vCoreFilePath).dir().path() + "/v2ctl"; auto v2CtlDestPath = QFileInfo(vCoreDestPath).dir().path() + "/v2ctl"; +#ifdef __WIN32 + v2CtlFilePath = v2CtlFilePath.append(".exe"); + v2CtlDestPath = v2CtlDestPath.append(".exe"); +#endif QFile::copy(vCoreFilePath, vCoreDestPath); QFile::copy(v2CtlFilePath, v2CtlDestPath); root.remove("v2CorePath"); From 4360be063324334c02ada44c9a11427ffcc9dca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E9=9B=A8=E5=AF=92=20ArielAxionL?= Date: Tue, 24 Sep 2019 01:03:05 +0800 Subject: [PATCH 25/29] Update README.md Add qv2ray-dev-git for the developer. Former-commit-id: b1e3607ae654154cce9108943c16d29841e6057a --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fd5e09d8..f74ed028 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Himeki.net 的 Jenkins 编译服务器提供 `master` `dev` 和 `version-v1` 分 ### Linux & MacOS - 对于 MacOS,需要额外使用 HomeBrew 安装 Qt 并正确设定 $PATH 环境变量,或者使用 Qt 官方包 (包含 QtCreator) -- 对于 Linux,请根据不同发行版安装对应的 Qt 开发包 +- 对于 Linux,请根据不同发行版安装对应的 Qt 开发包 (对于 Arch Linux 用户也可从 [qv2ray-dev-git](https://aur.archlinux.org/packages/qv2ray-dev-git) 拉取 `dev` 分支并构建) ```bash git clone --recursive https://github.com/lhy0403/Qv2ray && cd Qv2ray @@ -93,7 +93,7 @@ mingw32-make.exe Leroy.H.Y (@lhy0403) ---> Qv2ray Current Maintainer Hork (@aliyuchang33) ---> Hv2ray Initial Idea and Designs SOneWinstone (@SoneWinstone) ---> Hv2ray/Qv2ray HTTP Request Helper - ArielAxionL (@axionl) ---> Qv2ray ArtWork + ArielAxionL (@axionl) ---> Qv2ray ArtWork TheBadGateway (@thebadgateway) ---> Russian Translation ``` @@ -128,4 +128,4 @@ Qv2ray is licensed under [![License: GPL v3](https://img.shields.io/badge/Licens 注意:Qv2ray 仅能用于 Qt/c++/linux/CI/自动化 等相关技术的学习和在法律允许范围内的使用,任何个人或集体不得使用 Qv2ray 进行任何违反相关法律法规的操作。 -启动 Qv2ray 即代表您同意本项目作者不承担任何由于您违反以上准则所带来的任何法律责任。 \ No newline at end of file +启动 Qv2ray 即代表您同意本项目作者不承担任何由于您违反以上准则所带来的任何法律责任。 From afe20c74bdf14b285e31ed206d96a1297f0a7c33 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Tue, 24 Sep 2019 17:48:30 +0800 Subject: [PATCH 26/29] [doc] updated docs Former-commit-id: eccd11bb7248e2f106824e0ef979b0af910460ff --- README.md | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index f74ed028..e9580f49 100644 --- a/README.md +++ b/README.md @@ -12,28 +12,28 @@ Special thanks to: [Hv2ray](https://github.com/aliyuchang33/Hv2ray) by [@aliyuch - **最新 [Release](https://github.com/lhy0403/Qv2ray/releases/latest)** - **AppImage 编译平台: [主分支/Release 版本](https://jenkins.himeki.net/job/Qv2ray-AppImage-master/)** - **Crowdin 翻译平台 (Public Translation Platform): [开始翻译](https://crwd.in/qv2ray)** - - **ArchLinux - AUR: [qv2ray](https://aur.archlinux.org/packages/qv2ray/) 由 [@aliyuchang33](https://github.com/aliyuchang33) 维护** + - **ArchLinux - AUR: [qv2ray](https://aur.archlinux.org/packages/qv2ray/)** ## Jenkins AppImage (Linux) -Himeki.net 的 Jenkins 编译服务器提供 `master` `dev` 和 `version-v1` 分支的 Linux AppImage 版本 +Jenkins 编译服务器提供 `master` `dev` 和 `version-v1` 分支的 Linux AppImage 版本 -- 访问链接: [https://jenkins.himeki.net/](https://jenkins.himeki.net/) -- 提供者 [@aliyuchang33](https://github.com/aliyuchang33) +- 访问链接: [https://jenkins.himeki.net/](https://jenkins.lhy0403.net/) ## Qv2ray 项目状态 -### Linux AppImage +### Jenkins CI -| Master | Development | Versioning - v1 | Pull Requests | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [![Build Status](https://jenkins.himeki.net/job/Qv2ray-AppImage-master/badge/icon)](https://jenkins.himeki.net/job/Qv2ray-AppImage-master/) | [![Build Status](https://jenkins.himeki.net/job/Qv2ray-AppImage-dev/badge/icon)](https://jenkins.himeki.net/job/Qv2ray-AppImage-dev/) | [![Build Status](https://jenkins.himeki.net/job/Qv2ray-AppImage-version-v1/badge/icon)](https://jenkins.himeki.net/job/Qv2ray-AppImage-version-v1/) | [![Build Status](https://jenkins.himeki.net/job/Qv2ray-AppImage-PR/badge/icon)](https://jenkins.himeki.net/job/Qv2ray-AppImage-PR/) | +| | Master | Development | Versioning-V1 | Pull Requests | +| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| Linux AppImage | [![Build Status](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Release/badge/icon)](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Release/) | [![Build Status](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Dev/badge/icon)](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Dev/) | [![Build Status](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Version1/badge/icon)](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-Version1/) | [![Build Status](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-PullRequest/badge/icon)](https://jenkins.lhy0403.top/job/Qv2ray-AppImage-PullRequest/) | +| Windows | [![Build Status](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Release/badge/icon)](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Release/) | [![Build Status](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Dev/badge/icon)](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Dev/) | [![Build Status](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Version1/badge/icon)](https://jenkins.lhy0403.top/job/Qv2ray-Win32-Version1/) | [![Build Status](https://jenkins.lhy0403.top/job/Qv2ray-Win32-PullRequest/badge/icon)](https://jenkins.lhy0403.top/job/Qv2ray-Win32-PullRequest/) | -### 跨平台 CI +### Travis & Appveyor *Travis per machine badge provided by: [badge-matrix](https://github.com/exogen/badge-matrix)* @@ -47,13 +47,17 @@ Himeki.net 的 Jenkins 编译服务器提供 `master` `dev` 和 `version-v1` 分 ## 编译 - - 依赖项:`Qt >= 5.12` `gcc >=8` 或 `MinGW` (Windows) 或 `clang` (MacOS) + - 框架依赖:`Qt >= 5.12` (5.9 可以编译成功但是不建议使用) + - 编译依赖:`gcc >= 8` 或 `MinGW` (Windows) 或 `clang` (MacOS) - 建议使用 QtCreator ### Linux & MacOS -- 对于 MacOS,需要额外使用 HomeBrew 安装 Qt 并正确设定 $PATH 环境变量,或者使用 Qt 官方包 (包含 QtCreator) -- 对于 Linux,请根据不同发行版安装对应的 Qt 开发包 (对于 Arch Linux 用户也可从 [qv2ray-dev-git](https://aur.archlinux.org/packages/qv2ray-dev-git) 拉取 `dev` 分支并构建) +- 对于 MacOS,需要额外使用 HomeBrew 安装 Qt 并正确设定 $PATH 环境变量 + - 或者使用 Qt 官方包和 XCode +- 对于 Linux,请根据不同发行版安装对应的 Qt 开发包 + - Arch Linux 用户也可从 [qv2ray-dev-git](https://aur.archlinux.org/packages/qv2ray-dev-git) 拉取 `dev` 分支并构建 +- 手动构建方法: ```bash git clone --recursive https://github.com/lhy0403/Qv2ray && cd Qv2ray @@ -89,15 +93,13 @@ mingw32-make.exe ## Contributors -``` - Leroy.H.Y (@lhy0403) ---> Qv2ray Current Maintainer - Hork (@aliyuchang33) ---> Hv2ray Initial Idea and Designs - SOneWinstone (@SoneWinstone) ---> Hv2ray/Qv2ray HTTP Request Helper - ArielAxionL (@axionl) ---> Qv2ray ArtWork - TheBadGateway (@thebadgateway) ---> Russian Translation -``` - - +| Name (@GithubAccount) | Contributions | +| ------------------------------------------------------------ | ------------------------------- | +| Leroy.H.Y ([@lhy0403](https://github.com/lhy0403)) | Qv2ray Current Maintainer | +| Hork ([@aliyuchang33](https://github.com/aliyuchang33)) | Hv2ray Initial Idea and Designs | +| SOneWinstone ([@SoneWinstone](https://github.com/SoneWinstone)) | HTTP Request Helper | +| ArielAxionL ([@axionl](https://github.com/axionl)) | Qv2ray Art Work | +| TheBadGateway ([@thebadgateway](https://github.com/thebadgateway)) | Russian Translation | ## License @@ -110,7 +112,7 @@ Qv2ray is licensed under [![License: GPL v3](https://img.shields.io/badge/Licens Copyright (C) 2019 Leroy.H.Y (@lhy0403) ---> Qv2ray Current Maintainer Copyright (C) 2019 Hork (@aliyuchang33) ---> Hv2ray Initial Idea and Designs Copyright (C) 2019 SOneWinstone (@SoneWinstone) ---> Hv2ray/Qv2ray HTTP Request Helper - Copyright (C) 2019 ArielAxionL (@axionl) ---> Qv2ray ArtWork + Copyright (C) 2019 ArielAxionL (@axionl) ---> Qv2ray ArtWork This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by From ee45f406b23ca14c72f46746978145884abbb5c6 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Tue, 24 Sep 2019 18:07:43 +0800 Subject: [PATCH 27/29] [doc] Update docs for version 2.0 Former-commit-id: 11f202c5fbec8decaacc2e6b0bff16b683cbd50f --- docs/FAQ.md | 5 +++- docs/ReleaseNotes/2.0/v2.0.0.0.md | 38 +++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 docs/ReleaseNotes/2.0/v2.0.0.0.md diff --git a/docs/FAQ.md b/docs/FAQ.md index 6ce15ace..5b6b7294 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -5,4 +5,7 @@ 此问题是部分 linux 的 suid 功能受限引起的,具体错误分析可以参考 [#59](https://github.com/lhy0403/Qv2ray/issues/59) - 解决方案:`sudo sysctl fs.suid_dumpable=1` - 此操作不会保存 sysctl 设置,重启之后会失效。如果需要持久性修改此参数,请参考 [这篇blog](http://ssdxiao.github.io/linux/2017/03/20/Sysctl-not-applay-on-boot.html) - + +## 在 Ubuntu 系统下 UI 变得超级丑 + +- 解决方案:运行时添加 `--style fusion` 即可解决问题 \ No newline at end of file diff --git a/docs/ReleaseNotes/2.0/v2.0.0.0.md b/docs/ReleaseNotes/2.0/v2.0.0.0.md new file mode 100644 index 00000000..b7e8ef8e --- /dev/null +++ b/docs/ReleaseNotes/2.0/v2.0.0.0.md @@ -0,0 +1,38 @@ +# Version 2.0 + +Github Release: [TODO]() + +Version 2.0 将会包含以下功能更新 + +### 复杂连接编辑 + +- [ ] 路由添加 +- [ ] 路由编辑 +- [ ] 入站编辑 +- [ ] 增加更多出站编辑选项 +- [ ] 自动启动对应编辑器(简单出站编辑 / 复杂路由编辑) +- [ ] 自动生成 iptables 的 tProxy 命令(应该挺难的) + +- [ ] JSON 编辑器 + + + +### 下载模块 + + - [ ] 自动下载 v2ray core + - [ ] 自动下载更新 + - [ ] 自动安装更新(?) + +### v2ray API + + - [ ] 流量统计 + +### 订阅功能 + + - [ ] 订阅添加 + - [ ] 订阅编辑,删除 + +### 分享功能 + + - [ ] 一键生成 vmess:// + - [ ] 生成二维码 \ No newline at end of file From 8d397bc6c544ed7f65ba07f4b2df74ea51e1b095 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Tue, 24 Sep 2019 18:26:51 +0800 Subject: [PATCH 28/29] [doc] Final update of documents. Former-commit-id: 5afafa437ac2d75f39c48a6b2924d276609f163b --- README.md | 51 ++++++++++++++++++++++++++++----------------------- src/main.cpp | 1 + 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index e9580f49..d1b0fdb7 100644 --- a/README.md +++ b/README.md @@ -4,29 +4,27 @@ 使用 Qt 框架的跨平台 v2ray 客户端. 支持 Windows, Linux, MacOS -支持连接编辑,支持导入配置和 VMess +支持连接编辑,支持导入任意配置和 `vmess://` 分享链接 Special thanks to: [Hv2ray](https://github.com/aliyuchang33/Hv2ray) by [@aliyuchang33](https://github.com/aliyuchang33) - - **项目网站: https://lhy0403.github.io/Qv2ray** - - **最新 [Release](https://github.com/lhy0403/Qv2ray/releases/latest)** - - **AppImage 编译平台: [主分支/Release 版本](https://jenkins.himeki.net/job/Qv2ray-AppImage-master/)** - - **Crowdin 翻译平台 (Public Translation Platform): [开始翻译](https://crwd.in/qv2ray)** - - **ArchLinux - AUR: [qv2ray](https://aur.archlinux.org/packages/qv2ray/)** +## 相关链接: + - **功能介绍: https://lhy0403.github.io/Qv2ray** + - 最新 **[Release 发布版](https://github.com/lhy0403/Qv2ray/releases/latest)** + - Crowdin 翻译平台, Translations are welcome at here: **[Public Translation Platform](https://crwd.in/qv2ray)** + - ArchLinux - AUR: **[qv2ray](https://aur.archlinux.org/packages/qv2ray/)** + - **[qv2ray-dev-git](https://aur.archlinux.org/packages/qv2ray-dev-git)**: `dev` 分支的开发版本,由 **[@axionl](https://github.com/axionl)** 维护 - -## Jenkins AppImage (Linux) - -Jenkins 编译服务器提供 `master` `dev` 和 `version-v1` 分支的 Linux AppImage 版本 - -- 访问链接: [https://jenkins.himeki.net/](https://jenkins.lhy0403.net/) +### 首次使用请查看 ➡ [用户手册](https://lhy0403.github.io/Qv2ray) ## Qv2ray 项目状态 -### Jenkins CI +### Jenkins CI + +- 访问链接: [https://jenkins.lhy0403.top/](https://jenkins.lhy0403.top/) | | Master | Development | Versioning-V1 | Pull Requests | | -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | @@ -44,19 +42,23 @@ Jenkins 编译服务器提供 `master` `dev` 和 `version-v1` 分支的 Linux Ap | [Windows](https://ci.appveyor.com/project/lhy0403/qv2ray) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/master?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/dev?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/dev) | [![Build status](https://ci.appveyor.com/api/projects/status/i1l524ws0hiitpm4/branch/version-v1?svg=true)](https://ci.appveyor.com/project/lhy0403/qv2ray/branch/version-v1) | + ## 编译 +### 依赖环境 + - 框架依赖:`Qt >= 5.12` (5.9 可以编译成功但是不建议使用) - 编译依赖:`gcc >= 8` 或 `MinGW` (Windows) 或 `clang` (MacOS) - - 建议使用 QtCreator + + - 建议使用 QtCreator,以获得最佳编译环境 ### Linux & MacOS - 对于 MacOS,需要额外使用 HomeBrew 安装 Qt 并正确设定 $PATH 环境变量 - 或者使用 Qt 官方包和 XCode - 对于 Linux,请根据不同发行版安装对应的 Qt 开发包 - - Arch Linux 用户也可从 [qv2ray-dev-git](https://aur.archlinux.org/packages/qv2ray-dev-git) 拉取 `dev` 分支并构建 + - Arch Linux 用户也可从 **[qv2ray-dev-git](https://aur.archlinux.org/packages/qv2ray-dev-git)** 拉取 `dev` 分支并构建 - 手动构建方法: ```bash @@ -65,7 +67,6 @@ git clone --recursive https://github.com/lhy0403/Qv2ray && cd Qv2ray # 按需要签出开发分支 # git checkout dev -lrelease ./Qv2ray.pro mkdir build && cd build qmake ../ make @@ -95,11 +96,13 @@ mingw32-make.exe | Name (@GithubAccount) | Contributions | | ------------------------------------------------------------ | ------------------------------- | -| Leroy.H.Y ([@lhy0403](https://github.com/lhy0403)) | Qv2ray Current Maintainer | -| Hork ([@aliyuchang33](https://github.com/aliyuchang33)) | Hv2ray Initial Idea and Designs | -| SOneWinstone ([@SoneWinstone](https://github.com/SoneWinstone)) | HTTP Request Helper | -| ArielAxionL ([@axionl](https://github.com/axionl)) | Qv2ray Art Work | -| TheBadGateway ([@thebadgateway](https://github.com/thebadgateway)) | Russian Translation | +| Leroy.H.Y [@lhy0403](https://github.com/lhy0403) | Qv2ray Current Maintainer | +| Hork [@aliyuchang33](https://github.com/aliyuchang33) | Hv2ray Initial Idea and Designs | +| SOneWinstone [@SoneWinstone](https://github.com/SoneWinstone) | HTTP Request Helper | +| ArielAxionL [@axionl](https://github.com/axionl) | Qv2ray Art Work | +| TheBadGateway [@thebadgateway](https://github.com/thebadgateway) | Russian Translation | + + ## License @@ -128,6 +131,8 @@ Qv2ray is licensed under [![License: GPL v3](https://img.shields.io/badge/Licens along with this program. If not, see . ``` -注意:Qv2ray 仅能用于 Qt/c++/linux/CI/自动化 等相关技术的学习和在法律允许范围内的使用,任何个人或集体不得使用 Qv2ray 进行任何违反相关法律法规的操作。 -启动 Qv2ray 即代表您同意本项目作者不承担任何由于您违反以上准则所带来的任何法律责任。 + +***注意:Qv2ray 仅能用于 Qt/c++/linux/CI/自动化 等相关技术的学习和在法律允许范围内的使用,任何个人或集体不得使用 Qv2ray 进行任何违反相关法律法规的操作。*** + +*启动 Qv2ray 即代表您同意本项目作者不承担任何由于您违反以上准则所带来的任何法律责任。* \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 0ee14cb3..fe9a7ffa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -79,6 +79,7 @@ int main(int argc, char *argv[]) "Hv2ray Initial Idea and Designs Copyright (C) 2019 Hork (@aliyuchang33)\r\n" "Hv2ray/Qv2ray HTTP Request Helper (partial) Copyright 2019 (C) SOneWinstone (@SoneWinstone)\r\n" "Qv2ray ArtWork Done By ArielAxionL (@axionl)\r\n" + "Qv2ray Russian Translations By TheBadGateway (@thebadgateway)\r\n" "\r\n" "Qv2ray " QV2RAY_VERSION_STRING " running on " + QSysInfo::prettyProductName().toStdString() + " " + QSysInfo::currentCpuArchitecture().toStdString() + "\r\n") From 2f93640577185e5ec8095849570e5e3788ab5254 Mon Sep 17 00:00:00 2001 From: "Leroy.H.Y" Date: Tue, 24 Sep 2019 18:52:45 +0800 Subject: [PATCH 29/29] Update README.md Former-commit-id: cf6e0cdcca93ba3de0eba4d4e243966aa034a974 --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d1b0fdb7..8e4647cc 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +***注意:Qv2ray 仅能用于 Qt/c++/linux/CI/自动化 等相关技术的学习和在法律允许范围内的使用,任何个人或集体不得使用 Qv2ray 进行任何违反相关法律法规的操作。*** + +*任何尝试下载或下载 Qv2ray 任意分支或发行版即代表您同意本项目作者不承担任何由于您违反以上准则所带来的任何法律责任。* + # Qv2ray [![Codacy Badge](https://api.codacy.com/project/badge/Grade/a034dd186c36408c92ffb04449fb6996)](https://app.codacy.com/app/lhy0403/Qv2ray?utm_source=github.com&utm_medium=referral&utm_content=lhy0403/Qv2ray&utm_campaign=Badge_Grade_Dashboard) [![HitCount](http://hits.dwyl.io/lhy0403/Qv2ray.svg)](http://hits.dwyl.io/lhy0403/Qv2ray) @@ -130,9 +134,3 @@ Qv2ray is licensed under [![License: GPL v3](https://img.shields.io/badge/Licens You should have received a copy of the GNU General Public License along with this program. If not, see . ``` - - - -***注意:Qv2ray 仅能用于 Qt/c++/linux/CI/自动化 等相关技术的学习和在法律允许范围内的使用,任何个人或集体不得使用 Qv2ray 进行任何违反相关法律法规的操作。*** - -*启动 Qv2ray 即代表您同意本项目作者不承担任何由于您违反以上准则所带来的任何法律责任。* \ No newline at end of file