Skip to main content

qualia_client_core/api/
protocol.rs

1//! Qualia protocol + desktop updater
2
3#![allow(non_snake_case)]
4
5use std::path::Path;
6
7pub fn seed_bundled_qapps() -> Result<Vec<String>, String> {
8    crate::bundled_qapps::seed_bundled_qapps()
9}
10
11pub fn seed_bundled_ontologies() -> Result<Vec<String>, String> {
12    crate::bundled_ontologies::seed_bundled_ontologies()
13}
14
15pub fn installed_qapp_version(qapp_name: &str) -> Result<Option<String>, String> {
16    let state = crate::state::APP_STATE
17        .get()
18        .ok_or("APP_STATE not initialized")?;
19    let storage = state
20        .config
21        .lock()
22        .map_err(|e| e.to_string())?
23        .storage_path
24        .clone();
25    Ok(crate::bundled_qapps::installed_qapp_version(
26        Path::new(&storage),
27        qapp_name,
28    ))
29}
30
31pub fn check_qapp_update(qapp_name: String) -> Result<String, String> {
32    let state = crate::state::APP_STATE
33        .get()
34        .ok_or("APP_STATE not initialized")?;
35    let storage = state
36        .config
37        .lock()
38        .map_err(|e| e.to_string())?
39        .storage_path
40        .clone();
41    let status = crate::bundled_qapps::check_bundled_qapp_update(&qapp_name, Path::new(&storage));
42    serde_json::to_string(&status).map_err(|e| e.to_string())
43}
44
45pub fn check_qapp_update_from_path(
46    qapp_name: String,
47    source_path: String,
48) -> Result<String, String> {
49    let state = crate::state::APP_STATE
50        .get()
51        .ok_or("APP_STATE not initialized")?;
52    let storage = state
53        .config
54        .lock()
55        .map_err(|e| e.to_string())?
56        .storage_path
57        .clone();
58    let status = crate::bundled_qapps::check_qapp_update_from_source(
59        &qapp_name,
60        Path::new(&storage),
61        Path::new(&source_path),
62    )?;
63    serde_json::to_string(&status).map_err(|e| e.to_string())
64}
65
66pub fn list_qapp_update_offers() -> Result<String, String> {
67    let state = crate::state::APP_STATE
68        .get()
69        .ok_or("APP_STATE not initialized")?;
70    let storage = state
71        .config
72        .lock()
73        .map_err(|e| e.to_string())?
74        .storage_path
75        .clone();
76    let offers = crate::bundled_qapps::list_bundled_qapp_updates(Path::new(&storage));
77    serde_json::to_string(&offers).map_err(|e| e.to_string())
78}
79
80pub fn apply_qapp_update(qapp_name: String) -> Result<String, String> {
81    let state = crate::state::APP_STATE
82        .get()
83        .ok_or("APP_STATE not initialized")?;
84    let storage = state
85        .config
86        .lock()
87        .map_err(|e| e.to_string())?
88        .storage_path
89        .clone();
90    crate::bundled_qapps::apply_bundled_qapp_update(Path::new(&storage), &qapp_name)
91}
92
93pub fn apply_qapp_update_from_path(
94    qapp_name: String,
95    source_path: String,
96) -> Result<String, String> {
97    let state = crate::state::APP_STATE
98        .get()
99        .ok_or("APP_STATE not initialized")?;
100    let storage = state
101        .config
102        .lock()
103        .map_err(|e| e.to_string())?
104        .storage_path
105        .clone();
106    crate::bundled_qapps::upgrade_qapp_from_source(
107        Path::new(&storage),
108        &qapp_name,
109        Path::new(&source_path),
110    )
111}
112
113pub fn start_qualia_protocol() -> Result<u16, String> {
114    crate::qapps_protocol::start_qualia_protocol()
115}
116
117pub fn qualia_protocol_port() -> u16 {
118    crate::qapps_protocol::qualia_protocol_port()
119}
120
121pub async fn download_and_install_update(url: String) -> Result<(), String> {
122    crate::update_installer::download_and_install_update(url).await
123}
124
125pub fn register_qualia_uri_handler(exe_path: String) -> Result<(), String> {
126    crate::qapps_protocol::register_qualia_uri_handler(&exe_path)
127}