Move unannotation into the binary

This commit is contained in:
Josh Hansen 2023-06-29 15:52:31 -07:00
parent 19cabebfb3
commit f5fe88e4ef
2 changed files with 55 additions and 20 deletions

View file

@ -8,29 +8,44 @@ use std::sync::{mpsc, Arc, RwLock};
use std::thread::{self, sleep};
use std::time::Duration;
use clap::Parser;
use clap::{Parser, Subcommand};
use cpal::traits::{DeviceTrait, StreamTrait};
use cpal::{self, traits::HostTrait};
use cpal::{OutputCallbackInfo, StreamConfig};
use crossterm::cursor::{Hide, MoveTo, MoveToColumn, MoveToNextLine, Show};
use crossterm::event::{Event, KeyCode, KeyModifiers, MediaKeyCode};
use crossterm::execute;
use crossterm::style::{Print, PrintStyledContent, Stylize};
use crossterm::terminal::{
disable_raw_mode, enable_raw_mode, size, Clear, ClearType, EnterAlternateScreen, ScrollUp,
};
use crossterm::{execute, queue};
use minimp3::Decoder;
use rand::{seq::SliceRandom, thread_rng};
use serde::Serialize;
use simple_mutex::Mutex as FairMutex;
#[derive(Subcommand)]
enum CliSubcommand {
#[command(name = "t", name = "tate", about = "Annotate audio files")]
Annotate {
path: Vec<PathBuf>,
#[arg(
short = 'b',
long = "bufsize",
default_value_t = 1000000000,
help = "Initial size of audio buffer"
)]
initial_buffer_size: usize,
},
#[command(name = "u", name = "untate", about = "Unannotate audio files")]
Unannotate { path: Vec<PathBuf> },
}
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
struct Cli {
path: Vec<PathBuf>,
#[arg(short = 'b', long = "bufsize", default_value_t = 1000000000)]
initial_buffer_size: usize,
#[command(subcommand)]
command: CliSubcommand,
}
#[derive(Debug, PartialEq, Serialize)]
@ -156,21 +171,34 @@ impl std::fmt::Display for Annotation {
}
const MOVEMENT_DURATION_SECONDS: usize = 15;
const XATTR_NAME: &'static str = "user.ad-annotation";
/// Cleanly exit the program
fn quit() {
disable_raw_mode().unwrap();
execute!(std::io::stdout(), MoveToNextLine(2), MoveToColumn(0), Show).unwrap();
exit(0);
}
fn main() {
let mut cli = Cli::parse();
let cli = Cli::parse();
match cli.command {
CliSubcommand::Annotate {
path,
initial_buffer_size,
} => annotate(path, initial_buffer_size),
CliSubcommand::Unannotate { path } => {
unannotate(path);
}
}
}
fn annotate(mut path: Vec<PathBuf>, initial_buffer_size: usize) {
enable_raw_mode().unwrap();
let mut stdout = stdout();
execute!(stdout, Hide, EnterAlternateScreen).unwrap();
/// Cleanly exit the program
fn quit() {
disable_raw_mode().unwrap();
execute!(std::io::stdout(), MoveToNextLine(2), MoveToColumn(0), Show).unwrap();
exit(0);
}
let (mut _terminal_columns, terminal_rows) = size().unwrap();
let terminal_rows = Arc::new(Cell::new(terminal_rows));
@ -185,9 +213,9 @@ fn main() {
let mut rng = thread_rng();
cli.path.shuffle(&mut rng);
path.shuffle(&mut rng);
let mut path_iter = cli.path.into_iter();
let mut path_iter = path.into_iter();
let path: Arc<FairMutex<Option<PathBuf>>> = Arc::new(FairMutex::new(None));
let idx: Arc<FairMutex<usize>> = Arc::new(FairMutex::new(0));
@ -197,7 +225,7 @@ fn main() {
let mut paused = false;
let buf: Arc<FairMutex<Vec<i16>>> =
Arc::new(FairMutex::new(Vec::with_capacity(cli.initial_buffer_size)));
Arc::new(FairMutex::new(Vec::with_capacity(initial_buffer_size)));
let host = cpal::default_host();
@ -557,5 +585,14 @@ fn main() {
for a in &annotations[..] {
log(&format!("{}", a));
}
} // end loop
} // end input processing loop
}
fn unannotate(path: Vec<PathBuf>) {
let mut stdout = std::io::stdout();
for path in path.iter() {
xattr::remove(path.as_path(), XATTR_NAME).unwrap();
execute!(stdout, Print(format!("Unannotated {}", path.display()))).unwrap();
}
quit();
}

View file

@ -1,2 +0,0 @@
#!/bin/sh
xattr -d user.ad-annotation $@