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    AppLaunched { bundle_id: String },
37    AppLaunchFailed(String),
38}
39
40#[derive(Debug, Clone, PartialEq)]
41pub enum SideEffect {
42    Boot(Uuid),
43    Shutdown(Uuid),
44    Refresh,
45    StartRecording(Uuid),
46    StopRecording,
47    CaptureScreenshot(Uuid),
48    SetAppearance(Uuid, Appearance),
49    EraseSimulator(Uuid),
50    DeleteSimulator(Uuid),
51    LoadTargets,
52    CreateSimulator { name: String, device_type: DeviceType, runtime: Runtime },
53    FocusSimulator(Uuid),
54    LoadInstalledApps(Uuid),
55    ApplyPrivacy { udid: Uuid, action: PrivacyAction, permission: PrivacyPermission, bundle_id: String },
56    LoadUrlHistory,
57    OpenUrl { udid: Uuid, url: String },
58    LaunchApp { udid: Uuid, bundle_id: String, language: Option<String> },
59}
60
61#[derive(Debug, Clone, PartialEq)]
62pub struct ReducerOutput {
63    pub state: AppState,
64    pub effects: Vec<SideEffect>,
65}
66
67impl ReducerOutput {
68    pub fn new(state: AppState) -> Self {
69        Self { state, effects: Vec::new() }
70    }
71
72    pub fn with_effects(state: AppState, effects: Vec<SideEffect>) -> Self {
73        Self { state, effects }
74    }
75}