alfred_workflow_rust_project/
workflow.rs

1use std::process::exit;
2use crate::alfred::{Alfred, AlfredEnv};
3use crate::workflow_item::WorkflowItem;
4use serde::{Deserialize, Serialize};
5use crate::icon::BuiltinIcon;
6
7// Alfred workflow object
8#[derive(Serialize, Deserialize)]
9pub struct AlfredWorkflow {
10    #[serde(skip_serializing)]
11    alfred: Alfred,
12    items: Vec<WorkflowItem>,
13}
14
15impl AlfredWorkflow {
16    pub fn init() -> AlfredWorkflow {
17        AlfredWorkflow {
18            alfred: Alfred::init(),
19            items: Vec::new(),
20        }
21    }
22
23    pub fn get_workflow_env(key: &str) -> String {
24        std::env::var(key).unwrap_or_default()
25    }
26
27    pub fn send_feedback(&self) {
28        print!("{}", serde_json::to_string(self).unwrap())
29    }
30
31    pub fn add_item(mut self, item: WorkflowItem) -> AlfredWorkflow {
32        self.items.push(item);
33        self
34    }
35
36    // pub fn add_item2(&mut self, item: WorkflowItem) {
37    //     let vec = &mut self.items;
38    //     vec.push(item);
39    // }
40
41    pub fn fatal_error(&mut self, msg: &str, detail: &str) {
42        let error = WorkflowItem::new(msg)
43            .subtitle(detail)
44            .icon(BuiltinIcon::ERROR.get_icon());
45        self.items = vec![error];
46        self.send_feedback();
47        exit(0)
48    }
49
50    pub fn get_config(&self, name: &str) -> String {
51        std::env::var(name).unwrap_or_default()
52    }
53}
54
55impl AlfredEnv for AlfredWorkflow {
56    fn get_preference_path(&self) -> String {
57        self.alfred.get_preference_path()
58    }
59
60    fn get_preference_hash_path(&self) -> String {
61        self.alfred.get_preference_hash_path()
62    }
63
64    fn get_theme(&self) -> String {
65        self.alfred.get_theme()
66    }
67
68    fn get_version(&self) -> String {
69        self.alfred.get_version()
70    }
71
72    fn get_version_build(&self) -> String {
73        self.alfred.get_version_build()
74    }
75
76    fn get_workflow_bundle_id(&self) -> String {
77        self.alfred.get_workflow_bundle_id()
78    }
79
80    fn get_workflow_cache_path(&self) -> String {
81        self.alfred.get_workflow_cache_path()
82    }
83
84    fn get_workflow_data_path(&self) -> String {
85        self.alfred.get_workflow_data_path()
86    }
87
88    fn get_workflow_name(&self) -> String {
89        self.alfred.get_workflow_name()
90    }
91
92    fn is_debug_mode(&self) -> bool {
93        self.alfred.is_debug_mode()
94    }
95
96    fn get_workflow_uuid(&self) -> String {
97        self.alfred.get_workflow_uuid()
98    }
99
100    fn get_workflow_version(&self) -> String {
101        self.alfred.get_workflow_version()
102    }
103
104    fn get_theme_background(&self) -> String {
105        self.alfred.get_theme_background()
106    }
107
108    fn get_theme_selection_background(&self) -> String {
109        self.alfred.get_theme_selection_background()
110    }
111
112    fn get_theme_subtext(&self) -> String {
113        self.alfred.get_theme_subtext()
114    }
115}