try fix waiting for image when already shown

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages
2023-08-05 21:40:15 +08:00
parent 72c198a1e9
commit bc039a31c5
4 changed files with 35 additions and 4 deletions

View File

@@ -480,9 +480,11 @@ class FfiModel with ChangeNotifier {
if (displays.isNotEmpty) {
parent.target?.dialogManager.showLoading(
translate('Connected, waiting for image...'),
onCancel: closeConnection);
onCancel: closeConnection,
tag: '$peerId-waiting-for-image');
_waitForImage[sessionId] = true;
_reconnects = 1;
bind.sessionOnWaitingForImageDialogShow(sessionId: sessionId);
}
Map<String, dynamic> features = json.decode(evt['features']);
_pi.features.privacyMode = features['privacy_mode'] == 1;
@@ -636,6 +638,8 @@ class ImageModel with ChangeNotifier {
if (waitforImage == true) {
_waitForImage[sessionId] = false;
parent.target?.dialogManager.dismissAll();
clearWaitingForImage(parent.target?.dialogManager, id);
if (isDesktop) {
for (final cb in callbacksOnFirstImage) {
cb(id);
@@ -1681,6 +1685,7 @@ class FFI {
}
await canvasModel.updateViewStyle();
await canvasModel.updateScrollStyle();
clearWaitingForImage(dialogManager, id);
}
} else {
// Fetch the image buffer from rust codes.
@@ -1873,3 +1878,12 @@ Future<void> initializeCursorAndCanvas(FFI ffi) async {
ffi.ffiModel.display.x, ffi.ffiModel.display.y, xCursor, yCursor);
ffi.canvasModel.update(xCanvas, yCanvas, scale);
}
clearWaitingForImage(OverlayDialogManager? dialogManager, String id) {
final durations = [100, 500, 1000, 2000];
for (var duration in durations) {
Future.delayed(Duration(milliseconds: duration), () {
dialogManager?.dismissByTag('$id-waiting-for-image');
});
}
}