Skip to content

Commit

Permalink
Add item for putting tapes back on the op1
Browse files Browse the repository at this point in the history
  • Loading branch information
chee committed Mar 9, 2020
1 parent 394b709 commit 3728d18
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 24 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "save-op1"
version = "0.4.0"
version = "0.5.0"
authors = ["chee <chee@snoot.club>"]
edition = "2018"

Expand Down
17 changes: 17 additions & 0 deletions src/copy.rs
@@ -0,0 +1,17 @@
use pbr::{ProgressBar, Units};
use std::fs::File;
use std::io::{copy, Result, Write};
use std::path;
use tee_readwrite::TeeWriter;

pub fn copy_file(source: &path::PathBuf, target: &path::PathBuf) -> Result<()> {
let mut source = File::open(source)?;
let bytes = source.metadata()?.len() as u64;
let mut progress_bar = ProgressBar::new(bytes);
progress_bar.set_units(Units::Bytes);
let mut target = File::create(target)?;
let mut tee = TeeWriter::new(&mut target, &mut progress_bar);
copy(&mut source, &mut tee)?;
progress_bar.finish_print("yay!");
Ok(())
}
21 changes: 4 additions & 17 deletions src/disk.rs
@@ -1,10 +1,9 @@
use super::copy::copy_file;
use super::operator::Track;
use super::song::Song;
use pbr::{ProgressBar, Units};
use std::fs::{create_dir_all, read_dir, File};
use std::io::{copy, Error, ErrorKind, Result};
use std::fs::{create_dir_all, read_dir};
use std::io::{Error, ErrorKind, Result};
use std::path;
use tee_readwrite::TeeWriter;

struct SongsPath {
path: String,
Expand Down Expand Up @@ -96,18 +95,6 @@ pub struct Disk {
*/
}

fn copy_file(source: &path::PathBuf, target: &path::PathBuf) -> Result<()> {
let mut source = File::open(source)?;
let bytes = source.metadata()?.len() as u64;
let mut progress_bar = ProgressBar::new(bytes);
progress_bar.set_units(Units::Bytes);
let mut target = File::create(target)?;
let mut tee = TeeWriter::new(&mut target, &mut progress_bar);
copy(&mut source, &mut tee)?;
progress_bar.finish_print("done");
Ok(())
}

impl Disk {
fn make_song_dir(&self, song: &Song) -> Result<()> {
create_dir_all(self.songs.song(&SongArg::Song(song)))
Expand Down Expand Up @@ -211,7 +198,7 @@ impl Disk {
self.songs.tape_string(&SongArg::Slug(slug))
}

pub fn _track_paths(&self, slug: &str) -> Vec<String> {
pub fn track_paths(&self, slug: &str) -> Vec<String> {
let song = &SongArg::Slug(slug);
vec![
format!("{}/track_1.aif", self.songs.tape_string(song)),
Expand Down
13 changes: 9 additions & 4 deletions src/main.rs
@@ -1,5 +1,6 @@
use ears::AudioController;
use std::path;
mod copy;
mod disk;
mod operator;
mod song;
Expand Down Expand Up @@ -171,14 +172,18 @@ fn main_menu() -> std::io::Result<Menu> {
}
}

fn load_tape_menu(_op1: &Operator, _disk: &Disk, song_name: &str) -> std::io::Result<()> {
fn load_tape(op1: &Operator, disk: &Disk, slug: &str) -> std::io::Result<()> {
op1.save_tape(disk.track_paths(slug))
}

fn load_tape_menu(op1: &Operator, disk: &Disk, slug: &str) -> std::io::Result<()> {
match dialoguer::Select::new()
.with_prompt(song_name)
.with_prompt(slug)
.items(&["write to op-1", "back"])
.interact()
.unwrap()
{
0 => Ok(()),
0 => load_tape(op1, disk, slug),
1 => Ok(()),
_ => Ok(()),
}
Expand All @@ -201,7 +206,7 @@ fn save_tape(op1: &Operator, disk: &Disk) -> std::io::Result<()> {

fn tape_menu(op1: &Operator, disk: &Disk) -> std::io::Result<()> {
match dialoguer::Select::new()
.items(&["save", "load", "back"])
.items(&["save to disk", "load to op-1", "back"])
.interact()
.unwrap()
{
Expand Down
30 changes: 29 additions & 1 deletion src/operator/mod.rs
@@ -1,3 +1,4 @@
use super::copy::copy_file;
use std::fs;
use std::path;

Expand All @@ -23,7 +24,7 @@ impl Side {
match self {
Side::A(path) => Some(path),
Side::B(path) => Some(path),
Side::Neither => None
Side::Neither => None,
}
}
}
Expand Down Expand Up @@ -90,6 +91,29 @@ impl Tape {
}
}

pub fn save(&self, tracks: Vec<String>) -> std::io::Result<()> {
// lol this can't be right
let disk_track_1 = path::PathBuf::from(tracks.get(0).unwrap());
let disk_track_2 = path::PathBuf::from(tracks.get(1).unwrap());
let disk_track_3 = path::PathBuf::from(tracks.get(2).unwrap());
let disk_track_4 = path::PathBuf::from(tracks.get(3).unwrap());

let op1_track_1 = path::PathBuf::from(self.track_1.path());
let op1_track_2 = path::PathBuf::from(self.track_2.path());
let op1_track_3 = path::PathBuf::from(self.track_3.path());
let op1_track_4 = path::PathBuf::from(self.track_4.path());

println!("writing track_1 to op1");
copy_file(&disk_track_1, &op1_track_1)?;
println!("writing track_2 to op1");
copy_file(&disk_track_2, &op1_track_2)?;
println!("writing track_3 to op1");
copy_file(&disk_track_3, &op1_track_3)?;
println!("writing track_4 to op1");
copy_file(&disk_track_4, &op1_track_4)?;
Ok(())
}

pub fn tracks(&self) -> Vec<&Track> {
return vec![&self.track_1, &self.track_2, &self.track_3, &self.track_4];
}
Expand Down Expand Up @@ -137,6 +161,10 @@ impl Operator {
return Ok(has_album && has_tape && has_drum && has_synth);
}

pub fn save_tape(&self, tracks: Vec<String>) -> std::io::Result<()> {
self.tape.save(tracks)
}

pub fn new(mount_path: &path::PathBuf) -> std::io::Result<Operator> {
let is_valid = Operator::check_structure(mount_path)?;
let get_path = |suffix: &str| -> path::PathBuf {
Expand Down

0 comments on commit 3728d18

Please sign in to comment.