From 4ee4a766d6f8114bd7f1400870ae989e3fccdf7f Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sat, 21 Mar 2026 03:57:01 +0100 Subject: [PATCH] fix: pip background thread layout crash --- ios/Runner/MpvPlayer/MpvPipController.swift | 1 - ios/Runner/MpvPlayer/MpvPlayerPlugin.swift | 41 +++++++++++---------- lib/services/update_service.dart | 2 +- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/ios/Runner/MpvPlayer/MpvPipController.swift b/ios/Runner/MpvPlayer/MpvPipController.swift index a8ee4c89..a6a5fec2 100644 --- a/ios/Runner/MpvPlayer/MpvPipController.swift +++ b/ios/Runner/MpvPlayer/MpvPipController.swift @@ -57,7 +57,6 @@ class MpvPipController: NSObject { if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, let window = windowScene.windows.first(where: { $0.isKeyWindow }) { let view = UIView(frame: window.bounds) - view.autoresizingMask = [.flexibleWidth, .flexibleHeight] view.clipsToBounds = true view.isUserInteractionEnabled = false sampleBufferLayer.frame = view.bounds diff --git a/ios/Runner/MpvPlayer/MpvPlayerPlugin.swift b/ios/Runner/MpvPlayer/MpvPlayerPlugin.swift index 9a3a1522..dbedc5bd 100644 --- a/ios/Runner/MpvPlayer/MpvPlayerPlugin.swift +++ b/ios/Runner/MpvPlayer/MpvPlayerPlugin.swift @@ -139,28 +139,31 @@ class MpvPlayerPlugin: NSObject, FlutterPlugin, FlutterStreamHandler, MpvPluginS } private func handlePipCall(_ call: FlutterMethodCall, result: @escaping FlutterResult) { - switch call.method { - case "isSupported": - result(MpvPipController.isSupported) - case "enter": - enterPip(manual: true, result: result) - case "setAutoPipReady": - if let args = call.arguments as? [String: Any], let ready = args["ready"] as? Bool { - autoPipEnabled = ready - if ready { - let pip = ensurePipController() - pip.setAutoStart(true) - // Warm the layer so the system considers PiP possible - if let pc = playerCore { - pip.warmLayer(currentTime: pc.timePos, isPlaying: !pc.isPaused) + DispatchQueue.main.async { [weak self] in + guard let self = self else { result(nil); return } + switch call.method { + case "isSupported": + result(MpvPipController.isSupported) + case "enter": + self.enterPip(manual: true, result: result) + case "setAutoPipReady": + if let args = call.arguments as? [String: Any], let ready = args["ready"] as? Bool { + self.autoPipEnabled = ready + if ready { + let pip = self.ensurePipController() + pip.setAutoStart(true) + // Warm the layer so the system considers PiP possible + if let pc = self.playerCore { + pip.warmLayer(currentTime: pc.timePos, isPlaying: !pc.isPaused) + } + } else { + self.pipController?.setAutoStart(false) } - } else { - pipController?.setAutoStart(false) } + result(nil) + default: + result(FlutterMethodNotImplemented) } - result(nil) - default: - result(FlutterMethodNotImplemented) } } diff --git a/lib/services/update_service.dart b/lib/services/update_service.dart index 9c1301ec..c017abc9 100644 --- a/lib/services/update_service.dart +++ b/lib/services/update_service.dart @@ -16,7 +16,7 @@ import 'package:shared_preferences/shared_preferences.dart'; class UpdateService { static final Logger _logger = Logger(); static const String _githubRepo = 'edde746/plezy'; - static const String _feedUrl = 'https://github.com/edde746/plezy/releases/latest/download/appcast.xml'; + static const String _feedUrl = 'https://cdn.jsdelivr.net/gh/edde746/plezy@appcast/appcast.xml'; // SharedPreferences keys static const String _keySkippedVersion = 'update_skipped_version';