Add support for a very basic randomize.
This commit is contained in:
parent
24c4d95bb5
commit
81f73ac7a9
@ -3,7 +3,9 @@ name = "record_watch"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
[[bin]]
|
||||||
|
name = "rw"
|
||||||
|
path = "src/main.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
walkdir = "2.3.2"
|
walkdir = "2.3.2"
|
||||||
@ -13,3 +15,5 @@ dirs = "4.0.0"
|
|||||||
serde_json = "1.0.79"
|
serde_json = "1.0.79"
|
||||||
serde = { version = "1.0.136", features= ["derive"] }
|
serde = { version = "1.0.136", features= ["derive"] }
|
||||||
bytes = "1.1.0"
|
bytes = "1.1.0"
|
||||||
|
rand = "0.8.5"
|
||||||
|
|
||||||
|
16
src/main.rs
16
src/main.rs
@ -7,13 +7,24 @@ use walkdir::DirEntry;
|
|||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
mod mpvctl;
|
mod mpvctl;
|
||||||
use crate::mpvctl::MpvCtl;
|
use crate::mpvctl::MpvCtl;
|
||||||
|
use rand::seq::SliceRandom;
|
||||||
|
use rand::thread_rng;
|
||||||
use tokio::time::{sleep, Duration};
|
use tokio::time::{sleep, Duration};
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let mut args = env::args();
|
let mut args = env::args().peekable();
|
||||||
let _program = args.next().expect("argv[0] should be this program?");
|
let _program = args.next().expect("argv[0] should be this program?");
|
||||||
|
let randomize: bool = match args.peek() {
|
||||||
|
Some(flag) if flag == "-r" => {
|
||||||
|
// Consume the flag
|
||||||
|
args.next().expect("We already know this arg exists");
|
||||||
|
true
|
||||||
|
}
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
let profile = args.next().expect("Must provide a profile");
|
let profile = args.next().expect("Must provide a profile");
|
||||||
|
|
||||||
let directories: Vec<String> = args.collect();
|
let directories: Vec<String> = args.collect();
|
||||||
|
|
||||||
let mut files: Vec<DirEntry> = Vec::new();
|
let mut files: Vec<DirEntry> = Vec::new();
|
||||||
@ -58,6 +69,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
|
|
||||||
let mut mpvctl = MpvCtl::connect("/tmp/recordwatchsocket").await?;
|
let mut mpvctl = MpvCtl::connect("/tmp/recordwatchsocket").await?;
|
||||||
let mut end_file_listener = mpvctl.listen(&["end-file"])?;
|
let mut end_file_listener = mpvctl.listen(&["end-file"])?;
|
||||||
|
if randomize {
|
||||||
|
files.shuffle(&mut thread_rng());
|
||||||
|
}
|
||||||
for f in files {
|
for f in files {
|
||||||
let canonicalized_path = f.path().canonicalize()?;
|
let canonicalized_path = f.path().canonicalize()?;
|
||||||
let already_watched_count: i64 = sqlx::query(r#"SELECT count(*) FROM watched WHERE path = ? AND profile = (SELECT id FROM PROFILE WHERE name = ?)"#)
|
let already_watched_count: i64 = sqlx::query(r#"SELECT count(*) FROM watched WHERE path = ? AND profile = (SELECT id FROM PROFILE WHERE name = ?)"#)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user