Compare commits
2 Commits
51f2c2ae8f
...
763774ac1e
| Author | SHA1 | Date | |
|---|---|---|---|
| 763774ac1e | |||
| 88b280c2b2 |
+1
-1
@@ -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
|
||||
|
||||
|
||||
+21
-13
@@ -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 {
|
||||
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()
|
||||
{
|
||||
|
||||
+1
-1
Submodule shanty-web updated: 3dba620c9b...44c96d125a
+18
-6
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user