URL decode dropped file

This commit is contained in:
Vladimir Borisov 2021-07-26 13:12:54 +03:00
parent 8eafb073c4
commit e4802d7566
3 changed files with 17 additions and 6 deletions

7
Cargo.lock generated
View file

@ -509,6 +509,7 @@ dependencies = [
"serde",
"serde_json",
"structopt",
"urlencoding",
"webview2",
"webview2-sys",
"winapi",
@ -601,6 +602,12 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "urlencoding"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68b90931029ab9b034b300b797048cf23723400aa757e8a2bfb9d748102f9821"
[[package]]
name = "vec_map"
version = "0.8.2"

View file

@ -17,6 +17,6 @@ serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
structopt = "0.3"
open = "1"
urlencoding = "2.1.0"
[build-dependencies]
embed-resource = "1.3"

View file

@ -1,6 +1,7 @@
use native_windows_gui::{self as nwg, PartialUi};
use once_cell::unsync::OnceCell;
use serde_json::json;
use std::borrow::Cow;
use std::cell::RefCell;
use std::collections::VecDeque;
use std::mem;
@ -8,6 +9,7 @@ use std::rc::Rc;
use std::sync::mpsc;
use std::sync::{Arc, Mutex};
use std::thread;
use urlencoding::decode;
use webview2::Controller;
use winapi::shared::windef::HWND__;
use winapi::um::winuser::*;
@ -104,13 +106,15 @@ impl PartialUi for WebView {
Ok(())
}).ok();
webview.add_new_window_requested(move |_w, msg| {
let data = json!({
if let Some(file) = msg.get_uri().ok().and_then(|str| {decode(&str.as_str()).ok().map(Cow::into_owned)}) {
let data = json!({
"object": "transport",
"type": 1,
"args": ["dragdrop" ,[msg.get_uri().unwrap()]]
});
tx_drag_drop.send(data.to_string()).ok();
msg.put_handled(true).ok();
"args": ["dragdrop" ,[file]]
});
tx_drag_drop.send(data.to_string()).ok();
msg.put_handled(true).ok();
}
Ok(())
}).ok();
WebView::resize_to_window_bounds_and_show(Some(&controller), Some(hwnd));