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';
7 class PveNodeOverviewBloc
8 extends ProxmoxBaseBloc<PveNodeOverviewEvent, PveNodeOverviewState> {
9 final ProxmoxApiClient apiClient;
11 final PveNodeOverviewState init;
13 PveNodeOverviewState get initialState => init;
16 {required this.apiClient, required this.nodeID, required this.init});
21 sTimer = Timer.periodic(
22 const Duration(seconds: 4), (timer) => events.add(UpdateNodeStatus()));
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));
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));
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) {
52 final disks = await apiClient.getNodeDisksList(nodeID);
53 yield latestState.rebuild((b) => b..disks.replace(disks));
58 abstract class PveNodeOverviewEvent {}
60 class UpdateNodeStatus extends PveNodeOverviewEvent {}