summaryrefslogtreecommitdiff
path: root/iced_builder/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'iced_builder/src/config.rs')
-rw-r--r--iced_builder/src/config.rs121
1 files changed, 0 insertions, 121 deletions
diff --git a/iced_builder/src/config.rs b/iced_builder/src/config.rs
deleted file mode 100644
index 9d29af7..0000000
--- a/iced_builder/src/config.rs
+++ /dev/null
@@ -1,121 +0,0 @@
-use std::path::PathBuf;
-
-use serde::Deserialize;
-use tokio_stream::wrappers::ReadDirStream;
-use tokio_stream::StreamExt;
-
-use crate::theme::{theme_from_str, theme_index, Appearance, Theme};
-use crate::{environment, Error};
-
-#[derive(Debug, Clone, Default)]
-pub struct Config {
- pub theme: Appearance,
- pub last_project: Option<PathBuf>,
-}
-
-impl Config {
- pub fn selected_theme(&self) -> iced::Theme {
- self.theme.selected.clone()
- }
-
- pub fn config_dir() -> PathBuf {
- let dir = environment::config_dir();
-
- if !dir.exists() {
- std::fs::create_dir_all(dir.as_path())
- .expect("expected permissions to create config folder");
- }
- dir
- }
-
- pub fn themes_dir() -> PathBuf {
- let dir = Self::config_dir().join("themes");
-
- if !dir.exists() {
- std::fs::create_dir_all(dir.as_path())
- .expect("expected permissions to create themes folder");
- }
- dir
- }
-
- pub fn config_file_path() -> PathBuf {
- Self::config_dir().join(environment::CONFIG_FILE_NAME)
- }
-
- pub async fn load() -> Result<Self, Error> {
- use tokio::fs;
-
- #[derive(Deserialize)]
- pub struct Configuration {
- #[serde(default)]
- pub theme: String,
- pub last_project: Option<PathBuf>,
- }
-
- let path = Self::config_file_path();
- if !path.try_exists()? {
- return Err(Error::ConfigMissing);
- }
-
- let content = fs::read_to_string(path).await?;
-
- let Configuration {
- theme,
- last_project,
- } = toml::from_str(content.as_ref())?;
-
- let theme = Self::load_theme(theme).await.unwrap_or_default();
-
- Ok(Self {
- theme,
- last_project,
- })
- }
-
- pub async fn load_theme(theme_name: String) -> Result<Appearance, Error> {
- use tokio::fs;
-
- let read_entry = |entry: fs::DirEntry| async move {
- let content = fs::read_to_string(entry.path()).await.ok()?;
-
- let theme: Theme = toml::from_str(content.as_ref()).ok()?;
- let name = entry.path().file_stem()?.to_string_lossy().to_string();
-
- Some(theme.into_iced_theme(name))
- };
-
- let mut all = iced::Theme::ALL.to_owned();
- let mut selected = iced::Theme::default();
-
- if theme_index(&theme_name, iced::Theme::ALL).is_some() {
- selected = theme_from_str(None, &theme_name);
- }
-
- let mut stream =
- ReadDirStream::new(fs::read_dir(Self::themes_dir()).await?);
- while let Some(entry) = stream.next().await {
- let Ok(entry) = entry else {
- continue;
- };
-
- let Some(file_name) = entry.file_name().to_str().map(String::from)
- else {
- continue;
- };
-
- if let Some(file_name) = file_name.strip_suffix(".toml") {
- if let Some(theme) = read_entry(entry).await {
- if file_name == theme_name {
- selected = theme.clone();
- }
- all.push(theme);
- }
- }
- }
-
- Ok(Appearance {
- selected,
- all: all.into(),
- })
- }
-}