try to figure out delete logic

This commit is contained in:
🪞👃🪞 2025-04-07 00:29:47 +03:00
parent 004cf96c2e
commit 25ca263cd7
5 changed files with 47 additions and 11 deletions

View file

@ -39,6 +39,9 @@ impl Taggart {
self.mode = None; self.mode = None;
} }
} }
pub fn edit_clear (&mut self) {
todo!("edit_clear")
}
pub fn edit_insert (&mut self, c: char) { pub fn edit_insert (&mut self, c: char) {
if let Some(Mode::Edit { value, index }) = &self.mode { if let Some(Mode::Edit { value, index }) = &self.mode {
self.mode = Some(Mode::Edit { self.mode = Some(Mode::Edit {

View file

@ -10,6 +10,7 @@ use std::thread::{sleep, spawn, JoinHandle};
use std::time::Duration; use std::time::Duration;
use tengri::{input::*, output::*, tui::*}; use tengri::{input::*, output::*, tui::*};
use crate::ratatui::style::{Style, Stylize};
use crate::crossterm::event::{Event, KeyEvent, KeyCode, KeyModifiers, KeyEventState, KeyEventKind}; use crate::crossterm::event::{Event, KeyEvent, KeyCode, KeyModifiers, KeyEventState, KeyEventKind};
use clap::{arg, command, value_parser}; use clap::{arg, command, value_parser};

View file

@ -15,11 +15,7 @@ type Setter<T> = fn(&mut T, usize, &str);
type Styler<T> = fn(&T)->Option<Style>; type Styler<T> = fn(&T)->Option<Style>;
impl<G, S, U> Column<Getter<G>, Setter<S>, Styler<U>> { impl<G, S, U> Column<Getter<G>, Setter<S>, Styler<U>> {
pub fn new ( pub fn new (title: &impl AsRef<str>, width: usize, getter: Getter<G>) -> Self {
title: &impl AsRef<str>,
width: usize,
getter: Getter<G>,
) -> Self {
Self { Self {
width, width,
title: title.as_ref().into(), title: title.as_ref().into(),
@ -110,11 +106,16 @@ impl Default for Columns<
} else { } else {
None None
}), }),
Column::new(&"Artist", 15, |entry: &Entry|entry.artist()).setter(setter!(set_artist)), Column::new(&"Artist", 15, |entry: &Entry|entry.artist())
Column::new(&"Year", 4, |entry: &Entry|entry.year()).setter(setter!(set_year)), .setter(setter!(set_artist)),
Column::new(&"Release", 15, |entry: &Entry|entry.album()).setter(setter!(set_album)), Column::new(&"Year", 4, |entry: &Entry|entry.year())
Column::new(&"Track", 5, |entry: &Entry|entry.track()).setter(setter!(set_track)), .setter(setter!(set_year)),
Column::new(&"Title", 40, |entry: &Entry|entry.title()).setter(setter!(set_title)), Column::new(&"Release", 15, |entry: &Entry|entry.album())
.setter(setter!(set_album)),
Column::new(&"Track", 5, |entry: &Entry|entry.track())
.setter(setter!(set_track)),
Column::new(&"Title", 40, |entry: &Entry|entry.title())
.setter(setter!(set_title)),
]) ])
} }
} }

View file

@ -267,6 +267,9 @@ macro_rules! music_tag_field {
pub fn $get (&self) -> Option<Arc<str>> { pub fn $get (&self) -> Option<Arc<str>> {
self.info.read().unwrap().$get() self.info.read().unwrap().$get()
} }
pub fn $del (&mut self) -> bool {
self.info.write().unwrap().$del()
}
pub fn $set (&mut self, value: &impl AsRef<str>) -> bool { pub fn $set (&mut self, value: &impl AsRef<str>) -> bool {
self.info.write().unwrap().$set(value) self.info.write().unwrap().$set(value)
} }
@ -283,6 +286,35 @@ macro_rules! music_tag_field {
} }
None None
} }
pub fn $del (&mut self) -> bool {
if let &mut Metadata::Music { ref original_tag, ref mut modified_tag, .. } = self {
let old_value = original_tag.as_ref()
.map(|m|m.$get().clone()).flatten();
let new_value = modified_tag.as_ref()
.map(|m|m.read().unwrap().$get().clone()).flatten();
match (old_value, new_value) {
(Some(old), Some(new)) => {
let mut new_tag = modified_tag.as_ref().unwrap().write().unwrap();
new_tag.$set(old);
true
},
(None, Some(new)) => {
let mut new_tag = modified_tag.as_ref().unwrap().write().unwrap();
new_tag.$del();
if new_tag.item_count() == 0 {
std::mem::drop(new_tag);
*modified_tag = None;
}
true
},
(_, None) => {
false
}
}
} else {
false
}
}
pub fn $set (&mut self, value: &impl AsRef<str>) -> bool { pub fn $set (&mut self, value: &impl AsRef<str>) -> bool {
let value = value.as_ref().trim(); let value = value.as_ref().trim();
if let Ok(numeric_value) = value.parse::<u32>() && let &mut Metadata::Music { if let Ok(numeric_value) = value.parse::<u32>() && let &mut Metadata::Music {

View file

@ -1,5 +1,4 @@
use crate::*; use crate::*;
use crate::ratatui::style::{Style, Stylize};
pub struct TreeTable<'a>(pub(crate) &'a Taggart); pub struct TreeTable<'a>(pub(crate) &'a Taggart);