From 3f9a1714c46dbaec1cf62bfa7038a3fbf44dd94b Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Fri, 1 Dec 2023 09:54:16 -0600 Subject: [PATCH] trying to tweak song editor to work --- src/qml/presenter/SongEditor.qml | 103 ++++++++++++------------------- src/rust/songs/song_model.rs | 39 ++++++++---- 2 files changed, 66 insertions(+), 76 deletions(-) diff --git a/src/qml/presenter/SongEditor.qml b/src/qml/presenter/SongEditor.qml index ed00f6a..1e0f643 100644 --- a/src/qml/presenter/SongEditor.qml +++ b/src/qml/presenter/SongEditor.qml @@ -475,76 +475,53 @@ Item { repeat: true running: false onTriggered: { - if (lyricsEditor.text === song.lyrics) + if (lyricsEditor.text === songEditorModel.lyrics) return; - updateLyrics(lyricsEditor.text); + else + songEditorModel.lyrics = lyricsEditor.text; + /* updateLyrics(lyricsEditor.text); */ } } - function newSong(index) { - clearSlides(); - let thisSong = songProxyModel.getSong(index); - songEditorModel.title = thisSong.title; - songEditorModel.lyrics = thisSong.lyrics; - songEditorModel.author = thisSong.author; - songEditorModel.ccli = thisSong.ccli; - songEditorModel.audio = thisSong.audio; - songEditorModel.verseOrder = thisSong.vorder; - songEditorModel.background = thisSong.background; - songEditorModel.backgroundType = thisSong.backgroundType; - songEditorModel.horizontalTextAlignment = thisSong.horizontalTextAlignment; - songEditorModel.verticalTextAlignment = thisSong.verticalTextAlignment; - songEditorModel.font = thisSong.font; - songEditorModel.fontSize = thisSong.fontSize; - songEditorModel.checkFiles(); - songID = thisSong.id; - - updateHorizontalTextAlignment("Center"); - changeSlideHAlignment("Center"); - updateVerticalTextAlignment("Center"); - changeSlideVAlignment("Center"); - updateFont("Noto Sans"); - changeSlideFont("Noto Sans", true); - updateFontSize(50); - changeSlideFontSize(50, true); - updateLyrics("Lyrics"); - songList.loadVideo(); - console.log("New song with ID: " + song.id); - } - function changeSong(index) { console.log("Preparing to change song: " + index + 1 + " out of " + songProxyModel.songModel.count); - if (songProxyModel.songModel.count - 1 === index) - newSong(index) - else { - clearSlides(); - const updatedSong = songProxyModel.getSong(index); - console.log(updatedSong.vorder + " " + updatedSong.title + " " + updatedSong.audio); - songEditorModel.title = updatedSong.title; - songEditorModel.lyrics = updatedSong.lyrics; - songEditorModel.author = updatedSong.author; - songEditorModel.ccli = updatedSong.ccli; - songEditorModel.audio = updatedSong.audio; - songEditorModel.verseOrder = updatedSong.vorder; - songEditorModel.background = updatedSong.background; - songEditorModel.backgroundType = updatedSong.backgroundType; - songEditorModel.horizontalTextAlignment = updatedSong.horizontalTextAlignment; - songEditorModel.verticalTextAlignment = updatedSong.verticalTextAlignment; - songEditorModel.font = updatedSong.font; - songEditorModel.fontSize = updatedSong.fontSize; - songEditorModel.checkVerseOrder(); - songEditorModel.checkFiles(); - songID = updatedSong.id; + clearSlides(); + const updatedSong = songProxyModel.getSong(index); + console.log(updatedSong.vorder + " " + updatedSong.title + " " + updatedSong.audio); + songEditorModel.title = updatedSong.title; + songEditorModel.lyrics = updatedSong.lyrics; + songEditorModel.author = updatedSong.author; + songEditorModel.ccli = updatedSong.ccli; + songEditorModel.audio = updatedSong.audio; + songEditorModel.verseOrder = updatedSong.vorder; + songEditorModel.background = updatedSong.background; + songEditorModel.backgroundType = updatedSong.backgroundType; + songEditorModel.horizontalTextAlignment = updatedSong.horizontalTextAlignment; + songEditorModel.verticalTextAlignment = updatedSong.verticalTextAlignment; + songEditorModel.font = updatedSong.font; + songEditorModel.fontSize = updatedSong.fontSize; + songEditorModel.checkVerseOrder(); + songEditorModel.checkFiles(); + songID = updatedSong.id; - changeSlideHAlignment(song.horizontalTextAlignment); - changeSlideVAlignment(song.verticalTextAlignment); - changeSlideFont(song.font, true); - changeSlideFontSize(song.fontSize, true) - changeSlideText(songProxyModel.modelIndex(index).row); - console.log("Changing to song: " + song.title + " with ID: " + songID); - footerFirstText = "Song: "; - footerSecondText = song.title; - songList.loadVideo(); + changeSlideHAlignment(song.horizontalTextAlignment); + changeSlideVAlignment(song.verticalTextAlignment); + changeSlideFont(song.font, true); + changeSlideFontSize(song.fontSize, true) + changeSlideText(songProxyModel.modelIndex(index).row); + console.log("Changing to song: " + song.title + " with ID: " + songID); + footerFirstText = "Song: "; + footerSecondText = song.title; + songList.loadVideo(); + } + + Connections { + target: songEditorModel + function onLyricsChanged() { + showPassiveNotification("Lyrics changed"); + songProxyModel.songModel.updateLyrics(songID, lyricsEditor.text); + clearSlides(); + changeSlideText(songID); } } diff --git a/src/rust/songs/song_model.rs b/src/rust/songs/song_model.rs index 032ce7c..2cb2a26 100644 --- a/src/rust/songs/song_model.rs +++ b/src/rust/songs/song_model.rs @@ -248,7 +248,7 @@ use self::song_model::{ SongRoles, }; -#[derive(Default, Clone, Debug)] +#[derive(Clone, Debug)] pub struct Song { id: i32, title: String, @@ -265,6 +265,18 @@ pub struct Song { font_size: i32, } +impl Default for Song { + fn default() -> Self { + Self { + horizontal_text_alignment: String::from("Center"), + vertical_text_alignment: String::from("Center"), + font: String::from("Quicksand Bold"), + font_size: 50, + ..Default::default() + } + } +} + #[derive(Default, Debug)] pub struct SongModelRust { count: i32, @@ -451,18 +463,19 @@ impl song_model::SongModel { ) -> (usize, QModelIndex, QVector_i32) { let mut vector_roles = QVector_i32::default(); vector_roles.append(self.as_ref().get_role(role)); - let index = self - .as_ref() - .songs - .iter() - .position(|x| x.id == song_id) - .unwrap(); - let model_index = self.as_ref().index( - index as i32, - 0, - &QModelIndex::default(), - ); - (index, model_index, vector_roles) + if let Some(index) = + self.as_ref().songs.iter().position(|x| x.id == song_id) + { + let model_index = self.as_ref().index( + index as i32, + 0, + &QModelIndex::default(), + ); + (index, model_index, vector_roles) + } else { + error!(song_id, "This song appears to be missing"); + (0, QModelIndex::default(), vector_roles) + } } pub fn update_title(