This commit is contained in:
parent
2b40a7abcc
commit
06c4d1681c
3 changed files with 130 additions and 0 deletions
97
Cargo.lock
generated
97
Cargo.lock
generated
|
|
@ -1688,6 +1688,12 @@ version = "0.11.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f"
|
||||
|
||||
[[package]]
|
||||
name = "data-encoding"
|
||||
version = "2.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
|
||||
|
||||
[[package]]
|
||||
name = "data-url"
|
||||
version = "0.3.2"
|
||||
|
|
@ -3164,6 +3170,22 @@ dependencies = [
|
|||
"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]]
|
||||
name = "i18n-config"
|
||||
version = "0.4.8"
|
||||
|
|
@ -4174,6 +4196,7 @@ dependencies = [
|
|||
"libcosmic",
|
||||
"miette",
|
||||
"mupdf",
|
||||
"obws",
|
||||
"pretty_assertions",
|
||||
"rapidfuzz",
|
||||
"rapidhash",
|
||||
|
|
@ -5077,6 +5100,30 @@ dependencies = [
|
|||
"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]]
|
||||
name = "once_cell"
|
||||
version = "1.21.3"
|
||||
|
|
@ -6277,6 +6324,10 @@ name = "semver"
|
|||
version = "1.0.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
|
|
@ -7505,6 +7556,18 @@ dependencies = [
|
|||
"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]]
|
||||
name = "toml"
|
||||
version = "0.5.11"
|
||||
|
|
@ -7668,6 +7731,23 @@ dependencies = [
|
|||
"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]]
|
||||
name = "type-map"
|
||||
version = "0.5.1"
|
||||
|
|
@ -7884,6 +7964,12 @@ dependencies = [
|
|||
"xmlwriter",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "utf-8"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
|
||||
|
||||
[[package]]
|
||||
name = "utf8-width"
|
||||
version = "0.1.7"
|
||||
|
|
@ -7902,6 +7988,17 @@ version = "0.2.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
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]]
|
||||
name = "v_frame"
|
||||
version = "0.3.9"
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ mupdf = { version = "0.5.0", git = "https://github.com/messense/mupdf-rs", rev="
|
|||
tar = "0.4.44"
|
||||
zstd = "0.13.3"
|
||||
fastrand = "2.3.0"
|
||||
obws = "0.14.0"
|
||||
|
||||
# rfd = { version = "0.15.4", default-features = false, features = ["xdg-portal"] }
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
use miette::{IntoDiagnostic, Result};
|
||||
use obws::{
|
||||
Client, requests::scenes::SceneId, responses::scenes::Scene,
|
||||
};
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
fs::File,
|
||||
io::BufReader,
|
||||
path::PathBuf,
|
||||
sync::{Arc, LazyLock},
|
||||
};
|
||||
use tokio::task::spawn_blocking;
|
||||
|
||||
use cosmic::{
|
||||
Task,
|
||||
|
|
@ -53,6 +58,8 @@ pub(crate) struct Presenter {
|
|||
hovered_slide: Option<(usize, usize)>,
|
||||
scroll_id: Id,
|
||||
current_font: Font,
|
||||
scene_slide_map: Option<HashMap<(usize, usize), Scene>>,
|
||||
obs_client: Option<Arc<Client>>,
|
||||
}
|
||||
|
||||
pub(crate) enum Action {
|
||||
|
|
@ -188,6 +195,8 @@ impl Presenter {
|
|||
},
|
||||
scroll_id: Id::unique(),
|
||||
current_font: cosmic::font::default(),
|
||||
scene_slide_map: None,
|
||||
obs_client: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -344,6 +353,29 @@ impl Presenter {
|
|||
self.update(Message::EndAudio);
|
||||
}
|
||||
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);
|
||||
return Action::Task(Task::batch(tasks));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue