diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e656849..3560e54 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,19 +14,20 @@ jobs: uses: actions/checkout@v5 - name: Build run: | - cmake -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build + cmake -S . -B build -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DCMAKE_BUILD_TYPE=RelWithDebInfo cmake --build build --target pkgbuild - name: Archive artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: macOS path: build/*.pkg windows: name: Build on Windows - runs-on: windows-2025 + runs-on: ${{ matrix.platform == 'arm64' && 'windows-11-arm' || 'windows-2025' }} strategy: matrix: vcver: [143] + platform: [x64, arm64] env: VER_SUFFIX: .VS${{ matrix.vcver }} steps: @@ -38,35 +39,31 @@ jobs: uses: actions/cache@v4 with: path: ${{ github.workspace }}/vcpkg_cache - key: vcpkg-${{ matrix.vcver }}-${{ hashFiles('vcpkg.json') }} - - name: Prepare vcpkg - uses: lukka/run-vcpkg@v11 - with: - vcpkgJsonGlob: ./vcpkg.json - runVcpkgInstall: true - env: - VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/vcpkg_cache,readwrite - VCPKG_INSTALLED_DIR: ${{ github.workspace }}/build/vcpkg_installed + key: vcpkg-${{ matrix.vcver }}-${{ matrix.platform }}-${{ hashFiles('vcpkg.json') }} - name: Install Qt uses: jurplel/install-qt-action@v4 with: - version: 6.10.0 - arch: win64_msvc2022_64 + version: 6.10.1 + arch: ${{ matrix.platform == 'arm64' && 'win64_msvc2022_arm64' || 'win64_msvc2022_64' }} + cache: true - name: Setup dev env uses: ilammy/msvc-dev-cmd@v1 with: - arch: x64 + arch: ${{ matrix.platform }} - name: Install WiX run: | dotnet tool install -g wix --version 6.0.2 wix extension -g add WixToolset.UI.wixext/6.0.2 - name: Build + env: + VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/vcpkg_cache,readwrite run: | - cmake -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo ` - -DCMAKE_TOOLCHAIN_FILE=${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake + cmake -A ${{ matrix.platform }} -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo ` + -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake ` + -DVCPKG_TARGET_TRIPLET=${{ matrix.platform }}-windows cmake --build build --target installer - name: Archive artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: - name: msi_${{ matrix.vcver }}_x64 + name: msi_${{ matrix.vcver }}_${{ matrix.platform }} path: build/*.msi diff --git a/Application.cpp b/Application.cpp index 66a4895..33b4dc8 100644 --- a/Application.cpp +++ b/Application.cpp @@ -54,7 +54,6 @@ Application::Application( int &argc, char **argv ) qInstallMessageHandler( msgHandler ); QTranslator *qt = new QTranslator( this ); - QTranslator *common = new QTranslator( this ); QTranslator *t = new QTranslator( this ); QString lang; auto languages = QLocale().uiLanguages().first(); @@ -65,10 +64,8 @@ Application::Application( int &argc, char **argv ) else lang = u"en"_s; void(qt->load(":/qtbase_%1.qm"_L1.arg(lang))); - void(common->load(":/common_%1.qm"_L1.arg(lang))); void(t->load(":/idupdater_%1.qm"_L1.arg(lang))); installTranslator( qt ); - installTranslator( common ); installTranslator( t ); #ifdef NDEBUG setLibraryPaths({ applicationDirPath() }); diff --git a/CMakeLists.txt b/CMakeLists.txt index 3016575..bf7e045 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,7 +149,7 @@ else() set(CONFIG_DIR ${CMAKE_CURRENT_BINARY_DIR}) find_package(OpenSSL 3.0.0 REQUIRED) - find_package(Qt6 6.0.0 REQUIRED COMPONENTS Core Widgets Network LinguistTools) + find_package(Qt6 6.9.0 REQUIRED COMPONENTS Core Widgets Network LinguistTools) add_executable(${PROJECT_NAME} WIN32 ${SOURCES} @@ -173,7 +173,7 @@ else() INTERPROCEDURAL_OPTIMIZATION_DEBUG NO ) target_include_directories(${PROJECT_NAME} PRIVATE common/qtsingleapplication/src) - target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20) + target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_23) target_compile_definitions(${PROJECT_NAME} PRIVATE WIN32_LEAN_AND_MEAN UNICODE @@ -189,6 +189,7 @@ else() common/translations/common_et.ts common/translations/common_ru.ts common/translations/qtbase_et.ts common/translations/qtbase_ru.ts RESOURCE_PREFIX / + LUPDATE_OPTIONS -locations none ) qt_add_resources(${PROJECT_NAME} icon FILES appicon.png) qt_add_resources(${PROJECT_NAME} config BASE ${CONFIG_DIR} PREFIX / FILES @@ -202,8 +203,7 @@ else() get_filename_component(SSL_PATH "${OPENSSL_INCLUDE_DIR}/../bin" ABSOLUTE) endif() set(MSI_FILE "ID-Updater-${VERSION}$ENV{VER_SUFFIX}.$ENV{PLATFORM}") - get_target_property(qtCore_install_prefix Qt6::qmake IMPORTED_LOCATION) - get_filename_component(qtCore_install_prefix ${qtCore_install_prefix} DIRECTORY) + get_filename_component(QT_BASE_DIR "${Qt6_DIR}/../../.." ABSOLUTE) add_custom_target(installer DEPENDS ${PROJECT_NAME} COMMAND wix.exe build -nologo -arch $ENV{PLATFORM} @@ -211,7 +211,7 @@ else() -bv WixUIDialogBmp=${CMAKE_SOURCE_DIR}/common/dlgbmp.bmp -bv WixUIBannerBmp=${CMAKE_SOURCE_DIR}/common/banner.bmp -d appicon=${CMAKE_SOURCE_DIR}/appicon.ico - -d qt_path=${qtCore_install_prefix} + -d qt_path=${QT_BASE_DIR}/bin -d qt_suffix=$<$:d> -d libs_path="${SSL_PATH}" -d updater_path=$ diff --git a/ScheduledUpdateTask.cpp b/ScheduledUpdateTask.cpp index c7b3ebd..d91fb7c 100644 --- a/ScheduledUpdateTask.cpp +++ b/ScheduledUpdateTask.cpp @@ -32,15 +32,13 @@ #endif template -class CPtr +struct CPtr { - T *d; - public: - CPtr(T *p = nullptr): d(p) {} - ~CPtr() { if(d) d->Release(); } - inline T* operator->() const { return d; } - inline operator T*() const { return d; } - inline T** operator&() { return &d; } + T *d{}; + ~CPtr() { if(d) d->Release(); } + inline T* operator->() const { return d; } + inline operator T*() const { return d; } + inline T** operator&() { return &d; } }; class ScheduledUpdateTaskPrivate @@ -79,8 +77,8 @@ bool ScheduledUpdateTask::configure(ScheduledUpdateTask::Interval interval) if( FAILED(d->service->NewTask( 0, &task )) ) return false; - CPtr settings; - if( SUCCEEDED(task->get_Settings( &settings )) ) + if(CPtr settings; + SUCCEEDED(task->get_Settings(&settings))) { settings->put_StartWhenAvailable(VARIANT_TRUE); settings->put_RunOnlyIfNetworkAvailable(VARIANT_TRUE); diff --git a/common b/common index b817135..1c7d527 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit b81713523221e73e1ce4d463a2cf5e460c74cb18 +Subproject commit 1c7d527b5af584b5db4f29dbfc53b3463acb9c4d diff --git a/idupdater.wxs b/idupdater.wxs index 7640465..7d4b052 100644 --- a/idupdater.wxs +++ b/idupdater.wxs @@ -1,7 +1,7 @@ - - - + + + @@ -18,7 +18,7 @@ - @@ -35,7 +35,7 @@ - + @@ -55,21 +55,15 @@ + + - - - - - - - - - - - - - + + + + + diff --git a/idupdater_et.ts b/idupdater_et.ts index 36e6d71..80dc556 100644 --- a/idupdater_et.ts +++ b/idupdater_et.ts @@ -32,6 +32,17 @@ Viga ajakava seadistamisel, palun kontrolli õigusi. Proovi uuesti administraatori õigustega. + + Configuration + + The configuration file located on the server cannot be validated. + Serveris olev konfiguratsioonifail ei valideeru. + + + Your computer's configuration file is later than the server has. + Sinu arvutis on uuem konfiguratsioonifail kui serveris. + + idupdater diff --git a/idupdater_ru.ts b/idupdater_ru.ts index 7648d46..9242935 100644 --- a/idupdater_ru.ts +++ b/idupdater_ru.ts @@ -32,6 +32,17 @@ Не удалось создать "Назначенное задание". Попробуйте повторить в правах администратора. + + Configuration + + The configuration file located on the server cannot be validated. + Находящийся на сервере конфигурационный файл не валидируется. + + + Your computer's configuration file is later than the server has. + Находящийся на Вашем компьютере конфигурационный файл новее файла на сервере. + + idupdater