From 0d1d4b6e9adee01774724316835c83746ac59ad7 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sun, 27 Apr 2025 21:09:06 +0300 Subject: [PATCH] try to write to file (os error 22) --- src/keys.rs | 4 ++-- src/keys/quit.rs | 5 +++-- src/keys/save.rs | 5 +++-- src/model.rs | 10 +++++++--- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/keys.rs b/src/keys.rs index 2dacae3..0b08704 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -33,8 +33,8 @@ impl Handle for Perch { match &self.mode { Some(Mode::Edit { .. }) => self.handle_edit(event), Some(Mode::Help { page }) => self.handle_help(event, *page), - Some(Mode::Save { choice }) => self.handle_save(event, *choice), - Some(Mode::Quit { choice }) => self.handle_quit(input, *choice), + Some(Mode::Save { choice }) => self.handle_save(event, *choice)?, + Some(Mode::Quit { choice }) => self.handle_quit(input, *choice)?, None => match event { press!(F(1)) => { self.help_begin() }, press!(Char('q')) => { self.quit_begin(&input) }, diff --git a/src/keys/quit.rs b/src/keys/quit.rs index 2e1dc56..f54de08 100644 --- a/src/keys/quit.rs +++ b/src/keys/quit.rs @@ -1,7 +1,7 @@ use crate::*; 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() { press!(Esc) => { self.mode = None }, press!(Left) => { self.mode = Some(Mode::Quit { @@ -18,13 +18,14 @@ impl Perch { self.mode = None }, 2 => { - self.save_all(); + self.save_all()?; input.done() }, _ => unreachable!(), }, _ => {} } + Ok(()) } pub fn quit_begin (&mut self, input: &TuiIn) { if self.changes == 0 { diff --git a/src/keys/save.rs b/src/keys/save.rs index 2636ad5..0d0e815 100644 --- a/src/keys/save.rs +++ b/src/keys/save.rs @@ -1,7 +1,7 @@ use crate::*; 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 { press!(Esc) => { self.mode = None } press!(Left) => { self.mode = Some(Mode::Save { @@ -19,13 +19,14 @@ impl Perch { self.mode = None; }, 2 => { - self.save_all(); + self.save_all()?; self.mode = None }, _ => unreachable!(), }, _ => {} } + Ok(()) } pub fn save_begin (&mut self) { if self.changes > 0 { diff --git a/src/model.rs b/src/model.rs index a725401..a9fe2d7 100644 --- a/src/model.rs +++ b/src/model.rs @@ -87,14 +87,18 @@ impl Perch { self.changes = 0; } /// 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() { if let Metadata::Music { - original_tag, modified_tag, .. + modified_tag: Some(modified_tag), .. } = &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; + Ok(()) } }