chore: expose option to retry computations
Fixes: https://gitlab.com/famedly/company/frontend/famedly-web/-/issues/536 Signed-off-by: Lanna Michalke <l.michalke@famedly.com>
This commit is contained in:
parent
543875e8cf
commit
a983db4946
|
|
@ -25,22 +25,37 @@ abstract class NativeImplementations {
|
|||
/// the UI to likely freeze
|
||||
static const dummy = NativeImplementationsDummy();
|
||||
|
||||
FutureOr<RoomKeys> generateUploadKeys(GenerateUploadKeysArgs args);
|
||||
FutureOr<RoomKeys> generateUploadKeys(
|
||||
GenerateUploadKeysArgs args, {
|
||||
bool retryInDummy = true,
|
||||
});
|
||||
|
||||
FutureOr<Uint8List> keyFromPassphrase(KeyFromPassphraseArgs args);
|
||||
FutureOr<Uint8List> keyFromPassphrase(
|
||||
KeyFromPassphraseArgs args, {
|
||||
bool retryInDummy = true,
|
||||
});
|
||||
|
||||
FutureOr<Uint8List?> decryptFile(EncryptedFile file);
|
||||
FutureOr<Uint8List?> decryptFile(
|
||||
EncryptedFile file, {
|
||||
bool retryInDummy = true,
|
||||
});
|
||||
|
||||
FutureOr<MatrixImageFileResizedResponse?> shrinkImage(
|
||||
MatrixImageFileResizeArguments args);
|
||||
MatrixImageFileResizeArguments args, {
|
||||
bool retryInDummy = false,
|
||||
});
|
||||
|
||||
FutureOr<MatrixImageFileResizedResponse?> calcImageMetadata(Uint8List bytes);
|
||||
FutureOr<MatrixImageFileResizedResponse?> calcImageMetadata(
|
||||
Uint8List bytes, {
|
||||
bool retryInDummy = false,
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
/// this implementation will catch any non-implemented method
|
||||
dynamic noSuchMethod(Invocation invocation) {
|
||||
final dynamic argument = invocation.positionalArguments.single;
|
||||
final bool retryInDummy = invocation.namedArguments['retryInDummy'] as bool;
|
||||
final memberName = invocation.memberName.toString().split('"')[1];
|
||||
|
||||
Logs().w(
|
||||
|
|
@ -50,15 +65,15 @@ abstract class NativeImplementations {
|
|||
);
|
||||
switch (memberName) {
|
||||
case 'generateUploadKeys':
|
||||
return dummy.generateUploadKeys(argument);
|
||||
return dummy.generateUploadKeys(argument, retryInDummy: retryInDummy);
|
||||
case 'keyFromPassphrase':
|
||||
return dummy.keyFromPassphrase(argument);
|
||||
return dummy.keyFromPassphrase(argument, retryInDummy: retryInDummy);
|
||||
case 'decryptFile':
|
||||
return dummy.decryptFile(argument);
|
||||
return dummy.decryptFile(argument, retryInDummy: retryInDummy);
|
||||
case 'shrinkImage':
|
||||
return dummy.shrinkImage(argument);
|
||||
return dummy.shrinkImage(argument, retryInDummy: retryInDummy);
|
||||
case 'calcImageMetadata':
|
||||
return dummy.calcImageMetadata(argument);
|
||||
return dummy.calcImageMetadata(argument, retryInDummy: retryInDummy);
|
||||
default:
|
||||
return super.noSuchMethod(invocation);
|
||||
}
|
||||
|
|
@ -69,28 +84,42 @@ class NativeImplementationsDummy extends NativeImplementations {
|
|||
const NativeImplementationsDummy();
|
||||
|
||||
@override
|
||||
Future<Uint8List?> decryptFile(EncryptedFile file) {
|
||||
Future<Uint8List?> decryptFile(
|
||||
EncryptedFile file, {
|
||||
bool retryInDummy = true,
|
||||
}) {
|
||||
return decryptFileImplementation(file);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<RoomKeys> generateUploadKeys(GenerateUploadKeysArgs args) async {
|
||||
Future<RoomKeys> generateUploadKeys(
|
||||
GenerateUploadKeysArgs args, {
|
||||
bool retryInDummy = true,
|
||||
}) async {
|
||||
return generateUploadKeysImplementation(args);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Uint8List> keyFromPassphrase(KeyFromPassphraseArgs args) {
|
||||
Future<Uint8List> keyFromPassphrase(
|
||||
KeyFromPassphraseArgs args, {
|
||||
bool retryInDummy = true,
|
||||
}) {
|
||||
return generateKeyFromPassphrase(args);
|
||||
}
|
||||
|
||||
@override
|
||||
MatrixImageFileResizedResponse? shrinkImage(
|
||||
MatrixImageFileResizeArguments args) {
|
||||
MatrixImageFileResizeArguments args, {
|
||||
bool retryInDummy = false,
|
||||
}) {
|
||||
return MatrixImageFile.resizeImplementation(args);
|
||||
}
|
||||
|
||||
@override
|
||||
MatrixImageFileResizedResponse? calcImageMetadata(Uint8List bytes) {
|
||||
MatrixImageFileResizedResponse? calcImageMetadata(
|
||||
Uint8List bytes, {
|
||||
bool retryInDummy = false,
|
||||
}) {
|
||||
return MatrixImageFile.calcMetadataImplementation(bytes);
|
||||
}
|
||||
}
|
||||
|
|
@ -122,7 +151,10 @@ class NativeImplementationsIsolate extends NativeImplementations {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<Uint8List?> decryptFile(EncryptedFile file) {
|
||||
Future<Uint8List?> decryptFile(
|
||||
EncryptedFile file, {
|
||||
bool retryInDummy = true,
|
||||
}) {
|
||||
return runInBackground<Uint8List?, EncryptedFile>(
|
||||
NativeImplementations.dummy.decryptFile,
|
||||
file,
|
||||
|
|
@ -130,7 +162,10 @@ class NativeImplementationsIsolate extends NativeImplementations {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<RoomKeys> generateUploadKeys(GenerateUploadKeysArgs args) async {
|
||||
Future<RoomKeys> generateUploadKeys(
|
||||
GenerateUploadKeysArgs args, {
|
||||
bool retryInDummy = true,
|
||||
}) async {
|
||||
return runInBackground<RoomKeys, GenerateUploadKeysArgs>(
|
||||
NativeImplementations.dummy.generateUploadKeys,
|
||||
args,
|
||||
|
|
@ -138,7 +173,10 @@ class NativeImplementationsIsolate extends NativeImplementations {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<Uint8List> keyFromPassphrase(KeyFromPassphraseArgs args) {
|
||||
Future<Uint8List> keyFromPassphrase(
|
||||
KeyFromPassphraseArgs args, {
|
||||
bool retryInDummy = true,
|
||||
}) {
|
||||
return runInBackground<Uint8List, KeyFromPassphraseArgs>(
|
||||
NativeImplementations.dummy.keyFromPassphrase,
|
||||
args,
|
||||
|
|
@ -147,7 +185,9 @@ class NativeImplementationsIsolate extends NativeImplementations {
|
|||
|
||||
@override
|
||||
Future<MatrixImageFileResizedResponse?> shrinkImage(
|
||||
MatrixImageFileResizeArguments args) {
|
||||
MatrixImageFileResizeArguments args, {
|
||||
bool retryInDummy = false,
|
||||
}) {
|
||||
return runInBackground<MatrixImageFileResizedResponse?,
|
||||
MatrixImageFileResizeArguments>(
|
||||
NativeImplementations.dummy.shrinkImage,
|
||||
|
|
@ -156,7 +196,10 @@ class NativeImplementationsIsolate extends NativeImplementations {
|
|||
}
|
||||
|
||||
@override
|
||||
FutureOr<MatrixImageFileResizedResponse?> calcImageMetadata(Uint8List bytes) {
|
||||
FutureOr<MatrixImageFileResizedResponse?> calcImageMetadata(
|
||||
Uint8List bytes, {
|
||||
bool retryInDummy = false,
|
||||
}) {
|
||||
return runInBackground<MatrixImageFileResizedResponse?, Uint8List>(
|
||||
NativeImplementations.dummy.calcImageMetadata,
|
||||
bytes,
|
||||
|
|
|
|||
|
|
@ -62,7 +62,9 @@ class NativeImplementationsWebWorker extends NativeImplementations {
|
|||
|
||||
@override
|
||||
Future<MatrixImageFileResizedResponse?> calcImageMetadata(
|
||||
Uint8List bytes) async {
|
||||
Uint8List bytes, {
|
||||
bool retryInDummy = false,
|
||||
}) async {
|
||||
try {
|
||||
final result = await operation<Map<dynamic, dynamic>, Uint8List>(
|
||||
WebWorkerOperations.calcImageMetadata,
|
||||
|
|
@ -70,6 +72,11 @@ class NativeImplementationsWebWorker extends NativeImplementations {
|
|||
);
|
||||
return MatrixImageFileResizedResponse.fromJson(Map.from(result));
|
||||
} catch (e, s) {
|
||||
if (!retryInDummy) {
|
||||
Logs().e(
|
||||
'Web worker computation error. Ignoring and returning null', e, s);
|
||||
return null;
|
||||
}
|
||||
Logs().e('Web worker computation error. Fallback to main thread', e, s);
|
||||
return NativeImplementations.dummy.calcImageMetadata(bytes);
|
||||
}
|
||||
|
|
@ -77,7 +84,9 @@ class NativeImplementationsWebWorker extends NativeImplementations {
|
|||
|
||||
@override
|
||||
Future<MatrixImageFileResizedResponse?> shrinkImage(
|
||||
MatrixImageFileResizeArguments args) async {
|
||||
MatrixImageFileResizeArguments args, {
|
||||
bool retryInDummy = false,
|
||||
}) async {
|
||||
try {
|
||||
final result =
|
||||
await operation<Map<dynamic, dynamic>, Map<String, dynamic>>(
|
||||
|
|
@ -86,13 +95,21 @@ class NativeImplementationsWebWorker extends NativeImplementations {
|
|||
);
|
||||
return MatrixImageFileResizedResponse.fromJson(Map.from(result));
|
||||
} catch (e, s) {
|
||||
if (!retryInDummy) {
|
||||
Logs().e(
|
||||
'Web worker computation error. Ignoring and returning null', e, s);
|
||||
return null;
|
||||
}
|
||||
Logs().e('Web worker computation error. Fallback to main thread', e, s);
|
||||
return NativeImplementations.dummy.shrinkImage(args);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<RoomKeys> generateUploadKeys(GenerateUploadKeysArgs args) async {
|
||||
Future<RoomKeys> generateUploadKeys(
|
||||
GenerateUploadKeysArgs args, {
|
||||
bool retryInDummy = true,
|
||||
}) async {
|
||||
try {
|
||||
final result =
|
||||
await operation<Map<dynamic, dynamic>, Map<String, dynamic>>(
|
||||
|
|
@ -101,6 +118,7 @@ class NativeImplementationsWebWorker extends NativeImplementations {
|
|||
);
|
||||
return RoomKeys.fromJson(Map.from(result));
|
||||
} catch (e, s) {
|
||||
if (!retryInDummy) rethrow;
|
||||
Logs().e('Web worker computation error. Fallback to main thread', e, s);
|
||||
return NativeImplementations.dummy.generateUploadKeys(args);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue