starting to add obs
Some checks failed
/ test (push) Has been cancelled

This commit is contained in:
Chris Cochrun 2025-12-09 15:23:34 -06:00
parent 2b40a7abcc
commit 06c4d1681c
3 changed files with 130 additions and 0 deletions

97
Cargo.lock generated
View file

@ -1688,6 +1688,12 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f"
[[package]]
name = "data-encoding"
version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
[[package]] [[package]]
name = "data-url" name = "data-url"
version = "0.3.2" version = "0.3.2"
@ -3164,6 +3170,22 @@ dependencies = [
"utf8-width", "utf8-width",
] ]
[[package]]
name = "http"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
dependencies = [
"bytes",
"itoa",
]
[[package]]
name = "httparse"
version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
[[package]] [[package]]
name = "i18n-config" name = "i18n-config"
version = "0.4.8" version = "0.4.8"
@ -4174,6 +4196,7 @@ dependencies = [
"libcosmic", "libcosmic",
"miette", "miette",
"mupdf", "mupdf",
"obws",
"pretty_assertions", "pretty_assertions",
"rapidfuzz", "rapidfuzz",
"rapidhash", "rapidhash",
@ -5077,6 +5100,30 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "obws"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "245cd220b1d4edd6ba01b30ef79d22dafb8b7acb4b00335297357053ba2c6c6e"
dependencies = [
"base64 0.22.1",
"bitflags 2.9.4",
"futures-util",
"rgb",
"semver",
"serde",
"serde_json",
"serde_repr",
"serde_with",
"sha2",
"thiserror 2.0.17",
"time",
"tokio",
"tokio-tungstenite",
"tracing",
"uuid",
]
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.21.3" version = "1.21.3"
@ -6277,6 +6324,10 @@ name = "semver"
version = "1.0.27" version = "1.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
dependencies = [
"serde",
"serde_core",
]
[[package]] [[package]]
name = "serde" name = "serde"
@ -7505,6 +7556,18 @@ dependencies = [
"tokio", "tokio",
] ]
[[package]]
name = "tokio-tungstenite"
version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084"
dependencies = [
"futures-util",
"log",
"tokio",
"tungstenite",
]
[[package]] [[package]]
name = "toml" name = "toml"
version = "0.5.11" version = "0.5.11"
@ -7668,6 +7731,23 @@ dependencies = [
"core_maths", "core_maths",
] ]
[[package]]
name = "tungstenite"
version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13"
dependencies = [
"bytes",
"data-encoding",
"http",
"httparse",
"log",
"rand 0.9.2",
"sha1",
"thiserror 2.0.17",
"utf-8",
]
[[package]] [[package]]
name = "type-map" name = "type-map"
version = "0.5.1" version = "0.5.1"
@ -7884,6 +7964,12 @@ dependencies = [
"xmlwriter", "xmlwriter",
] ]
[[package]]
name = "utf-8"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
[[package]] [[package]]
name = "utf8-width" name = "utf8-width"
version = "0.1.7" version = "0.1.7"
@ -7902,6 +7988,17 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a"
dependencies = [
"js-sys",
"serde_core",
"wasm-bindgen",
]
[[package]] [[package]]
name = "v_frame" name = "v_frame"
version = "0.3.9" version = "0.3.9"

View file

@ -42,6 +42,7 @@ mupdf = { version = "0.5.0", git = "https://github.com/messense/mupdf-rs", rev="
tar = "0.4.44" tar = "0.4.44"
zstd = "0.13.3" zstd = "0.13.3"
fastrand = "2.3.0" fastrand = "2.3.0"
obws = "0.14.0"
# rfd = { version = "0.15.4", default-features = false, features = ["xdg-portal"] } # rfd = { version = "0.15.4", default-features = false, features = ["xdg-portal"] }

View file

@ -1,10 +1,15 @@
use miette::{IntoDiagnostic, Result}; use miette::{IntoDiagnostic, Result};
use obws::{
Client, requests::scenes::SceneId, responses::scenes::Scene,
};
use std::{ use std::{
collections::HashMap,
fs::File, fs::File,
io::BufReader, io::BufReader,
path::PathBuf, path::PathBuf,
sync::{Arc, LazyLock}, sync::{Arc, LazyLock},
}; };
use tokio::task::spawn_blocking;
use cosmic::{ use cosmic::{
Task, Task,
@ -53,6 +58,8 @@ pub(crate) struct Presenter {
hovered_slide: Option<(usize, usize)>, hovered_slide: Option<(usize, usize)>,
scroll_id: Id, scroll_id: Id,
current_font: Font, current_font: Font,
scene_slide_map: Option<HashMap<(usize, usize), Scene>>,
obs_client: Option<Arc<Client>>,
} }
pub(crate) enum Action { pub(crate) enum Action {
@ -188,6 +195,8 @@ impl Presenter {
}, },
scroll_id: Id::unique(), scroll_id: Id::unique(),
current_font: cosmic::font::default(), current_font: cosmic::font::default(),
scene_slide_map: None,
obs_client: None,
} }
} }
@ -344,6 +353,29 @@ impl Presenter {
self.update(Message::EndAudio); self.update(Message::EndAudio);
} }
let task_count = tasks.len(); let task_count = tasks.len();
let item_index = self.current_item;
let slide_index = self.current_slide_index;
if let Some(map) = &self.scene_slide_map {
if let Some(scene) =
map.get(&(item_index, slide_index))
{
if let Some(obs) = &self.obs_client {
let obs = Arc::clone(&obs);
let task = Task::perform(
obs.scenes()
.set_current_program_scene(
scene.id.clone(),
),
|res| {
debug!(?res);
Message::None
},
);
tasks.push(task);
}
}
}
debug!(?task_count); debug!(?task_count);
return Action::Task(Task::batch(tasks)); return Action::Task(Task::batch(tasks));
} }