add MediaProbe, and sec to tome
This commit is contained in:
parent
a09e9f4eb7
commit
0b82779292
@ -1,6 +1,10 @@
|
||||
use chrono::prelude::*;
|
||||
use chrono::Duration;
|
||||
use ffprobe::{ffprobe, Format, Stream};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fs::metadata;
|
||||
use std::time::{UNIX_EPOCH};
|
||||
use std::time;
|
||||
|
||||
mod arg_parse;
|
||||
mod config;
|
||||
@ -9,11 +13,66 @@ mod json_reader;
|
||||
mod playlist;
|
||||
|
||||
pub use arg_parse::get_args;
|
||||
pub use config::{Config, get_config};
|
||||
pub use config::{get_config, Config};
|
||||
// pub use folder::walk;
|
||||
pub use json_reader::read_json;
|
||||
pub use playlist::program;
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Clone)]
|
||||
pub struct MediaProbe {
|
||||
format: Option<Format>,
|
||||
audio_streams: Option<Vec<Stream>>,
|
||||
video_streams: Option<Vec<Stream>>,
|
||||
}
|
||||
|
||||
impl MediaProbe {
|
||||
fn new(input: String) -> Self {
|
||||
let probe = ffprobe(&input);
|
||||
let mut a_stream: Vec<Stream> = vec![];
|
||||
let mut v_stream: Vec<Stream> = vec![];
|
||||
|
||||
match probe {
|
||||
Ok(obj) => {
|
||||
for stream in obj.streams {
|
||||
let cp_stream = stream.clone();
|
||||
match cp_stream.codec_type {
|
||||
Some(codec_type) => {
|
||||
if codec_type == "audio" {
|
||||
a_stream.push(stream)
|
||||
} else if codec_type == "video" {
|
||||
v_stream.push(stream)
|
||||
}
|
||||
}
|
||||
|
||||
_ => {
|
||||
println!("No codec type found for stream: {:?}", &stream)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MediaProbe {
|
||||
format: Some(obj.format),
|
||||
audio_streams: if a_stream.len() > 0 {Some(a_stream)} else {None},
|
||||
video_streams: if v_stream.len() > 0 {Some(v_stream)} else {None},
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
println!(
|
||||
"Can't read source '{}' with ffprobe, source is probably damaged! Error is: {:?}",
|
||||
input,
|
||||
err
|
||||
);
|
||||
|
||||
MediaProbe {
|
||||
format: None,
|
||||
audio_streams: None,
|
||||
video_streams: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// pub fn get_timestamp() -> i64 {
|
||||
// let local: DateTime<Local> = Local::now();
|
||||
|
||||
@ -51,3 +110,11 @@ pub fn modified_time(path: String) -> Option<DateTime<Local>> {
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
pub fn sec_to_time(sec: f64) -> String {
|
||||
let d = UNIX_EPOCH + time::Duration::from_secs(sec as u64);
|
||||
// Create DateTime from SystemTime
|
||||
let date_time = DateTime::<Utc>::from(d);
|
||||
|
||||
date_time.format("%H:%M:%S").to_string()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user