From 45292b0a83e522e8c8c3e4f07d300a4bdade9cd9 Mon Sep 17 00:00:00 2001 From: ArThirtyFour <149522975+ArThirtyFour@users.noreply.github.com> Date: Mon, 25 May 2026 23:43:19 +0300 Subject: [PATCH 1/4] Fix Builds for Windows --- README.md | 16 ++++++++++++++++ lib/utils/client_manager.dart | 9 +++++++++ windows/CMakeLists.txt | 12 +++++++++++- windows/runner/resources/app_icon.ico | Bin 12383 -> 302430 bytes 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f74733dce..4b89617cc 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,22 @@ matrix: Platform-specific build scripts are available in the `scripts/` directory: - `./scripts/build-appimage.sh` - AppImage (Linux) - `./scripts/build-linux.sh` - Linux (Run only after build-appimage.sh) +- `.\scripts\build-windows.ps1` - Windows + + +#### Prerequisites +##### Windows + +Before building on Windows, install the following: + +* **[Visual Studio Build Tools 2026](https://visualstudio.microsoft.com/downloads/#visual-studio-2022-tools)** (or newer) with the **"Desktop development with C++"** workload — provides MSVC compiler and Windows SDK. +* **[CMake](https://cmake.org/download/)** +* **[Rust](https://rustup.rs)** (`rustup`) +* **[OpenSSL](https://slproweb.com/products/Win32OpenSSL.html)** +* **[Flutter SDK](https://docs.flutter.dev/get-started/install/windows)** — enable Windows Desktop support: + ```powershell + flutter config --enable-windows-desktop + ``` ## License diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index b7921748c..5b4a981bd 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -176,6 +176,11 @@ abstract class ClientManager { settings: const InitializationSettings( android: AndroidInitializationSettings('notifications_icon'), iOS: DarwinInitializationSettings(), + windows: WindowsInitializationSettings( + appName: 'Extera', + appUserModelId: 'im.extera.app', + guid: 'a8b5c6d7-e8f9-4a0b-b1c2-d3e4f5a6b7c8', + ), ), ); @@ -191,6 +196,10 @@ abstract class ClientManager { priority: Priority.max, ), iOS: DarwinNotificationDetails(sound: 'notification.caf'), + windows: WindowsNotificationDetails( + appName: 'Extera', + appUserModelId: 'im.extera.app', + ), ), ); } diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt index 1c2b99451..9e8be1f65 100644 --- a/windows/CMakeLists.txt +++ b/windows/CMakeLists.txt @@ -30,7 +30,7 @@ set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") # Use Unicode for all projects. -add_definitions(-DUNICODE -D_UNICODE) +add_definitions(-DUNICODE -D_UNICODE -D_SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS) # Compilation settings that should be applied to most targets. # @@ -99,3 +99,13 @@ install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" CONFIGURATIONS Profile;Release COMPONENT Runtime) + +# Ensure libsqlcipher.dll exists alongside sqlite3.dll +install(CODE " + if(EXISTS \"${CMAKE_INSTALL_PREFIX}/sqlite3.dll\") + file(COPY_FILE + \"${CMAKE_INSTALL_PREFIX}/sqlite3.dll\" + \"${CMAKE_INSTALL_PREFIX}/libsqlcipher.dll\" + ) + endif() +" COMPONENT Runtime) diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico index f53c6c0053751707f857edab9188c4dcee4f2275..9f5c075c0b38fdff3cff6c49c14885e8c53e0817 100644 GIT binary patch literal 302430 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 Date: Wed, 27 May 2026 00:14:32 +0300 Subject: [PATCH 2/4] Add some info --- README.md | 9 ++++----- lib/utils/client_manager.dart | 2 -- windows/CMakeLists.txt | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4b89617cc..506fc1b6c 100644 --- a/README.md +++ b/README.md @@ -78,11 +78,10 @@ Before building on Windows, install the following: * **[CMake](https://cmake.org/download/)** * **[Rust](https://rustup.rs)** (`rustup`) * **[OpenSSL](https://slproweb.com/products/Win32OpenSSL.html)** -* **[Flutter SDK](https://docs.flutter.dev/get-started/install/windows)** — enable Windows Desktop support: - ```powershell - flutter config --enable-windows-desktop - ``` - +* **[Flutter SDK](https://docs.flutter.dev/get-started/install/windows)** +> [!IMPORTANT] +> +- APT (Debian based) ## License This project is licensed under the [AGPL-3.0 License](LICENSE). See the LICENSE file for details. diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index 5b4a981bd..287b71045 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -197,8 +197,6 @@ abstract class ClientManager { ), iOS: DarwinNotificationDetails(sound: 'notification.caf'), windows: WindowsNotificationDetails( - appName: 'Extera', - appUserModelId: 'im.extera.app', ), ), ); diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt index 9e8be1f65..66cf062fa 100644 --- a/windows/CMakeLists.txt +++ b/windows/CMakeLists.txt @@ -4,7 +4,7 @@ project(fluffychat LANGUAGES CXX) # The name of the executable created for the application. Change this to change # the on-disk name of your application. -set(BINARY_NAME "fluffychat") +set(BINARY_NAME "extera") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. From 744c02e304ede108571e82ee509054f11cf2dabe Mon Sep 17 00:00:00 2001 From: ArThirtyFour Date: Wed, 27 May 2026 00:15:38 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=B1=D0=BB=D1=8F=D1=82=D1=8C=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B1=D1=8B=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 506fc1b6c..3d1eef1f5 100644 --- a/README.md +++ b/README.md @@ -80,8 +80,8 @@ Before building on Windows, install the following: * **[OpenSSL](https://slproweb.com/products/Win32OpenSSL.html)** * **[Flutter SDK](https://docs.flutter.dev/get-started/install/windows)** > [!IMPORTANT] -> -- APT (Debian based) +> You must run build as admin and without VPN in Russia you can't build because one is libs can't be download + ## License This project is licensed under the [AGPL-3.0 License](LICENSE). See the LICENSE file for details. From 2e18ffa75bfaebf0a562cb4a636fb4ab1a2db4d2 Mon Sep 17 00:00:00 2001 From: ArThirtyFour Date: Wed, 27 May 2026 01:02:53 +0300 Subject: [PATCH 4/4] Some opmtimize some momento --- windows/CMakeLists.txt | 1 + windows/runner/CMakeLists.txt | 7 +++++++ windows/runner/Runner.rc | 10 +++++----- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt index 66cf062fa..0a9d45b2d 100644 --- a/windows/CMakeLists.txt +++ b/windows/CMakeLists.txt @@ -109,3 +109,4 @@ install(CODE " ) endif() " COMPONENT Runtime) +target_compile_options(${BINARY_NAME} PRIVATE /W0) \ No newline at end of file diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt index b9e550fba..17411a8ab 100644 --- a/windows/runner/CMakeLists.txt +++ b/windows/runner/CMakeLists.txt @@ -20,6 +20,13 @@ add_executable(${BINARY_NAME} WIN32 # that need different build settings. apply_standard_settings(${BINARY_NAME}) +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + # Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc index 52aa4877a..c11941c44 100644 --- a/windows/runner/Runner.rc +++ b/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif