Verify getting albumart with debug write-to-file
This commit is contained in:
parent
410b854574
commit
bea743d836
1 changed files with 28 additions and 17 deletions
45
src/main.rs
45
src/main.rs
|
@ -1,4 +1,5 @@
|
||||||
use std::io::{BufReader, Read, Write};
|
use std::fs::File;
|
||||||
|
use std::io::{Read, Write};
|
||||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream};
|
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
@ -131,12 +132,12 @@ fn read_line(
|
||||||
) -> Result<String, (String, String)> {
|
) -> Result<String, (String, String)> {
|
||||||
let mut result = String::new();
|
let mut result = String::new();
|
||||||
|
|
||||||
if !saved.is_empty() {
|
let mut buf_to_read: Vec<u8> = Vec::with_capacity(saved.len() + buf.len());
|
||||||
// TODO
|
|
||||||
println!("TODO handle \"saved\" vec");
|
|
||||||
}
|
|
||||||
|
|
||||||
saved.clear();
|
if !saved.is_empty() {
|
||||||
|
buf_to_read.append(saved);
|
||||||
|
}
|
||||||
|
buf_to_read.append(buf);
|
||||||
|
|
||||||
let mut prev_two: Vec<char> = Vec::with_capacity(3);
|
let mut prev_two: Vec<char> = Vec::with_capacity(3);
|
||||||
|
|
||||||
|
@ -146,7 +147,7 @@ fn read_line(
|
||||||
skip_count -= 1;
|
skip_count -= 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let next_char_result = check_next_chars(buf, idx, saved);
|
let next_char_result = check_next_chars(&mut buf_to_read, idx, saved);
|
||||||
if let Ok((c, s)) = next_char_result {
|
if let Ok((c, s)) = next_char_result {
|
||||||
if !init {
|
if !init {
|
||||||
prev_two.push(c);
|
prev_two.push(c);
|
||||||
|
@ -154,33 +155,44 @@ fn read_line(
|
||||||
prev_two.remove(0);
|
prev_two.remove(0);
|
||||||
}
|
}
|
||||||
if ['O', 'K'] == prev_two.as_slice() {
|
if ['O', 'K'] == prev_two.as_slice() {
|
||||||
*buf = buf.split_off(2);
|
buf_to_read = buf_to_read.split_off(2);
|
||||||
result = String::from("OK");
|
result = String::from("OK");
|
||||||
|
buf.append(&mut buf_to_read);
|
||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if c == '\n' {
|
if c == '\n' {
|
||||||
*buf = buf.split_off(idx + s as usize);
|
buf_to_read = buf_to_read.split_off(idx + s as usize);
|
||||||
|
buf.append(&mut buf_to_read);
|
||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
result.push(c);
|
result.push(c);
|
||||||
skip_count = s - 1;
|
skip_count = s - 1;
|
||||||
} else if let Err((msg, count)) = next_char_result {
|
} else if let Err((msg, count)) = next_char_result {
|
||||||
for i in 0..count {
|
for i in 0..count {
|
||||||
saved.push(buf[idx + i as usize]);
|
saved.push(buf_to_read[idx + i as usize]);
|
||||||
}
|
}
|
||||||
*buf = buf.split_off(idx);
|
buf_to_read = buf_to_read.split_off(idx);
|
||||||
|
buf.append(&mut buf_to_read);
|
||||||
return Err((msg, result));
|
return Err((msg, result));
|
||||||
} else {
|
} else {
|
||||||
unreachable!();
|
unreachable!();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*saved = buf.to_vec();
|
*saved = buf_to_read;
|
||||||
*buf = Vec::new();
|
|
||||||
Err((String::from("Newline not reached"), result))
|
Err((String::from("Newline not reached"), result))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn debug_write_albumart_to_file(data: &Vec<u8>) -> Result<(), String> {
|
||||||
|
let mut f = File::create("albumartOut.jpg")
|
||||||
|
.map_err(|_| String::from("Failed to open file for writing albumart"))?;
|
||||||
|
f.write_all(data)
|
||||||
|
.map_err(|_| String::from("Failed to write to albumartOut.jpg"))?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn info_loop(shared_data: Arc<Mutex<Shared>>) -> Result<(), String> {
|
fn info_loop(shared_data: Arc<Mutex<Shared>>) -> Result<(), String> {
|
||||||
let mut buf: [u8; 4192] = [0; 4192];
|
let mut buf: [u8; 4192] = [0; 4192];
|
||||||
let mut init: bool = true;
|
let mut init: bool = true;
|
||||||
|
@ -208,7 +220,7 @@ fn info_loop(shared_data: Arc<Mutex<Shared>>) -> Result<(), String> {
|
||||||
if let Ok(count) = read_result {
|
if let Ok(count) = read_result {
|
||||||
let mut read_vec: Vec<u8> = Vec::from(buf);
|
let mut read_vec: Vec<u8> = Vec::from(buf);
|
||||||
read_vec.resize(count, 0);
|
read_vec.resize(count, 0);
|
||||||
'outer: loop {
|
loop {
|
||||||
let mut count = read_vec.len();
|
let mut count = read_vec.len();
|
||||||
if current_binary_size > 0 {
|
if current_binary_size > 0 {
|
||||||
if current_binary_size <= count {
|
if current_binary_size <= count {
|
||||||
|
@ -221,6 +233,8 @@ fn info_loop(shared_data: Arc<Mutex<Shared>>) -> Result<(), String> {
|
||||||
"art_data len is {} after fully reading",
|
"art_data len is {} after fully reading",
|
||||||
lock.art_data.len()
|
lock.art_data.len()
|
||||||
);
|
);
|
||||||
|
// TODO Debug
|
||||||
|
//let write_file_result = debug_write_albumart_to_file(&lock.art_data);
|
||||||
} else {
|
} else {
|
||||||
lock.art_data.extend_from_slice(&read_vec[0..count]);
|
lock.art_data.extend_from_slice(&read_vec[0..count]);
|
||||||
current_binary_size -= count;
|
current_binary_size -= count;
|
||||||
|
@ -243,7 +257,6 @@ fn info_loop(shared_data: Arc<Mutex<Shared>>) -> Result<(), String> {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// TODO handling of other messages
|
|
||||||
println!("Got response: {}", line);
|
println!("Got response: {}", line);
|
||||||
if line.starts_with("OK") {
|
if line.starts_with("OK") {
|
||||||
break;
|
break;
|
||||||
|
@ -301,8 +314,6 @@ fn info_loop(shared_data: Arc<Mutex<Shared>>) -> Result<(), String> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO send messages to get info
|
|
||||||
|
|
||||||
// write block
|
// write block
|
||||||
{
|
{
|
||||||
let lock_result = shared_data.try_lock();
|
let lock_result = shared_data.try_lock();
|
||||||
|
|
Loading…
Reference in a new issue