Compare commits
2 commits
ed3ac06d96
...
56aad3942f
| Author | SHA1 | Date | |
|---|---|---|---|
| 56aad3942f | |||
| 66b8ed0c2d |
4 changed files with 751 additions and 693 deletions
1324
Cargo.lock
generated
1324
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
30
flake.lock
generated
30
flake.lock
generated
|
|
@ -6,11 +6,11 @@
|
|||
"rust-analyzer-src": "rust-analyzer-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1759214609,
|
||||
"narHash": "sha256-+V3SeMjAMd9j9JTECk9oc0gWhtsk79rFEbYf/tHjywo=",
|
||||
"lastModified": 1765435813,
|
||||
"narHash": "sha256-C6tT7K1Lx6VsYw1BY5S3OavtapUvEnDQtmQB5DSgbCc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "fenix",
|
||||
"rev": "f93a2d7225bc7a93d3379acff8fe722e21d97852",
|
||||
"rev": "6399553b7a300c77e7f07342904eb696a5b6bf9d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -65,11 +65,11 @@
|
|||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1752689277,
|
||||
"narHash": "sha256-uldUBFkZe/E7qbvxa3mH1ItrWZyT6w1dBKJQF/3ZSsc=",
|
||||
"lastModified": 1763384566,
|
||||
"narHash": "sha256-r+wgI+WvNaSdxQmqaM58lVNvJYJ16zoq+tKN20cLst4=",
|
||||
"owner": "nix-community",
|
||||
"repo": "naersk",
|
||||
"rev": "0e72363d0938b0208d6c646d10649164c43f4d64",
|
||||
"rev": "d4155d6ebb70fbe2314959842f744aa7cabbbf6a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -80,11 +80,11 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1759036355,
|
||||
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
|
||||
"lastModified": 1765186076,
|
||||
"narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
|
||||
"rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -112,11 +112,11 @@
|
|||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1759036355,
|
||||
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
|
||||
"lastModified": 1765472234,
|
||||
"narHash": "sha256-9VvC20PJPsleGMewwcWYKGzDIyjckEz8uWmT0vCDYK0=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
|
||||
"rev": "2fbfb1d73d239d2402a8fe03963e37aab15abe8b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -137,11 +137,11 @@
|
|||
"rust-analyzer-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1759134797,
|
||||
"narHash": "sha256-YPi+jL3tx/yC5J5l7/OB7Lnlr9BMTzYnZtm7tRJzUNg=",
|
||||
"lastModified": 1765400135,
|
||||
"narHash": "sha256-D3+4hfNwUhG0fdCpDhOASLwEQ1jKuHi4mV72up4kLQM=",
|
||||
"owner": "rust-lang",
|
||||
"repo": "rust-analyzer",
|
||||
"rev": "062ac7a5451e8e92a32e22a60d86882d6a034f3f",
|
||||
"rev": "fface27171988b3d605ef45cf986c25533116f7e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
|||
|
|
@ -703,14 +703,6 @@ impl cosmic::Application for App {
|
|||
) -> Option<
|
||||
cosmic::app::context_drawer::ContextDrawer<Self::Message>,
|
||||
> {
|
||||
ContextDrawer {
|
||||
title: Some("Context".into()),
|
||||
header_actions: vec![],
|
||||
header: Some("hi".into()),
|
||||
content: "Sup".into(),
|
||||
footer: Some("foot".into()),
|
||||
on_close: Message::None,
|
||||
};
|
||||
None
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
use miette::{IntoDiagnostic, Result};
|
||||
use obws::{
|
||||
Client, requests::scenes::SceneId, responses::scenes::Scene,
|
||||
};
|
||||
use obws::{Client, responses::scenes::Scene};
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
fs::File,
|
||||
|
|
@ -25,8 +23,9 @@ use cosmic::{
|
|||
},
|
||||
prelude::*,
|
||||
widget::{
|
||||
Container, Id, Row, Space, container, context_menu, icon,
|
||||
image, menu, mouse_area, responsive, scrollable, text,
|
||||
Container, Id, Row, Space, container, context_menu,
|
||||
horizontal_space, icon, image, menu, mouse_area, responsive,
|
||||
scrollable, text,
|
||||
},
|
||||
};
|
||||
use iced_video_player::{Position, Video, VideoPlayer, gst_pbutils};
|
||||
|
|
@ -95,11 +94,10 @@ pub(crate) enum Message {
|
|||
Error(String),
|
||||
None,
|
||||
RightClickSlide(usize, usize),
|
||||
ObsStartStream,
|
||||
ObsStopStream,
|
||||
ObsSceneAssign(usize),
|
||||
AssignObsScene(usize),
|
||||
UpdateObsScenes(Vec<Scene>),
|
||||
AddObsClient(Arc<Client>),
|
||||
AssignSlideAction(slide_actions::Action),
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for Message {
|
||||
|
|
@ -149,15 +147,17 @@ impl std::fmt::Debug for Message {
|
|||
.field(arg0)
|
||||
.field(arg1)
|
||||
.finish(),
|
||||
Self::ObsStartStream => write!(f, "ObsStartStream"),
|
||||
Self::ObsStopStream => write!(f, "ObsStopStream"),
|
||||
Self::ObsSceneAssign(arg0) => {
|
||||
Self::AssignObsScene(arg0) => {
|
||||
f.debug_tuple("ObsSceneAssign").field(arg0).finish()
|
||||
}
|
||||
Self::UpdateObsScenes(arg0) => {
|
||||
f.debug_tuple("UpdateObsScenes").field(arg0).finish()
|
||||
}
|
||||
Self::AddObsClient(_) => write!(f, "AddObsClient"),
|
||||
Self::AssignSlideAction(action) => f
|
||||
.debug_tuple("AssignSlideAction")
|
||||
.field(action)
|
||||
.finish(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -177,10 +177,18 @@ impl menu::Action for MenuAction {
|
|||
fn message(&self) -> Self::Message {
|
||||
match self {
|
||||
MenuAction::ObsSceneAssign(scene) => {
|
||||
Message::ObsSceneAssign(*scene)
|
||||
Message::AssignObsScene(*scene)
|
||||
}
|
||||
MenuAction::ObsStartStream => Message::ObsStartStream,
|
||||
MenuAction::ObsStopStream => Message::ObsStopStream,
|
||||
MenuAction::ObsStartStream => Message::AssignSlideAction(
|
||||
slide_actions::Action::Obs {
|
||||
action: ObsAction::StartStream,
|
||||
},
|
||||
),
|
||||
MenuAction::ObsStopStream => Message::AssignSlideAction(
|
||||
slide_actions::Action::Obs {
|
||||
action: ObsAction::StopStream,
|
||||
},
|
||||
),
|
||||
MenuAction::ObsStartRecord => todo!(),
|
||||
MenuAction::ObsStopRecord => todo!(),
|
||||
}
|
||||
|
|
@ -337,7 +345,7 @@ impl Presenter {
|
|||
debug!(?scenes, "updating obs scenes");
|
||||
self.obs_scenes = Some(scenes);
|
||||
}
|
||||
Message::ObsSceneAssign(scene_index) => {
|
||||
Message::AssignObsScene(scene_index) => {
|
||||
let Some(scenes) = &self.obs_scenes else {
|
||||
return Action::None;
|
||||
};
|
||||
|
|
@ -404,8 +412,27 @@ impl Presenter {
|
|||
self.slide_action_map = Some(map);
|
||||
}
|
||||
}
|
||||
Message::ObsStartStream => todo!(),
|
||||
Message::ObsStopStream => todo!(),
|
||||
Message::AssignSlideAction(action) => {
|
||||
if let Some(map) = self.slide_action_map.as_mut() {
|
||||
if let Some(actions) =
|
||||
map.get_mut(&self.context_menu_id.unwrap())
|
||||
{
|
||||
actions.push(action)
|
||||
} else {
|
||||
map.insert(
|
||||
self.context_menu_id.unwrap(),
|
||||
vec![action],
|
||||
);
|
||||
}
|
||||
} else {
|
||||
let mut map = HashMap::new();
|
||||
map.insert(
|
||||
self.context_menu_id.unwrap(),
|
||||
vec![action],
|
||||
);
|
||||
self.slide_action_map = Some(map);
|
||||
}
|
||||
}
|
||||
Message::ActivateSlide(item_index, slide_index) => {
|
||||
debug!(slide_index, item_index);
|
||||
if let Some(slide) = self
|
||||
|
|
@ -743,11 +770,11 @@ impl Presenter {
|
|||
)))
|
||||
})
|
||||
.on_exit(Message::HoveredSlide(None))
|
||||
.on_press(Message::ClickSlide(
|
||||
.on_release(Message::ClickSlide(
|
||||
item_index,
|
||||
slide_index,
|
||||
))
|
||||
.on_right_press(Message::RightClickSlide(
|
||||
.on_right_release(Message::RightClickSlide(
|
||||
item_index,
|
||||
slide_index,
|
||||
));
|
||||
|
|
@ -771,7 +798,7 @@ impl Presenter {
|
|||
items.push(divider.into());
|
||||
},
|
||||
);
|
||||
let row =
|
||||
let scrollable =
|
||||
scrollable(container(Row::from_vec(items)).style(|t| {
|
||||
let style = container::Style::default();
|
||||
style.border(Border::default().width(2))
|
||||
|
|
@ -780,8 +807,7 @@ impl Presenter {
|
|||
.height(Length::Fill)
|
||||
.width(Length::Fill)
|
||||
.id(self.scroll_id.clone());
|
||||
let context_menu = self.context_menu(row.into());
|
||||
context_menu.into()
|
||||
self.context_menu(scrollable.into())
|
||||
}
|
||||
|
||||
fn context_menu<'a>(
|
||||
|
|
@ -789,9 +815,6 @@ impl Presenter {
|
|||
items: Element<'a, Message>,
|
||||
) -> Element<'a, Message> {
|
||||
if self.context_menu_id.is_some() {
|
||||
let before_icon =
|
||||
icon::from_path("./res/split-above.svg".into())
|
||||
.symbolic(true);
|
||||
let mut scenes = vec![];
|
||||
if let Some(obs_scenes) = &self.obs_scenes {
|
||||
for scene in obs_scenes {
|
||||
|
|
@ -805,9 +828,14 @@ impl Presenter {
|
|||
}
|
||||
let menu_items = vec![
|
||||
menu::Item::Button(
|
||||
"Test Scene".to_string(),
|
||||
"Start Stream".to_string(),
|
||||
None,
|
||||
MenuAction::ObsSceneAssign(0),
|
||||
MenuAction::ObsStartStream,
|
||||
),
|
||||
menu::Item::Button(
|
||||
"Stop Stream".to_string(),
|
||||
None,
|
||||
MenuAction::ObsStopStream,
|
||||
),
|
||||
menu::Item::Folder("Obs Scene".to_string(), scenes),
|
||||
];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue