forked from GitHubMirrors/silverbullet-icalendar
Add clear all events functionality
Add 'iCalendar: Clear All Events' command to completely remove all indexed calendar events and cache. Useful for maintenance and troubleshooting. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Alexandre Nicolaie <xunleii@users.noreply.github.com>
This commit is contained in:
@@ -48,6 +48,8 @@ After configuration, run the `{[iCalendar: Sync]}` command to synchronize calend
|
|||||||
|
|
||||||
To bypass the cache and force an immediate sync, use the `{[iCalendar: Force Sync]}` command.
|
To bypass the cache and force an immediate sync, use the `{[iCalendar: Force Sync]}` command.
|
||||||
|
|
||||||
|
To completely clear all indexed events and cache (useful for troubleshooting), use the `{[iCalendar: Clear All Events]}` command.
|
||||||
|
|
||||||
Events are indexed with the tag `ical-event` and can be queried using Lua Integrated Query (LIQ).
|
Events are indexed with the tag `ical-event` and can be queried using Lua Integrated Query (LIQ).
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ functions:
|
|||||||
command:
|
command:
|
||||||
name: "iCalendar: Force Sync"
|
name: "iCalendar: Force Sync"
|
||||||
priority: -1
|
priority: -1
|
||||||
|
clearCache:
|
||||||
|
path: ./icalendar.ts:clearCache
|
||||||
|
command:
|
||||||
|
name: "iCalendar: Clear All Events"
|
||||||
|
priority: -1
|
||||||
showVersion:
|
showVersion:
|
||||||
path: ./icalendar.ts:showVersion
|
path: ./icalendar.ts:showVersion
|
||||||
command:
|
command:
|
||||||
|
|||||||
57
icalendar.ts
57
icalendar.ts
@@ -218,6 +218,63 @@ export async function forceSync() {
|
|||||||
await syncCalendars();
|
await syncCalendars();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the calendar cache by removing the indexed events page
|
||||||
|
* Implementation based on SilverBullet's clearFileIndex:
|
||||||
|
* https://github.com/silverbulletmd/silverbullet/blob/main/plugs/index/api.ts#L49-L69
|
||||||
|
*/
|
||||||
|
export async function clearCache() {
|
||||||
|
// Ask for confirmation before clearing the cache
|
||||||
|
if (!await editor.confirm(
|
||||||
|
"Are you sure you want to clear all calendar events and cache? This will remove all indexed calendar data."
|
||||||
|
)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const fileName = "$icalendar";
|
||||||
|
console.log("[iCalendar] Clearing index for", fileName);
|
||||||
|
|
||||||
|
// Implementation based on SilverBullet's clearFileIndex function
|
||||||
|
// https://github.com/silverbulletmd/silverbullet/blob/main/plugs/index/api.ts#L49-L69
|
||||||
|
const indexKey = "idx";
|
||||||
|
const pageKey = "ridx";
|
||||||
|
|
||||||
|
// Query all keys for this file
|
||||||
|
const allKeys: any[] = [];
|
||||||
|
|
||||||
|
// Get all page keys for this file: [pageKey, $icalendar, ...key]
|
||||||
|
const pageKeys = await datastore.query({
|
||||||
|
prefix: [pageKey, fileName],
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const { key } of pageKeys) {
|
||||||
|
allKeys.push(key);
|
||||||
|
// Also add corresponding index keys: [indexKey, tag, ref, $icalendar]
|
||||||
|
// where tag is "ical-event" and ref is the event reference
|
||||||
|
allKeys.push([indexKey, ...key.slice(2), fileName]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Batch delete all found keys
|
||||||
|
if (allKeys.length > 0) {
|
||||||
|
await datastore.batchDel(allKeys);
|
||||||
|
console.log("[iCalendar] Deleted", allKeys.length, "events");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Also clear the sync timestamp cache
|
||||||
|
await clientStore.del(CACHE_KEY);
|
||||||
|
|
||||||
|
console.log("[iCalendar] Calendar index and cache cleared");
|
||||||
|
await editor.flashNotification("Calendar index and cache cleared", "info");
|
||||||
|
} catch (err) {
|
||||||
|
console.error("[iCalendar] Failed to clear cache:", err);
|
||||||
|
await editor.flashNotification(
|
||||||
|
`Failed to clear cache: ${err instanceof Error ? err.message : String(err)}`,
|
||||||
|
"error"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows the plugin version
|
* Shows the plugin version
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user