making obs scene switching more coherent, but still not functional
This commit is contained in:
parent
c96f188c70
commit
00fcf565ef
5 changed files with 133 additions and 46 deletions
|
@ -47,6 +47,7 @@ mod slide_model {
|
|||
VideoStartTime,
|
||||
VideoEndTime,
|
||||
Html,
|
||||
ObsScene,
|
||||
}
|
||||
|
||||
unsafe extern "RustQt" {
|
||||
|
@ -123,6 +124,13 @@ mod slide_model {
|
|||
|
||||
#[qinvokable]
|
||||
fn activate(self: Pin<&mut SlideModel>, index: i32) -> bool;
|
||||
|
||||
#[qinvokable]
|
||||
fn update_obs_scene(
|
||||
self: Pin<&mut SlideModel>,
|
||||
index: i32,
|
||||
obs_scene: QString,
|
||||
);
|
||||
}
|
||||
|
||||
impl cxx_qt::Threading for SlideModel {}
|
||||
|
@ -271,7 +279,7 @@ impl Default for Slide {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
#[derive(Debug)]
|
||||
pub struct SlideModelRust {
|
||||
id: i32,
|
||||
slides: Vec<Slide>,
|
||||
|
@ -279,6 +287,28 @@ pub struct SlideModelRust {
|
|||
count: i32,
|
||||
}
|
||||
|
||||
|
||||
impl Default for SlideModelRust {
|
||||
fn default() -> Self {
|
||||
let obs =
|
||||
tokio::runtime::Runtime::new().unwrap().block_on(async {
|
||||
match Obs::new().await {
|
||||
Ok(o) => Some(o),
|
||||
Err(e) => {
|
||||
error!(e);
|
||||
None
|
||||
}
|
||||
}
|
||||
});
|
||||
Self {
|
||||
id: 0,
|
||||
slides: Vec::new(),
|
||||
obs,
|
||||
count: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl slide_model::SlideModel {
|
||||
pub fn add_video_thumbnail(
|
||||
mut self: Pin<&mut Self>,
|
||||
|
@ -1154,25 +1184,26 @@ impl slide_model::SlideModel {
|
|||
slide.active = false;
|
||||
}
|
||||
|
||||
let obs = self.as_mut().obs.clone();
|
||||
|
||||
if let Some(slide) =
|
||||
self.as_mut().rust_mut().slides.get_mut(index as usize)
|
||||
{
|
||||
debug!(
|
||||
slide = index,
|
||||
service_item = slide.service_item_id,
|
||||
obs = slide.obs_scene.to_string(),
|
||||
"This slide is activating"
|
||||
);
|
||||
let obs_scene = slide.obs_scene.to_string();
|
||||
slide.active = true;
|
||||
self.as_mut().data_changed(tl, br, &vector_roles);
|
||||
|
||||
if let Some(obs) = obs {
|
||||
if let Some(obs) = self.as_ref().obs.clone() {
|
||||
match obs.set_scene(obs_scene) {
|
||||
Ok(()) => debug!("Successfully set scene"),
|
||||
Err(e) => error!(e),
|
||||
}
|
||||
} else {
|
||||
debug!("Obs isn't connected");
|
||||
}
|
||||
|
||||
// We use this signal generated by our signals enum to tell QML that
|
||||
|
@ -1184,6 +1215,24 @@ impl slide_model::SlideModel {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn update_obs_scene(
|
||||
mut self: Pin<&mut Self>,
|
||||
index: i32,
|
||||
obs_scene: QString,
|
||||
) {
|
||||
let rc = self.as_ref().count() - 1;
|
||||
let tl = &self.as_ref().index(0, 0, &QModelIndex::default());
|
||||
let br = &self.as_ref().index(rc, 0, &QModelIndex::default());
|
||||
let mut vector_roles = QVector_i32::default();
|
||||
vector_roles.append(self.get_role(SlideRoles::ObsScene));
|
||||
if let Some(slide) =
|
||||
self.as_mut().rust_mut().slides.get_mut(index as usize)
|
||||
{
|
||||
slide.obs_scene = obs_scene;
|
||||
self.as_mut().data_changed(tl, br, &vector_roles);
|
||||
}
|
||||
}
|
||||
|
||||
fn get_role(&self, role: SlideRoles) -> i32 {
|
||||
match role {
|
||||
SlideRoles::Text => 1,
|
||||
|
@ -1193,6 +1242,8 @@ impl slide_model::SlideModel {
|
|||
SlideRoles::VideoThumbnail => 15,
|
||||
SlideRoles::VideoStartTime => 16,
|
||||
SlideRoles::VideoEndTime => 17,
|
||||
SlideRoles::Html => 18,
|
||||
SlideRoles::ObsScene => 19,
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
|
@ -1247,6 +1298,9 @@ impl slide_model::SlideModel {
|
|||
QVariant::from(&slide.video_end_time)
|
||||
}
|
||||
SlideRoles::Html => QVariant::from(&slide.html),
|
||||
SlideRoles::ObsScene => {
|
||||
QVariant::from(&slide.obs_scene)
|
||||
}
|
||||
_ => QVariant::default(),
|
||||
};
|
||||
}
|
||||
|
@ -1325,6 +1379,10 @@ impl slide_model::SlideModel {
|
|||
QByteArray::from("videoEndTime"),
|
||||
);
|
||||
roles.insert(SlideRoles::Html.repr, QByteArray::from("html"));
|
||||
roles.insert(
|
||||
SlideRoles::ObsScene.repr,
|
||||
QByteArray::from("obsScene"),
|
||||
);
|
||||
roles
|
||||
}
|
||||
|
||||
|
@ -1334,3 +1392,13 @@ impl slide_model::SlideModel {
|
|||
cnt
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
pub fn test_obs_setting_scene() {
|
||||
assert_eq!(true, true)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue