diff --git a/src/qml/presenter/ServiceList.qml b/src/qml/presenter/ServiceList.qml index 1d66d6e..ccd0808 100644 --- a/src/qml/presenter/ServiceList.qml +++ b/src/qml/presenter/ServiceList.qml @@ -675,6 +675,6 @@ Item { console.log("Select all these here items..." + arr); } } - ServiceItemModel.selectItems(arr); + ServiceItemModel.selectItems(index); } } diff --git a/src/rust/service_item_model.rs b/src/rust/service_item_model.rs index af614c3..63b259a 100644 --- a/src/rust/service_item_model.rs +++ b/src/rust/service_item_model.rs @@ -145,6 +145,7 @@ mod service_item_model { use std::str; use std::{fs, println}; use tar::{Archive, Builder}; + use tracing::{debug, debug_span, error, info, instrument}; use zstd::{Decoder, Encoder}; impl qobject::ServiceItemMod { #[qinvokable] @@ -436,9 +437,45 @@ mod service_item_model { #[qinvokable] pub fn select_items( mut self: Pin<&mut Self>, - items: QMap_QString_QVariant, + final_index: i32, ) -> bool { - todo!(); + if let Some((current_index, current_item)) = self + .as_ref() + .service_items() + .iter() + .filter(|i| i.selected) + .enumerate() + .next() + { + // Here we will need to branch to get the selected items + debug!(first_item = ?current_index); + debug!(final_item = final_index); + if final_index == current_index { + false + } + + let lower = final_index > current_index; + if lower { + let selected = self + .as_mut() + .service_items_mut() + .iter_mut() + .enumerate() + .filter(|i| { + i.0 >= current_index + && i.0 <= final_index as usize + }) + .map(|i| i.1.selected = true); + } + + true + } else { + // Here let's branch to select from the first item to the + // final item. Since we don't know which one is selected, + // assume that the first one is "selected" + error!("ERROR: couldn't find first selected item"); + false + } } #[qinvokable] diff --git a/src/rust/songs/song_editor.rs b/src/rust/songs/song_editor.rs index e5e25f6..6194523 100644 --- a/src/rust/songs/song_editor.rs +++ b/src/rust/songs/song_editor.rs @@ -3,4 +3,19 @@ mod song_editor { Yes, No, } + + pub struct EditableSong { + title: String, + lyrics: String, + author: String, + ccli: String, + audio: String, + verse_order: String, + background: String, + background_type: String, + horizontal_text_alignment: String, + vertical_text_alignment: String, + font: String, + font_size: i32, + } }