@@ -23,3 +23,10 @@ functions:
|
||||
performSync:
|
||||
env: server
|
||||
path: sync.ts:performSync
|
||||
cron: "* * * * *"
|
||||
|
||||
syncPage:
|
||||
path: sync.ts:syncPage
|
||||
env: server
|
||||
events:
|
||||
- page:saved
|
||||
|
||||
+87
-9
@@ -125,18 +125,96 @@ export function check(config: SyncEndpoint) {
|
||||
return sync.check(config);
|
||||
}
|
||||
|
||||
// const syncTimeout = 1000 * 60 * 30; // 30 minutes
|
||||
const syncTimeout = 1000 * 20; // 20s
|
||||
|
||||
// Run on server
|
||||
export async function performSync() {
|
||||
const config: SyncEndpoint = await store.get("sync.config");
|
||||
if (!config) {
|
||||
// Sync not configured
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await sync.check(config);
|
||||
} catch (e: any) {
|
||||
console.error("Sync check failed", e.message);
|
||||
return;
|
||||
}
|
||||
// Check if sync not already in progress
|
||||
const ongoingSync: number | undefined = await store.get("sync.startTime");
|
||||
if (ongoingSync) {
|
||||
if (Date.now() - ongoingSync > syncTimeout) {
|
||||
console.log("Sync timed out, continuing");
|
||||
} else {
|
||||
console.log("Sync already in progress");
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Keep track of sync start time
|
||||
await store.set("sync.startTime", Date.now());
|
||||
|
||||
try {
|
||||
// Perform actual sync
|
||||
const snapshot = await store.get("sync.snapshot");
|
||||
const { snapshot: newSnapshot, operations, error } = await sync.syncAll(
|
||||
config,
|
||||
snapshot,
|
||||
);
|
||||
// Store snapshot
|
||||
await store.set("sync.snapshot", newSnapshot);
|
||||
// Clear sync start time
|
||||
await store.del("sync.startTime");
|
||||
if (error) {
|
||||
console.error("Sync error", error);
|
||||
throw new Error(error);
|
||||
}
|
||||
return operations;
|
||||
} catch (e: any) {
|
||||
// Clear sync start time
|
||||
await store.del("sync.startTime");
|
||||
console.error("Sync error", e);
|
||||
}
|
||||
}
|
||||
|
||||
export async function syncPage(page: string) {
|
||||
const config: SyncEndpoint = await store.get("sync.config");
|
||||
if (!config) {
|
||||
// Sync not configured
|
||||
return;
|
||||
}
|
||||
// Check if sync not already in progress
|
||||
const ongoingSync: number | undefined = await store.get("sync.startTime");
|
||||
if (ongoingSync) {
|
||||
if (Date.now() - ongoingSync > syncTimeout) {
|
||||
console.log("Sync timed out, continuing");
|
||||
} else {
|
||||
console.log("Sync already in progress");
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Keep track of sync start time
|
||||
await store.set("sync.startTime", Date.now());
|
||||
const snapshot = await store.get("sync.snapshot");
|
||||
const { snapshot: newSnapshot, operations, error } = await sync.sync(
|
||||
config,
|
||||
snapshot,
|
||||
);
|
||||
await store.set("sync.snapshot", newSnapshot);
|
||||
if (error) {
|
||||
console.error("Sync error", error);
|
||||
throw new Error(error);
|
||||
console.log("Syncing page", page);
|
||||
try {
|
||||
const { snapshot: newSnapshot, error } = await sync.syncFile(
|
||||
config,
|
||||
snapshot,
|
||||
`${page}.md`,
|
||||
);
|
||||
// Store snapshot
|
||||
await store.set("sync.snapshot", newSnapshot);
|
||||
// Clear sync start time
|
||||
await store.del("sync.startTime");
|
||||
if (error) {
|
||||
console.error("Sync error", error);
|
||||
throw new Error(error);
|
||||
}
|
||||
} catch (e: any) {
|
||||
// Clear sync start time
|
||||
await store.del("sync.startTime");
|
||||
console.error("Sync error", e);
|
||||
}
|
||||
return operations;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user