Browse Source

neon: Cleanup request manager

pull/86/head
jld3103 2 years ago
parent
commit
f738cfa1a6
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 91
      packages/neon/lib/src/utils/request_manager.dart

91
packages/neon/lib/src/utils/request_manager.dart

@ -7,14 +7,6 @@ class RequestManager {
final Cache? cache;
final bool _enablePrinting = false;
void _print(final String input) {
if (_enablePrinting) {
debugPrint(input);
}
}
Stream<Result<T>> wrapWithoutCache<T>(
final Future<T> Function() call, {
final bool disableTimeout = false,
@ -36,68 +28,6 @@ class RequestManager {
required final T? previousData,
final bool disableTimeout = false,
}) async* {
yield* _wrap<T, R>(
clientID,
k,
(final s) => json.encode(serialize<R>(s)),
(final d) => deserialize<R>(json.decode(d)),
call,
unwrap: unwrap,
previousData: previousData,
disableTimeout: disableTimeout,
);
}
Stream<Result<Uint8List>> wrapBytes(
final String clientID,
final String k,
final Future<Uint8List> Function() call, {
final bool preferCache = false,
final bool disableTimeout = false,
final Uint8List? previousData,
}) =>
_wrap<Uint8List, Uint8List>(
clientID,
k,
(final s) => base64.encode(s),
(final d) => base64.decode(d),
call,
preferCache: preferCache,
previousData: previousData,
disableTimeout: disableTimeout,
);
Stream<Result<String>> wrapString(
final String clientID,
final String k,
final Future<String> Function() call, {
final bool preferCache = false,
final bool disableTimeout = false,
final String? previousData,
}) =>
_wrap<String, String>(
clientID,
k,
(final s) => s,
(final d) => d,
call,
preferCache: preferCache,
previousData: previousData,
disableTimeout: disableTimeout,
);
Stream<Result<T>> _wrap<T, R>(
final String clientID,
final String k,
final String Function(R) serialize,
final R Function(String) deserialize,
final Future<R> Function() call, {
final bool preferCache = false,
final bool disableTimeout = false,
T Function(R)? unwrap,
final T? previousData,
}) async* {
unwrap ??= (final a) => a as T;
if (previousData != null) {
yield ResultCached(previousData, loading: true);
} else {
@ -106,35 +36,20 @@ class RequestManager {
final key = '$clientID-$k';
_print('[Request]: $k');
if (cache != null && await cache!.has(key)) {
_print('[Cache]: $k');
final s = unwrap(deserialize((await cache!.get(key))!));
if (preferCache) {
yield Result.success(s);
return;
} else {
yield ResultCached(s, loading: true);
}
yield ResultCached(unwrap(deserialize<R>(json.decode((await cache!.get(key))!))), loading: true);
}
try {
final response = await _timeout(disableTimeout, call);
final s = serialize(response);
_print('[Response]: $k');
await cache?.set(key, s);
await cache?.set(key, json.encode(serialize<R>(response)));
yield Result.success(unwrap(response));
} on Exception catch (e) {
if (cache != null && await cache!.has(key)) {
_print('[Cache]: $k');
debugPrint(e.toString());
yield ResultCached(unwrap(deserialize((await cache!.get(key))!)), error: e);
yield ResultCached(unwrap(deserialize<R>(json.decode((await cache!.get(key))!))), error: e);
return;
}
_print('[Failure]: $k');
debugPrint(e.toString());
yield Result.error(e);
}

Loading…
Cancel
Save