Skip to main content

holodeck_simctl_tui/state/
event.rs

1use std::path::PathBuf;
2
3use holodeck_core::models::{Appearance, DeviceType, InstalledApp, PrivacyAction, PrivacyPermission, Runtime, Simulator};
4use uuid::Uuid;
5
6use super::app_state::AppState;
7use super::key::Key;
8
9#[derive(Debug, Clone)]
10pub enum AppEvent {
11    Refreshed(Vec<Simulator>),
12    RefreshFailed(String),
13    Key(Key),
14    Resized { rows: i64, cols: i64 },
15    PollTick,
16    OperationCompleted(Uuid),
17    OperationFailed(Uuid, String),
18    RecordingStarted(Uuid, PathBuf),
19    RecordingStopped(Option<PathBuf>),
20    RecordingFailed(String),
21    ScreenshotSaved(PathBuf),
22    ScreenshotFailed(String),
23    AppearanceChanged(Uuid, Appearance),
24    AppearanceFailed(String),
25    TargetsLoaded { device_types: Vec<DeviceType>, runtimes: Vec<Runtime> },
26    TargetsFailed(String),
27    SimulatorCreated(Uuid, String),
28    SimulatorCreateFailed(String),
29    AppsLoaded(Vec<InstalledApp>),
30    AppsLoadFailed(String),
31    PrivacyApplied { bundle_id: String },
32    PrivacyApplyFailed(String),
33    UrlHistoryLoaded(Vec<String>),
34    UrlOpened { url: String, history: Vec<String> },
35    UrlOpenFailed(String),
36}
37
38#[derive(Debug, Clone, PartialEq)]
39pub enum SideEffect {
40    Boot(Uuid),
41    Shutdown(Uuid),
42    Refresh,
43    StartRecording(Uuid),
44    StopRecording,
45    CaptureScreenshot(Uuid),
46    SetAppearance(Uuid, Appearance),
47    EraseSimulator(Uuid),
48    DeleteSimulator(Uuid),
49    LoadTargets,
50    CreateSimulator { name: String, device_type: DeviceType, runtime: Runtime },
51    FocusSimulator(Uuid),
52    LoadInstalledApps(Uuid),
53    ApplyPrivacy { udid: Uuid, action: PrivacyAction, permission: PrivacyPermission, bundle_id: String },
54    LoadUrlHistory,
55    OpenUrl { udid: Uuid, url: String },
56}
57
58#[derive(Debug, Clone, PartialEq)]
59pub struct ReducerOutput {
60    pub state: AppState,
61    pub effects: Vec<SideEffect>,
62}
63
64impl ReducerOutput {
65    pub fn new(state: AppState) -> Self {
66        Self { state, effects: Vec::new() }
67    }
68
69    pub fn with_effects(state: AppState, effects: Vec<SideEffect>) -> Self {
70        Self { state, effects }
71    }
72}