37 lines
1.0 KiB
Dart
37 lines
1.0 KiB
Dart
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
import 'package:hooks_riverpod/legacy.dart';
|
|
import 'package:hooks_riverpod/misc.dart';
|
|
|
|
import '../data/update_api_client.dart';
|
|
|
|
class UpdateSessionGate {
|
|
var _used = false;
|
|
bool takeColdLaunchSlot() => _used ? false : (_used = true);
|
|
}
|
|
|
|
final updateSessionGateProvider = Provider<UpdateSessionGate>(
|
|
(_) => UpdateSessionGate(),
|
|
);
|
|
|
|
class UpdateController extends StateNotifier<AsyncValue<UpgradeInfo?>> {
|
|
UpdateController(this._read) : super(const AsyncData(null));
|
|
final T Function<T>(ProviderListenable<T>) _read;
|
|
|
|
Future<UpgradeInfo> checkUpgrade() async {
|
|
state = const AsyncLoading();
|
|
try {
|
|
final result = await _read(updateApiClientProvider).checkUpgrade();
|
|
state = AsyncData(result);
|
|
return result;
|
|
} catch (error, stackTrace) {
|
|
state = AsyncError(error, stackTrace);
|
|
rethrow;
|
|
}
|
|
}
|
|
}
|
|
|
|
final updateControllerProvider =
|
|
StateNotifierProvider<UpdateController, AsyncValue<UpgradeInfo?>>(
|
|
(ref) => UpdateController(ref.read),
|
|
);
|