feat: 优化 IDBClear 方法,支持保留指定键的缓存项

This commit is contained in:
kuaifan 2026-01-04 01:40:13 +00:00
parent 501ff21e55
commit 0d8e10b60e
2 changed files with 41 additions and 24 deletions

View File

@ -1685,8 +1685,27 @@ const timezone = require("dayjs/plugin/timezone");
return localforage.removeItem(key) return localforage.removeItem(key)
}, },
IDBClear() { /**
return localforage.clear() * 清除缓存
* @param {string[]} [keysToKeep] - 可选需要保留的 key 数组
* @returns {Promise<void>}
*/
async IDBClear(keysToKeep = []) {
if (!keysToKeep || !keysToKeep.length) {
return localforage.clear();
}
const cached = {};
await Promise.all(
keysToKeep.map(async key => {
cached[key] = await this.IDBValue(key);
})
);
await localforage.clear();
await Promise.all(
Object.entries(cached)
.filter(([, value]) => value !== null && value !== undefined)
.map(([key, value]) => this.IDBSet(key, value))
);
}, },
IDBValue(key) { IDBValue(key) {

View File

@ -1127,30 +1127,28 @@ export default {
); );
// localForage // localForage
const cacheItems = { const keysToKeep = [
clientId: await $A.IDBString("clientId"), 'clientId',
cacheServerUrl: await $A.IDBString("cacheServerUrl"), 'cacheServerUrl',
cacheCalendarView: await $A.IDBString("cacheCalendarView"), 'cacheCalendarView',
cacheProjectParameter: await $A.IDBArray("cacheProjectParameter"), 'cacheProjectParameter',
cacheLoginEmail: await $A.IDBString("cacheLoginEmail"), 'cacheLoginEmail',
cacheFileSort: await $A.IDBJson("cacheFileSort"), 'cacheFileSort',
cacheTranslationLanguage: await $A.IDBString("cacheTranslationLanguage"), 'cacheTranslationLanguage',
cacheTranscriptionLanguage: await $A.IDBString("cacheTranscriptionLanguage"), 'cacheTranscriptionLanguage',
cacheTranslations: await $A.IDBArray("cacheTranslations"), 'cacheTranslations',
cacheEmojis: await $A.IDBArray("cacheEmojis"), 'cacheEmojis',
userInfo: await $A.IDBJson("userInfo"), 'userInfo',
mcpServerStatus: await $A.IDBJson("mcpServerStatus"), 'mcpServerStatus',
cacheVersion: state.cacheVersion, 'aiAssistant.model',
}; 'aiAssistant.sessions',
await $A.IDBClear(); ];
await Promise.all( await $A.IDBClear(keysToKeep);
Object.entries(cacheItems).map(([key, value]) => await $A.IDBSet('cacheVersion', state.cacheVersion);
$A.IDBSet(key, value)
)
);
// userInfo // userInfo
await dispatch("saveUserInfoBase", $A.isJson(userData) ? userData : cacheItems.userInfo) const cachedUserInfo = await $A.IDBJson("userInfo");
await dispatch("saveUserInfoBase", $A.isJson(userData) ? userData : cachedUserInfo)
// readCache // readCache
await dispatch("handleReadCache") await dispatch("handleReadCache")