IPC response message function

This commit is contained in:
Vladimir Borisov 2021-07-27 14:27:09 +03:00
parent e4a262c6d9
commit 4054020d40
3 changed files with 20 additions and 34 deletions

View file

@ -156,16 +156,11 @@ impl MainWindow {
thread::spawn(move || loop { thread::spawn(move || loop {
let rx = player_rx.lock().unwrap(); let rx = player_rx.lock().unwrap();
if let Ok(msg) = rx.recv() { if let Ok(msg) = rx.recv() {
let resp = RPCResponse { web_tx_player
id: 1, .send(RPCResponse::response_message(
object: "transport".to_string(), serde_json::from_str(&msg).ok(),
response_type: 1, ))
args: serde_json::from_str(&msg).ok(), .ok();
..Default::default()
};
let resp_json =
serde_json::to_string(&resp).expect("Cannot serialize the response");
web_tx_player.send(resp_json).ok();
} // recv } // recv
}); // thread }); // thread

View file

@ -37,30 +37,26 @@ pub struct RPCResponse {
} }
impl RPCResponse { impl RPCResponse {
pub fn visibility_change(visible: bool, visibility: u32, is_full_screen: bool) -> String { pub fn response_message(msg: Option<serde_json::Value>) -> String {
let resp = RPCResponse { let resp = RPCResponse {
id: 1, id: 1,
object: "transport".to_string(), object: "transport".to_string(),
response_type: 1, response_type: 1,
args: Some(json!(["win-visibility-changed" ,{ args: msg,
"visible": visible,
"visibility": visibility,
"isFullscreen": is_full_screen
}])),
..Default::default() ..Default::default()
}; };
serde_json::to_string(&resp).expect("Cannot build response") serde_json::to_string(&resp).expect("Cannot build response")
} }
pub fn visibility_change(visible: bool, visibility: u32, is_full_screen: bool) -> String {
Self::response_message(Some(json!(["win-visibility-changed" ,{
"visible": visible,
"visibility": visibility,
"isFullscreen": is_full_screen
}])))
}
pub fn state_change(state: u32) -> String { pub fn state_change(state: u32) -> String {
let resp = RPCResponse { Self::response_message(Some(json!(["win-state-changed" ,{
id: 1, "state": state,
object: "transport".to_string(), }])))
response_type: 1,
args: Some(json!(["win-state-changed" ,{
"state": state,
}])),
..Default::default()
};
serde_json::to_string(&resp).expect("Cannot build response")
} }
} }

View file

@ -1,3 +1,4 @@
use crate::stremio_app::ipc;
use native_windows_gui::{self as nwg, PartialUi}; use native_windows_gui::{self as nwg, PartialUi};
use once_cell::unsync::OnceCell; use once_cell::unsync::OnceCell;
use serde_json::json; use serde_json::json;
@ -13,7 +14,6 @@ use urlencoding::decode;
use webview2::Controller; use webview2::Controller;
use winapi::shared::windef::HWND__; use winapi::shared::windef::HWND__;
use winapi::um::winuser::*; use winapi::um::winuser::*;
use crate::stremio_app::ipc;
#[derive(Default)] #[derive(Default)]
pub struct WebView { pub struct WebView {
@ -88,7 +88,7 @@ impl PartialUi for WebView {
if let Some(endpoint) = endpoint.get() { if let Some(endpoint) = endpoint.get() {
if webview if webview
.navigate(endpoint.as_str()).is_err() { .navigate(endpoint.as_str()).is_err() {
tx_web.clone().send(format!(r#"{{"id":1,"args":["app-error","Cannot load WEB UI at '{}'"]}}"#, &endpoint)).ok(); tx_web.clone().send(ipc::RPCResponse::response_message(Some(json!(["app-error", format!("Cannot load WEB UI at '{}'", &endpoint)])))).ok();
}; };
} }
webview webview
@ -110,12 +110,7 @@ impl PartialUi for WebView {
}).ok(); }).ok();
webview.add_new_window_requested(move |_w, msg| { webview.add_new_window_requested(move |_w, msg| {
if let Some(file) = msg.get_uri().ok().and_then(|str| {decode(str.as_str()).ok().map(Cow::into_owned)}) { if let Some(file) = msg.get_uri().ok().and_then(|str| {decode(str.as_str()).ok().map(Cow::into_owned)}) {
let data = json!({ tx_drag_drop.send(ipc::RPCResponse::response_message(Some(json!(["dragdrop" ,[file]])))).ok();
"object": "transport",
"type": 1,
"args": ["dragdrop" ,[file]]
});
tx_drag_drop.send(data.to_string()).ok();
msg.put_handled(true).ok(); msg.put_handled(true).ok();
} }
Ok(()) Ok(())