mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-12-12 02:57:22 +00:00
Merge pull request #5274 from 21pages/fix
remove flutter extra "waiting for image"
This commit is contained in:
@@ -37,7 +37,8 @@ import 'platform_model.dart';
|
||||
|
||||
typedef HandleMsgBox = Function(Map<String, dynamic> evt, String id);
|
||||
typedef ReconnectHandle = Function(OverlayDialogManager, SessionID, bool);
|
||||
final _waitForImage = <UuidValue, bool>{};
|
||||
final _waitForImageDialogShow = <UuidValue, bool>{};
|
||||
final _waitForFirstImage = <UuidValue, bool>{};
|
||||
final _constSessionId = Uuid().v4obj();
|
||||
|
||||
class FfiModel with ChangeNotifier {
|
||||
@@ -351,6 +352,8 @@ class FfiModel with ChangeNotifier {
|
||||
showElevationError(sessionId, type, title, text, dialogManager);
|
||||
} else if (type == 'relay-hint') {
|
||||
showRelayHintDialog(sessionId, type, title, text, dialogManager, peerId);
|
||||
} else if (text == 'Connected, waiting for image...') {
|
||||
showConnectedWaitingForImage(dialogManager, sessionId, type, title, text);
|
||||
} else {
|
||||
var hasRetry = evt['hasRetry'] == 'true';
|
||||
showMsgBox(sessionId, type, title, text, link, hasRetry, dialogManager);
|
||||
@@ -416,6 +419,27 @@ class FfiModel with ChangeNotifier {
|
||||
});
|
||||
}
|
||||
|
||||
void showConnectedWaitingForImage(OverlayDialogManager dialogManager,
|
||||
SessionID sessionId, String type, String title, String text) {
|
||||
onClose() {
|
||||
closeConnection();
|
||||
}
|
||||
|
||||
Future.delayed(Duration.zero, () async {
|
||||
await dialogManager.show(
|
||||
(setState, close, context) => CustomAlertDialog(
|
||||
title: null,
|
||||
content: SelectionArea(child: msgboxContent(type, title, text)),
|
||||
actions: [
|
||||
dialogButton("Cancel", onPressed: onClose, isOutline: true)
|
||||
],
|
||||
onCancel: onClose),
|
||||
tag: '$sessionId-waiting-for-image',
|
||||
);
|
||||
_waitForImageDialogShow[sessionId] = true;
|
||||
});
|
||||
}
|
||||
|
||||
_updateSessionWidthHeight(SessionID sessionId) {
|
||||
parent.target?.canvasModel.updateViewStyle();
|
||||
if (display.width <= 0 || display.height <= 0) {
|
||||
@@ -478,13 +502,8 @@ class FfiModel with ChangeNotifier {
|
||||
_updateSessionWidthHeight(sessionId);
|
||||
}
|
||||
if (displays.isNotEmpty) {
|
||||
parent.target?.dialogManager.showLoading(
|
||||
translate('Connected, waiting for image...'),
|
||||
onCancel: closeConnection,
|
||||
tag: '$peerId-waiting-for-image');
|
||||
_waitForImage[sessionId] = true;
|
||||
_reconnects = 1;
|
||||
bind.sessionOnWaitingForImageDialogShow(sessionId: sessionId);
|
||||
_waitForFirstImage[sessionId] = true;
|
||||
}
|
||||
Map<String, dynamic> features = json.decode(evt['features']);
|
||||
_pi.features.privacyMode = features['privacy_mode'] == 1;
|
||||
@@ -629,24 +648,6 @@ class ImageModel with ChangeNotifier {
|
||||
addCallbackOnFirstImage(Function(String) cb) => callbacksOnFirstImage.add(cb);
|
||||
|
||||
onRgba(Uint8List rgba) {
|
||||
final waitforImage = _waitForImage[sessionId];
|
||||
if (waitforImage == null) {
|
||||
debugPrint('Exception, peer $id not found for waiting image');
|
||||
return;
|
||||
}
|
||||
|
||||
if (waitforImage == true) {
|
||||
_waitForImage[sessionId] = false;
|
||||
parent.target?.dialogManager.dismissAll();
|
||||
clearWaitingForImage(parent.target?.dialogManager, id);
|
||||
|
||||
if (isDesktop) {
|
||||
for (final cb in callbacksOnFirstImage) {
|
||||
cb(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final pid = parent.target?.id;
|
||||
img.decodeImageFromPixels(
|
||||
rgba,
|
||||
@@ -1687,16 +1688,7 @@ class FFI {
|
||||
}
|
||||
} else if (message is EventToUI_Rgba) {
|
||||
if (useTextureRender) {
|
||||
if (_waitForImage[sessionId]!) {
|
||||
_waitForImage[sessionId] = false;
|
||||
dialogManager.dismissAll();
|
||||
for (final cb in imageModel.callbacksOnFirstImage) {
|
||||
cb(id);
|
||||
}
|
||||
await canvasModel.updateViewStyle();
|
||||
await canvasModel.updateScrollStyle();
|
||||
clearWaitingForImage(dialogManager, id);
|
||||
}
|
||||
onEvent2UIRgba();
|
||||
} else {
|
||||
// Fetch the image buffer from rust codes.
|
||||
final sz = platformFFI.getRgbaSize(sessionId);
|
||||
@@ -1705,6 +1697,7 @@ class FFI {
|
||||
}
|
||||
final rgba = platformFFI.getRgba(sessionId, sz);
|
||||
if (rgba != null) {
|
||||
onEvent2UIRgba();
|
||||
imageModel.onRgba(rgba);
|
||||
}
|
||||
}
|
||||
@@ -1715,6 +1708,22 @@ class FFI {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
void onEvent2UIRgba() async {
|
||||
if (_waitForImageDialogShow[sessionId] == true) {
|
||||
_waitForImageDialogShow[sessionId] = false;
|
||||
clearWaitingForImage(dialogManager, sessionId);
|
||||
}
|
||||
if (_waitForFirstImage[sessionId] == true) {
|
||||
_waitForFirstImage[sessionId] = false;
|
||||
dialogManager.dismissAll();
|
||||
await canvasModel.updateViewStyle();
|
||||
await canvasModel.updateScrollStyle();
|
||||
for (final cb in imageModel.callbacksOnFirstImage) {
|
||||
cb(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Login with [password], choose if the client should [remember] it.
|
||||
void login(String osUsername, String osPassword, SessionID sessionId,
|
||||
String password, bool remember) {
|
||||
@@ -1891,11 +1900,11 @@ Future<void> initializeCursorAndCanvas(FFI ffi) async {
|
||||
ffi.canvasModel.update(xCanvas, yCanvas, scale);
|
||||
}
|
||||
|
||||
clearWaitingForImage(OverlayDialogManager? dialogManager, String id) {
|
||||
clearWaitingForImage(OverlayDialogManager? dialogManager, SessionID sessionId) {
|
||||
final durations = [100, 500, 1000, 2000];
|
||||
for (var duration in durations) {
|
||||
Future.delayed(Duration(milliseconds: duration), () {
|
||||
dialogManager?.dismissByTag('$id-waiting-for-image');
|
||||
dialogManager?.dismissByTag('$sessionId-waiting-for-image');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user