fixed stale state after logout and replayed or lost share intents

This commit is contained in:
2026-09-24 21:43:21 +02:00
parent e4e2b1a4fb
commit 498d195138
32 changed files with 743 additions and 188 deletions
@@ -135,19 +135,24 @@ Future<void> _externalShareFlow(
PendingShare share,
) async {
if (share.hasFiles) {
await ensureTalkShareFolder();
if (!context.mounted) return;
await pushScreen(
context,
withNavBar: false,
screen: FilesUploadDialog(
filePaths: share.filePaths,
remotePath: talkShareFolder,
uniqueNames: true,
onUploadFinished: (uploaded) =>
_afterExternalFilesUploaded(context, room, uploaded, share),
),
);
ShareIntentListener.instance.beginFlow();
try {
await ensureTalkShareFolder();
if (!context.mounted) return;
await pushScreen(
context,
withNavBar: false,
screen: FilesUploadDialog(
filePaths: share.filePaths,
remotePath: talkShareFolder,
uniqueNames: true,
onUploadFinished: (uploaded) =>
_afterExternalFilesUploaded(context, room, uploaded, share),
),
);
} finally {
ShareIntentListener.instance.endFlow();
}
return;
}
if (share.hasText) {
@@ -155,17 +160,28 @@ Future<void> _externalShareFlow(
}
}
// Called synchronously when the upload dialog pops, so the flow is entered
// before the upload step above releases it.
Future<void> _afterExternalFilesUploaded(
BuildContext context,
GetRoomResponseObject room,
List<String> uploadedRemotePaths,
PendingShare share,
) => _runShareFlow(
context,
action: () =>
shareFilesToChat(token: room.token, remoteFilePaths: uploadedRemotePaths),
onSuccess: () => _setExternalDraftAndOpenChat(context, room, share),
);
) async {
ShareIntentListener.instance.beginFlow();
try {
await _runShareFlow(
context,
action: () => shareFilesToChat(
token: room.token,
remoteFilePaths: uploadedRemotePaths,
),
onSuccess: () => _setExternalDraftAndOpenChat(context, room, share),
);
} finally {
ShareIntentListener.instance.endFlow();
}
}
/// Shared share-flow scaffolding: shows the blocking spinner, runs [action],
/// maps failures to an error dialog (popping the spinner first), and invokes
@@ -206,16 +206,21 @@ Future<void> _externalUploadFlow(
List<String> targetPath,
PendingShare share,
) async {
await pushScreen(
context,
withNavBar: false,
screen: FilesUploadDialog(
filePaths: share.filePaths,
remotePath: targetPath.join('/'),
onUploadFinished: (_) =>
_afterExternalUploaded(context, targetPath, share),
),
);
ShareIntentListener.instance.beginFlow();
try {
await pushScreen(
context,
withNavBar: false,
screen: FilesUploadDialog(
filePaths: share.filePaths,
remotePath: targetPath.join('/'),
onUploadFinished: (_) =>
_afterExternalUploaded(context, targetPath, share),
),
);
} finally {
ShareIntentListener.instance.endFlow();
}
}
void _afterExternalUploaded(