Complete local-first Rig provider migration

This commit is contained in:
2026-08-06 11:37:28 -05:00
parent f850bae77c
commit 634ce7ba00
38 changed files with 3837 additions and 1616 deletions
+51 -2
View File
@@ -41,6 +41,7 @@ use crate::cloud_object::{
CloudObjectUuidLookup as _, GenericStringObjectFormat, JsonObjectType, Space,
};
use crate::drive::CloudObjectTypeAndId;
use crate::local_object_repository::{local_owner, LocalObjectRepository};
use crate::persistence::{
database_file_path_for_scope, establish_ro_connection, ModelEvent, PersistenceScope,
};
@@ -499,6 +500,19 @@ impl TemplatableMCPServerManager {
initiated_by: InitiatedBy,
ctx: &mut ModelContext<Self>,
) {
if matches!(space, Space::Personal) {
let client_id = ClientId::default();
LocalObjectRepository::handle(ctx).update(ctx, |repository, ctx| {
repository.create_templatable_mcp_server_with_id(
SyncId::ClientId(client_id),
templatable_mcp_server,
ctx,
);
});
self.fetch_cloud_servers(ctx);
return;
}
let owner = UserWorkspaces::as_ref(ctx).space_to_owner(space, ctx);
if let Some(owner) = owner {
let update_manager = UpdateManager::handle(ctx);
@@ -527,9 +541,24 @@ impl TemplatableMCPServerManager {
template_server: TemplatableMCPServer,
ctx: &mut ModelContext<Self>,
) {
let cloud_templatable_mcp_server =
self.get_cloud_templatable_mcp_server(template_server.uuid);
let cloud_templatable_mcp_server = self
.get_cloud_templatable_mcp_server(template_server.uuid)
.cloned();
if let Some(cloud_templatable_mcp_server) = cloud_templatable_mcp_server {
if cloud_templatable_mcp_server.permissions.owner == local_owner()
&& cloud_templatable_mcp_server.id.into_client().is_some()
{
LocalObjectRepository::handle(ctx).update(ctx, |repository, ctx| {
repository.update_templatable_mcp_server(
template_server.uuid,
template_server,
ctx,
);
});
self.fetch_cloud_servers(ctx);
return;
}
let update_manager = UpdateManager::handle(ctx);
update_manager.update(ctx, |update_manager, ctx| {
update_manager.update_templatable_mcp_server(
@@ -553,6 +582,16 @@ impl TemplatableMCPServerManager {
let cloud_templatable_mcp_server = self.get_cloud_templatable_mcp_server(uuid);
if let Some(cloud_templatable_mcp_server) = cloud_templatable_mcp_server {
if cloud_templatable_mcp_server.permissions.owner == local_owner()
&& cloud_templatable_mcp_server.id.into_client().is_some()
{
LocalObjectRepository::handle(ctx).update(ctx, |repository, ctx| {
repository.delete_templatable_mcp_server(uuid, ctx);
});
self.fetch_cloud_servers(ctx);
return;
}
let cloud_object_type_and_id = CloudObjectTypeAndId::GenericStringObject {
object_type: GenericStringObjectFormat::Json(JsonObjectType::TemplatableMCPServer),
id: cloud_templatable_mcp_server.id,
@@ -1425,6 +1464,11 @@ impl TemplatableMCPServerManager {
let cloud_templatable_mcp_server = self.get_cloud_templatable_mcp_server(template_uuid);
if let Some(cloud_templatable_mcp_server) = cloud_templatable_mcp_server {
if cloud_templatable_mcp_server.permissions.owner == local_owner()
&& cloud_templatable_mcp_server.id.into_client().is_some()
{
return true;
}
let auth_state = AuthStateProvider::as_ref(ctx).get();
let current_team = UserWorkspaces::as_ref(ctx).current_team();
@@ -1443,6 +1487,11 @@ impl TemplatableMCPServerManager {
pub fn is_author(&self, template_uuid: Uuid, ctx: &AppContext) -> bool {
let cloud_templatable_mcp_server = self.get_cloud_templatable_mcp_server(template_uuid);
if let Some(cloud_templatable_mcp_server) = cloud_templatable_mcp_server {
if cloud_templatable_mcp_server.permissions.owner == local_owner()
&& cloud_templatable_mcp_server.id.into_client().is_some()
{
return true;
}
let auth_state = AuthStateProvider::as_ref(ctx).get();
cloud_templatable_mcp_server.metadata().creator_uid
== auth_state.user_id().map(|user_id| user_id.as_string())