From 99a6a5fa049ab64b5cb6e7550ba2a059ea48d601 Mon Sep 17 00:00:00 2001 From: Geoffrey Bonneville Date: Mon, 20 Apr 2026 22:00:55 +0200 Subject: [PATCH] feat: update transmission --- example/android/app/build.gradle | 2 +- example/pubspec.lock | 22 ++++++++++---------- example/vcpkg.json | 7 ++----- ios/flutter_libtransmission.podspec | 11 ++++++---- macos/flutter_libtransmission.podspec | 11 ++++++---- src/CMakeLists.txt | 30 +++++++++++++++++---------- src/flutter_libtransmission.cc | 4 ++-- 7 files changed, 49 insertions(+), 38 deletions(-) diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index ec0f4c1..360be49 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -8,7 +8,7 @@ plugins { android { namespace = "com.gray.libtransmission.flutter_libtransmission_example" compileSdk = flutter.compileSdkVersion - ndkVersion = "27.0.12077973" + ndkVersion = "28.2.13676358" compileOptions { sourceCompatibility = JavaVersion.VERSION_11 diff --git a/example/pubspec.lock b/example/pubspec.lock index cace18f..b8a4cbd 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" clock: dependency: transitive description: @@ -149,26 +149,26 @@ packages: dependency: transitive description: name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 url: "https://pub.dev" source: hosted - version: "0.12.17" + version: "0.12.19" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.13.0" meta: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" path: dependency: transitive description: @@ -306,10 +306,10 @@ packages: dependency: transitive description: name: test_api - sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" url: "https://pub.dev" source: hosted - version: "0.7.6" + version: "0.7.10" vector_math: dependency: transitive description: @@ -343,5 +343,5 @@ packages: source: hosted version: "1.1.0" sdks: - dart: ">=3.8.0-0 <4.0.0" + dart: ">=3.9.0-0 <4.0.0" flutter: ">=3.24.0" diff --git a/example/vcpkg.json b/example/vcpkg.json index 8c50e04..dba28f6 100644 --- a/example/vcpkg.json +++ b/example/vcpkg.json @@ -1,6 +1,3 @@ { - "dependencies": [ - "curl", - "openssl" - ] -} \ No newline at end of file + "dependencies": ["curl", "openssl"] +} diff --git a/ios/flutter_libtransmission.podspec b/ios/flutter_libtransmission.podspec index 825113d..e5495de 100644 --- a/ios/flutter_libtransmission.podspec +++ b/ios/flutter_libtransmission.podspec @@ -26,7 +26,7 @@ A new Flutter FFI plugin project. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386', 'HEADER_SEARCH_PATHS' => '${PODS_TARGET_SRCROOT}/Classes' } s.swift_version = '5.0' - s.compiler_flags = '-std=c++17' + s.compiler_flags = '-std=c++20' s.prepare_command = <<-CMD mkdir -p ./lib @@ -50,23 +50,26 @@ A new Flutter FFI plugin project. cd ../src mkdir -p ../ios/build mkdir -p ../ios/Classes/libtransmission + mkdir -p ../ios/Classes/fmt cmake -B ../ios/build -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_TOOLCHAIN_FILE="$(pwd)/ios.toolchain.cmake" cmake --build ../ios/build cp -r ../ios/build/transmission-prefix/src/transmission/libtransmission/*.h ../ios/Classes/libtransmission/ + cp -r ../ios/build/transmission-prefix/src/transmission/third-party/fmt/include/fmt/*.h ../ios/Classes/fmt/ cp ../ios/build/transmission-prefix/src/transmission-build/libtransmission/libtransmission.a ../ios/lib/ - cp ../ios/build/transmission-prefix/src/transmission-build/third-party/crc32c.bld/pfx/lib/libcrc32c.a ../ios/lib/ cp ../ios/build/transmission-prefix/src/transmission-build/third-party/dht.bld/pfx/lib/libdht.a ../ios/lib/ cp ../ios/build/transmission-prefix/src/transmission-build/third-party/libb64.bld/src/libb64.a ../ios/lib/ cp ../ios/build/transmission-prefix/src/transmission-build/third-party/libdeflate.bld/pfx/lib/libdeflate.a ../ios/lib/ - cp ../ios/build/transmission-prefix/src/transmission-build/third-party/libevent.bld/pfx/lib/libevent.a ../ios/lib/ + cp ../ios/build/transmission-prefix/src/transmission-build/third-party/libevent.bld/lib/libevent_core.a ../ios/lib/ + cp ../ios/build/transmission-prefix/src/transmission-build/third-party/libevent.bld/lib/libevent_extra.a ../ios/lib/ cp ../ios/build/transmission-prefix/src/transmission-build/third-party/libnatpmp.bld/pfx/lib/libnatpmp.a ../ios/lib/ cp ../ios/build/transmission-prefix/src/transmission-build/third-party/libpsl.bld/pfx/lib/libpsl.a ../ios/lib/ cp ../ios/build/transmission-prefix/src/transmission-build/third-party/libutp.bld/libutp.a ../ios/lib/ cp ../ios/build/transmission-prefix/src/transmission-build/third-party/miniupnp/miniupnpc.bld/pfx/lib/libminiupnpc.a ../ios/lib/ cp ../ios/build/transmission-prefix/src/transmission-build/third-party/wildmat/libwildmat.a ../ios/lib/ + cp ../ios/build/transmission-prefix/src/transmission-build/third-party/madler-crcany/libMadlerCrcany.a ../ios/lib/ CMD - s.vendored_libraries = 'lib/libtransmission.a', 'lib/libcrc32c.a', 'lib/libdht.a', 'lib/libb64.a', 'lib/libdeflate.a', 'lib/libevent.a', 'lib/libnatpmp.a', 'lib/libpsl.a', 'lib/libutp.a', 'lib/libminiupnpc.a', 'lib/libwildmat.a', 'lib/libz.a', 'lib/libcrypto.a', 'lib/libssl.a', 'lib/libcurl.a' + s.vendored_libraries = 'lib/libtransmission.a', 'lib/libdht.a', 'lib/libb64.a', 'lib/libdeflate.a', 'lib/libevent_core.a', 'lib/libevent_extra.a', 'lib/libnatpmp.a', 'lib/libpsl.a', 'lib/libutp.a', 'lib/libminiupnpc.a', 'lib/libwildmat.a', 'lib/libMadlerCrcany.a', 'lib/libz.a', 'lib/libcrypto.a', 'lib/libssl.a', 'lib/libcurl.a' s.frameworks = 'SystemConfiguration', 'Foundation', 'Security' end diff --git a/macos/flutter_libtransmission.podspec b/macos/flutter_libtransmission.podspec index 6d00abe..88b329e 100644 --- a/macos/flutter_libtransmission.podspec +++ b/macos/flutter_libtransmission.podspec @@ -25,7 +25,7 @@ A new Flutter FFI plugin project. s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'HEADER_SEARCH_PATHS' => '${PODS_TARGET_SRCROOT}/Classes' } s.swift_version = '5.0' - s.compiler_flags = '-std=c++17' + s.compiler_flags = '-std=c++20' s.prepare_command = <<-CMD ${VCPKG_ROOT}/vcpkg install --triplet=x64-osx openssl curl @@ -38,23 +38,26 @@ A new Flutter FFI plugin project. cd ../src mkdir -p ../macos/build mkdir -p ../macos/Classes/libtransmission + mkdir -p ../macos/Classes/fmt cmake -B ../macos/build -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_OSX_ARCHITECTURES='x86_64;arm64' -DCMAKE_TOOLCHAIN_FILE="$(pwd)/macos.toolchain.cmake" cmake --build ../macos/build cp -r ../macos/build/transmission-prefix/src/transmission/libtransmission/*.h ../macos/Classes/libtransmission + cp -r ../macos/build/transmission-prefix/src/transmission/third-party/fmt/include/fmt/*.h ../macos/Classes/fmt/ cp ../macos/build/transmission-prefix/src/transmission-build/libtransmission/libtransmission.a ../macos/lib/ - cp ../macos/build/transmission-prefix/src/transmission-build/third-party/crc32c.bld/pfx/lib/libcrc32c.a ../macos/lib/ cp ../macos/build/transmission-prefix/src/transmission-build/third-party/dht.bld/pfx/lib/libdht.a ../macos/lib/ cp ../macos/build/transmission-prefix/src/transmission-build/third-party/libb64.bld/src/libb64.a ../macos/lib/ cp ../macos/build/transmission-prefix/src/transmission-build/third-party/libdeflate.bld/pfx/lib/libdeflate.a ../macos/lib/ - cp ../macos/build/transmission-prefix/src/transmission-build/third-party/libevent.bld/pfx/lib/libevent.a ../macos/lib/ + cp ../macos/build/transmission-prefix/src/transmission-build/third-party/libevent.bld/lib/libevent_core.a ../macos/lib/ + cp ../macos/build/transmission-prefix/src/transmission-build/third-party/libevent.bld/lib/libevent_extra.a ../macos/lib/ cp ../macos/build/transmission-prefix/src/transmission-build/third-party/libnatpmp.bld/pfx/lib/libnatpmp.a ../macos/lib/ cp ../macos/build/transmission-prefix/src/transmission-build/third-party/libpsl.bld/pfx/lib/libpsl.a ../macos/lib/ cp ../macos/build/transmission-prefix/src/transmission-build/third-party/libutp.bld/libutp.a ../macos/lib/ cp ../macos/build/transmission-prefix/src/transmission-build/third-party/miniupnp/miniupnpc.bld/pfx/lib/libminiupnpc.a ../macos/lib/ cp ../macos/build/transmission-prefix/src/transmission-build/third-party/wildmat/libwildmat.a ../macos/lib/ + cp ../macos/build/transmission-prefix/src/transmission-build/third-party/madler-crcany/libMadlerCrcany.a ../macos/lib/ CMD - s.vendored_libraries = 'lib/libtransmission.a', 'lib/libcrc32c.a', 'lib/libdht.a', 'lib/libb64.a', 'lib/libdeflate.a', 'lib/libevent.a', 'lib/libnatpmp.a', 'lib/libpsl.a', 'lib/libutp.a', 'lib/libminiupnpc.a', 'lib/libwildmat.a', 'lib/libz.a', 'lib/libcrypto.a', 'lib/libssl.a', 'lib/libcurl.a', + s.vendored_libraries = 'lib/libtransmission.a', 'lib/libdht.a', 'lib/libb64.a', 'lib/libdeflate.a', 'lib/libevent_core.a', 'lib/libevent_extra.a', 'lib/libnatpmp.a', 'lib/libpsl.a', 'lib/libutp.a', 'lib/libminiupnpc.a', 'lib/libwildmat.a', 'lib/libMadlerCrcany.a', 'lib/libz.a', 'lib/libcrypto.a', 'lib/libssl.a', 'lib/libcurl.a', s.frameworks = 'SystemConfiguration', 'Foundation', 'Security' end diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ca2bff0..f399552 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,7 +9,7 @@ include(ExternalProject) project(flutter_libtransmission_library VERSION 0.0.1 LANGUAGES CXX) set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) # On Windows, build will probably fail due to https://gitlab.kitware.com/cmake/cmake/-/issues/25936 # Set a custom TRANSMISSION_PREFIX env var to avoid this @@ -24,11 +24,12 @@ SET(TRANSMISSION_BUILD_DIR "${TRANSMISSION_PREFIX}/src/transmission-build") if(LINUX OR ANDROID OR APPLE) SET(LIBS ${TRANSMISSION_BUILD_DIR}/libtransmission/libtransmission.a - ${TRANSMISSION_BUILD_DIR}/third-party/crc32c.bld/pfx/lib/libcrc32c.a + ${TRANSMISSION_BUILD_DIR}/third-party/madler-crcany/libMadlerCrcany.a ${TRANSMISSION_BUILD_DIR}/third-party/dht.bld/pfx/lib/libdht.a ${TRANSMISSION_BUILD_DIR}/third-party/libb64.bld/src/libb64.a ${TRANSMISSION_BUILD_DIR}/third-party/libdeflate.bld/pfx/lib/libdeflate.a - ${TRANSMISSION_BUILD_DIR}/third-party/libevent.bld/pfx/lib/libevent.a + ${TRANSMISSION_BUILD_DIR}/third-party/libevent.bld/lib/libevent_core.a + ${TRANSMISSION_BUILD_DIR}/third-party/libevent.bld/lib/libevent_extra.a ${TRANSMISSION_BUILD_DIR}/third-party/libnatpmp.bld/pfx/lib/libnatpmp.a ${TRANSMISSION_BUILD_DIR}/third-party/libpsl.bld/pfx/lib/libpsl.a ${TRANSMISSION_BUILD_DIR}/third-party/libutp.bld/libutp.a @@ -38,11 +39,12 @@ if(LINUX OR ANDROID OR APPLE) elseif(WIN32) SET(LIBS ${TRANSMISSION_BUILD_DIR}/libtransmission/$/transmission.lib - ${TRANSMISSION_BUILD_DIR}/third-party/crc32c.bld/pfx/lib/crc32c.lib + ${TRANSMISSION_BUILD_DIR}/third-party/madler-crcany/$/MadlerCrcany.lib ${TRANSMISSION_BUILD_DIR}/third-party/dht.bld/pfx/lib/dht.lib ${TRANSMISSION_BUILD_DIR}/third-party/libb64.bld/src/$/b64.lib ${TRANSMISSION_BUILD_DIR}/third-party/libdeflate.bld/pfx/lib/deflatestatic.lib - ${TRANSMISSION_BUILD_DIR}/third-party/libevent.bld/pfx/lib/event.lib + ${TRANSMISSION_BUILD_DIR}/third-party/libevent.bld/lib/$/event_core.lib + ${TRANSMISSION_BUILD_DIR}/third-party/libevent.bld/lib/$/event_extra.lib ${TRANSMISSION_BUILD_DIR}/third-party/libnatpmp.bld/pfx/lib/natpmp.lib ${TRANSMISSION_BUILD_DIR}/third-party/libpsl.bld/pfx/lib/psl.lib ${TRANSMISSION_BUILD_DIR}/third-party/libutp.bld/$/utp.lib @@ -93,7 +95,7 @@ endif() ExternalProject_Add(transmission PREFIX ${TRANSMISSION_PREFIX} GIT_REPOSITORY https://github.com/G-Ray/transmission.git - GIT_TAG 51b63f6c3e877e0163d8886a6d796161ad5bf636 # main-pikatorrent + GIT_TAG c3ff17924bf623d2434dea585f5d0943809964ec # main-pikatorrent INSTALL_COMMAND "" CMAKE_ARGS ${CMAKE_ARGS} @@ -117,15 +119,12 @@ ExternalProject_Add(transmission "-DUSE_SYSTEM_EVENT2=OFF" "-DUSE_SYSTEM_DEFLATE=OFF" "-DUSE_SYSTEM_DHT=OFF" - # "-DUSE_SYSTEM_FAST_FLOAT=OFF" - # "-DUSE_SYSTEM_FMT=OFF" + "-DUSE_SYSTEM_FMT=OFF" "-DUSE_SYSTEM_MINIUPNPC=OFF" "-DUSE_SYSTEM_NATPMP=OFF" "-DUSE_SYSTEM_UTP=OFF" "-DUSE_SYSTEM_B64=OFF" "-DUSE_SYSTEM_PSL=OFF" - # "-DUSE_SYSTEM_RAPIDJSON=OFF" - # "-DUSE_SYSTEM_UTF8CPP=OFF" "-DRUN_CLANG_TIDY=OFF" BUILD_BYPRODUCTS ${LIBS} @@ -142,6 +141,7 @@ add_dependencies(flutter_libtransmission transmission) ExternalProject_Get_property(transmission SOURCE_DIR) include_directories("${SOURCE_DIR}/") +include_directories("${SOURCE_DIR}/third-party/fmt/include") if(APPLE) if(IOS) @@ -188,7 +188,15 @@ set_target_properties(flutter_libtransmission PROPERTIES target_compile_definitions(flutter_libtransmission PUBLIC DART_SHARED_LIB) +if (WIN32) + # Prevent windows.h from defining min/max macros that conflict with + # std::numeric_limits::max() used in libtransmission headers. + target_compile_definitions(flutter_libtransmission PRIVATE NOMINMAX) + # fmt requires /utf-8 to compile with MSVC. + target_compile_options(flutter_libtransmission PRIVATE /utf-8) +endif() + if (ANDROID) - # Support Android 15 16k page size. + # Support Android 15 16k page size, and deterministic builds target_link_options(flutter_libtransmission PRIVATE "-Wl,-z,max-page-size=16384,--build-id=none,--hash-style=gnu") endif() diff --git a/src/flutter_libtransmission.cc b/src/flutter_libtransmission.cc index 9d08549..b225cc1 100644 --- a/src/flutter_libtransmission.cc +++ b/src/flutter_libtransmission.cc @@ -23,7 +23,7 @@ std::string configDir; static void execute_request(callback_struct &cs) { - tr_rpc_request_exec(session, cs.request, [&cs](tr_session* session, tr_variant&& resp) { + tr_rpc_request_exec(session, cs.request, [&cs](tr_variant&& resp) { cs.promise.set_value(tr_variant_serde::json().compact().to_string(resp)); }); } @@ -59,7 +59,7 @@ FFI_PLUGIN_EXPORT char *request(char *json_string) { thread.join(); char *response = new char[value.length() + 1]; - std::strcpy(response, value.c_str()); + std::memcpy(response, value.c_str(), value.length() + 1); return response; }