2022-12-21 21:42:12 +00:00
|
|
|
use std::net::Ipv4Addr;
|
|
|
|
use std::path::PathBuf;
|
|
|
|
|
2022-12-23 00:36:32 +00:00
|
|
|
use serde::{Serialize, Deserialize};
|
|
|
|
use sqlx::SqlitePool;
|
2022-12-21 21:42:12 +00:00
|
|
|
|
2022-12-23 00:36:32 +00:00
|
|
|
use crate::errors::*;
|
|
|
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
2022-12-21 21:42:12 +00:00
|
|
|
pub struct AppConfig {
|
2022-12-23 19:34:17 +00:00
|
|
|
#[serde(default = "default_listen_addr")]
|
2022-12-21 21:42:12 +00:00
|
|
|
pub listen_addr: Ipv4Addr,
|
2022-12-23 19:34:17 +00:00
|
|
|
#[serde(default = "default_listen_port")]
|
2022-12-21 21:42:12 +00:00
|
|
|
pub listen_port: u16,
|
2022-12-23 19:34:17 +00:00
|
|
|
#[serde(default = "default_rehide_ms")]
|
2022-12-23 00:36:32 +00:00
|
|
|
pub rehide_ms: u64,
|
2022-12-23 19:34:17 +00:00
|
|
|
#[serde(default = "default_start_minimized")]
|
|
|
|
pub start_minimized: bool,
|
2022-12-23 00:36:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-12-21 21:42:12 +00:00
|
|
|
impl Default for AppConfig {
|
|
|
|
fn default() -> Self {
|
2022-12-23 00:36:32 +00:00
|
|
|
AppConfig {
|
2022-12-23 19:34:17 +00:00
|
|
|
listen_addr: default_listen_addr(),
|
|
|
|
listen_port: default_listen_port(),
|
|
|
|
rehide_ms: default_rehide_ms(),
|
|
|
|
start_minimized: default_start_minimized(),
|
2022-12-21 21:42:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-12-23 00:36:32 +00:00
|
|
|
pub async fn load(pool: &SqlitePool) -> Result<AppConfig, SetupError> {
|
|
|
|
let res = sqlx::query!("SELECT * from config where name = 'main'")
|
|
|
|
.fetch_optional(pool)
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
let row = match res {
|
|
|
|
Some(row) => row,
|
|
|
|
None => return Ok(AppConfig::default()),
|
|
|
|
};
|
|
|
|
|
2022-12-23 19:34:17 +00:00
|
|
|
Ok(serde_json::from_str(&row.data)?)
|
2022-12-23 00:36:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pub fn get_or_create_db_path() -> PathBuf {
|
2022-12-21 21:42:12 +00:00
|
|
|
if cfg!(debug_assertions) {
|
|
|
|
return PathBuf::from("./creddy.db");
|
|
|
|
}
|
|
|
|
|
|
|
|
let mut parent = std::env::var("HOME")
|
|
|
|
.map(|h| {
|
|
|
|
let mut p = PathBuf::from(h);
|
|
|
|
p.push(".config");
|
|
|
|
p
|
|
|
|
})
|
|
|
|
.unwrap_or(PathBuf::from("."));
|
|
|
|
|
2022-12-22 00:22:24 +00:00
|
|
|
parent.push("creddy.db");
|
2022-12-21 21:42:12 +00:00
|
|
|
parent
|
2022-12-23 00:36:32 +00:00
|
|
|
}
|
2022-12-23 19:34:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
fn default_listen_port() -> u16 {
|
|
|
|
if cfg!(debug_assertions) {
|
|
|
|
12_345
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
19_923
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn default_listen_addr() -> Ipv4Addr { Ipv4Addr::LOCALHOST }
|
|
|
|
|
|
|
|
fn default_rehide_ms() -> u64 { 1000 }
|
|
|
|
|
|
|
|
fn default_start_minimized() -> bool { true }
|