Refine v2 plugin API and sync flow

This commit is contained in:
2026-06-27 12:36:31 +08:00
parent 03175aa46d
commit 24444a8588
14 changed files with 1013 additions and 282 deletions
+1 -1
View File
@@ -86,7 +86,7 @@
}
function mouseHistoryDirection(event) {
if (currentView === 'workspace' || currentView === 'workbench') return '';
if (currentView === 'workspace') return '';
if (event.button === 3 || event.button === 8 || event.buttons === 8 || event.buttons === 128 || event.which === 8) return 'back';
if (event.button === 4 || event.button === 9 || event.buttons === 16 || event.buttons === 256 || event.which === 9) return 'forward';
return '';
@@ -225,20 +225,42 @@ export function createPluginAPI(pluginId) {
}
},
backend: {
call: async function(method, ...args) {
assertActive('backend.call(' + method + ')');
try {
const App = window['go']?.['api']?.['App'];
if (!App || typeof App[method] !== 'function') {
throw new Error('Backend method not found: ' + method);
}
const result = await App[method](...args);
return result;
} catch (e) {
const message = e && e.message ? e.message : String(e);
throw new Error('[plugin:' + pluginId + '] backend.call(' + method + ') failed: ' + message);
}
sync: {
status: function() {
assertActive('sync.status');
return callBackend(pluginId, 'sync.status', function() {
return App.PluginSyncStatus(pluginId);
});
},
configure: function(serverURL, username, password) {
assertActive('sync.configure');
return callBackendErrorString(pluginId, 'sync.configure', function() {
return App.PluginSyncConfigure(pluginId, serverURL || '', username || '', password || '');
});
},
disconnect: function() {
assertActive('sync.disconnect');
return callBackendErrorString(pluginId, 'sync.disconnect', function() {
return App.PluginSyncDisconnect(pluginId);
});
},
testConnection: function(serverURL, username, password) {
assertActive('sync.testConnection');
return callBackendErrorString(pluginId, 'sync.testConnection', function() {
return App.PluginSyncTestConnection(pluginId, serverURL || '', username || '', password || '');
});
},
setInterval: function(minutes) {
assertActive('sync.setInterval');
return callBackendErrorString(pluginId, 'sync.setInterval', function() {
return App.PluginSyncSetInterval(pluginId, Number(minutes) || 0);
});
},
now: function() {
assertActive('sync.now');
return callBackend(pluginId, 'sync.now', function() {
return App.PluginSyncNow(pluginId);
});
}
},
+12 -31
View File
@@ -7,14 +7,11 @@ import {api} from '../models';
import {permissions} from '../models';
import {plugin} from '../models';
import {files} from '../models';
import {notes} from '../models';
export function ArchiveWorkspaceNode(arg1:string):Promise<string>;
export function CloseVault():Promise<void>;
export function CreateNote(arg1:string,arg2:string):Promise<Record<string, any>|string>;
export function CreateVault(arg1:string):Promise<void>;
export function CreateVaultFolder(arg1:string,arg2:string):Promise<string>;
@@ -29,8 +26,6 @@ export function EditWorkbenchResource(arg1:string,arg2:Record<string, any>):Prom
export function EnablePlugin(arg1:string):Promise<string>;
export function EnsureOverview(arg1:string):Promise<Record<string, any>|string>;
export function ExecutePluginCommand(arg1:string,arg2:string,arg3:Record<string, any>):Promise<Record<string, any>|string>;
export function GetAppSettings():Promise<Record<string, any>>;
@@ -67,8 +62,6 @@ export function GetWorkspaceMetadata(arg1:string):Promise<workspace.Metadata|str
export function GetWorkspaceTree():Promise<Record<string, any>>;
export function ListNotes(arg1:string):Promise<Array<notes.NoteInfo>|string>;
export function ListPluginCapabilities(arg1:string):Promise<Array<capability.Entry>|string>;
export function ListVaultFiles(arg1:string,arg2:string):Promise<Array<files.FileEntry>|string>;
@@ -79,15 +72,23 @@ export function MoveVaultPath(arg1:string,arg2:string,arg3:string,arg4:files.Mov
export function MoveWorkspaceNode(arg1:string,arg2:string):Promise<string>;
export function NormalizeNoteTitle(arg1:string):Promise<Record<string, any>|string>;
export function OpenVault(arg1:string):Promise<void>;
export function OpenWorkbenchResource(arg1:string,arg2:Record<string, any>):Promise<workbench.OpenResourceResult|string>;
export function PublishPluginEvent(arg1:string,arg2:string,arg3:Record<string, any>):Promise<string>;
export function PluginSyncConfigure(arg1:string,arg2:string,arg3:string,arg4:string):Promise<string>;
export function ReadNote(arg1:string):Promise<Record<string, any>|string>;
export function PluginSyncDisconnect(arg1:string):Promise<string>;
export function PluginSyncNow(arg1:string):Promise<Record<string, any>|string>;
export function PluginSyncSetInterval(arg1:string,arg2:number):Promise<string>;
export function PluginSyncStatus(arg1:string):Promise<api.SyncStatusDTO|string>;
export function PluginSyncTestConnection(arg1:string,arg2:string,arg3:string,arg4:string):Promise<string>;
export function PublishPluginEvent(arg1:string,arg2:string,arg3:Record<string, any>):Promise<string>;
export function ReadPluginDataJSON(arg1:string,arg2:string):Promise<Record<string, any>>;
@@ -101,18 +102,10 @@ export function RecordDesiredPlugin(arg1:string,arg2:string,arg3:string):Promise
export function ReloadPlugins():Promise<number|string>;
export function RenameNote(arg1:string,arg2:string):Promise<Record<string, any>|string>;
export function RenameWorkspace(arg1:string,arg2:string):Promise<string>;
export function RenameWorkspaceNode(arg1:string,arg2:string):Promise<string>;
export function ResetSyncKey():Promise<void>;
export function SaveNote(arg1:string,arg2:string):Promise<string>;
export function SearchNotes(arg1:string):Promise<Array<notes.NoteInfo>|string>;
export function SelectDirectory():Promise<string>;
export function SelectVaultForOpen():Promise<string>;
@@ -125,18 +118,6 @@ export function SetCurrentWorkspaceNode(arg1:string):Promise<string>;
export function SubscribePluginEvent(arg1:string,arg2:string):Promise<string>;
export function SyncConfigure(arg1:string,arg2:string,arg3:string):Promise<void>;
export function SyncDisconnect():Promise<void>;
export function SyncNow():Promise<Record<string, any>>;
export function SyncSetInterval(arg1:number):Promise<void>;
export function SyncStatus():Promise<api.SyncStatusDTO>;
export function SyncTestConnection(arg1:string,arg2:string,arg3:string):Promise<void>;
export function TrashVaultPath(arg1:string,arg2:string):Promise<files.TrashResult|string>;
export function TrashWorkspace(arg1:string):Promise<workspace.TrashResult|string>;
+24 -60
View File
@@ -10,10 +10,6 @@ export function CloseVault() {
return window['go']['api']['App']['CloseVault']();
}
export function CreateNote(arg1, arg2) {
return window['go']['api']['App']['CreateNote'](arg1, arg2);
}
export function CreateVault(arg1) {
return window['go']['api']['App']['CreateVault'](arg1);
}
@@ -42,10 +38,6 @@ export function EnablePlugin(arg1) {
return window['go']['api']['App']['EnablePlugin'](arg1);
}
export function EnsureOverview(arg1) {
return window['go']['api']['App']['EnsureOverview'](arg1);
}
export function ExecutePluginCommand(arg1, arg2, arg3) {
return window['go']['api']['App']['ExecutePluginCommand'](arg1, arg2, arg3);
}
@@ -118,10 +110,6 @@ export function GetWorkspaceTree() {
return window['go']['api']['App']['GetWorkspaceTree']();
}
export function ListNotes(arg1) {
return window['go']['api']['App']['ListNotes'](arg1);
}
export function ListPluginCapabilities(arg1) {
return window['go']['api']['App']['ListPluginCapabilities'](arg1);
}
@@ -142,10 +130,6 @@ export function MoveWorkspaceNode(arg1, arg2) {
return window['go']['api']['App']['MoveWorkspaceNode'](arg1, arg2);
}
export function NormalizeNoteTitle(arg1) {
return window['go']['api']['App']['NormalizeNoteTitle'](arg1);
}
export function OpenVault(arg1) {
return window['go']['api']['App']['OpenVault'](arg1);
}
@@ -154,12 +138,32 @@ export function OpenWorkbenchResource(arg1, arg2) {
return window['go']['api']['App']['OpenWorkbenchResource'](arg1, arg2);
}
export function PublishPluginEvent(arg1, arg2, arg3) {
return window['go']['api']['App']['PublishPluginEvent'](arg1, arg2, arg3);
export function PluginSyncConfigure(arg1, arg2, arg3, arg4) {
return window['go']['api']['App']['PluginSyncConfigure'](arg1, arg2, arg3, arg4);
}
export function ReadNote(arg1) {
return window['go']['api']['App']['ReadNote'](arg1);
export function PluginSyncDisconnect(arg1) {
return window['go']['api']['App']['PluginSyncDisconnect'](arg1);
}
export function PluginSyncNow(arg1) {
return window['go']['api']['App']['PluginSyncNow'](arg1);
}
export function PluginSyncSetInterval(arg1, arg2) {
return window['go']['api']['App']['PluginSyncSetInterval'](arg1, arg2);
}
export function PluginSyncStatus(arg1) {
return window['go']['api']['App']['PluginSyncStatus'](arg1);
}
export function PluginSyncTestConnection(arg1, arg2, arg3, arg4) {
return window['go']['api']['App']['PluginSyncTestConnection'](arg1, arg2, arg3, arg4);
}
export function PublishPluginEvent(arg1, arg2, arg3) {
return window['go']['api']['App']['PublishPluginEvent'](arg1, arg2, arg3);
}
export function ReadPluginDataJSON(arg1, arg2) {
@@ -186,10 +190,6 @@ export function ReloadPlugins() {
return window['go']['api']['App']['ReloadPlugins']();
}
export function RenameNote(arg1, arg2) {
return window['go']['api']['App']['RenameNote'](arg1, arg2);
}
export function RenameWorkspace(arg1, arg2) {
return window['go']['api']['App']['RenameWorkspace'](arg1, arg2);
}
@@ -198,18 +198,6 @@ export function RenameWorkspaceNode(arg1, arg2) {
return window['go']['api']['App']['RenameWorkspaceNode'](arg1, arg2);
}
export function ResetSyncKey() {
return window['go']['api']['App']['ResetSyncKey']();
}
export function SaveNote(arg1, arg2) {
return window['go']['api']['App']['SaveNote'](arg1, arg2);
}
export function SearchNotes(arg1) {
return window['go']['api']['App']['SearchNotes'](arg1);
}
export function SelectDirectory() {
return window['go']['api']['App']['SelectDirectory']();
}
@@ -234,30 +222,6 @@ export function SubscribePluginEvent(arg1, arg2) {
return window['go']['api']['App']['SubscribePluginEvent'](arg1, arg2);
}
export function SyncConfigure(arg1, arg2, arg3) {
return window['go']['api']['App']['SyncConfigure'](arg1, arg2, arg3);
}
export function SyncDisconnect() {
return window['go']['api']['App']['SyncDisconnect']();
}
export function SyncNow() {
return window['go']['api']['App']['SyncNow']();
}
export function SyncSetInterval(arg1) {
return window['go']['api']['App']['SyncSetInterval'](arg1);
}
export function SyncStatus() {
return window['go']['api']['App']['SyncStatus']();
}
export function SyncTestConnection(arg1, arg2, arg3) {
return window['go']['api']['App']['SyncTestConnection'](arg1, arg2, arg3);
}
export function TrashVaultPath(arg1, arg2) {
return window['go']['api']['App']['TrashVaultPath'](arg1, arg2);
}
-25
View File
@@ -380,31 +380,6 @@ export namespace files {
}
export namespace notes {
export class NoteInfo {
title: string;
filename: string;
path: string;
parentPath: string;
isOverview: boolean;
static createFrom(source: any = {}) {
return new NoteInfo(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.title = source["title"];
this.filename = source["filename"];
this.path = source["path"];
this.parentPath = source["parentPath"];
this.isOverview = source["isOverview"];
}
}
}
export namespace permissions {
export class Entry {