Compare commits

...

2 Commits

Author SHA1 Message Date
Connor Johnstone 763774ac1e Added the log level
CI / check (push) Successful in 1m10s
CI / docker (push) Successful in 3m11s
2026-03-22 13:05:10 -04:00
Connor Johnstone 88b280c2b2 Added the data dir 2026-03-22 13:00:12 -04:00
4 changed files with 44 additions and 24 deletions
+1 -1
View File
@@ -37,9 +37,9 @@ COPY --from=backend /build/shanty-dl/scripts/cookie_manager.py /usr/share/shanty
RUN mkdir -p /config /data /music
ENV SHANTY_CONFIG=/config/config.yaml
ENV SHANTY_DATA_DIR=/data
ENV SHANTY_DATABASE_URL=sqlite:///data/shanty.db?mode=rwc
ENV SHANTY_LIBRARY_PATH=/music
ENV SHANTY_DOWNLOAD_PATH=/data/downloads
EXPOSE 8085 6080
+24 -16
View File
@@ -44,6 +44,10 @@ pub struct AppConfig {
#[serde(default)]
pub musicbrainz: MusicBrainzConfig,
/// Log level: "error", "warn", "info", "debug", "trace". Default: "info".
#[serde(default = "default_log_level")]
pub log_level: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -219,6 +223,7 @@ impl Default for AppConfig {
scheduling: SchedulingConfig::default(),
subsonic: SubsonicConfig::default(),
musicbrainz: MusicBrainzConfig::default(),
log_level: default_log_level(),
}
}
}
@@ -279,23 +284,22 @@ impl Default for MetadataConfig {
}
}
fn default_log_level() -> String {
"info".to_string()
}
fn default_library_path() -> PathBuf {
dirs::audio_dir().unwrap_or_else(|| PathBuf::from("~/Music"))
}
fn default_database_url() -> String {
let data_dir = dirs::data_dir()
.unwrap_or_else(|| PathBuf::from("."))
.join("shanty");
std::fs::create_dir_all(&data_dir).ok();
format!("sqlite://{}?mode=rwc", data_dir.join("shanty.db").display())
let dd = data_dir();
std::fs::create_dir_all(&dd).ok();
format!("sqlite://{}?mode=rwc", dd.join("shanty.db").display())
}
fn default_download_path() -> PathBuf {
let dir = dirs::data_dir()
.unwrap_or_else(|| PathBuf::from("."))
.join("shanty")
.join("downloads");
let dir = data_dir().join("downloads");
std::fs::create_dir_all(&dir).ok();
dir
}
@@ -359,11 +363,18 @@ fn default_vnc_port() -> u16 {
6080
}
/// Return the application data directory (e.g. ~/.local/share/shanty).
/// Return the application data directory.
///
/// Uses `SHANTY_DATA_DIR` env var if set, otherwise `~/.local/share/shanty`.
/// In Docker, set `SHANTY_DATA_DIR=/data` so all data goes to the persistent volume.
pub fn data_dir() -> PathBuf {
dirs::data_dir()
.unwrap_or_else(|| PathBuf::from("."))
.join("shanty")
if let Ok(v) = std::env::var("SHANTY_DATA_DIR") {
PathBuf::from(v)
} else {
dirs::data_dir()
.unwrap_or_else(|| PathBuf::from("."))
.join("shanty")
}
}
// --- Loading and Saving ---
@@ -430,9 +441,6 @@ impl AppConfig {
if let Ok(v) = std::env::var("SHANTY_LIBRARY_PATH") {
config.library_path = PathBuf::from(v);
}
if let Ok(v) = std::env::var("SHANTY_DOWNLOAD_PATH") {
config.download_path = PathBuf::from(v);
}
if let Ok(v) = std::env::var("SHANTY_WEB_PORT")
&& let Ok(port) = v.parse()
{
+18 -6
View File
@@ -56,18 +56,30 @@ async fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
// Load config early so we can use log_level from it
let mut config = AppConfig::load(cli.config.as_deref());
// CLI -v flags override config log_level
let filter = match cli.verbose {
0 => "info,shanty=info,shanty_web=info",
1 => "info,shanty=debug,shanty_web=debug",
_ => "debug,shanty=trace,shanty_web=trace",
0 => {
// Use config log_level
let level = config.log_level.to_lowercase();
match level.as_str() {
"error" => "error".to_string(),
"warn" => "warn".to_string(),
"debug" => "debug,shanty=debug,shanty_web=debug".to_string(),
"trace" => "trace,shanty=trace,shanty_web=trace".to_string(),
_ => "info,shanty=info,shanty_web=info".to_string(),
}
}
1 => "info,shanty=debug,shanty_web=debug".to_string(),
_ => "debug,shanty=trace,shanty_web=trace".to_string(),
};
tracing_subscriber::fmt()
.with_env_filter(
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(filter)),
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(&filter)),
)
.init();
let mut config = AppConfig::load(cli.config.as_deref());
if let Some(port) = cli.port {
config.web.port = port;
}