trilium/apps/server/src/services/file_system_sync_init.ts
2025-07-26 18:31:16 +03:00

129 lines
3.0 KiB
TypeScript

"use strict";
import log from "./log.js";
import fileSystemSync from "./file_system_sync.js";
import eventService from "./events.js";
import optionService from "./options.js";
/**
* Initialization service for file system sync functionality
*/
class FileSystemSyncInit {
private initialized = false;
/**
* Initialize file system sync if enabled
*/
async init() {
if (this.initialized) {
return;
}
try {
// Check if file system sync is enabled
const isEnabled = optionService.getOption('fileSystemSyncEnabled') === 'true';
if (!isEnabled) {
log.info('File system sync is disabled');
return;
}
log.info('Initializing file system sync...');
// Initialize the sync engine
await fileSystemSync.init();
this.initialized = true;
log.info('File system sync initialized successfully');
} catch (error) {
log.error(`Failed to initialize file system sync: ${error}`);
throw error;
}
}
/**
* Shutdown file system sync
*/
async shutdown() {
if (!this.initialized) {
return;
}
try {
log.info('Shutting down file system sync...');
await fileSystemSync.shutdown();
this.initialized = false;
log.info('File system sync shutdown complete');
} catch (error) {
log.error(`Error shutting down file system sync: ${error}`);
}
}
/**
* Check if file system sync is initialized
*/
isInitialized(): boolean {
return this.initialized;
}
/**
* Get sync status
*/
getStatus() {
if (!this.initialized) {
return { enabled: false, initialized: false };
}
return {
enabled: true,
initialized: true,
status: fileSystemSync.getSyncStatus()
};
}
/**
* Enable file system sync
*/
async enable() {
optionService.setOption('fileSystemSyncEnabled', 'true');
if (!this.initialized) {
await this.init();
}
log.info('File system sync enabled');
}
/**
* Disable file system sync
*/
async disable() {
optionService.setOption('fileSystemSyncEnabled', 'false');
if (this.initialized) {
await this.shutdown();
}
log.info('File system sync disabled');
}
/**
* Perform full sync for a specific mapping
*/
async fullSync(mappingId: string) {
if (!this.initialized) {
throw new Error('File system sync is not initialized');
}
return await fileSystemSync.fullSync(mappingId);
}
}
// Create singleton instance
const fileSystemSyncInit = new FileSystemSyncInit();
export default fileSystemSyncInit;