mirror of
https://github.com/Nystik-gh/ignis.git
synced 2026-06-17 04:35:53 +00:00
add server settings UI and enforcement
This commit is contained in:
@@ -10,6 +10,14 @@ export class ContentCache {
|
||||
this._maxSize = maxSize;
|
||||
}
|
||||
|
||||
setMaxSize(maxSize) {
|
||||
this._maxSize = maxSize;
|
||||
|
||||
while (this._currentSize > this._maxSize && this._cache.size > 0) {
|
||||
this._evictOne();
|
||||
}
|
||||
}
|
||||
|
||||
has(path) {
|
||||
return this._cache.has(this._normalize(path));
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
|
||||
import { normalize } from "../util/path.js";
|
||||
|
||||
const MAX_SIZE = 200 * 1024 * 1024;
|
||||
const TTL_MS = 5 * 60 * 1000;
|
||||
let MAX_SIZE = 200 * 1024 * 1024;
|
||||
let TTL_MS = 5 * 60 * 1000;
|
||||
|
||||
const cache = new Map(); // path -> { data, size, createdAt }
|
||||
let currentSize = 0;
|
||||
@@ -112,6 +112,20 @@ export function inputCacheClear() {
|
||||
currentSize = 0;
|
||||
}
|
||||
|
||||
export function setInputCacheLimits({ maxSize, ttlMs }) {
|
||||
if (Number.isFinite(maxSize)) {
|
||||
MAX_SIZE = maxSize;
|
||||
|
||||
while (currentSize > MAX_SIZE && cache.size > 0) {
|
||||
evictOldest();
|
||||
}
|
||||
}
|
||||
|
||||
if (Number.isFinite(ttlMs)) {
|
||||
TTL_MS = ttlMs;
|
||||
}
|
||||
}
|
||||
|
||||
export function isInputCachePath(path) {
|
||||
const norm = normalize(path);
|
||||
return norm.startsWith(".obsidian/imports/");
|
||||
|
||||
@@ -8,11 +8,26 @@ import {
|
||||
initWorkspacePatch,
|
||||
} from "./workspace.js";
|
||||
import { prefetchVaultContent } from "./fs/indexer-prefetch.js";
|
||||
import { setInputCacheLimits } from "./fs/input-cache.js";
|
||||
import { autoTrustDemoVaults, maybeProvisionDemoVault } from "./demo.js";
|
||||
import { initNativeMenuGuard } from "./native-menu-guard.js";
|
||||
|
||||
let bootstrapVirtualPlugins = [];
|
||||
|
||||
// Cache sizes come from the bootstrap response and are applied at page load.
|
||||
// The server owns the rest of the settings and applies them on its side.
|
||||
function applyServerSettings(s) {
|
||||
if (!s) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (Number.isFinite(s.contentCacheBytes)) {
|
||||
fsShim._contentCache.setMaxSize(s.contentCacheBytes);
|
||||
}
|
||||
|
||||
setInputCacheLimits({ maxSize: s.inputCacheBytes, ttlMs: s.inputCacheTtlMs });
|
||||
}
|
||||
|
||||
export function getBootstrapVirtualPlugins() {
|
||||
return bootstrapVirtualPlugins;
|
||||
}
|
||||
@@ -212,6 +227,7 @@ export function initialize() {
|
||||
applyTree(bootstrap.tree);
|
||||
applyCoreSyncGuard(bootstrap.plugins);
|
||||
bootstrapVirtualPlugins = bootstrap.virtualPlugins || [];
|
||||
applyServerSettings(bootstrap.settings);
|
||||
|
||||
// Race the indexer: batch-fetch text content into ContentCache so
|
||||
// Obsidian's startup indexing reads hit the cache instead of the network.
|
||||
|
||||
Reference in New Issue
Block a user