1 use std::path::PathBuf;
2 use std::iter::FromIterator;
3
4 use crate::BaseDirs;
5 use crate::UserDirs;
6 use crate::ProjectDirs;
7
base_dirs() -> Option<BaseDirs>8 pub fn base_dirs() -> Option<BaseDirs> {
9 let home_dir = dirs_sys_next::known_folder_profile();
10 let data_dir = dirs_sys_next::known_folder_roaming_app_data();
11 let data_local_dir = dirs_sys_next::known_folder_local_app_data();
12 if let (Some(home_dir), Some(data_dir), Some(data_local_dir)) = (home_dir, data_dir, data_local_dir) {
13 let cache_dir = data_local_dir.clone();
14 let config_dir = data_dir.clone();
15
16 let base_dirs = BaseDirs {
17 home_dir: home_dir,
18 cache_dir: cache_dir,
19 config_dir: config_dir,
20 data_dir: data_dir,
21 data_local_dir: data_local_dir,
22 executable_dir: None,
23 runtime_dir: None
24 };
25 Some(base_dirs)
26 } else {
27 None
28 }
29 }
30
user_dirs() -> Option<UserDirs>31 pub fn user_dirs() -> Option<UserDirs> {
32 if let Some(home_dir) = dirs_sys_next::known_folder_profile() {
33 let audio_dir = dirs_sys_next::known_folder_music();
34 let desktop_dir = dirs_sys_next::known_folder_desktop();
35 let document_dir = dirs_sys_next::known_folder_documents();
36 let download_dir = dirs_sys_next::known_folder_downloads();
37 let picture_dir = dirs_sys_next::known_folder_pictures();
38 let public_dir = dirs_sys_next::known_folder_public();
39 let template_dir = dirs_sys_next::known_folder_templates();
40 let video_dir = dirs_sys_next::known_folder_videos();
41
42 let user_dirs = UserDirs {
43 home_dir: home_dir,
44 audio_dir: audio_dir,
45 desktop_dir: desktop_dir,
46 document_dir: document_dir,
47 download_dir: download_dir,
48 font_dir: None,
49 picture_dir: picture_dir,
50 public_dir: public_dir,
51 template_dir: template_dir,
52 video_dir: video_dir
53 };
54 Some(user_dirs)
55 } else {
56 None
57 }
58 }
59
project_dirs_from_path(project_path: PathBuf) -> Option<ProjectDirs>60 pub fn project_dirs_from_path(project_path: PathBuf) -> Option<ProjectDirs> {
61 let app_data_local = dirs_sys_next::known_folder_local_app_data();
62 let app_data_roaming = dirs_sys_next::known_folder_roaming_app_data();
63 if let (Some(app_data_local), Some(app_data_roaming)) = (app_data_local, app_data_roaming) {
64 let app_data_local = app_data_local.join(&project_path);
65 let app_data_roaming = app_data_roaming.join(&project_path);
66 let cache_dir = app_data_local.join("cache");
67 let data_local_dir = app_data_local.join("data");
68 let config_dir = app_data_roaming.join("config");
69 let data_dir = app_data_roaming.join("data");
70
71 let project_dirs = ProjectDirs {
72 project_path: project_path,
73 cache_dir: cache_dir,
74 config_dir: config_dir,
75 data_dir: data_dir,
76 data_local_dir: data_local_dir,
77 runtime_dir: None
78 };
79 Some(project_dirs)
80 } else {
81 None
82 }
83
84 }
85
project_dirs_from(_qualifier: &str, organization: &str, application: &str) -> Option<ProjectDirs>86 pub fn project_dirs_from(_qualifier: &str, organization: &str, application: &str) -> Option<ProjectDirs> {
87 ProjectDirs::from_path(PathBuf::from_iter(&[organization, application]))
88 }
89