Added --config and --disable-terminal-size-checks flags to make the demo work properly [skip ci]

This commit is contained in:
2024-10-31 14:53:49 -06:00
parent 29071b11da
commit 61ce0468c6
3 changed files with 48 additions and 13 deletions
+1 -1
View File
@@ -23,4 +23,4 @@ FROM debian:stable-slim
# Copy the compiled binary from the builder container # Copy the compiled binary from the builder container
COPY --from=builder --chown=nonroot:nonroot /usr/src/managarr-temp/managarr /usr/local/bin COPY --from=builder --chown=nonroot:nonroot /usr/src/managarr-temp/managarr /usr/local/bin
ENTRYPOINT [ "/usr/local/bin/managarr" ] ENTRYPOINT [ "/usr/local/bin/managarr", "--disable-terminal-size-checks" ]
+9
View File
@@ -185,6 +185,15 @@ $HOME/Library/Application Support/managarr/config.yml
%APPDATA%/Roaming/managarr/config.yml %APPDATA%/Roaming/managarr/config.yml
``` ```
## Specify Configuration File
It can sometimes be useful to specify the configuration file you wish to use. This is useful in cases
where you may have more than one instance of a given Servarr running. Thus, you can specify the
config file using the `--config` flag:
```shell
managarr --config /path/to/config.yml
```
### Example Configuration: ### Example Configuration:
```yaml ```yaml
radarr: radarr:
+38 -12
View File
@@ -1,12 +1,16 @@
#![warn(rust_2018_idioms)] #![warn(rust_2018_idioms)]
use std::fs::File;
use std::io::BufReader;
use std::panic::PanicHookInfo; use std::panic::PanicHookInfo;
use std::path::PathBuf;
use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc; use std::sync::Arc;
use std::{io, panic, process}; use std::{io, panic, process};
use anyhow::anyhow; use anyhow::anyhow;
use anyhow::Result; use anyhow::Result;
use app::AppConfig;
use clap::{ use clap::{
command, crate_authors, crate_description, crate_name, crate_version, CommandFactory, Parser, command, crate_authors, crate_description, crate_name, crate_version, CommandFactory, Parser,
}; };
@@ -62,6 +66,22 @@ static MIN_TERM_HEIGHT: u16 = 40;
struct Cli { struct Cli {
#[command(subcommand)] #[command(subcommand)]
command: Option<Command>, command: Option<Command>,
#[arg(
long,
global = true,
value_parser,
help = "The Managarr configuration file to use"
)]
config: Option<PathBuf>,
#[arg(long, global = true, help = "Disable the terminal size checks")]
disable_terminal_size_checks: bool,
}
fn load_config(path: &str) -> Result<AppConfig> {
let file = File::open(path).map_err(|e| anyhow!(e))?;
let reader = BufReader::new(file);
let config = serde_yaml::from_reader(reader)?;
Ok(config)
} }
#[tokio::main] #[tokio::main]
@@ -73,7 +93,11 @@ async fn main() -> Result<()> {
let running = Arc::new(AtomicBool::new(true)); let running = Arc::new(AtomicBool::new(true));
let r = running.clone(); let r = running.clone();
let args = Cli::parse(); let args = Cli::parse();
let config = confy::load("managarr", "config")?; let config = if let Some(ref config_file) = args.config {
load_config(config_file.to_str().expect("Invalid config file specified"))?
} else {
confy::load("managarr", "config")?
};
let (sync_network_tx, sync_network_rx) = mpsc::channel(500); let (sync_network_tx, sync_network_rx) = mpsc::channel(500);
let cancellation_token = CancellationToken::new(); let cancellation_token = CancellationToken::new();
let ctrlc_cancellation_token = cancellation_token.clone(); let ctrlc_cancellation_token = cancellation_token.clone();
@@ -110,7 +134,7 @@ async fn main() -> Result<()> {
None => { None => {
let app_nw = Arc::clone(&app); let app_nw = Arc::clone(&app);
std::thread::spawn(move || start_networking(sync_network_rx, &app_nw, cancellation_token)); std::thread::spawn(move || start_networking(sync_network_rx, &app_nw, cancellation_token));
start_ui(&app).await?; start_ui(&app, !args.disable_terminal_size_checks).await?;
} }
} }
@@ -132,16 +156,18 @@ async fn start_networking(
} }
} }
async fn start_ui(app: &Arc<Mutex<App<'_>>>) -> Result<()> { async fn start_ui(app: &Arc<Mutex<App<'_>>>, check_terminal_size: bool) -> Result<()> {
let (width, height) = size()?; if check_terminal_size {
if width < MIN_TERM_WIDTH || height < MIN_TERM_HEIGHT { let (width, height) = size()?;
return Err(anyhow!( if width < MIN_TERM_WIDTH || height < MIN_TERM_HEIGHT {
"Terminal too small. Minimum size required: {}x{}; current terminal size: {}x{}", return Err(anyhow!(
MIN_TERM_WIDTH, "Terminal too small. Minimum size required: {}x{}; current terminal size: {}x{}",
MIN_TERM_HEIGHT, MIN_TERM_WIDTH,
width, MIN_TERM_HEIGHT,
height width,
)); height
));
}
} }
let mut stdout = io::stdout(); let mut stdout = io::stdout();