mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-07 21:11:05 +03:00
* feat(web): zero-readback WebCodecs video path Decoded VideoFrames from js/src/webcodecs.js are handed to Flutter via window.onVideoFrame and imported GPU-side with createImageFromTextureSource; any failure unregisters the hook so the JS side falls back to RGBA readback. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(web): load bundled terminal font when Google CDNs are unreachable In air-gapped deployments GoogleFonts.robotoMono() cannot download the terminal font; when index.html signals offline mode, load the copy bundled with the web app under the family name google_fonts registers. Part of the fix for rustdesk/rustdesk-server-pro#996. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * ci: bump windows arm64 to Flutter 3.44.8, add web build patch script apply_flutter_3.44_web_patches.sh prepares a 3.44.x web build on top of the shared source patches: qr_code_scanner's web impl needs dart:ui_web for the removed platformViewRegistry, and flutter/web/fonts is refreshed to the font paths the 3.44 engine requests. The disabled build-rustdesk-web job runs it automatically once FLUTTER_VERSION moves to 3.44.x, and version-guarded 'Patch flutter' steps no longer fail when the guard does not match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(web): prevent stale WebCodecs frames across sessions Signed-off-by: fufesou <linlong1266@gmail.com> * fix(web): harden WebCodecs reconnect and Flutter 3.44 patches Signed-off-by: fufesou <linlong1266@gmail.com> * fix(ci): harden Flutter 3.44 patch input validation Validate required files before checking patch state, parameterize the theme-range validator, and prevent missing inputs from satisfying NO_MATCHES checks. Signed-off-by: fufesou <linlong1266@gmail.com> * Remove unused code Signed-off-by: fufesou <linlong1266@gmail.com> * fix(web): retry font loading and dispose stale decoded images Signed-off-by: fufesou <linlong1266@gmail.com> * remove unused code Signed-off-by: fufesou <linlong1266@gmail.com> * fix(web): Bad state: RenderBox was not laid out Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: fufesou <linlong1266@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: fufesou <linlong1266@gmail.com>
141 lines
6.2 KiB
Bash
141 lines
6.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Applies the Flutter 3.44-only source/pubspec changes on the fly, in CI only.
|
|
#
|
|
# Windows arm64 needs Flutter >= 3.44 (the first stable release shipping an arm64 Dart SDK +
|
|
# engine), which renamed DialogTheme/TabBarTheme -> *Data and needs newer extended_text/
|
|
# google_fonts. Every other platform is still on Flutter 3.24.5, where the old names/versions
|
|
# are required, so these changes are kept OUT of the committed sources and applied here instead.
|
|
#
|
|
# Used by BOTH the Windows arm64 build (flutter-build.yml) and its dedicated bridge artifact
|
|
# (bridge.yml) so they share an identical 3.44 source state -- the generated *.freezed.dart must
|
|
# compile against the same Flutter/freezed version the arm64 build resolves.
|
|
#
|
|
# Remove this script (and commit the changes) once upstream bumps Flutter across the board.
|
|
#
|
|
# Run from the repository root. sed is used (not a git-apply patch) because the checked-out
|
|
# sources are CRLF on the windows-11-arm runner; the substitutions below are anchor-free and
|
|
# therefore CRLF-safe.
|
|
set -euo pipefail
|
|
|
|
readonly NO_MATCHES=0
|
|
readonly SINGLE_MATCH=1
|
|
readonly THEME_MATCHES=2
|
|
|
|
has_exact_count() {
|
|
local -r expected_count="$1"
|
|
local -r pattern="$2"
|
|
local -r file="$3"
|
|
local actual_count
|
|
[[ -r "$file" ]] || return 1
|
|
actual_count="$(grep -cF "$pattern" "$file" || true)"
|
|
[[ "$actual_count" -eq "$expected_count" ]]
|
|
}
|
|
|
|
# The target background-color line must directly follow DialogThemeData in the selected range.
|
|
has_dialog_background_in_theme_range() {
|
|
local -r start_pattern="$1"
|
|
local -r end_pattern="$2"
|
|
local -r target_pattern="$3"
|
|
local -r file="$4"
|
|
awk -v start_pattern="$start_pattern" \
|
|
-v end_pattern="$end_pattern" \
|
|
-v target_pattern="$target_pattern" '
|
|
index($0, start_pattern) {
|
|
in_theme = 1
|
|
next
|
|
}
|
|
in_theme && index($0, end_pattern) {
|
|
exit
|
|
}
|
|
in_theme && index($0, "dialogTheme: DialogThemeData(") {
|
|
if (getline > 0) {
|
|
line = $0
|
|
sub(/\r$/, "", line)
|
|
sub(/^[[:space:]]+/, "", line)
|
|
matched = line == target_pattern
|
|
}
|
|
exit
|
|
}
|
|
END {
|
|
exit matched ? 0 : 1
|
|
}
|
|
' "$file"
|
|
}
|
|
|
|
validate_patch_inputs() {
|
|
if [[ ! -f flutter/lib/common.dart || ! -r flutter/lib/common.dart ]]; then
|
|
echo "Flutter 3.44 source patch input is missing or unreadable: flutter/lib/common.dart" >&2
|
|
return 1
|
|
fi
|
|
if [[ ! -f flutter/pubspec.yaml || ! -r flutter/pubspec.yaml ]]; then
|
|
echo "Flutter 3.44 source patch input is missing or unreadable: flutter/pubspec.yaml" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
is_complete_patch_state() {
|
|
has_exact_count "$THEME_MATCHES" 'dialogTheme: DialogThemeData(' flutter/lib/common.dart &&
|
|
has_exact_count "$THEME_MATCHES" 'tabBarTheme: const TabBarThemeData(' flutter/lib/common.dart &&
|
|
has_exact_count "$SINGLE_MATCH" 'backgroundColor: Colors.white,' flutter/lib/common.dart &&
|
|
has_exact_count "$SINGLE_MATCH" 'backgroundColor: Color(0xFF18191E),' flutter/lib/common.dart &&
|
|
has_exact_count "$SINGLE_MATCH" 'extended_text: 15.0.2' flutter/pubspec.yaml &&
|
|
has_exact_count "$SINGLE_MATCH" 'google_fonts: ^8.1.0' flutter/pubspec.yaml &&
|
|
has_exact_count "$NO_MATCHES" 'dialogTheme: DialogTheme(' flutter/lib/common.dart &&
|
|
has_exact_count "$NO_MATCHES" 'tabBarTheme: const TabBarTheme(' flutter/lib/common.dart &&
|
|
has_exact_count "$NO_MATCHES" 'extended_text: 14.0.0' flutter/pubspec.yaml &&
|
|
has_exact_count "$NO_MATCHES" 'google_fonts: ^6.2.1' flutter/pubspec.yaml &&
|
|
has_dialog_background_in_theme_range 'static ThemeData lightTheme = ThemeData(' \
|
|
'static ThemeData darkTheme = ThemeData(' 'backgroundColor: Colors.white,' \
|
|
flutter/lib/common.dart &&
|
|
has_dialog_background_in_theme_range 'static ThemeData darkTheme = ThemeData(' \
|
|
'scrollbarTheme: scrollbarThemeDark,' 'backgroundColor: Color(0xFF18191E),' \
|
|
flutter/lib/common.dart
|
|
}
|
|
|
|
is_unpatched_state() {
|
|
has_exact_count "$THEME_MATCHES" 'dialogTheme: DialogTheme(' flutter/lib/common.dart &&
|
|
has_exact_count "$THEME_MATCHES" 'tabBarTheme: const TabBarTheme(' flutter/lib/common.dart &&
|
|
has_exact_count "$SINGLE_MATCH" 'extended_text: 14.0.0' flutter/pubspec.yaml &&
|
|
has_exact_count "$SINGLE_MATCH" 'google_fonts: ^6.2.1' flutter/pubspec.yaml &&
|
|
has_exact_count "$NO_MATCHES" 'dialogTheme: DialogThemeData(' flutter/lib/common.dart &&
|
|
has_exact_count "$NO_MATCHES" 'tabBarTheme: const TabBarThemeData(' flutter/lib/common.dart &&
|
|
has_exact_count "$NO_MATCHES" 'backgroundColor: Colors.white,' flutter/lib/common.dart &&
|
|
has_exact_count "$NO_MATCHES" 'backgroundColor: Color(0xFF18191E),' flutter/lib/common.dart &&
|
|
has_exact_count "$NO_MATCHES" 'extended_text: 15.0.2' flutter/pubspec.yaml &&
|
|
has_exact_count "$NO_MATCHES" 'google_fonts: ^8.1.0' flutter/pubspec.yaml
|
|
}
|
|
|
|
if ! validate_patch_inputs; then
|
|
exit 1
|
|
fi
|
|
|
|
if is_complete_patch_state; then
|
|
echo "Flutter 3.44 source patches already applied."
|
|
git --no-pager diff -- flutter/lib/common.dart flutter/pubspec.yaml
|
|
exit 0
|
|
fi
|
|
|
|
if ! is_unpatched_state; then
|
|
echo "Flutter 3.44 source patches are partially applied or their anchors have drifted." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# ThemeData API renames (Flutter 3.27+):
|
|
sed -i 's/dialogTheme: DialogTheme(/dialogTheme: DialogThemeData(/g' flutter/lib/common.dart
|
|
sed -i 's/tabBarTheme: const TabBarTheme(/tabBarTheme: const TabBarThemeData(/g' flutter/lib/common.dart
|
|
sed -i '/static ThemeData lightTheme = ThemeData(/,/static ThemeData darkTheme = ThemeData(/s/dialogTheme: DialogThemeData(/dialogTheme: DialogThemeData(\
|
|
backgroundColor: Colors.white,/' flutter/lib/common.dart
|
|
sed -i '/static ThemeData darkTheme = ThemeData(/,/scrollbarTheme: scrollbarThemeDark,/s/dialogTheme: DialogThemeData(/dialogTheme: DialogThemeData(\
|
|
backgroundColor: Color(0xFF18191E),/' flutter/lib/common.dart
|
|
# Dependency bumps required by the newer Dart/Flutter:
|
|
sed -i 's/extended_text: 14.0.0/extended_text: 15.0.2/' flutter/pubspec.yaml
|
|
sed -i 's/google_fonts: \^6.2.1/google_fonts: ^8.1.0/' flutter/pubspec.yaml
|
|
|
|
# Fail loudly if any expected substitution did not produce the complete state.
|
|
if ! is_complete_patch_state; then
|
|
echo "Flutter 3.44 source patches did not produce the expected state." >&2
|
|
exit 1
|
|
fi
|
|
|
|
git --no-pager diff -- flutter/lib/common.dart flutter/pubspec.yaml
|