From 9c0816c71af858c3d58173bbedcfd14a2847eb59 Mon Sep 17 00:00:00 2001 From: arm64v8a <48624112+arm64v8a@users.noreply.github.com> Date: Fri, 2 Dec 2022 15:23:11 +0900 Subject: [PATCH] bug fix --- CMakeLists.txt | 63 +++++++++++++++++++++------------ cmake/nkr.cmake | 6 ++++ examples/docs/Build_Linux.md | 7 ++-- examples/docs/Build_Windows.md | 2 +- go/cmd/nekobox_core/grpc_box.go | 11 ++++++ go/cmd/nekoray_core/grpc_ray.go | 11 ++++++ go/pkg/neko_common/common.go | 22 +++++++++++- rpc/gRPC.h | 4 --- sub/GroupUpdater.cpp | 6 ++-- ui/mainwindow.cpp | 7 ++-- 10 files changed, 102 insertions(+), 37 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1aa8c34..4e3e4e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,6 @@ if (WIN32) endif () # Find Qt - if (NOT QT_VERSION_MAJOR) set(QT_VERSION_MAJOR 5) endif () @@ -30,15 +29,11 @@ if (NKR_CROSS) set_property(TARGET Qt5::lupdate PROPERTY IMPORTED_LOCATION /usr/bin/lupdate) endif () -if (NKR_PACKAGE OR NKR_PACKAGE_MACOS) - message("[add_compile_definitions] NKR_CPP_USE_APPDATA") - add_compile_definitions(NKR_CPP_USE_APPDATA) -endif () - # Windows include("cmake/fuck_windows/fuck.cmake") -# default prefix path +#### default prefix path #### + if (NKR_PACKAGE) list(APPEND NKR_LIBS ${CMAKE_SOURCE_DIR}/libs/deps/package) else () @@ -56,39 +51,63 @@ message("[CMAKE_PREFIX_PATH] ${CMAKE_PREFIX_PATH}") list(APPEND CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH}) message("[CMAKE_FIND_ROOT_PATH] ${CMAKE_FIND_ROOT_PATH}") -# NKR +#### NKR #### + include("cmake/print.cmake") include("cmake/nkr.cmake") find_package(Threads) -if (NKR_NO_EXTERNAL) - add_compile_definitions(NKR_NO_EXTERNAL) -else () - if (NKR_NO_GRPC) - add_compile_definitions(NKR_NO_GRPC) - else () - # My proto - include("cmake/myproto.cmake") - list(APPEND NKR_EXTERNAL_TARGETS myproto) - endif () +if (NKR_PACKAGE OR NKR_PACKAGE_MACOS) + nkr_add_compile_definitions(NKR_CPP_USE_APPDATA) +endif () - # yaml-cpp (static) +#### NKR EXTERNAL #### + +if (NKR_NO_EXTERNAL) + set(NKR_NO_GRPC 1) + set(NKR_NO_YAML 1) + set(NKR_NO_ZXING 1) + set(NKR_NO_QHOTKEY 1) +endif () + +# grpc +if (NKR_NO_GRPC) + nkr_add_compile_definitions(NKR_NO_GRPC) +else () + # My proto + include("cmake/myproto.cmake") + list(APPEND NKR_EXTERNAL_TARGETS myproto) +endif () + +# yaml-cpp +if (NKR_NO_YAML) + nkr_add_compile_definitions(NKR_NO_YAML) +else () find_package(yaml-cpp CONFIG REQUIRED) # only Release is built list(APPEND NKR_EXTERNAL_TARGETS yaml-cpp) +endif () - # zxing-cpp +# zxing-cpp +if (NKR_NO_ZXING) + nkr_add_compile_definitions(NKR_NO_ZXING) +else () find_package(ZXing CONFIG REQUIRED) list(APPEND NKR_EXTERNAL_TARGETS ZXing::ZXing) +endif () - # QHotkey (static submodule) +# QHotkey (static submodule) +if (NKR_NO_QHOTKEY) + nkr_add_compile_definitions(NKR_NO_QHOTKEY) +else () set(QHOTKEY_INSTALL OFF) set(BUILD_SHARED_LIBS OFF) add_subdirectory(3rdparty/QHotkey) list(APPEND NKR_EXTERNAL_TARGETS qhotkey) endif () -# debug print +#### debug print #### + if (DBG_CMAKE) print_all_variables() print_target_properties(myproto) diff --git a/cmake/nkr.cmake b/cmake/nkr.cmake index 2a9ff38..ac501ab 100644 --- a/cmake/nkr.cmake +++ b/cmake/nkr.cmake @@ -4,3 +4,9 @@ add_compile_definitions(NKR_VERSION=\"${NKR_VERSION}\") # Debug set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DNKR_CPP_DEBUG") + +# Func +function(nkr_add_compile_definitions arg) + message("[add_compile_definitions] ${ARGV}") + add_compile_definitions(${ARGV}) +endfunction() diff --git a/examples/docs/Build_Linux.md b/examples/docs/Build_Linux.md index 8fe5512..a3166c7 100644 --- a/examples/docs/Build_Linux.md +++ b/examples/docs/Build_Linux.md @@ -33,10 +33,11 @@ ninja | CMake 参数 | 默认值 | 含义 | |------------------|-----|-------------------------| | QT_VERSION_MAJOR | 5 | QT版本 | -| NKR_NO_EXTERNAL | | 不包含外部C++依赖(如ZXing/gRPC) | +| NKR_NO_EXTERNAL | | 不包含外部C++依赖(以下所有) | +| NKR_NO_YAML | | 不包含yaml-cpp | +| NKR_NO_QHOTKEY | | 不包含qhotkey | +| NKR_NO_ZXING | | 不包含zxing | | NKR_NO_GRPC | | 不包含gRPC | -| NKR_CROSS | | | -| NKR_PACKAGE | | 打包 | #### C++ 部分 diff --git a/examples/docs/Build_Windows.md b/examples/docs/Build_Windows.md index b15ac37..22ae6bf 100644 --- a/examples/docs/Build_Windows.md +++ b/examples/docs/Build_Windows.md @@ -16,7 +16,7 @@ git clone https://github.com/MatsuriDayo/nekoray.git --recursive ### 下载 Qt SDK -目前使用的版本是 Qt 5.15.2 其他版本未测试 +目前使用的版本是 Qt 5.15.7 其他版本未测试 在此下载 `qtbase` `qtsvg` `qttools` 的包并解压到同一个目录。 diff --git a/go/cmd/nekobox_core/grpc_box.go b/go/cmd/nekobox_core/grpc_box.go index c17131a..e4718a6 100644 --- a/go/cmd/nekobox_core/grpc_box.go +++ b/go/cmd/nekobox_core/grpc_box.go @@ -12,6 +12,7 @@ import ( "neko/pkg/speedtest" "nekobox_core/box_main" "reflect" + "time" "unsafe" box "github.com/sagernet/sing-box" @@ -38,6 +39,16 @@ func (s *server) Start(ctx context.Context, in *gen.LoadConfigReq) (out *gen.Err log.Println("Start:", in.CoreConfig) } + if neko_common.GetBuildTime() > 0 { + if time.Now().Unix() >= neko_common.GetExpireTime() { + err = errors.New("Your version is too old! Please update!! 版本太旧,请升级!") + return + } else if time.Now().Unix() >= (neko_common.GetExpireTime() - 30*24*60*60) { + log.Println("Your version is too old! Please update!! 版本太旧,请升级!") + log.Println("This version expires on " + time.Unix(neko_common.GetExpireTime(), 0).Format("2006-01-02")) + } + } + if instance != nil { err = errors.New("instance already started") return diff --git a/go/cmd/nekoray_core/grpc_ray.go b/go/cmd/nekoray_core/grpc_ray.go index 1cd12ca..0de35f9 100644 --- a/go/cmd/nekoray_core/grpc_ray.go +++ b/go/cmd/nekoray_core/grpc_ray.go @@ -8,6 +8,7 @@ import ( "io" "libcore" "libcore/stun" + "log" "neko/gen" "neko/pkg/grpc_server" "neko/pkg/neko_common" @@ -38,6 +39,16 @@ func (s *server) Start(ctx context.Context, in *gen.LoadConfigReq) (out *gen.Err logrus.Println("Start:", in.CoreConfig, in.TryDomains) } + if neko_common.GetBuildTime() > 0 { + if time.Now().Unix() >= neko_common.GetExpireTime() { + err = errors.New("Your version is too old! Please update!! 版本太旧,请升级!") + return + } else if time.Now().Unix() >= (neko_common.GetExpireTime() - 30*24*60*60) { + log.Println("Your version is too old! Please update!! 版本太旧,请升级!") + log.Println("This version expires on " + time.Unix(neko_common.GetExpireTime(), 0).Format("2006-01-02")) + } + } + if instance != nil { err = errors.New("instance already started") return diff --git a/go/pkg/neko_common/common.go b/go/pkg/neko_common/common.go index 9a0e809..e6cdebf 100644 --- a/go/pkg/neko_common/common.go +++ b/go/pkg/neko_common/common.go @@ -1,6 +1,10 @@ package neko_common -import "net/http" +import ( + "net/http" + "strings" + "time" +) var Version_v2ray string = "N/A" var Version_neko string = "N/A" @@ -16,3 +20,19 @@ const ( ) var GetProxyHttpClient func() *http.Client + +func GetBuildTime() int64 { + if !strings.HasPrefix(Version_neko, "nekoray-") { + return 0 + } + ver := strings.TrimLeft(Version_neko, "nekoray-") + buildDate := ver[strings.Index(ver, "-")+1:] + buildTime, _ := time.Parse("2006-01-02", buildDate) + return buildTime.Unix() +} + +func GetExpireTime() int64 { + buildTime := time.Unix(GetBuildTime(), 0) + expireTime := buildTime.AddDate(0, 6, 0) // current force update: 6 months + return expireTime.Unix() +} diff --git a/rpc/gRPC.h b/rpc/gRPC.h index 4d15c1f..e3443d6 100644 --- a/rpc/gRPC.h +++ b/rpc/gRPC.h @@ -1,9 +1,5 @@ #pragma once -#ifdef NKR_NO_EXTERNAL -#define NKR_NO_GRPC -#endif - #ifndef NKR_NO_GRPC #include "go/gen/libcore.pb.h" diff --git a/sub/GroupUpdater.cpp b/sub/GroupUpdater.cpp index c0ca5b9..00168c1 100644 --- a/sub/GroupUpdater.cpp +++ b/sub/GroupUpdater.cpp @@ -10,7 +10,7 @@ #include #include -#ifndef NKR_NO_EXTERNAL +#ifndef NKR_NO_YAML #include @@ -164,7 +164,7 @@ namespace NekoRay::sub { update_counter++; } -#ifndef NKR_NO_EXTERNAL +#ifndef NKR_NO_YAML QString Node2QString(const YAML::Node &n, const QString &def = "") { try { @@ -203,7 +203,7 @@ namespace NekoRay::sub { // https://github.com/Dreamacro/clash/wiki/configuration void RawUpdater::updateClash(const QString &str) { -#ifndef NKR_NO_EXTERNAL +#ifndef NKR_NO_YAML try { auto proxies = YAML::Load(str.toStdString())["proxies"]; for (auto proxy: proxies) { diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index c9917e5..3967059 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -21,7 +21,7 @@ #include "qv2ray/v2/components/proxy/QvProxyConfigurator.hpp" #include "qv2ray/v2/ui/LogHighlighter.hpp" -#ifndef NKR_NO_EXTERNAL +#ifndef NKR_NO_ZXING #include "3rdparty/ZxingQtReader.hpp" #endif @@ -766,6 +766,7 @@ void MainWindow::refresh_proxy_list_impl(const int &id, NekoRay::GroupSortAction case NekoRay::GroupSortMethod::ById: { // Clear Order ui->proxyListTable->order.clear(); + ui->proxyListTable->callback_save_order(); break; } case NekoRay::GroupSortMethod::ByAddress: @@ -1101,7 +1102,7 @@ void MainWindow::display_qr_link(bool nkrFormat) { } void MainWindow::on_menu_scan_qr_triggered() { -#ifndef NKR_NO_EXTERNAL +#ifndef NKR_NO_ZXING using namespace ZXingQt; hide(); @@ -1387,7 +1388,7 @@ void MainWindow::refresh_connection_list(const QJsonArray &arr) { // Hotkey -#ifndef NKR_NO_EXTERNAL +#ifndef NKR_NO_QHOTKEY #include