use known folders to place project manager settings

- makes it possible multiple users to work with project manager and each one will have their own settings file
- solves some access issues where an app cannot write anything to a folder where it is located without admin access
- changed project manager name to unique one
This commit is contained in:
Dmitry Stepanov
2024-12-23 13:15:48 +03:00
parent b9b714c01b
commit 6b4ddd693e
2 changed files with 47 additions and 13 deletions
+3 -2
View File
@@ -1,5 +1,5 @@
[package]
name = "project-manager"
name = "fyrox-project-manager"
version = "0.1.0"
edition = "2021"
@@ -11,4 +11,5 @@ serde = { version = "1", features = ["derive"] }
ron = "0.8.1"
open = "5.0.1"
cargo_metadata = "0.19.0"
serde_json = "1.0.133"
serde_json = "1.0.133"
directories = "5.0.1"
+44 -11
View File
@@ -18,6 +18,7 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
use directories::ProjectDirs;
use fyrox::{
core::{log::Log, pool::Handle, reflect::prelude::*},
gui::{
@@ -40,11 +41,30 @@ use fyrox::{
use fyrox_build_tools::{CommandDescriptor, EnvironmentVariable};
use ron::ser::PrettyConfig;
use serde::{Deserialize, Serialize};
use std::ops::{Deref, DerefMut};
use std::{fs::File, io::Write, path::PathBuf, sync::Arc};
use std::{
fs::File,
io::Write,
ops::{Deref, DerefMut},
path::PathBuf,
sync::{Arc, LazyLock},
};
pub const MANIFEST_PATH_VAR: &str = "%MANIFEST_PATH%";
static CONFIG_DIR: LazyLock<PathBuf> = LazyLock::new(|| {
let config_dir = ProjectDirs::from("", "Fyrox", "Fyrox Project Manager")
.map(|dirs| dirs.config_dir().to_path_buf())
.unwrap_or_else(|| {
eprintln!("Unable to fetch project dirs! Using current folder instead...");
PathBuf::from("./")
});
if let Err(err) = std::fs::create_dir_all(&config_dir) {
eprintln!("Unable to create config dir: {err:?}",);
}
println!("Config dir: {:?}", config_dir);
config_dir
});
#[derive(Default, Serialize, Deserialize, Reflect, Debug)]
pub struct SettingsData {
#[serde(default = "default_open_ide_command")]
@@ -67,21 +87,34 @@ fn default_open_ide_command() -> CommandDescriptor {
}
impl SettingsData {
pub const PATH: &'static str = "pm_settings.ron";
pub const FILE_NAME: &'static str = "pm_settings.ron";
fn actual_path() -> PathBuf {
CONFIG_DIR.join(Self::FILE_NAME)
}
pub fn load() -> Self {
if let Ok(file) = File::open(Self::PATH) {
ron::de::from_reader(file).unwrap_or_default()
} else {
Default::default()
match File::open(Self::actual_path()) {
Ok(file) => ron::de::from_reader(file).unwrap_or_default(),
Err(err) => {
eprintln!("Unable to load project manager settings! Reason: {err:?}");
Default::default()
}
}
}
pub fn save(&self) {
if let Ok(mut file) = File::create(Self::PATH) {
let pretty_string =
ron::ser::to_string_pretty(self, PrettyConfig::default()).unwrap_or_default();
let _ = file.write_all(pretty_string.as_bytes());
match File::create(Self::actual_path()) {
Ok(mut file) => {
let pretty_string =
ron::ser::to_string_pretty(self, PrettyConfig::default()).unwrap_or_default();
if let Err(err) = file.write_all(pretty_string.as_bytes()) {
eprintln!("Unable to save project manager settings! Reason: {err:?}");
}
}
Err(err) => {
eprintln!("Unable to create project manager settings file! Reason: {err:?}");
}
}
}
}