]>
Commit | Line | Data |
---|---|---|
694d7a8f TM |
1 | import 'dart:async'; |
2 | ||
694d7a8f TM |
3 | import 'package:proxmox_dart_api_client/proxmox_dart_api_client.dart'; |
4 | import 'package:pve_flutter_frontend/bloc/proxmox_base_bloc.dart'; | |
5 | import 'package:pve_flutter_frontend/states/pve_node_overview_state.dart'; | |
6 | ||
7 | class PveNodeOverviewBloc | |
8 | extends ProxmoxBaseBloc<PveNodeOverviewEvent, PveNodeOverviewState> { | |
9 | final ProxmoxApiClient apiClient; | |
10 | final String nodeID; | |
11 | final PveNodeOverviewState init; | |
12 | @override | |
13 | PveNodeOverviewState get initialState => init; | |
14 | ||
15 | PveNodeOverviewBloc( | |
598a93b4 | 16 | {required this.apiClient, required this.nodeID, required this.init}); |
694d7a8f | 17 | |
598a93b4 | 18 | Timer? sTimer; |
694d7a8f TM |
19 | @override |
20 | void doOnListen() { | |
21 | sTimer = Timer.periodic( | |
5d2e7931 | 22 | const Duration(seconds: 4), (timer) => events.add(UpdateNodeStatus())); |
694d7a8f TM |
23 | } |
24 | ||
25 | @override | |
26 | void doOnCancel() { | |
27 | if (!hasListener) { | |
28 | sTimer?.cancel(); | |
29 | } | |
30 | } | |
31 | ||
32 | @override | |
33 | Stream<PveNodeOverviewState> processEvents( | |
34 | PveNodeOverviewEvent event) async* { | |
35 | if (event is UpdateNodeStatus) { | |
36 | final status = await apiClient.getNodeStatus(nodeID); | |
37 | yield latestState.rebuild((b) => b..status.replace(status)); | |
38 | final rrdData = | |
39 | await apiClient.getNodeRRDdata(nodeID, PveRRDTimeframeType.hour); | |
40 | yield latestState.rebuild((b) => b..rrdData.replace(rrdData)); | |
41 | final services = await apiClient.getNodeServices(nodeID); | |
42 | yield latestState.rebuild((b) => b..services.replace(services)); | |
bfa1fc69 DC |
43 | try { |
44 | final updates = await apiClient.getNodeAptUpdate(nodeID); | |
45 | yield latestState.rebuild((b) => b..updates.replace(updates)); | |
46 | } on ProxmoxApiException catch (e) { | |
47 | // only throw on non permission related errors | |
48 | if (e.statusCode != 403) { | |
49 | rethrow; | |
50 | } | |
51 | } | |
694d7a8f TM |
52 | final disks = await apiClient.getNodeDisksList(nodeID); |
53 | yield latestState.rebuild((b) => b..disks.replace(disks)); | |
54 | } | |
55 | } | |
56 | } | |
57 | ||
58 | abstract class PveNodeOverviewEvent {} | |
59 | ||
60 | class UpdateNodeStatus extends PveNodeOverviewEvent {} |