1use std::path::{Path, PathBuf};
2
3use serde::{Deserialize, Serialize};
4
5use crate::{
6 cfg::{AzureBlobCfg, PyHttpReaderCfg, SshCfg},
7 file_util::PathPair,
8};
9
10#[derive(Clone, Default, PartialEq, Eq)]
11pub struct MetaDataFlags {
12 pub is_loading_screen_active: Option<bool>,
13 pub is_file_list_empty: Option<bool>,
14}
15
16#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq)]
17pub enum ConnectionData {
18 Ssh(SshCfg),
19 PyHttp(PyHttpReaderCfg),
20 #[cfg(feature = "azure_blob")]
21 AzureBlobCfg(AzureBlobCfg),
22 #[default]
23 None,
24}
25#[derive(Clone, Default, PartialEq, Eq)]
26pub struct MetaData {
27 file_path_pair: Option<PathPair>,
28 pub file_selected_idx: Option<usize>,
29 pub connection_data: ConnectionData,
30 pub ssh_cfg: Option<SshCfg>,
31 pub opened_folder: Option<PathPair>,
32 pub export_folder: Option<String>,
33 pub flags: MetaDataFlags,
34 prj_path: Option<PathBuf>,
35}
36impl MetaData {
37 #[allow(clippy::too_many_arguments)]
38 pub fn new(
39 file_path_pair: Option<PathPair>,
40 file_selected_idx: Option<usize>,
41 connection_data: ConnectionData,
42 ssh_cfg: Option<SshCfg>,
43 opened_folder: Option<PathPair>,
44 export_folder: Option<String>,
45 flags: MetaDataFlags,
46 prj_path: Option<PathBuf>,
47 ) -> Self {
48 MetaData {
49 file_path_pair,
50 file_selected_idx,
51 connection_data,
52 ssh_cfg,
53 opened_folder,
54 export_folder,
55 flags,
56 prj_path,
57 }
58 }
59 pub fn from_filepath(
60 file_path_absolute: String,
61 file_selected_idx: usize,
62 prj_path: &Path,
63 ) -> Self {
64 MetaData {
65 file_path_pair: Some(PathPair::new(file_path_absolute, prj_path)),
66 file_selected_idx: Some(file_selected_idx),
67 connection_data: ConnectionData::None,
68 ssh_cfg: None,
69 opened_folder: None,
70 export_folder: None,
71 flags: MetaDataFlags::default(),
72 prj_path: Some(prj_path.to_path_buf()),
73 }
74 }
75 pub fn file_path_absolute(&self) -> Option<&str> {
76 self.file_path_pair.as_ref().map(|fpp| fpp.path_absolute())
77 }
78 pub fn file_path_relative(&self) -> Option<&str> {
79 self.file_path_pair.as_ref().map(|fpp| fpp.path_relative())
80 }
81 pub fn prj_path(&self) -> Option<&Path> {
82 self.prj_path.as_deref()
83 }
84}