diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 89e537b..46feed1 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -14,13 +14,6 @@ if (keystorePropertiesFile.exists()) { } } -fun versionCodeOf(versionName: String): Int { - val parts = versionName.split("-", limit = 2) - val (major, minor, patch) = parts[0].split(".").map(String::toInt) - val preRelease = parts.getOrNull(1)?.let { Regex("\\d+").find(it)?.value?.toInt() ?: 0 } ?: 999 - return major * 100_000_000 + minor * 1_000_000 + patch * 10_000 + preRelease -} - android { namespace = "nexus.federated.nexus" compileSdk = 37 @@ -38,7 +31,7 @@ android { minSdk = 29 targetSdk = flutter.targetSdkVersion - versionCode = versionCodeOf(flutter.versionName!!) + versionCode = flutter.versionCode versionName = flutter.versionName multiDexEnabled = true diff --git a/hook/build.dart b/hook/build.dart index 8726642..ca84fda 100644 --- a/hook/build.dart +++ b/hook/build.dart @@ -64,10 +64,14 @@ Future main(List args) => build(args, (input, output) async { final targetNdkApi = codeConfig.android.targetNdkApi; + // Treats empty variables as unset, since e.g. F-Droid sets ANDROID_NDK_HOME to "" without an NDK + String? env(String name) => switch (Platform.environment[name]) { + "" => null, + final value => value, + }; + Future findNdkFromSdk() async { - final androidHome = - Platform.environment["ANDROID_HOME"] ?? - Platform.environment["ANDROID_SDK_ROOT"]; + final androidHome = env("ANDROID_HOME") ?? env("ANDROID_SDK_ROOT"); if (androidHome == null) return null; final ndkDir = Directory(join(androidHome, "ndk")); @@ -78,9 +82,9 @@ Future main(List args) => build(args, (input, output) async { } final ndkHome = - Platform.environment["ANDROID_NDK_HOME"] ?? - Platform.environment["ANDROID_NDK_ROOT"] ?? - Platform.environment["NDK_HOME"] ?? + env("ANDROID_NDK_HOME") ?? + env("ANDROID_NDK_ROOT") ?? + env("NDK_HOME") ?? await findNdkFromSdk(); if (ndkHome == null) { @@ -91,8 +95,7 @@ Future main(List args) => build(args, (input, output) async { // TODO: Someone please give me a way to detect host architecture so I can change this final hostTag = - Platform.environment["ANDROID_HOST_TAG"] ?? - "${Platform.operatingSystem}-x86_64"; + env("ANDROID_HOST_TAG") ?? "${Platform.operatingSystem}-x86_64"; final ccTriple = switch (targetArch) { Architecture.arm64 => "aarch64-linux-android", Architecture.arm => "armv7a-linux-androideabi", diff --git a/lib/controllers/room_chat.dart b/lib/controllers/room_chat.dart index 773f30d..2a53a0d 100644 --- a/lib/controllers/room_chat.dart +++ b/lib/controllers/room_chat.dart @@ -295,6 +295,7 @@ class RoomChatController(final ChatParams info) : null, ), ); + if (!ref.mounted) return; if (response.events.isEmpty) { state = .data(chat); @@ -333,6 +334,7 @@ class RoomChatController(final ChatParams info) : chat!.historicalData!.start, ), ); + if (!ref.mounted) return; ref .read(RoomsController.provider.notifier) @@ -345,6 +347,7 @@ class RoomChatController(final ChatParams info) final rootRowId = direction == .backward ? await threadRootBefore(paginationResponse) : null; + if (!ref.mounted) return; final eventRowIds = [ ?rootRowId, ...(direction == .forward @@ -383,6 +386,7 @@ class RoomChatController(final ChatParams info) ); } } catch (_) { + if (!ref.mounted) return; state = .data(chat); rethrow; } diff --git a/linux/nix/build_env.nix b/linux/nix/build_env.nix index 01b810c..8883959 100644 --- a/linux/nix/build_env.nix +++ b/linux/nix/build_env.nix @@ -5,6 +5,8 @@ with pkgs; [ stdenv.cc + # webcrypto's build hook runs CMake with the Unix Makefiles generator + gnumake go git ffmpeg-headless @@ -20,13 +22,22 @@ ] ++ lib.optionals pkgs.stdenv.isLinux [ wayland - # nativeapi includes XInput2.h, which needs these, but xi.pc only lists them privately - libxext - libxfixes (callPackage ./pkg/hook_pkg_config.nix { }) ]; env = lib.optionalAttrs pkgs.stdenv.isLinux { + # nativeapi includes XInput2.h and GTK's Wayland headers, which need these, but xi.pc and gdk-3.0.pc + # only list them privately, so its hook's pkg-config doesn't return them. Hooks only get NIX_ variables. + "NIX_CFLAGS_COMPILE_${pkgs.stdenv.cc.suffixSalt}" = + lib.concatMapStringsSep " " (pkg: "-isystem ${lib.getDev pkg}/include") + ( + with pkgs; + [ + libxext + libxfixes + wayland + ] + ); # better_player loads libmpv at runtime to play videos LD_LIBRARY_PATH = "./build/native_assets/linux:${ lib.makeLibraryPath [ diff --git a/linux/nix/default.nix b/linux/nix/default.nix index 7e69e46..8f09dbc 100644 --- a/linux/nix/default.nix +++ b/linux/nix/default.nix @@ -65,6 +65,9 @@ apps = let buildEnv = import ./build_env.nix { inherit pkgs lib; }; + testEnv = buildEnv.env // { + DBUS_SESSION_CONFIG = "${pkgs.dbus}/share/dbus-1/session.conf"; + }; e2e = pkgs.writeShellApplication { name = "nexus-e2e"; runtimeInputs = @@ -75,7 +78,7 @@ curl dbus ]); - runtimeEnv = buildEnv.env; + runtimeEnv = testEnv; text = builtins.readFile ./e2e.sh; }; screenshots = pkgs.writeShellApplication { @@ -87,7 +90,7 @@ oxipng pngquant ]); - runtimeEnv = buildEnv.env; + runtimeEnv = testEnv; text = builtins.readFile ./screenshots.sh; }; diff --git a/linux/nix/e2e.sh b/linux/nix/e2e.sh index 6cc9f09..585712b 100755 --- a/linux/nix/e2e.sh +++ b/linux/nix/e2e.sh @@ -69,7 +69,7 @@ for file in "${files[@]}"; do name="$(basename "$file" .dart)" mkdir -p "$work/$name/data" "$work/$name/cache" XDG_DATA_HOME="$work/$name/data" XDG_CACHE_HOME="$work/$name/cache" \ - dbus-run-session -- \ + dbus-run-session --config-file="$DBUS_SESSION_CONFIG" -- \ flutter test "$file" -d linux \ --dart-define="NEXUS_E2E_HOMESERVER=$homeserver" "${flutter_args[@]}" || status=$? diff --git a/linux/nix/screenshots.sh b/linux/nix/screenshots.sh index cdf18ff..f3dced6 100644 --- a/linux/nix/screenshots.sh +++ b/linux/nix/screenshots.sh @@ -12,7 +12,7 @@ GOCACHE="$(go env GOCACHE)" export GOCACHE XDG_DATA_HOME="$work/data" XDG_CACHE_HOME="$work/cache" \ - dbus-run-session -- \ + dbus-run-session --config-file="$DBUS_SESSION_CONFIG" -- \ flutter test integration_test/screenshots/screenshots_test.dart -d linux \ --dart-define="SCREENSHOTS_DIR=$work/out" "$@" diff --git a/pubspec.yaml b/pubspec.yaml index 76f274f..29c1fb8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: nexus description: "A simple and user-friendly Matrix client" -version: 1.1.1 +version: 1.1.1+101010999 publish_to: none flutter: