mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-18 06:49:50 +02:00
Some tweaks to request deletion
This commit is contained in:
@@ -74,8 +74,8 @@ use yaak_plugin_runtime::events::{
|
|||||||
};
|
};
|
||||||
use yaak_plugin_runtime::plugin_handle::PluginHandle;
|
use yaak_plugin_runtime::plugin_handle::PluginHandle;
|
||||||
use yaak_sse::sse::ServerSentEvent;
|
use yaak_sse::sse::ServerSentEvent;
|
||||||
use yaak_templates::{Parser, Tokens};
|
|
||||||
use yaak_templates::format::format_json;
|
use yaak_templates::format::format_json;
|
||||||
|
use yaak_templates::{Parser, Tokens};
|
||||||
|
|
||||||
mod analytics;
|
mod analytics;
|
||||||
mod export_resources;
|
mod export_resources;
|
||||||
@@ -174,7 +174,10 @@ async fn cmd_grpc_reflect<R: Runtime>(
|
|||||||
window: WebviewWindow<R>,
|
window: WebviewWindow<R>,
|
||||||
grpc_handle: State<'_, Mutex<GrpcHandle>>,
|
grpc_handle: State<'_, Mutex<GrpcHandle>>,
|
||||||
) -> Result<Vec<ServiceDefinition>, String> {
|
) -> Result<Vec<ServiceDefinition>, String> {
|
||||||
let req = get_grpc_request(&window, request_id).await.map_err(|e| e.to_string())?;
|
let req = get_grpc_request(&window, request_id)
|
||||||
|
.await
|
||||||
|
.map_err(|e| e.to_string())?
|
||||||
|
.ok_or("Failed to find GRPC request")?;
|
||||||
|
|
||||||
let uri = safe_uri(&req.url);
|
let uri = safe_uri(&req.url);
|
||||||
|
|
||||||
@@ -201,7 +204,10 @@ async fn cmd_grpc_go<R: Runtime>(
|
|||||||
Some(id) => Some(get_environment(&window, id).await.map_err(|e| e.to_string())?),
|
Some(id) => Some(get_environment(&window, id).await.map_err(|e| e.to_string())?),
|
||||||
None => None,
|
None => None,
|
||||||
};
|
};
|
||||||
let req = get_grpc_request(&window, request_id).await.map_err(|e| e.to_string())?;
|
let req = get_grpc_request(&window, request_id)
|
||||||
|
.await
|
||||||
|
.map_err(|e| e.to_string())?
|
||||||
|
.ok_or("Failed to find GRPC request")?;
|
||||||
let workspace = get_workspace(&window, &req.workspace_id).await.map_err(|e| e.to_string())?;
|
let workspace = get_workspace(&window, &req.workspace_id).await.map_err(|e| e.to_string())?;
|
||||||
let req = render_grpc_request(
|
let req = render_grpc_request(
|
||||||
&req,
|
&req,
|
||||||
@@ -1436,12 +1442,12 @@ async fn cmd_get_folder(id: &str, w: WebviewWindow) -> Result<Folder, String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
async fn cmd_get_grpc_request(id: &str, w: WebviewWindow) -> Result<GrpcRequest, String> {
|
async fn cmd_get_grpc_request(id: &str, w: WebviewWindow) -> Result<Option<GrpcRequest>, String> {
|
||||||
get_grpc_request(&w, id).await.map_err(|e| e.to_string())
|
get_grpc_request(&w, id).await.map_err(|e| e.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
async fn cmd_get_http_request(id: &str, w: WebviewWindow) -> Result<HttpRequest, String> {
|
async fn cmd_get_http_request(id: &str, w: WebviewWindow) -> Result<Option<HttpRequest>, String> {
|
||||||
get_http_request(&w, id).await.map_err(|e| e.to_string())
|
get_http_request(&w, id).await.map_err(|e| e.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2079,7 +2085,7 @@ async fn handle_plugin_event<R: Runtime>(
|
|||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
InternalEventPayload::GetHttpRequestByIdRequest(req) => {
|
InternalEventPayload::GetHttpRequestByIdRequest(req) => {
|
||||||
let http_request = get_http_request(app_handle, req.id.as_str()).await.ok();
|
let http_request = get_http_request(app_handle, req.id.as_str()).await.unwrap();
|
||||||
Some(InternalEventPayload::GetHttpRequestByIdResponse(GetHttpRequestByIdResponse {
|
Some(InternalEventPayload::GetHttpRequestByIdResponse(GetHttpRequestByIdResponse {
|
||||||
http_request,
|
http_request,
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ pub enum Error {
|
|||||||
SqlError(#[from] rusqlite::Error),
|
SqlError(#[from] rusqlite::Error),
|
||||||
#[error("JSON error: {0}")]
|
#[error("JSON error: {0}")]
|
||||||
JsonError(#[from] serde_json::Error),
|
JsonError(#[from] serde_json::Error),
|
||||||
|
#[error("Model not found {0}")]
|
||||||
|
ModelNotFound(String),
|
||||||
#[error("unknown error")]
|
#[error("unknown error")]
|
||||||
Unknown,
|
Unknown,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type Result<T> = std::result::Result<T, Error>;
|
pub type Result<T> = std::result::Result<T, Error>;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
|
use crate::error::Error::ModelNotFound;
|
||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
use crate::models::{
|
use crate::models::{
|
||||||
CookieJar, CookieJarIden, Environment, EnvironmentIden, Folder, FolderIden, GrpcConnection,
|
CookieJar, CookieJarIden, Environment, EnvironmentIden, Folder, FolderIden, GrpcConnection,
|
||||||
@@ -299,7 +300,12 @@ pub async fn duplicate_grpc_request<R: Runtime>(
|
|||||||
window: &WebviewWindow<R>,
|
window: &WebviewWindow<R>,
|
||||||
id: &str,
|
id: &str,
|
||||||
) -> Result<GrpcRequest> {
|
) -> Result<GrpcRequest> {
|
||||||
let mut request = get_grpc_request(window, id).await?.clone();
|
let mut request = match get_grpc_request(window, id).await? {
|
||||||
|
Some(r) => r,
|
||||||
|
None => {
|
||||||
|
return Err(ModelNotFound(id.to_string()));
|
||||||
|
}
|
||||||
|
};
|
||||||
request.id = "".to_string();
|
request.id = "".to_string();
|
||||||
upsert_grpc_request(window, &request).await
|
upsert_grpc_request(window, &request).await
|
||||||
}
|
}
|
||||||
@@ -308,7 +314,12 @@ pub async fn delete_grpc_request<R: Runtime>(
|
|||||||
window: &WebviewWindow<R>,
|
window: &WebviewWindow<R>,
|
||||||
id: &str,
|
id: &str,
|
||||||
) -> Result<GrpcRequest> {
|
) -> Result<GrpcRequest> {
|
||||||
let req = get_grpc_request(window, id).await?;
|
let req = match get_grpc_request(window, id).await? {
|
||||||
|
Some(r) => r,
|
||||||
|
None => {
|
||||||
|
return Err(ModelNotFound(id.to_string()));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let dbm = &*window.app_handle().state::<SqliteConnection>();
|
let dbm = &*window.app_handle().state::<SqliteConnection>();
|
||||||
let db = dbm.0.lock().await.get().unwrap();
|
let db = dbm.0.lock().await.get().unwrap();
|
||||||
@@ -393,7 +404,10 @@ pub async fn upsert_grpc_request<R: Runtime>(
|
|||||||
Ok(emit_upserted_model(window, m))
|
Ok(emit_upserted_model(window, m))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_grpc_request<R: Runtime>(mgr: &impl Manager<R>, id: &str) -> Result<GrpcRequest> {
|
pub async fn get_grpc_request<R: Runtime>(
|
||||||
|
mgr: &impl Manager<R>,
|
||||||
|
id: &str,
|
||||||
|
) -> Result<Option<GrpcRequest>> {
|
||||||
let dbm = &*mgr.state::<SqliteConnection>();
|
let dbm = &*mgr.state::<SqliteConnection>();
|
||||||
let db = dbm.0.lock().await.get().unwrap();
|
let db = dbm.0.lock().await.get().unwrap();
|
||||||
|
|
||||||
@@ -403,7 +417,7 @@ pub async fn get_grpc_request<R: Runtime>(mgr: &impl Manager<R>, id: &str) -> Re
|
|||||||
.cond_where(Expr::col(GrpcRequestIden::Id).eq(id))
|
.cond_where(Expr::col(GrpcRequestIden::Id).eq(id))
|
||||||
.build_rusqlite(SqliteQueryBuilder);
|
.build_rusqlite(SqliteQueryBuilder);
|
||||||
let mut stmt = db.prepare(sql.as_str())?;
|
let mut stmt = db.prepare(sql.as_str())?;
|
||||||
Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?)
|
Ok(stmt.query_row(&*params.as_params(), |row| row.try_into()).optional()?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn list_grpc_requests<R: Runtime>(
|
pub async fn list_grpc_requests<R: Runtime>(
|
||||||
@@ -1083,7 +1097,10 @@ pub async fn duplicate_http_request<R: Runtime>(
|
|||||||
window: &WebviewWindow<R>,
|
window: &WebviewWindow<R>,
|
||||||
id: &str,
|
id: &str,
|
||||||
) -> Result<HttpRequest> {
|
) -> Result<HttpRequest> {
|
||||||
let mut request = get_http_request(window, id).await?.clone();
|
let mut request = match get_http_request(window, id).await? {
|
||||||
|
None => return Err(ModelNotFound(id.to_string())),
|
||||||
|
Some(r) => r,
|
||||||
|
};
|
||||||
request.id = "".to_string();
|
request.id = "".to_string();
|
||||||
upsert_http_request(window, request).await
|
upsert_http_request(window, request).await
|
||||||
}
|
}
|
||||||
@@ -1181,7 +1198,10 @@ pub async fn list_http_requests<R: Runtime>(
|
|||||||
Ok(items.map(|v| v.unwrap()).collect())
|
Ok(items.map(|v| v.unwrap()).collect())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_http_request<R: Runtime>(mgr: &impl Manager<R>, id: &str) -> Result<HttpRequest> {
|
pub async fn get_http_request<R: Runtime>(
|
||||||
|
mgr: &impl Manager<R>,
|
||||||
|
id: &str,
|
||||||
|
) -> Result<Option<HttpRequest>> {
|
||||||
let dbm = &*mgr.state::<SqliteConnection>();
|
let dbm = &*mgr.state::<SqliteConnection>();
|
||||||
let db = dbm.0.lock().await.get().unwrap();
|
let db = dbm.0.lock().await.get().unwrap();
|
||||||
|
|
||||||
@@ -1191,14 +1211,17 @@ pub async fn get_http_request<R: Runtime>(mgr: &impl Manager<R>, id: &str) -> Re
|
|||||||
.cond_where(Expr::col(HttpRequestIden::Id).eq(id))
|
.cond_where(Expr::col(HttpRequestIden::Id).eq(id))
|
||||||
.build_rusqlite(SqliteQueryBuilder);
|
.build_rusqlite(SqliteQueryBuilder);
|
||||||
let mut stmt = db.prepare(sql.as_str())?;
|
let mut stmt = db.prepare(sql.as_str())?;
|
||||||
Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?)
|
Ok(stmt.query_row(&*params.as_params(), |row| row.try_into()).optional()?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn delete_http_request<R: Runtime>(
|
pub async fn delete_http_request<R: Runtime>(
|
||||||
window: &WebviewWindow<R>,
|
window: &WebviewWindow<R>,
|
||||||
id: &str,
|
id: &str,
|
||||||
) -> Result<HttpRequest> {
|
) -> Result<HttpRequest> {
|
||||||
let req = get_http_request(window, id).await?;
|
let req = match get_http_request(window, id).await? {
|
||||||
|
None => return Err(ModelNotFound(id.to_string())),
|
||||||
|
Some(r) => r,
|
||||||
|
};
|
||||||
|
|
||||||
// DB deletes will cascade but this will delete the files
|
// DB deletes will cascade but this will delete the files
|
||||||
delete_all_http_responses_for_request(window, id).await?;
|
delete_all_http_responses_for_request(window, id).await?;
|
||||||
@@ -1258,7 +1281,10 @@ pub async fn create_http_response<R: Runtime>(
|
|||||||
delete_http_response(window, response.id.as_str()).await?;
|
delete_http_response(window, response.id.as_str()).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let req = get_http_request(window, request_id).await?;
|
let req = match get_http_request(window, request_id).await? {
|
||||||
|
None => return Err(ModelNotFound(request_id.to_string())),
|
||||||
|
Some(r) => r,
|
||||||
|
};
|
||||||
let id = generate_model_id(ModelType::TypeHttpResponse);
|
let id = generate_model_id(ModelType::TypeHttpResponse);
|
||||||
let dbm = &*window.app_handle().state::<SqliteConnection>();
|
let dbm = &*window.app_handle().state::<SqliteConnection>();
|
||||||
let db = dbm.0.lock().await.get().unwrap();
|
let db = dbm.0.lock().await.get().unwrap();
|
||||||
|
|||||||
@@ -724,7 +724,7 @@ function SidebarItem({
|
|||||||
switch (e.key) {
|
switch (e.key) {
|
||||||
case 'Enter':
|
case 'Enter':
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
handleSubmitNameEdit(e.currentTarget);
|
await handleSubmitNameEdit(e.currentTarget);
|
||||||
break;
|
break;
|
||||||
case 'Escape':
|
case 'Escape':
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import type { AnyModel } from '@yaakapp-internal/models';
|
|||||||
import { useSetAtom } from 'jotai/index';
|
import { useSetAtom } from 'jotai/index';
|
||||||
import { extractKeyValue } from '../lib/keyValueStore';
|
import { extractKeyValue } from '../lib/keyValueStore';
|
||||||
import { modelsEq } from '../lib/model_util';
|
import { modelsEq } from '../lib/model_util';
|
||||||
import {useActiveWorkspace} from "./useActiveWorkspace";
|
import { useActiveWorkspace } from './useActiveWorkspace';
|
||||||
import { cookieJarsAtom } from './useCookieJars';
|
import { cookieJarsAtom } from './useCookieJars';
|
||||||
import { environmentsAtom } from './useEnvironments';
|
import { environmentsAtom } from './useEnvironments';
|
||||||
import { foldersAtom } from './useFolders';
|
import { foldersAtom } from './useFolders';
|
||||||
@@ -61,9 +61,7 @@ export function useSyncModelStores() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mark these models as DESC instead of ASC
|
// Mark these models as DESC instead of ASC
|
||||||
const pushToFront = (['http_response', 'grpc_connection'] as AnyModel['model'][]).includes(
|
const pushToFront = model.model === 'http_response' || model.model === 'grpc_connection';
|
||||||
model.model,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (shouldIgnoreModel(model, windowLabel)) return;
|
if (shouldIgnoreModel(model, windowLabel)) return;
|
||||||
|
|
||||||
@@ -106,7 +104,7 @@ export function useSyncModelStores() {
|
|||||||
const { model, windowLabel } = payload;
|
const { model, windowLabel } = payload;
|
||||||
if (shouldIgnoreModel(model, windowLabel)) return;
|
if (shouldIgnoreModel(model, windowLabel)) return;
|
||||||
|
|
||||||
console.log('Delete model', payload.model);
|
console.log('Delete model', payload);
|
||||||
|
|
||||||
if (model.model === 'workspace') {
|
if (model.model === 'workspace') {
|
||||||
setWorkspaces(removeById(model));
|
setWorkspaces(removeById(model));
|
||||||
|
|||||||
Reference in New Issue
Block a user