diff --git a/src/qml/presenter/ServiceList.qml b/src/qml/presenter/ServiceList.qml index b506c68..f88bb8a 100644 --- a/src/qml/presenter/ServiceList.qml +++ b/src/qml/presenter/ServiceList.qml @@ -556,7 +556,7 @@ Item { function addItem(index, type, itemIndex) { switch (type) { case 'image': { - const image = imageProxyModel.getImage(itemIndex); + const image = imageModel.getItem(itemIndex); console.log("adding: " + image.title + " of type " + type); ServiceItemModel.insertItem(index, image.title, "", type, image.filePath, @@ -566,7 +566,7 @@ Item { return; } case 'video': { - const video = videoProxyModel.getVideo(itemIndex); + const video = videoModel.getItem(itemIndex); console.log("adding: " + video.title + " of type " + type); ServiceItemModel.insertItem(index, video.title, "", type, video.filePath, @@ -576,8 +576,8 @@ Item { return; } case 'song': { - const lyrics = songProxyModel.getLyricList(itemIndex); - const song = songProxyModel.getSong(itemIndex); + const lyrics = songModel.getLyricList(itemIndex); + const song = songModel.getItem(itemIndex); /* showPassiveNotification(song.title); */ console.log("adding: " + song.title + " of type " + type + @@ -591,7 +591,7 @@ Item { return; } case 'presentation': { - const pres = presProxyModel.presentationModel.getItem(itemIndex); + const pres = presentationModel.getItem(itemIndex); console.log("adding: " + pres.title + " of type " + type + " with " + pres.pageCount + " slides"); @@ -611,7 +611,7 @@ Item { function appendItem(type, itemIndex) { switch (type) { case 'image': { - const image = imageProxyModel.getImage(itemIndex); + const image = imageModel.getItem(itemIndex); console.log("adding: " + image.title + " of type " + type); ServiceItemModel.addItem(image.title, type, image.filePath, @@ -621,7 +621,7 @@ Item { return; } case 'video': { - const video = videoProxyModel.getVideo(itemIndex); + const video = videoModel.getItem(itemIndex); console.log("adding: " + video.title + " of type " + type); ServiceItemModel.addItem(video.title, type, video.filePath, @@ -631,8 +631,8 @@ Item { return; } case 'song': { - const lyrics = songProxyModel.getLyricList(itemIndex); - const song = songProxyModel.getSong(itemIndex); + const lyrics = songModel.getLyricList(itemIndex); + const song = songModel.getItem(itemIndex); console.log("adding: " + song.title + " of type " + type + " with " + lyrics.length + " slides"); @@ -645,7 +645,7 @@ Item { return; } case 'presentation': { - const pres = presProxyModel.presentationModel.getItem(itemIndex); + const pres = presentationModel.getItem(itemIndex); console.log("adding: " + pres.title + " of type " + type + " with " + pres.pageCount + " slides"); diff --git a/src/rust/image_model.rs b/src/rust/image_model.rs index 12ef903..18b83e8 100644 --- a/src/rust/image_model.rs +++ b/src/rust/image_model.rs @@ -156,6 +156,7 @@ mod image_model { } } +use crate::models::run_migrations; use crate::schema::images::dsl::*; use cxx_qt::CxxQtType; use cxx_qt_lib::{QModelIndex, QString, QUrl, QVariant}; @@ -197,6 +198,7 @@ impl image_model::ImageModel { pub fn setup(mut self: Pin<&mut Self>) { let db = &mut self.as_mut().get_db(); + run_migrations(db); let results = images .load::(db) .expect("Error loading images"); diff --git a/src/rust/service_item_model.rs b/src/rust/service_item_model.rs index 2fe6dbd..39cc56b 100644 --- a/src/rust/service_item_model.rs +++ b/src/rust/service_item_model.rs @@ -1356,6 +1356,29 @@ impl service_item_model::ServiceItemModel { } } + fn get_indices( + self: Pin<&mut Self>, + item_id: i32, + role: ServiceRoles, + ) -> (usize, QModelIndex, QVector_i32) { + let mut vector_roles = QVector_i32::default(); + vector_roles.append(self.as_ref().get_role(role)); + if let Some(index) = + self.as_ref().service_items.iter().position(|x| x.id == item_id) + { + let model_index = self.as_ref().index( + index as i32, + 0, + &QModelIndex::default(), + ); + (index, model_index, vector_roles) + } else { + error!(item_id, "This item appears to be missing"); + (0, QModelIndex::default(), vector_roles) + } + } + + pub fn load_last_saved(self: Pin<&mut Self>) -> bool { todo!(); // Don't actually need diff --git a/src/rust/slide_model.rs b/src/rust/slide_model.rs index 1ac771f..cf2098f 100644 --- a/src/rust/slide_model.rs +++ b/src/rust/slide_model.rs @@ -315,17 +315,10 @@ impl slide_model::SlideModel { mut self: Pin<&mut Self>, index: i32, ) -> bool { - let mut vector_roles = QVector_i32::default(); - vector_roles - .append(self.get_role(SlideRoles::VideoThumbnail)); - + let (id, index, roles) = self.as_mut().get_indices(index, SlideRoles::VideoThumbnail); let thread = self.qt_thread(); - let model_index = self - .as_ref() - .index(index, 0, &QModelIndex::default()) - .clone(); if let Some(slide) = - self.as_mut().rust_mut().slides.get_mut(index as usize) + self.as_mut().rust_mut().slides.get_mut(id) { if !slide.video_background.is_empty() { let path = @@ -335,9 +328,7 @@ impl slide_model::SlideModel { screenshot_string.insert_str(0, "file://"); slide.video_thumbnail = screenshot_string; std::thread::spawn(move || { - let result = - ffmpeg::bg_from_video(&path, &screenshot); - match result { + match ffmpeg::bg_from_video(&path, &screenshot) { Ok(_o) => { debug!("Success making video background!") } @@ -346,15 +337,14 @@ impl slide_model::SlideModel { "Error making video background" ), }; - let result = - thread.queue(move |mut slide_model| { - slide_model.as_mut().data_changed( - &model_index, - &model_index, - &vector_roles, - ) - }); - match result { + + match thread.queue(move |mut slide_model| { + slide_model.as_mut().data_changed( + &index, + &index, + &roles, + ) + }) { Ok(_o) => { debug!("Success in creating qt_thread") } @@ -466,14 +456,7 @@ impl slide_model::SlideModel { } let count = self.as_ref().count; self.as_mut().set_count(count + 1); - let thread = self.qt_thread(); - thread::spawn(move || { - thread - .queue(move |slidemodel| { - slidemodel.add_video_thumbnail(index); - }) - .unwrap(); - }); + self.as_mut().add_video_thumbnail(index); } pub fn insert_item_from_service( @@ -1232,6 +1215,29 @@ impl slide_model::SlideModel { _ => 0, } } + + fn get_indices( + self: Pin<&mut Self>, + item_id: i32, + role: SlideRoles, + ) -> (usize, QModelIndex, QVector_i32) { + let mut vector_roles = QVector_i32::default(); + vector_roles.append(self.as_ref().get_role(role)); + if let Some(index) = + self.as_ref().slides.iter().enumerate().nth(item_id) + { + let model_index = self.as_ref().index( + index as i32, + 0, + &QModelIndex::default(), + ); + (index, model_index, vector_roles) + } else { + error!(item_id, "This item appears to be missing"); + (0, QModelIndex::default(), vector_roles) + } + } + } // QAbstractListModel implementation