Used the config-rs crate to allow reading from a config file from /etc/zealot/config.toml and from the home directory
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Gregory Ballantine 2022-09-15 18:10:42 -04:00
parent 0b6fb8a4f8
commit 024e4b2e1c
5 changed files with 25 additions and 46 deletions

View File

@ -8,6 +8,7 @@ license = "BSD 2-Clause"
authors = ["Gregory Ballantine <gballantine@bitgoblin.tech>"] authors = ["Gregory Ballantine <gballantine@bitgoblin.tech>"]
[dependencies] [dependencies]
config = { version = "0.13", features = ['toml'] }
log = "0.4" log = "0.4"
log4rs = "1.1" log4rs = "1.1"
toml = "0.5" toml = "0.5"

View File

@ -1,34 +0,0 @@
use serde_derive::Deserialize;
use std::fs;
#[derive(Deserialize)]
pub struct Config {
pub transcoder: Transcoder,
}
impl Config {
pub fn new(config_path: &str) -> Config {
let resolved_path = shellexpand::tilde(config_path);
let config_text = fs::read_to_string(&*resolved_path).unwrap();
let c: Config = toml::from_str(&config_text).unwrap();
return c;
}
pub fn get_repository(&self) -> String {
let resolved_path = shellexpand::tilde(&self.transcoder.repository);
return String::from(&*resolved_path);
}
}
#[derive(Deserialize)]
pub struct Transcoder {
pub repository: String,
pub interval: u16,
pub video_format: String,
pub video_codec: String,
pub video_profile: String,
pub video_resolution: String,
pub video_framerate: u8,
pub video_color: String,
pub audio_codec: String,
}

View File

@ -3,7 +3,7 @@ use config::Config;
use transcoder::repository::Repository; use transcoder::repository::Repository;
use transcoder::transcoder::Transcoder; use transcoder::transcoder::Transcoder;
mod config; mod settings;
mod transcoder; mod transcoder;
mod util; mod util;
@ -12,8 +12,8 @@ fn main() {
log4rs::init_file("./log4rs.yaml", Default::default()).unwrap(); log4rs::init_file("./log4rs.yaml", Default::default()).unwrap();
// create and initialize our config and repository objects // create and initialize our config and repository objects
let c: Config = Config::new("~/.config/zealot.toml"); let c: Config = settings::load_config();
let r: Repository = Repository::new(&c.get_repository()); let r: Repository = Repository::new(&shellexpand::tilde(&c.get_string("transcoder.repository").unwrap()));
// create and start the video transcoder object // create and start the video transcoder object
let t: Transcoder = Transcoder::new(c, r); let t: Transcoder = Transcoder::new(c, r);

12
src/settings.rs Normal file
View File

@ -0,0 +1,12 @@
use config::Config;
pub fn load_config() -> Config {
let settings = Config::builder()
// Add in `./Settings.toml`
.add_source(config::File::with_name("/etc/zealot/config.toml").required(false))
.add_source(config::File::with_name(&shellexpand::tilde("~/.config/zealot.toml")).required(false))
.build()
.unwrap();
return settings;
}

View File

@ -1,9 +1,9 @@
use config::Config;
use std::path::Path; use std::path::Path;
use std::process; use std::process;
use std::{thread, time}; use std::{thread, time};
use log::{info}; use log::{info};
use crate::config::Config;
use crate::util::io; use crate::util::io;
use super::repository::Repository; use super::repository::Repository;
@ -50,7 +50,7 @@ impl Transcoder {
} }
// put the loop to sleep for X minutes // put the loop to sleep for X minutes
let sleep_minutes = time::Duration::from_secs((self.config.transcoder.interval * 60).into()); let sleep_minutes = time::Duration::from_secs((self.config.get_int("transcoder.interval").unwrap() as u64 * 60).into());
thread::sleep(sleep_minutes); thread::sleep(sleep_minutes);
} }
} }
@ -62,13 +62,13 @@ impl Transcoder {
let cmd_output = process::Command::new("/usr/bin/ffmpeg") let cmd_output = process::Command::new("/usr/bin/ffmpeg")
.arg("-i") .arg(&*ingest_file.to_string_lossy()) .arg("-i") .arg(&*ingest_file.to_string_lossy())
.arg("-y") .arg("-y")
.arg("-f") .arg(&self.config.transcoder.video_format) .arg("-f") .arg(&self.config.get_string("transcoder.video_format").unwrap())
.arg("-c:v") .arg(&self.config.transcoder.video_codec) .arg("-c:v") .arg(&self.config.get_string("transcoder.video_codec").unwrap())
.arg("-s") .arg(&self.config.transcoder.video_resolution) .arg("-s") .arg(&self.config.get_string("transcoder.video_resolution").unwrap())
.arg("-r") .arg(format!("{}", self.config.transcoder.video_framerate)) .arg("-r") .arg(format!("{}", self.config.get_string("transcoder.video_framerate").unwrap()))
.arg("-vf") .arg(format!("format={}", &self.config.transcoder.video_color)) .arg("-vf") .arg(format!("format={}", &self.config.get_string("transcoder.video_color").unwrap()))
.arg("-profile:v").arg(&self.config.transcoder.video_profile) .arg("-profile:v").arg(&self.config.get_string("transcoder.video_profile").unwrap())
.arg("-c:a") .arg(&self.config.transcoder.audio_codec) .arg("-c:a") .arg(&self.config.get_string("transcoder.audio_codec").unwrap())
.arg(&*output_file.to_string_lossy()) .arg(&*output_file.to_string_lossy())
.output() .output()
.expect("Failed to execute command"); .expect("Failed to execute command");