Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9961fe2f82 | |||
| 61ce0468c6 | |||
|
|
29071b11da | ||
|
|
f2129ba321 |
@@ -0,0 +1 @@
|
|||||||
|
github: Dark-Alex-17
|
||||||
Generated
+1
-1
@@ -1148,7 +1148,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "managarr"
|
name = "managarr"
|
||||||
version = "0.1.2"
|
version = "0.1.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "managarr"
|
name = "managarr"
|
||||||
version = "0.1.2"
|
version = "0.1.3"
|
||||||
authors = ["Alex Clarke <alex.j.tusa@gmail.com>"]
|
authors = ["Alex Clarke <alex.j.tusa@gmail.com>"]
|
||||||
description = "A TUI and CLI to manage your Servarrs"
|
description = "A TUI and CLI to manage your Servarrs"
|
||||||
keywords = ["managarr", "tui-rs", "dashboard", "servarr", "tui"]
|
keywords = ["managarr", "tui-rs", "dashboard", "servarr", "tui"]
|
||||||
|
|||||||
+1
-1
@@ -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" ]
|
||||||
|
|||||||
@@ -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
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user