fixed stale state after logout and replayed or lost share intents
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user