"use strict"; /** * 巡检模块主进程存储适配器 * * 使用 userData 目录下的 JSON 文件存储巡检相关数据(设备配置、告警规则、巡检结果等)。 * 提供与 localStorage 类似的 key-value 接口,方便注入到 store 模块。 */ const fs = require("node:fs"); const path = require("node:path"); const STORAGE_FILENAME = "inspection-data.json"; let _storageCache = null; let _filePath = null; let _dirty = false; let _saveTimer = null; function init(userDataDir) { _filePath = path.join(userDataDir, STORAGE_FILENAME); _loadFromDisk(); } function _loadFromDisk() { if (!_filePath) { _storageCache = {}; return; } try { if (fs.existsSync(_filePath)) { const raw = fs.readFileSync(_filePath, "utf-8"); _storageCache = JSON.parse(raw); } else { _storageCache = {}; } } catch (e) { console.error("[Inspection Storage] 加载失败:", e?.message); _storageCache = {}; } } function _scheduleSave() { if (_saveTimer) return; _saveTimer = setTimeout(() => { _saveTimer = null; _flushToDisk(); }, 200); } function _flushToDisk() { if (!_filePath || !_dirty) return; try { const dir = path.dirname(_filePath); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } fs.writeFileSync(_filePath, JSON.stringify(_storageCache, null, 2), "utf-8"); _dirty = false; } catch (e) { console.error("[Inspection Storage] 保存失败:", e?.message); } } function readStorage(key) { if (!_storageCache) _loadFromDisk(); return _storageCache[key] ?? null; } function writeStorage(key, value) { if (!_storageCache) _loadFromDisk(); if (value === null || value === undefined) { delete _storageCache[key]; } else { _storageCache[key] = value; } _dirty = true; _scheduleSave(); } function flushSync() { _flushToDisk(); } function resetCache() { // 先确保内存中的修改已写到磁盘(200ms 异步保存可能还没触发) _flushToDisk(); _storageCache = null; _loadFromDisk(); } module.exports = { init, readStorage, writeStorage, flushSync, resetCache, };