mirror of
https://codeberg.org/unspeaker/perch.git
synced 2025-12-06 09:36:42 +01:00
try to figure out delete logic
This commit is contained in:
parent
004cf96c2e
commit
25ca263cd7
5 changed files with 47 additions and 11 deletions
|
|
@ -39,6 +39,9 @@ impl Taggart {
|
|||
self.mode = None;
|
||||
}
|
||||
}
|
||||
pub fn edit_clear (&mut self) {
|
||||
todo!("edit_clear")
|
||||
}
|
||||
pub fn edit_insert (&mut self, c: char) {
|
||||
if let Some(Mode::Edit { value, index }) = &self.mode {
|
||||
self.mode = Some(Mode::Edit {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ use std::thread::{sleep, spawn, JoinHandle};
|
|||
use std::time::Duration;
|
||||
|
||||
use tengri::{input::*, output::*, tui::*};
|
||||
use crate::ratatui::style::{Style, Stylize};
|
||||
use crate::crossterm::event::{Event, KeyEvent, KeyCode, KeyModifiers, KeyEventState, KeyEventKind};
|
||||
|
||||
use clap::{arg, command, value_parser};
|
||||
|
|
|
|||
|
|
@ -15,11 +15,7 @@ type Setter<T> = fn(&mut T, usize, &str);
|
|||
type Styler<T> = fn(&T)->Option<Style>;
|
||||
|
||||
impl<G, S, U> Column<Getter<G>, Setter<S>, Styler<U>> {
|
||||
pub fn new (
|
||||
title: &impl AsRef<str>,
|
||||
width: usize,
|
||||
getter: Getter<G>,
|
||||
) -> Self {
|
||||
pub fn new (title: &impl AsRef<str>, width: usize, getter: Getter<G>) -> Self {
|
||||
Self {
|
||||
width,
|
||||
title: title.as_ref().into(),
|
||||
|
|
@ -110,11 +106,16 @@ impl Default for Columns<
|
|||
} else {
|
||||
None
|
||||
}),
|
||||
Column::new(&"Artist", 15, |entry: &Entry|entry.artist()).setter(setter!(set_artist)),
|
||||
Column::new(&"Year", 4, |entry: &Entry|entry.year()).setter(setter!(set_year)),
|
||||
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)),
|
||||
Column::new(&"Artist", 15, |entry: &Entry|entry.artist())
|
||||
.setter(setter!(set_artist)),
|
||||
Column::new(&"Year", 4, |entry: &Entry|entry.year())
|
||||
.setter(setter!(set_year)),
|
||||
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)),
|
||||
])
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -267,6 +267,9 @@ macro_rules! music_tag_field {
|
|||
pub fn $get (&self) -> Option<Arc<str>> {
|
||||
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 {
|
||||
self.info.write().unwrap().$set(value)
|
||||
}
|
||||
|
|
@ -283,6 +286,35 @@ macro_rules! music_tag_field {
|
|||
}
|
||||
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 {
|
||||
let value = value.as_ref().trim();
|
||||
if let Ok(numeric_value) = value.parse::<u32>() && let &mut Metadata::Music {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
use crate::*;
|
||||
use crate::ratatui::style::{Style, Stylize};
|
||||
|
||||
pub struct TreeTable<'a>(pub(crate) &'a Taggart);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue