mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-30 22:22:02 +02:00
Url parameters for websocket URLs
This commit is contained in:
@@ -6,10 +6,11 @@ use chrono::Utc;
|
||||
use log::{info, warn};
|
||||
use std::str::FromStr;
|
||||
use tauri::http::{HeaderMap, HeaderName};
|
||||
use tauri::{AppHandle, Manager, Runtime, State, WebviewWindow};
|
||||
use tauri::{AppHandle, Manager, Runtime, State, Url, WebviewWindow};
|
||||
use tokio::sync::{mpsc, Mutex};
|
||||
use tokio_tungstenite::tungstenite::http::HeaderValue;
|
||||
use tokio_tungstenite::tungstenite::Message;
|
||||
use yaak_http::apply_path_placeholders;
|
||||
use yaak_models::models::{
|
||||
HttpResponseHeader, WebsocketConnection, WebsocketConnectionState, WebsocketEvent,
|
||||
WebsocketEventType, WebsocketRequest,
|
||||
@@ -33,6 +34,14 @@ pub(crate) async fn upsert_request<R: Runtime>(
|
||||
Ok(queries::upsert_websocket_request(&w, request, &UpdateSource::Window).await?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub(crate) async fn duplicate_request<R: Runtime>(
|
||||
request_id: &str,
|
||||
w: WebviewWindow<R>,
|
||||
) -> Result<WebsocketRequest> {
|
||||
Ok(queries::duplicate_websocket_request(&w, request_id, &UpdateSource::Window).await?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub(crate) async fn delete_request<R: Runtime>(
|
||||
request_id: &str,
|
||||
@@ -290,7 +299,22 @@ pub(crate) async fn connect<R: Runtime>(
|
||||
});
|
||||
}
|
||||
|
||||
let response = match ws_manager.connect(&connection.id, &request.url, headers, receive_tx).await
|
||||
|
||||
let (url, url_parameters) = apply_path_placeholders(&request.url, request.url_parameters);
|
||||
|
||||
// Add URL parameters to URL
|
||||
let mut url = Url::parse(&url).unwrap();
|
||||
{
|
||||
let mut query_pairs = url.query_pairs_mut();
|
||||
for p in url_parameters.clone() {
|
||||
if !p.enabled || p.name.is_empty() {
|
||||
continue;
|
||||
}
|
||||
query_pairs.append_pair(p.name.as_str(), p.value.as_str());
|
||||
}
|
||||
}
|
||||
|
||||
let response = match ws_manager.connect(&connection.id, url.as_str(), headers, receive_tx).await
|
||||
{
|
||||
Ok(r) => r,
|
||||
Err(e) => {
|
||||
@@ -298,6 +322,7 @@ pub(crate) async fn connect<R: Runtime>(
|
||||
&window,
|
||||
&WebsocketConnection {
|
||||
error: Some(format!("{e:?}")),
|
||||
state: WebsocketConnectionState::Closed,
|
||||
..connection
|
||||
},
|
||||
&UpdateSource::Window,
|
||||
|
||||
@@ -5,8 +5,8 @@ mod manager;
|
||||
mod render;
|
||||
|
||||
use crate::cmd::{
|
||||
close, connect, delete_connection, delete_connections, delete_request, list_connections,
|
||||
list_events, list_requests, send, upsert_request,
|
||||
connect, close, delete_connection, delete_connections, delete_request, duplicate_request,
|
||||
list_connections, list_events, list_requests, send, upsert_request,
|
||||
};
|
||||
use crate::manager::WebsocketManager;
|
||||
use tauri::plugin::{Builder, TauriPlugin};
|
||||
@@ -16,11 +16,12 @@ use tokio::sync::Mutex;
|
||||
pub fn init<R: Runtime>() -> TauriPlugin<R> {
|
||||
Builder::new("yaak-ws")
|
||||
.invoke_handler(generate_handler![
|
||||
close,
|
||||
connect,
|
||||
close,
|
||||
delete_connection,
|
||||
delete_connections,
|
||||
delete_request,
|
||||
duplicate_request,
|
||||
list_connections,
|
||||
list_events,
|
||||
list_requests,
|
||||
|
||||
Reference in New Issue
Block a user