natural sort on folder list, add advanced playlist gen to frontend
This commit is contained in:
parent
94fa75a23d
commit
dfb9d2db9e
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -1182,6 +1182,7 @@ dependencies = [
|
|||||||
"ffprobe",
|
"ffprobe",
|
||||||
"file-rotate",
|
"file-rotate",
|
||||||
"lettre",
|
"lettre",
|
||||||
|
"lexical-sort",
|
||||||
"log",
|
"log",
|
||||||
"openssl",
|
"openssl",
|
||||||
"rand",
|
"rand",
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 2f3234221a0aef8e70d9e2b5e9bbfb1fe51921fc
|
Subproject commit 2ca3aa73b2992f6997276f5c8fb906f9ee703bf2
|
@ -14,6 +14,7 @@ crossbeam-channel = "0.5"
|
|||||||
ffprobe = "0.3"
|
ffprobe = "0.3"
|
||||||
file-rotate = "0.7"
|
file-rotate = "0.7"
|
||||||
lettre = "0.10"
|
lettre = "0.10"
|
||||||
|
lexical-sort = "0.3"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
rand = "0.8"
|
rand = "0.8"
|
||||||
regex = "1"
|
regex = "1"
|
||||||
|
@ -11,6 +11,7 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use chrono::Timelike;
|
use chrono::Timelike;
|
||||||
|
use lexical_sort::natural_lexical_cmp;
|
||||||
use rand::{seq::SliceRandom, thread_rng, Rng};
|
use rand::{seq::SliceRandom, thread_rng, Rng};
|
||||||
use simplelog::*;
|
use simplelog::*;
|
||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
@ -143,7 +144,7 @@ pub fn generate_from_template(
|
|||||||
let mut index: usize = 0;
|
let mut index: usize = 0;
|
||||||
|
|
||||||
for source in template.sources {
|
for source in template.sources {
|
||||||
let mut full_list = vec![];
|
let mut source_list = vec![];
|
||||||
let duration = (source.duration.hour() as f64 * 3600.0)
|
let duration = (source.duration.hour() as f64 * 3600.0)
|
||||||
+ (source.duration.minute() as f64 * 60.0)
|
+ (source.duration.minute() as f64 * 60.0)
|
||||||
+ source.duration.second() as f64;
|
+ source.duration.second() as f64;
|
||||||
@ -160,18 +161,18 @@ pub fn generate_from_template(
|
|||||||
.filter(|f| include_file_extension(config, f.path()))
|
.filter(|f| include_file_extension(config, f.path()))
|
||||||
{
|
{
|
||||||
let media = Media::new(0, &entry.path().to_string_lossy(), true);
|
let media = Media::new(0, &entry.path().to_string_lossy(), true);
|
||||||
full_list.push(media);
|
source_list.push(media);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut timed_list = if source.shuffle {
|
let mut timed_list = if source.shuffle {
|
||||||
full_list.shuffle(&mut rng);
|
source_list.shuffle(&mut rng);
|
||||||
|
|
||||||
random_list(full_list, duration)
|
random_list(source_list, duration)
|
||||||
} else {
|
} else {
|
||||||
full_list.sort_by(|d1, d2| d1.source.cmp(&d2.source));
|
source_list.sort_by(|d1, d2| natural_lexical_cmp(&d1.source, &d2.source));
|
||||||
|
|
||||||
ordered_list(full_list, duration)
|
ordered_list(source_list, duration)
|
||||||
};
|
};
|
||||||
|
|
||||||
let total_length = sum_durations(&timed_list);
|
let total_length = sum_durations(&timed_list);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user