commit
97a2bf9744
13 changed files with 79 additions and 52 deletions
|
@ -10,4 +10,4 @@ workctl = "0.2.0"
|
||||||
ctrlc = "3.2.1"
|
ctrlc = "3.2.1"
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
crossbeam-channel = "0.5"
|
crossbeam-channel = "0.5"
|
||||||
inputbot = {path = "/home/nick/Documents/GitHub/InputBot"}
|
inputbot = {path = "D:\\InputBot"}
|
|
@ -10,6 +10,8 @@ If WinExist(A_Args[1]) ; propresenter
|
||||||
{ ; if propresenter isn't active, switch and send clicker forward
|
{ ; if propresenter isn't active, switch and send clicker forward
|
||||||
if !WinActive(A_Args[1]){
|
if !WinActive(A_Args[1]){
|
||||||
WinActivate
|
WinActivate
|
||||||
Send A_Args[2]
|
sleep 200
|
||||||
}
|
}
|
||||||
|
arg := A_Args[2]
|
||||||
|
Send {%arg%}
|
||||||
}
|
}
|
|
@ -10,10 +10,14 @@ If WinExist(A_Args[2]) ;OBS
|
||||||
{ ; if obs isn't active, switch to it, and send the hotkey
|
{ ; if obs isn't active, switch to it, and send the hotkey
|
||||||
If !WinActive(A_Args[2]) {
|
If !WinActive(A_Args[2]) {
|
||||||
WinActivate
|
WinActivate
|
||||||
Send A_Args[3]
|
sleep 200
|
||||||
}
|
}
|
||||||
|
arg := A_Args[3]
|
||||||
|
Send {%arg%}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sleep 100
|
||||||
|
|
||||||
If WinExist(A_Args[1]) ; Propresenter
|
If WinExist(A_Args[1]) ; Propresenter
|
||||||
{ ; switch back to propresenter
|
{ ; switch back to propresenter
|
||||||
If !WinActive(A_Args[1]) {
|
If !WinActive(A_Args[1]) {
|
22
options.json
22
options.json
|
@ -16,24 +16,24 @@
|
||||||
"obs_screen_switch_delay_length": 0.4
|
"obs_screen_switch_delay_length": 0.4
|
||||||
},
|
},
|
||||||
"windows":{
|
"windows":{
|
||||||
"obs_re": "OBS ",
|
"obs_re": "OBS *",
|
||||||
"propresenter_re": "ProPresenter - .*",
|
"propresenter_re": "ProPresenter - .*",
|
||||||
"chrome_re": ".* - Google Chrome"
|
"chrome_re": ".* - Google Chrome"
|
||||||
},
|
},
|
||||||
"hotkeys":{
|
"hotkeys":{
|
||||||
"obs":{
|
"obs":{
|
||||||
"camera_scene_hotkey" : "shift+alt+ctrl+*",
|
"camera_scene_hotkey" : "F13",
|
||||||
"screen_scene_hotkey" : "shift+alt+ctrl+/",
|
"screen_scene_hotkey" : "F14",
|
||||||
"camera_scene_augmented" : "shift+alt+ctrl+-",
|
"camera_scene_augmented" : "F15",
|
||||||
"unmute_stream" : "shift+alt+ctrl+u",
|
"unmute_stream" : "shift+F13",
|
||||||
"mute_stream" : "shift+alt+ctrl+i",
|
"mute_stream" : "shift+F14",
|
||||||
"start_stream" : "ctrl+shift+j",
|
"start_stream" : "ctrl+shift+j",
|
||||||
"stop_stream" : "ctrl+alt+j",
|
"stop_stream" : "ctrl+alt+j",
|
||||||
"Camera_Top_Right" : "ctrl+alt+]",
|
"Camera_Top_Right" : "F16",
|
||||||
"Camera_Bottom_Right" : "ctrl+shift+]",
|
"Camera_Bottom_Right" : "F17",
|
||||||
"Camera_Large_Top_Right" : "ctrl+shift+alt+]",
|
"Camera_Large_Top_Right" : "F18",
|
||||||
"Screen_Top_Right" : "ctrl+alt+[",
|
"Screen_Top_Right" : "F19",
|
||||||
"Screen_Bottom_Right" : "ctrl+shift+["
|
"Screen_Bottom_Right" : "F20"
|
||||||
},
|
},
|
||||||
"general":{
|
"general":{
|
||||||
"clicker_forward" : "page down",
|
"clicker_forward" : "page down",
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
use super::stream_states::{state_update::StateUpdate, enums::{SlideChange, SubScenes, Scenes}};
|
use super::stream_states::{state_update::StateUpdate, enums::{SlideChange, SubScenes, Scenes}};
|
||||||
|
|
||||||
|
const AHK_FILES_FOLDER: &str = ".\\ahk_files\\";
|
||||||
|
pub const OPTIONS_PATH: &str = ".\\options.json";
|
||||||
|
|
||||||
|
/*
|
||||||
const AHK_FILES_FOLDER: &str = "./src/ahk_files/";
|
const AHK_FILES_FOLDER: &str = "./src/ahk_files/";
|
||||||
pub const OPTIONS_PATH: &str = "./options.json";
|
pub const OPTIONS_PATH: &str = "./options.json";
|
||||||
|
*/
|
||||||
|
|
||||||
pub fn create_keyboard_hooks(channel_tx: crossbeam_channel::Sender<String>, close_flag: workctl::sync_flag::SyncFlagRx) {
|
pub fn create_keyboard_hooks(channel_tx: crossbeam_channel::Sender<String>, close_flag: workctl::sync_flag::SyncFlagRx) {
|
||||||
|
|
||||||
|
@ -24,22 +29,22 @@ pub struct Hotkeys {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Hotkeys {
|
impl Hotkeys {
|
||||||
pub fn get_hotkey_from_scene(&self, scene: SubScenes) -> String {
|
pub fn get_hotkey_from_scene(&self, scene: SubScenes) -> &str {
|
||||||
match scene {
|
match scene {
|
||||||
SubScenes::CameraDefault => {self.hotkeys["hotkeys"]["obs"]["camera_scene_hotkey"].to_string()},
|
SubScenes::CameraDefault => {self.hotkeys["hotkeys"]["obs"]["camera_scene_hotkey"].as_str().unwrap()},
|
||||||
SubScenes::CameraWithUpperRight => {self.hotkeys["hotkeys"]["obs"]["Camera_Top_Right"].to_string()},
|
SubScenes::CameraWithUpperRight => {self.hotkeys["hotkeys"]["obs"]["Camera_Top_Right"].as_str().unwrap()},
|
||||||
SubScenes::CameraWithLargeUpperRight => {self.hotkeys["hotkeys"]["obs"]["Camera_Large_Top_Right"].to_string()},
|
SubScenes::CameraWithLargeUpperRight => {self.hotkeys["hotkeys"]["obs"]["Camera_Large_Top_Right"].as_str().unwrap()},
|
||||||
SubScenes::CameraWithLowerRight => {self.hotkeys["hotkeys"]["obs"]["Camera_Bottom_Right"].to_string()},
|
SubScenes::CameraWithLowerRight => {self.hotkeys["hotkeys"]["obs"]["Camera_Bottom_Right"].as_str().unwrap()},
|
||||||
SubScenes::ScreenDefault => {self.hotkeys["hotkeys"]["obs"]["screen_scene_hotkey"].to_string()},
|
SubScenes::ScreenDefault => {self.hotkeys["hotkeys"]["obs"]["screen_scene_hotkey"].as_str().unwrap()},
|
||||||
SubScenes::ScreenWithUpperRight => {self.hotkeys["hotkeys"]["obs"]["Screen_Top_Right"].to_string()},
|
SubScenes::ScreenWithUpperRight => {self.hotkeys["hotkeys"]["obs"]["Screen_Top_Right"].as_str().unwrap()},
|
||||||
SubScenes::ScreenWithLowerRight => {self.hotkeys["hotkeys"]["obs"]["Screen_Bottom_Right"].to_string()},
|
SubScenes::ScreenWithLowerRight => {self.hotkeys["hotkeys"]["obs"]["Screen_Bottom_Right"].as_str().unwrap()},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn send_obs(&self, hotkey: String) {
|
pub fn send_obs(&self, hotkey: &str) {
|
||||||
if cfg!(target_os = "windows") {
|
if cfg!(target_family = "windows") {
|
||||||
Command::new(String::from(AHK_FILES_FOLDER) + "send_obs_back_to_propre.exe")
|
Command::new(String::from(AHK_FILES_FOLDER) + "send_obs_back_to_propre.exe")
|
||||||
.args([self.hotkeys["windows"]["propresenter_re"].to_string(),
|
.args([self.hotkeys["windows"]["propresenter_re"].as_str().unwrap(),
|
||||||
self.hotkeys["windows"]["obs_re"].to_string(),
|
self.hotkeys["windows"]["obs_re"].as_str().unwrap(),
|
||||||
hotkey])
|
hotkey])
|
||||||
.spawn()
|
.spawn()
|
||||||
.expect("next_slide process call failed");
|
.expect("next_slide process call failed");
|
||||||
|
@ -49,33 +54,33 @@ impl Hotkeys {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn next_slide(&self) {
|
pub fn next_slide(&self) {
|
||||||
if cfg!(target_os = "windows") {
|
if cfg!(target_family = "windows") {
|
||||||
Command::new(String::from(AHK_FILES_FOLDER) + "switch_and_send.exe")
|
Command::new(String::from(AHK_FILES_FOLDER) + "switch_and_send.exe")
|
||||||
.args([self.hotkeys["windows"]["propresenter_re"].to_string(),
|
.args([self.hotkeys["windows"]["propresenter_re"].as_str().unwrap(),
|
||||||
self.hotkeys["general"]["clicker_forward"].to_string()])
|
self.hotkeys["general"]["clicker_forward"].as_str().unwrap()])
|
||||||
.spawn()
|
.spawn()
|
||||||
.expect("next_slide process call failed");
|
.expect("next_slide process call failed");
|
||||||
} else {
|
} else {
|
||||||
println!("pretend linux is sending prosenter next: {}", self.hotkeys["general"]["clicker_forward"].to_string())
|
println!("pretend linux is sending prosenter next: {}", self.hotkeys["general"]["clicker_forward"].as_str().unwrap())
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn prev_slide(&self) {
|
pub fn prev_slide(&self) {
|
||||||
if cfg!(target_os = "windows") {
|
if cfg!(target_family = "windows") {
|
||||||
Command::new(String::from(AHK_FILES_FOLDER) + "switch_and_send.exe")
|
Command::new(String::from(AHK_FILES_FOLDER) + "switch_and_send.exe")
|
||||||
.args([self.hotkeys["windows"]["propresenter_re"].to_string(),
|
.args([self.hotkeys["windows"]["propresenter_re"].as_str().unwrap(),
|
||||||
self.hotkeys["general"]["clicker_backward"].to_string()])
|
self.hotkeys["general"]["clicker_backward"].as_str().unwrap()])
|
||||||
.spawn()
|
.spawn()
|
||||||
.expect("next_slide process call failed");
|
.expect("next_slide process call failed");
|
||||||
} else {
|
} else {
|
||||||
println!("pretend linux is sending prosenter next: {}", self.hotkeys["general"]["clicker_backward"].to_string())
|
println!("pretend linux is sending prosenter next: {}", self.hotkeys["general"]["clicker_backward"].as_str().unwrap())
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn change_scene(&self, _scene: Scenes, sub_scene: Option<SubScenes>) {
|
pub fn change_scene(&self, scene: Scenes, sub_scene: Option<SubScenes>) {
|
||||||
let hotkey: String;
|
let hotkey: &str;
|
||||||
if sub_scene.is_none() {
|
if scene == Scenes::Augmented {
|
||||||
hotkey = self.hotkeys["hotkeys"]["obs"]["camera_scene_augmented"].to_string()
|
hotkey = self.hotkeys["hotkeys"]["obs"]["camera_scene_augmented"].as_str().unwrap()
|
||||||
} else {
|
} else {
|
||||||
hotkey = self.get_hotkey_from_scene(sub_scene.unwrap())
|
hotkey = self.get_hotkey_from_scene(sub_scene.unwrap())
|
||||||
};
|
};
|
||||||
|
@ -83,11 +88,11 @@ impl Hotkeys {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toggle_stream_sound(&self, turn_on: bool) {
|
pub fn toggle_stream_sound(&self, turn_on: bool) {
|
||||||
let hotkey: String;
|
let hotkey: &str;
|
||||||
if turn_on {
|
if turn_on {
|
||||||
hotkey = self.hotkeys["hotkeys"]["obs"]["unmute_stream"].to_string();
|
hotkey = self.hotkeys["hotkeys"]["obs"]["unmute_stream"].as_str().unwrap();
|
||||||
} else {
|
} else {
|
||||||
hotkey = self.hotkeys["hotkeys"]["obs"]["mute_stream"].to_string();
|
hotkey = self.hotkeys["hotkeys"]["obs"]["mute_stream"].as_str().unwrap();
|
||||||
}
|
}
|
||||||
self.send_obs(hotkey);
|
self.send_obs(hotkey);
|
||||||
}
|
}
|
||||||
|
@ -95,25 +100,25 @@ impl Hotkeys {
|
||||||
pub fn toggle_computer_sound(&self, value: bool) {
|
pub fn toggle_computer_sound(&self, value: bool) {
|
||||||
let direction: u8 = if value {1} else {0};
|
let direction: u8 = if value {1} else {0};
|
||||||
let time_delay = self.hotkeys["general"]["music_fade_time"].as_i64().unwrap();
|
let time_delay = self.hotkeys["general"]["music_fade_time"].as_i64().unwrap();
|
||||||
if cfg!(target_os = "windows") {
|
if cfg!(target_family = "windows") {
|
||||||
Command::new(String::from(AHK_FILES_FOLDER) + "music_toggle.exe")
|
Command::new(String::from(AHK_FILES_FOLDER) + "music_toggle.exe")
|
||||||
.arg(direction.to_string())
|
.arg(direction.to_string())
|
||||||
.arg(time_delay.to_string())
|
.arg(time_delay.to_string())
|
||||||
.spawn()
|
.spawn()
|
||||||
.expect("next_slide process call failed");
|
.expect("next_slide process call failed");
|
||||||
} else {
|
} else {
|
||||||
println!("pretend linux is sending prosenter next: {}", self.hotkeys["general"]["clicker_backward"].to_string())
|
println!("pretend linux is sending prosenter next: {}", self.hotkeys["general"]["clicker_backward"].as_str().unwrap())
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toggle_media_play_pause(&self) {
|
pub fn toggle_media_play_pause(&self) {
|
||||||
if cfg!(target_os = "windows") {
|
if cfg!(target_family = "windows") {
|
||||||
Command::new(String::from(AHK_FILES_FOLDER) + "music_toggle.exe")
|
Command::new(String::from(AHK_FILES_FOLDER) + "music_toggle.exe")
|
||||||
.arg(self.hotkeys["windows"]["propresenter_re"].to_string())
|
.arg(self.hotkeys["windows"]["propresenter_re"].as_str().unwrap())
|
||||||
.spawn()
|
.spawn()
|
||||||
.expect("next_slide process call failed");
|
.expect("next_slide process call failed");
|
||||||
} else {
|
} else {
|
||||||
println!("pretend linux is sending prosenter next: {}", self.hotkeys["general"]["clicker_backward"].to_string())
|
println!("pretend linux is sending prosenter next: {}", self.hotkeys["general"]["clicker_backward"].as_str().unwrap())
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,7 +141,7 @@ fn hotkeys() {
|
||||||
hk.change_scene(Scenes::Augmented, Some(SubScenes::CameraDefault));
|
hk.change_scene(Scenes::Augmented, Some(SubScenes::CameraDefault));
|
||||||
hk.next_slide();
|
hk.next_slide();
|
||||||
hk.prev_slide();
|
hk.prev_slide();
|
||||||
hk.send_obs(String::from("a hotkey"));
|
hk.send_obs("a hotkey");
|
||||||
hk.toggle_computer_sound(true);
|
hk.toggle_computer_sound(true);
|
||||||
hk.toggle_stream_sound(true);
|
hk.toggle_stream_sound(true);
|
||||||
hk.toggle_media_play_pause();
|
hk.toggle_media_play_pause();
|
||||||
|
|
|
@ -13,7 +13,8 @@ impl MessageHandler for StreamState {
|
||||||
fn handle_update(&mut self, update: StateUpdate, hotkey_handler: &Hotkeys)
|
fn handle_update(&mut self, update: StateUpdate, hotkey_handler: &Hotkeys)
|
||||||
-> (Option<StateUpdate>, Option<Vec<StateUpdate>>) {
|
-> (Option<StateUpdate>, Option<Vec<StateUpdate>>) {
|
||||||
|
|
||||||
if update != StateUpdate::UpdateClient{
|
if update != StateUpdate::UpdateClient && update != StateUpdate::ChangeSlide(SlideChange::Next) &&
|
||||||
|
update != StateUpdate::ChangeSlide(SlideChange::Previous){
|
||||||
self.update(update.clone());
|
self.update(update.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +88,6 @@ impl MessageHandler for StreamState {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
StateUpdate::Scene(value) => {
|
StateUpdate::Scene(value) => {
|
||||||
hotkey_handler.change_scene(value, None);
|
|
||||||
self.current_scene = value;
|
self.current_scene = value;
|
||||||
|
|
||||||
if value == Scenes::Screen {
|
if value == Scenes::Screen {
|
||||||
|
@ -97,10 +97,22 @@ impl MessageHandler for StreamState {
|
||||||
self.timer_finished = true;
|
self.timer_finished = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
match self.current_scene {
|
||||||
|
Scenes::Camera => {
|
||||||
|
hotkey_handler.change_scene(Scenes::Camera, Some(self.camera_sub_scene));
|
||||||
|
},
|
||||||
|
Scenes::Screen => {
|
||||||
|
hotkey_handler.change_scene(Scenes::Screen, Some(self.screen_sub_scene));
|
||||||
|
},
|
||||||
|
Scenes::Augmented => {
|
||||||
|
hotkey_handler.change_scene(Scenes::Augmented, None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (Some(update), None);
|
return (Some(update), None);
|
||||||
},
|
},
|
||||||
StateUpdate::StreamSoundToggleOn(value) => {hotkey_handler.toggle_stream_sound(value); return (Some(update), None)},
|
StateUpdate::StreamSoundToggleOn(value) => {hotkey_handler.toggle_stream_sound(value); return (Some(update), None)},
|
||||||
StateUpdate::ToggleComputerSoundOn(value) => {hotkey_handler.toggle_computer_sound(value); return (Some(update), None)},
|
StateUpdate::ToggleComputerSoundOn(value) => {hotkey_handler.toggle_computer_sound(!value); return (Some(StateUpdate::ToggleComputerSoundOn(!value)), None)},
|
||||||
StateUpdate::ComputerMediaDoPause => {hotkey_handler.toggle_media_play_pause(); return (Some(update), None)},
|
StateUpdate::ComputerMediaDoPause => {hotkey_handler.toggle_media_play_pause(); return (Some(update), None)},
|
||||||
StateUpdate::UpdateClient => {},
|
StateUpdate::UpdateClient => {},
|
||||||
StateUpdate::StreamRunning(_) => {},
|
StateUpdate::StreamRunning(_) => {},
|
||||||
|
|
|
@ -81,6 +81,7 @@ impl Socket {
|
||||||
|
|
||||||
pub fn send(&self, message: String) {
|
pub fn send(&self, message: String) {
|
||||||
let mut streams = self.socket_txs.lock().unwrap();
|
let mut streams = self.socket_txs.lock().unwrap();
|
||||||
|
if streams.len() == 0 {return}
|
||||||
for i in 0..streams.len(){
|
for i in 0..streams.len(){
|
||||||
let mut tx = streams.get(i).unwrap().as_ref();
|
let mut tx = streams.get(i).unwrap().as_ref();
|
||||||
|
|
||||||
|
|
3
src/todo.txt
Normal file
3
src/todo.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
also, that weird "dropped connection, i be silent" bug is still there. Is it a windows file descriptor drop?
|
||||||
|
|
||||||
|
Next events are crashing the program
|
Loading…
Reference in a new issue