From 748bcbbef386fc9b0059e5a1f15622847fd82921 Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Fri, 30 Jan 2026 16:06:32 -0600 Subject: [PATCH] verses and order of verses are working and saving better --- src/core/songs.rs | 31 ++++++++++++++++++++++++++++--- src/ui/song_editor.rs | 25 ++++++++++++++----------- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/core/songs.rs b/src/core/songs.rs index 5cd5994..3e3f12a 100644 --- a/src/core/songs.rs +++ b/src/core/songs.rs @@ -182,7 +182,30 @@ impl ServiceTrait for Song { } fn to_slides(&self) -> Result> { - let lyrics = self.get_lyrics()?; + // let lyrics = self.get_lyrics()?; + let lyrics: Vec = if let Some(verses) = + self.verses.as_ref() + && let Some(map) = self.verse_map.as_ref() + { + verses + .iter() + .filter_map(|verse| { + map.get(verse).and_then(|lyric| { + let lyric = + lyric.to_owned().trim().to_string(); + let multi_lyric = lyric.split("\n\n"); + let lyric: Vec = multi_lyric + .map(|lyric| lyric.trim().to_string()) + .collect(); + Some(lyric) + }) + }) + .flatten() + .collect() + } else { + vec![] + }; + debug!(?lyrics); let slides: Vec = lyrics .iter() .map(|l| { @@ -237,11 +260,12 @@ impl FromRow<'_, SqliteRow> for Song { let verse_order: Vec = { let vo: &str = row.try_get(0)?; + debug!(?vo); if let Ok(verse_order_vec) = - ron::de::from_str::>(vo) + ron::de::from_str::>>(vo) { debug!(?verse_order_vec); - verses = verse_order_vec; + verses = verse_order_vec.unwrap_or_default(); vo.split(' ') .map(std::string::ToString::to_string) .collect() @@ -367,6 +391,7 @@ fn lyrics_to_verse( _ => VerseName::Other { number: 99 }, }; verse_list.push(verse); + let lyric = lyric.trim().to_string(); verse_map.insert(verse, lyric); } diff --git a/src/ui/song_editor.rs b/src/ui/song_editor.rs index 4eefec0..1224ffa 100644 --- a/src/ui/song_editor.rs +++ b/src/ui/song_editor.rs @@ -450,7 +450,8 @@ impl SongEditor { { let verse = verses.remove(index); verses.insert(target_index, verse); - self.update_song(song); + debug!(?verses); + return self.update_song(song); } } draggable::DragEvent::Canceled { index } => (), @@ -628,13 +629,11 @@ impl SongEditor { .on_press(Message::EditVerseOrder); let verse_options = container( - scrollable( - draggable::row(verse_chips) - .on_drag(|event| Message::ChipReorder(event)), - ) - .direction(Direction::Horizontal( - Scrollbar::new().spacing(space_s), - )), + scrollable(row(verse_chips).spacing(space_s)).direction( + Direction::Horizontal( + Scrollbar::new().spacing(space_s), + ), + ), ) .padding(space_s) .width(Length::Fill) @@ -708,9 +707,13 @@ impl SongEditor { }; let verse_order = container(row![ - scrollable(row(verse_order_items).spacing(space_s)) - .direction(Direction::Horizontal(Scrollbar::new())) - .spacing(space_s), + scrollable( + draggable::row(verse_order_items) + .on_drag(|event| Message::ChipReorder(event)) + .spacing(space_s) + ) + .direction(Direction::Horizontal(Scrollbar::new())) + .spacing(space_s), horizontal_space(), verse_chips_edit_toggle ])