mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-10 03:03:37 +02:00
Fix workspace creation, reveal sync dir, and don't update timestamps on sync/import
This commit is contained in:
@@ -9,7 +9,7 @@ use crate::models::{
|
||||
WorkspaceMetaIden,
|
||||
};
|
||||
use crate::plugin::SqliteConnection;
|
||||
use chrono::NaiveDateTime;
|
||||
use chrono::{NaiveDateTime, Utc};
|
||||
use log::{debug, error, info, warn};
|
||||
use nanoid::nanoid;
|
||||
use rusqlite::OptionalExtension;
|
||||
@@ -278,8 +278,8 @@ pub async fn upsert_workspace<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
timestamp_for_upsert(update_source, workspace.created_at).into(),
|
||||
timestamp_for_upsert(update_source, workspace.updated_at).into(),
|
||||
trimmed_name.into(),
|
||||
workspace.description.into(),
|
||||
workspace.setting_follow_redirects.into(),
|
||||
@@ -297,6 +297,7 @@ pub async fn upsert_workspace<R: Runtime>(
|
||||
WorkspaceIden::SettingRequestTimeout,
|
||||
WorkspaceIden::SettingValidateCertificates,
|
||||
])
|
||||
.values([(WorkspaceIden::UpdatedAt, CurrentTimestamp.into())])
|
||||
.to_owned(),
|
||||
)
|
||||
.returning_all()
|
||||
@@ -333,8 +334,8 @@ pub async fn upsert_workspace_meta<R: Runtime>(
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
workspace_meta.workspace_id.into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
timestamp_for_upsert(update_source, workspace_meta.created_at).into(),
|
||||
timestamp_for_upsert(update_source, workspace_meta.updated_at).into(),
|
||||
workspace_meta.setting_sync_dir.into(),
|
||||
])
|
||||
.on_conflict(
|
||||
@@ -500,8 +501,8 @@ pub async fn upsert_grpc_request<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
timestamp_for_upsert(update_source, request.created_at).into(),
|
||||
timestamp_for_upsert(update_source, request.updated_at).into(),
|
||||
trimmed_name.into(),
|
||||
request.description.into(),
|
||||
request.workspace_id.into(),
|
||||
@@ -612,8 +613,8 @@ pub async fn upsert_grpc_connection<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
timestamp_for_upsert(update_source, connection.created_at).into(),
|
||||
timestamp_for_upsert(update_source, connection.updated_at).into(),
|
||||
connection.workspace_id.as_str().into(),
|
||||
connection.request_id.as_str().into(),
|
||||
connection.service.as_str().into(),
|
||||
@@ -771,8 +772,8 @@ pub async fn upsert_grpc_event<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
timestamp_for_upsert(update_source, event.created_at).into(),
|
||||
timestamp_for_upsert(update_source, event.updated_at).into(),
|
||||
event.workspace_id.as_str().into(),
|
||||
event.request_id.as_str().into(),
|
||||
event.connection_id.as_str().into(),
|
||||
@@ -859,8 +860,8 @@ pub async fn upsert_cookie_jar<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
timestamp_for_upsert(update_source, cookie_jar.created_at).into(),
|
||||
timestamp_for_upsert(update_source, cookie_jar.updated_at).into(),
|
||||
cookie_jar.workspace_id.as_str().into(),
|
||||
trimmed_name.into(),
|
||||
serde_json::to_string(&cookie_jar.cookies)?.into(),
|
||||
@@ -1064,8 +1065,8 @@ pub async fn upsert_environment<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
timestamp_for_upsert(update_source, environment.created_at).into(),
|
||||
timestamp_for_upsert(update_source, environment.updated_at).into(),
|
||||
environment.environment_id.into(),
|
||||
environment.workspace_id.into(),
|
||||
trimmed_name.into(),
|
||||
@@ -1174,8 +1175,8 @@ pub async fn upsert_plugin<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
timestamp_for_upsert(update_source, plugin.created_at).into(),
|
||||
timestamp_for_upsert(update_source, plugin.updated_at).into(),
|
||||
plugin.checked_at.into(),
|
||||
plugin.directory.into(),
|
||||
plugin.url.into(),
|
||||
@@ -1276,15 +1277,15 @@ pub async fn delete_folder<R: Runtime>(
|
||||
|
||||
pub async fn upsert_folder<R: Runtime>(
|
||||
window: &WebviewWindow<R>,
|
||||
r: Folder,
|
||||
folder: Folder,
|
||||
|
||||
update_source: &UpdateSource,
|
||||
) -> Result<Folder> {
|
||||
let id = match r.id.as_str() {
|
||||
let id = match folder.id.as_str() {
|
||||
"" => generate_model_id(ModelType::TypeFolder),
|
||||
_ => r.id.to_string(),
|
||||
_ => folder.id.to_string(),
|
||||
};
|
||||
let trimmed_name = r.name.trim();
|
||||
let trimmed_name = folder.name.trim();
|
||||
|
||||
let dbm = &*window.app_handle().state::<SqliteConnection>();
|
||||
let db = dbm.0.lock().await.get().unwrap();
|
||||
@@ -1303,13 +1304,13 @@ pub async fn upsert_folder<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
r.workspace_id.as_str().into(),
|
||||
r.folder_id.as_ref().map(|s| s.as_str()).into(),
|
||||
timestamp_for_upsert(update_source, folder.created_at).into(),
|
||||
timestamp_for_upsert(update_source, folder.updated_at).into(),
|
||||
folder.workspace_id.as_str().into(),
|
||||
folder.folder_id.as_ref().map(|s| s.as_str()).into(),
|
||||
trimmed_name.into(),
|
||||
r.description.into(),
|
||||
r.sort_priority.into(),
|
||||
folder.description.into(),
|
||||
folder.sort_priority.into(),
|
||||
])
|
||||
.on_conflict(
|
||||
OnConflict::column(GrpcEventIden::Id)
|
||||
@@ -1419,14 +1420,14 @@ pub async fn duplicate_folder<R: Runtime>(
|
||||
|
||||
pub async fn upsert_http_request<R: Runtime>(
|
||||
window: &WebviewWindow<R>,
|
||||
r: HttpRequest,
|
||||
request: HttpRequest,
|
||||
update_source: &UpdateSource,
|
||||
) -> Result<HttpRequest> {
|
||||
let id = match r.id.as_str() {
|
||||
let id = match request.id.as_str() {
|
||||
"" => generate_model_id(ModelType::TypeHttpRequest),
|
||||
_ => r.id.to_string(),
|
||||
_ => request.id.to_string(),
|
||||
};
|
||||
let trimmed_name = r.name.trim();
|
||||
let trimmed_name = request.name.trim();
|
||||
|
||||
let dbm = &*window.app_handle().state::<SqliteConnection>();
|
||||
let db = dbm.0.lock().await.get().unwrap();
|
||||
@@ -1453,21 +1454,21 @@ pub async fn upsert_http_request<R: Runtime>(
|
||||
])
|
||||
.values_panic([
|
||||
id.as_str().into(),
|
||||
CurrentTimestamp.into(),
|
||||
CurrentTimestamp.into(),
|
||||
r.workspace_id.into(),
|
||||
r.folder_id.as_ref().map(|s| s.as_str()).into(),
|
||||
timestamp_for_upsert(update_source, request.created_at).into(),
|
||||
timestamp_for_upsert(update_source, request.updated_at).into(),
|
||||
request.workspace_id.into(),
|
||||
request.folder_id.as_ref().map(|s| s.as_str()).into(),
|
||||
trimmed_name.into(),
|
||||
r.description.into(),
|
||||
r.url.into(),
|
||||
serde_json::to_string(&r.url_parameters)?.into(),
|
||||
r.method.into(),
|
||||
serde_json::to_string(&r.body)?.into(),
|
||||
r.body_type.as_ref().map(|s| s.as_str()).into(),
|
||||
serde_json::to_string(&r.authentication)?.into(),
|
||||
r.authentication_type.as_ref().map(|s| s.as_str()).into(),
|
||||
serde_json::to_string(&r.headers)?.into(),
|
||||
r.sort_priority.into(),
|
||||
request.description.into(),
|
||||
request.url.into(),
|
||||
serde_json::to_string(&request.url_parameters)?.into(),
|
||||
request.method.into(),
|
||||
serde_json::to_string(&request.body)?.into(),
|
||||
request.body_type.as_ref().map(|s| s.as_str()).into(),
|
||||
serde_json::to_string(&request.authentication)?.into(),
|
||||
request.authentication_type.as_ref().map(|s| s.as_str()).into(),
|
||||
serde_json::to_string(&request.headers)?.into(),
|
||||
request.sort_priority.into(),
|
||||
])
|
||||
.on_conflict(
|
||||
OnConflict::column(GrpcEventIden::Id)
|
||||
@@ -2167,7 +2168,7 @@ pub async fn get_workspace_export_resources<R: Runtime>(
|
||||
let mut data = WorkspaceExport {
|
||||
yaak_version: mgr.package_info().version.clone().to_string(),
|
||||
yaak_schema: 2,
|
||||
timestamp: chrono::Utc::now().naive_utc(),
|
||||
timestamp: Utc::now().naive_utc(),
|
||||
resources: BatchUpsertResult {
|
||||
workspaces: Vec::new(),
|
||||
environments: Vec::new(),
|
||||
@@ -2197,3 +2198,21 @@ pub async fn get_workspace_export_resources<R: Runtime>(
|
||||
|
||||
data
|
||||
}
|
||||
|
||||
// Generate the created_at or updated_at timestamps for an upsert operation, depending on the ID
|
||||
// provided.
|
||||
fn timestamp_for_upsert(update_source: &UpdateSource, dt: NaiveDateTime) -> NaiveDateTime {
|
||||
match update_source {
|
||||
// Sync and import operations always preserve timestamps
|
||||
UpdateSource::Sync | UpdateSource::Import => {
|
||||
if dt.and_utc().timestamp() == 0 {
|
||||
// Sometimes data won't have timestamps (partial data)
|
||||
Utc::now().naive_utc()
|
||||
} else {
|
||||
dt
|
||||
}
|
||||
},
|
||||
// Other sources will always update to the latest time
|
||||
_ => Utc::now().naive_utc(),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user