try to write to file (os error 22)

This commit is contained in:
🪞👃🪞 2025-04-27 21:09:06 +03:00
parent 576725a949
commit 0d1d4b6e9a
4 changed files with 15 additions and 9 deletions

View file

@ -33,8 +33,8 @@ impl Handle<TuiIn> for Perch {
match &self.mode { match &self.mode {
Some(Mode::Edit { .. }) => self.handle_edit(event), Some(Mode::Edit { .. }) => self.handle_edit(event),
Some(Mode::Help { page }) => self.handle_help(event, *page), Some(Mode::Help { page }) => self.handle_help(event, *page),
Some(Mode::Save { choice }) => self.handle_save(event, *choice), Some(Mode::Save { choice }) => self.handle_save(event, *choice)?,
Some(Mode::Quit { choice }) => self.handle_quit(input, *choice), Some(Mode::Quit { choice }) => self.handle_quit(input, *choice)?,
None => match event { None => match event {
press!(F(1)) => { self.help_begin() }, press!(F(1)) => { self.help_begin() },
press!(Char('q')) => { self.quit_begin(&input) }, press!(Char('q')) => { self.quit_begin(&input) },

View file

@ -1,7 +1,7 @@
use crate::*; use crate::*;
impl Perch { impl Perch {
pub fn handle_quit (&mut self, input: &TuiIn, choice: u8) { pub fn handle_quit (&mut self, input: &TuiIn, choice: u8) -> Usually<()> {
match &*input.event() { match &*input.event() {
press!(Esc) => { self.mode = None }, press!(Esc) => { self.mode = None },
press!(Left) => { self.mode = Some(Mode::Quit { press!(Left) => { self.mode = Some(Mode::Quit {
@ -18,13 +18,14 @@ impl Perch {
self.mode = None self.mode = None
}, },
2 => { 2 => {
self.save_all(); self.save_all()?;
input.done() input.done()
}, },
_ => unreachable!(), _ => unreachable!(),
}, },
_ => {} _ => {}
} }
Ok(())
} }
pub fn quit_begin (&mut self, input: &TuiIn) { pub fn quit_begin (&mut self, input: &TuiIn) {
if self.changes == 0 { if self.changes == 0 {

View file

@ -1,7 +1,7 @@
use crate::*; use crate::*;
impl Perch { impl Perch {
pub fn handle_save (&mut self, event: &Event, choice: u8) { pub fn handle_save (&mut self, event: &Event, choice: u8) -> Usually<()> {
match event { match event {
press!(Esc) => { self.mode = None } press!(Esc) => { self.mode = None }
press!(Left) => { self.mode = Some(Mode::Save { press!(Left) => { self.mode = Some(Mode::Save {
@ -19,13 +19,14 @@ impl Perch {
self.mode = None; self.mode = None;
}, },
2 => { 2 => {
self.save_all(); self.save_all()?;
self.mode = None self.mode = None
}, },
_ => unreachable!(), _ => unreachable!(),
}, },
_ => {} _ => {}
} }
Ok(())
} }
pub fn save_begin (&mut self) { pub fn save_begin (&mut self) {
if self.changes > 0 { if self.changes > 0 {

View file

@ -87,14 +87,18 @@ impl Perch {
self.changes = 0; self.changes = 0;
} }
/// Write all modified tags /// Write all modified tags
pub(crate) fn save_all (&mut self) { pub(crate) fn save_all (&mut self) -> Usually<()> {
use lofty::{tag::TagExt, config::WriteOptions};
for entry in self.entries.iter_mut() { for entry in self.entries.iter_mut() {
if let Metadata::Music { if let Metadata::Music {
original_tag, modified_tag, .. modified_tag: Some(modified_tag), ..
} = &mut *entry.info.write().unwrap() { } = &mut *entry.info.write().unwrap() {
todo!("save {:?}", entry.path); let tag = modified_tag.read().unwrap();
let mut file = std::fs::File::open(entry.path.as_path())?;
tag.save_to(&mut file, WriteOptions::default())?;
} }
} }
self.changes = 0; self.changes = 0;
Ok(())
} }
} }