Compare commits

..

No commits in common. "56aad3942f175e82a13681141cb9ab2279cbc7f4" and "ed3ac06d96c7e4850fb320dfae2a6a2213c82cc0" have entirely different histories.

4 changed files with 691 additions and 749 deletions

1320
Cargo.lock generated

File diff suppressed because it is too large Load diff

30
flake.lock generated
View file

@ -6,11 +6,11 @@
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1765435813,
"narHash": "sha256-C6tT7K1Lx6VsYw1BY5S3OavtapUvEnDQtmQB5DSgbCc=",
"lastModified": 1759214609,
"narHash": "sha256-+V3SeMjAMd9j9JTECk9oc0gWhtsk79rFEbYf/tHjywo=",
"owner": "nix-community",
"repo": "fenix",
"rev": "6399553b7a300c77e7f07342904eb696a5b6bf9d",
"rev": "f93a2d7225bc7a93d3379acff8fe722e21d97852",
"type": "github"
},
"original": {
@ -65,11 +65,11 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1763384566,
"narHash": "sha256-r+wgI+WvNaSdxQmqaM58lVNvJYJ16zoq+tKN20cLst4=",
"lastModified": 1752689277,
"narHash": "sha256-uldUBFkZe/E7qbvxa3mH1ItrWZyT6w1dBKJQF/3ZSsc=",
"owner": "nix-community",
"repo": "naersk",
"rev": "d4155d6ebb70fbe2314959842f744aa7cabbbf6a",
"rev": "0e72363d0938b0208d6c646d10649164c43f4d64",
"type": "github"
},
"original": {
@ -80,11 +80,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1765186076,
"narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=",
"lastModified": 1759036355,
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8",
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
"type": "github"
},
"original": {
@ -112,11 +112,11 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1765472234,
"narHash": "sha256-9VvC20PJPsleGMewwcWYKGzDIyjckEz8uWmT0vCDYK0=",
"lastModified": 1759036355,
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2fbfb1d73d239d2402a8fe03963e37aab15abe8b",
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
"type": "github"
},
"original": {
@ -137,11 +137,11 @@
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1765400135,
"narHash": "sha256-D3+4hfNwUhG0fdCpDhOASLwEQ1jKuHi4mV72up4kLQM=",
"lastModified": 1759134797,
"narHash": "sha256-YPi+jL3tx/yC5J5l7/OB7Lnlr9BMTzYnZtm7tRJzUNg=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "fface27171988b3d605ef45cf986c25533116f7e",
"rev": "062ac7a5451e8e92a32e22a60d86882d6a034f3f",
"type": "github"
},
"original": {

View file

@ -703,6 +703,14 @@ 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
}

View file

@ -1,5 +1,7 @@
use miette::{IntoDiagnostic, Result};
use obws::{Client, responses::scenes::Scene};
use obws::{
Client, requests::scenes::SceneId, responses::scenes::Scene,
};
use std::{
collections::HashMap,
fs::File,
@ -23,9 +25,8 @@ use cosmic::{
},
prelude::*,
widget::{
Container, Id, Row, Space, container, context_menu,
horizontal_space, icon, image, menu, mouse_area, responsive,
scrollable, text,
Container, Id, Row, Space, container, context_menu, icon,
image, menu, mouse_area, responsive, scrollable, text,
},
};
use iced_video_player::{Position, Video, VideoPlayer, gst_pbutils};
@ -94,10 +95,11 @@ pub(crate) enum Message {
Error(String),
None,
RightClickSlide(usize, usize),
AssignObsScene(usize),
ObsStartStream,
ObsStopStream,
ObsSceneAssign(usize),
UpdateObsScenes(Vec<Scene>),
AddObsClient(Arc<Client>),
AssignSlideAction(slide_actions::Action),
}
impl std::fmt::Debug for Message {
@ -147,17 +149,15 @@ impl std::fmt::Debug for Message {
.field(arg0)
.field(arg1)
.finish(),
Self::AssignObsScene(arg0) => {
Self::ObsStartStream => write!(f, "ObsStartStream"),
Self::ObsStopStream => write!(f, "ObsStopStream"),
Self::ObsSceneAssign(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,18 +177,10 @@ impl menu::Action for MenuAction {
fn message(&self) -> Self::Message {
match self {
MenuAction::ObsSceneAssign(scene) => {
Message::AssignObsScene(*scene)
Message::ObsSceneAssign(*scene)
}
MenuAction::ObsStartStream => Message::AssignSlideAction(
slide_actions::Action::Obs {
action: ObsAction::StartStream,
},
),
MenuAction::ObsStopStream => Message::AssignSlideAction(
slide_actions::Action::Obs {
action: ObsAction::StopStream,
},
),
MenuAction::ObsStartStream => Message::ObsStartStream,
MenuAction::ObsStopStream => Message::ObsStopStream,
MenuAction::ObsStartRecord => todo!(),
MenuAction::ObsStopRecord => todo!(),
}
@ -345,7 +337,7 @@ impl Presenter {
debug!(?scenes, "updating obs scenes");
self.obs_scenes = Some(scenes);
}
Message::AssignObsScene(scene_index) => {
Message::ObsSceneAssign(scene_index) => {
let Some(scenes) = &self.obs_scenes else {
return Action::None;
};
@ -412,27 +404,8 @@ impl Presenter {
self.slide_action_map = Some(map);
}
}
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::ObsStartStream => todo!(),
Message::ObsStopStream => todo!(),
Message::ActivateSlide(item_index, slide_index) => {
debug!(slide_index, item_index);
if let Some(slide) = self
@ -770,11 +743,11 @@ impl Presenter {
)))
})
.on_exit(Message::HoveredSlide(None))
.on_release(Message::ClickSlide(
.on_press(Message::ClickSlide(
item_index,
slide_index,
))
.on_right_release(Message::RightClickSlide(
.on_right_press(Message::RightClickSlide(
item_index,
slide_index,
));
@ -798,7 +771,7 @@ impl Presenter {
items.push(divider.into());
},
);
let scrollable =
let row =
scrollable(container(Row::from_vec(items)).style(|t| {
let style = container::Style::default();
style.border(Border::default().width(2))
@ -807,7 +780,8 @@ impl Presenter {
.height(Length::Fill)
.width(Length::Fill)
.id(self.scroll_id.clone());
self.context_menu(scrollable.into())
let context_menu = self.context_menu(row.into());
context_menu.into()
}
fn context_menu<'a>(
@ -815,6 +789,9 @@ 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 {
@ -828,14 +805,9 @@ impl Presenter {
}
let menu_items = vec![
menu::Item::Button(
"Start Stream".to_string(),
"Test Scene".to_string(),
None,
MenuAction::ObsStartStream,
),
menu::Item::Button(
"Stop Stream".to_string(),
None,
MenuAction::ObsStopStream,
MenuAction::ObsSceneAssign(0),
),
menu::Item::Folder("Obs Scene".to_string(), scenes),
];