collection plugin actions

This commit is contained in:
Chris Turchin
2025-12-16 00:47:12 +01:00
parent cfbfd66eef
commit e17aae246b
11 changed files with 380 additions and 1 deletions

View File

@@ -43,7 +43,8 @@ use yaak_plugins::events::{
CallGrpcRequestActionArgs, CallGrpcRequestActionRequest, CallHttpRequestActionArgs,
CallHttpRequestActionRequest, Color, FilterResponse, GetGrpcRequestActionsResponse,
GetHttpAuthenticationConfigResponse, GetHttpAuthenticationSummaryResponse,
GetHttpRequestActionsResponse, GetTemplateFunctionConfigResponse,
GetHttpRequestActionsResponse, GetHttpCollectionActionsResponse,
CallHttpCollectionActionArgs, CallHttpCollectionActionRequest, GetTemplateFunctionConfigResponse,
GetTemplateFunctionSummaryResponse, InternalEvent, InternalEventPayload, JsonPrimitive,
PluginContext, RenderPurpose, ShowToastRequest,
};
@@ -846,6 +847,40 @@ async fn cmd_http_request_actions<R: Runtime>(
Ok(plugin_manager.get_http_request_actions(&window).await?)
}
#[tauri::command]
async fn cmd_http_collection_actions<R: Runtime>(
window: WebviewWindow<R>,
plugin_manager: State<'_, PluginManager>,
) -> YaakResult<Vec<GetHttpCollectionActionsResponse>> {
Ok(plugin_manager.get_http_collection_actions(&window).await?)
}
#[tauri::command]
async fn cmd_call_http_collection_action<R: Runtime>(
window: WebviewWindow<R>,
req: CallHttpCollectionActionRequest,
plugin_manager: State<'_, PluginManager>,
) -> YaakResult<()> {
let folder = match &req.args.folder {
Some(f) => Some(window.db().get_folder(&f.id)?),
None => None,
};
let workspace = match &req.args.workspace {
Some(w) => Some(window.db().get_workspace(&w.id)?),
None => None,
};
Ok(plugin_manager
.call_http_collection_action(
&window,
CallHttpCollectionActionRequest {
args: CallHttpCollectionActionArgs { folder, workspace },
..req
},
)
.await?)
}
#[tauri::command]
async fn cmd_grpc_request_actions<R: Runtime>(
window: WebviewWindow<R>,
@@ -1448,6 +1483,7 @@ pub fn run() {
.invoke_handler(tauri::generate_handler![
cmd_call_http_authentication_action,
cmd_call_http_request_action,
cmd_call_http_collection_action,
cmd_call_grpc_request_action,
cmd_check_for_updates,
cmd_create_grpc_request,
@@ -1467,6 +1503,7 @@ pub fn run() {
cmd_grpc_reflect,
cmd_grpc_request_actions,
cmd_http_request_actions,
cmd_http_collection_actions,
cmd_import_data,
cmd_install_plugin,
cmd_metadata,

View File

@@ -20,6 +20,7 @@ use yaak_plugins::error::Error::PluginErr;
use yaak_plugins::events::{
Color, DeleteKeyValueResponse, EmptyPayload, ErrorResponse, FindHttpResponsesResponse,
GetCookieValueResponse, GetHttpRequestByIdResponse, GetKeyValueResponse, Icon, InternalEvent,
ListHttpRequestsResponse,
InternalEventPayload, ListCookieNamesResponse, RenderGrpcRequestResponse,
RenderHttpRequestResponse, SendHttpRequestResponse, SetKeyValueResponse, ShowToastRequest,
TemplateRenderResponse, WindowInfoResponse, WindowNavigateEvent,
@@ -60,6 +61,30 @@ pub(crate) async fn handle_plugin_event<R: Runtime>(
http_responses,
})))
}
InternalEventPayload::ListHttpRequestsRequest(req) => {
let mut http_requests = Vec::new();
if let Some(folder_id) = req.folder_id {
http_requests = app_handle
.db()
.list_http_requests_for_folder_recursive(&folder_id)?;
} else if let Some(workspace_id) = req.workspace_id {
http_requests = app_handle.db().list_http_requests(&workspace_id)?;
}
Ok(Some(InternalEventPayload::ListHttpRequestsResponse(ListHttpRequestsResponse {
http_requests,
})))
}
InternalEventPayload::ListFoldersRequest(req) => {
let mut folders = Vec::new();
if let Some(workspace_id) = req.workspace_id {
folders = app_handle.db().list_folders(&workspace_id)?;
}
Ok(Some(InternalEventPayload::ListFoldersResponse(
yaak_plugins::events::ListFoldersResponse { folders },
)))
}
InternalEventPayload::GetHttpRequestByIdRequest(req) => {
let http_request = app_handle.db().get_http_request(&req.id).ok();
Ok(Some(InternalEventPayload::GetHttpRequestByIdResponse(GetHttpRequestByIdResponse {
@@ -352,6 +377,26 @@ pub(crate) async fn handle_plugin_event<R: Runtime>(
environment_id,
})))
}
InternalEventPayload::WriteTextFileRequest(req) => {
use std::fs;
use std::path::Path;
// Ensure the directory exists
if let Some(parent) = Path::new(&req.file_path).parent() {
fs::create_dir_all(parent)?;
}
fs::write(&req.file_path, &req.content)?;
Ok(Some(InternalEventPayload::WriteTextFileResponse(EmptyPayload {})))
}
InternalEventPayload::ReadTextFileRequest(req) => {
use std::fs;
let content = fs::read_to_string(&req.file_path)?;
Ok(Some(InternalEventPayload::ReadTextFileResponse(
yaak_plugins::events::ReadTextFileResponse { content },
)))
}
_ => Ok(None),
}
}