|
@@ -11,12 +11,11 @@ use crate::rodio::Source;
|
|
use std::io::BufWriter;
|
|
use std::io::BufWriter;
|
|
use std::io::BufReader;
|
|
use std::io::BufReader;
|
|
use std::collections::HashMap;
|
|
use std::collections::HashMap;
|
|
-use serde::{Serialize, Serializer};
|
|
|
|
|
|
+use serde::{Serializer};
|
|
use crate::serde::ser::SerializeMap;
|
|
use crate::serde::ser::SerializeMap;
|
|
// pub fn collect
|
|
// pub fn collect
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
|
|
#[derive(Serialize, Deserialize, Clone, Default, Debug)]
|
|
pub struct Sound {
|
|
pub struct Sound {
|
|
pub name: String,
|
|
pub name: String,
|
|
@@ -35,7 +34,6 @@ pub struct Sound {
|
|
pub reverse: bool
|
|
pub reverse: bool
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
impl AsRef<[u8]> for Sound {
|
|
impl AsRef<[u8]> for Sound {
|
|
fn as_ref(&self) -> &[u8] {
|
|
fn as_ref(&self) -> &[u8] {
|
|
&self.data
|
|
&self.data
|
|
@@ -43,18 +41,19 @@ impl AsRef<[u8]> for Sound {
|
|
}
|
|
}
|
|
|
|
|
|
impl Sound {
|
|
impl Sound {
|
|
- pub fn new(filename: &str) -> std::io::Result<Sound> {
|
|
|
|
- let path = PathBuf::from(filename);
|
|
|
|
|
|
+ pub fn new(filename: &PathBuf) -> std::io::Result<Sound> {
|
|
let mut buf = Vec::new();
|
|
let mut buf = Vec::new();
|
|
- let mut file = File::open(filename)?;
|
|
|
|
|
|
+ let sanitized_name = PathBuf::from(filename.to_string_lossy().replace("\\", "/"));
|
|
|
|
+
|
|
|
|
+ let mut file = File::open(&sanitized_name)?;
|
|
file.read_to_end(&mut buf)?;
|
|
file.read_to_end(&mut buf)?;
|
|
let mut rev_buf = buf.clone();
|
|
let mut rev_buf = buf.clone();
|
|
rev_buf.reverse();
|
|
rev_buf.reverse();
|
|
- Ok(Sound{
|
|
|
|
|
|
+ Ok(Sound {
|
|
data: Arc::new(buf),
|
|
data: Arc::new(buf),
|
|
data_rev: Arc::new(rev_buf),
|
|
data_rev: Arc::new(rev_buf),
|
|
- name: path.file_name().unwrap_or_default().to_string_lossy().to_string(),
|
|
|
|
- location: path,
|
|
|
|
|
|
+ name: sanitized_name.clone().file_name().unwrap_or_default().to_string_lossy().to_string(),
|
|
|
|
+ location: sanitized_name.clone(),
|
|
volume: 1.0,
|
|
volume: 1.0,
|
|
speed: 1.0,
|
|
speed: 1.0,
|
|
..Default::default()
|
|
..Default::default()
|
|
@@ -67,8 +66,8 @@ impl Sound {
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
|
|
- pub fn updated_drom_source(&self) -> Result<Sound, std::io::Error>{
|
|
|
|
- Sound::new(&self.location.to_string_lossy())
|
|
|
|
|
|
+ pub fn updated_from_source(&self) -> Result<Sound, std::io::Error>{
|
|
|
|
+ Sound::new(&self.location)
|
|
}
|
|
}
|
|
|
|
|
|
pub fn cursor(self: &Self) -> Cursor<Sound> {
|
|
pub fn cursor(self: &Self) -> Cursor<Sound> {
|
|
@@ -110,20 +109,11 @@ impl Sound {
|
|
dbg!(e);
|
|
dbg!(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
fn hm_key_to_string(snds: &HashMap<(usize, usize), Sound>) -> HashMap<String, Sound> {
|
|
fn hm_key_to_string(snds: &HashMap<(usize, usize), Sound>) -> HashMap<String, Sound> {
|
|
snds.into_iter()
|
|
snds.into_iter()
|
|
.map(|(k, v)| (format!("{},{}", k.0, k.1), v.clone()))
|
|
.map(|(k, v)| (format!("{},{}", k.0, k.1), v.clone()))
|
|
@@ -280,7 +270,7 @@ impl Pattern {
|
|
for y in 0..self.ysize {
|
|
for y in 0..self.ysize {
|
|
if let Some(snd) = self.sounds.get_mut(&(x,y)) {
|
|
if let Some(snd) = self.sounds.get_mut(&(x,y)) {
|
|
// println!("RELOAD {:?}", &snd.name);
|
|
// println!("RELOAD {:?}", &snd.name);
|
|
- match snd.updated_drom_source() {
|
|
|
|
|
|
+ match snd.updated_from_source() {
|
|
Ok(newdata) => snd.data = newdata.data,
|
|
Ok(newdata) => snd.data = newdata.data,
|
|
Err(e) => println!("ERROR LOADING SND {:?} {:?}", e, snd.location)
|
|
Err(e) => println!("ERROR LOADING SND {:?} {:?}", e, snd.location)
|
|
}
|
|
}
|