1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
use std::path::{Path, PathBuf};

use serde::{Deserialize, Serialize};

use crate::{
    cfg::{AzureBlobCfg, PyHttpReaderCfg, SshCfg},
    file_util::PathPair,
};

#[derive(Clone, Default, PartialEq, Eq)]
pub struct MetaDataFlags {
    pub is_loading_screen_active: Option<bool>,
    pub is_file_list_empty: Option<bool>,
}

#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq)]
pub enum ConnectionData {
    Ssh(SshCfg),
    PyHttp(PyHttpReaderCfg),
    #[cfg(feature = "azure_blob")]
    AzureBlobCfg(AzureBlobCfg),
    #[default]
    None,
}
#[derive(Clone, Default, PartialEq, Eq)]
pub struct MetaData {
    file_path_pair: Option<PathPair>,
    pub file_selected_idx: Option<usize>,
    pub connection_data: ConnectionData,
    pub ssh_cfg: Option<SshCfg>,
    pub opened_folder: Option<PathPair>,
    pub export_folder: Option<String>,
    pub flags: MetaDataFlags,
    prj_path: Option<PathBuf>,
}
impl MetaData {
    #[allow(clippy::too_many_arguments)]
    pub fn new(
        file_path_pair: Option<PathPair>,
        file_selected_idx: Option<usize>,
        connection_data: ConnectionData,
        ssh_cfg: Option<SshCfg>,
        opened_folder: Option<PathPair>,
        export_folder: Option<String>,
        flags: MetaDataFlags,
        prj_path: Option<PathBuf>,
    ) -> Self {
        MetaData {
            file_path_pair,
            file_selected_idx,
            connection_data,
            ssh_cfg,
            opened_folder,
            export_folder,
            flags,
            prj_path,
        }
    }
    pub fn from_filepath(
        file_path_absolute: String,
        file_selected_idx: usize,
        prj_path: &Path,
    ) -> Self {
        MetaData {
            file_path_pair: Some(PathPair::new(file_path_absolute, prj_path)),
            file_selected_idx: Some(file_selected_idx),
            connection_data: ConnectionData::None,
            ssh_cfg: None,
            opened_folder: None,
            export_folder: None,
            flags: MetaDataFlags::default(),
            prj_path: Some(prj_path.to_path_buf()),
        }
    }
    pub fn file_path_absolute(&self) -> Option<&str> {
        self.file_path_pair.as_ref().map(|fpp| fpp.path_absolute())
    }
    pub fn file_path_relative(&self) -> Option<&str> {
        self.file_path_pair.as_ref().map(|fpp| fpp.path_relative())
    }
    pub fn prj_path(&self) -> Option<&Path> {
        self.prj_path.as_deref()
    }
}