mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-04 11:49:02 +08:00
- Added deprecation notices to various services and components, indicating they are scheduled for removal in v2.0.0. - Noted that feature PRs affecting these files are currently blocked, and only critical bug fixes will be accepted during the migration phase. - Provided context and status links for ongoing v2 refactoring efforts. This change is part of the preparation for the upcoming major version update.
91 lines
2.2 KiB
TypeScript
91 lines
2.2 KiB
TypeScript
/**
|
|
* @deprecated Scheduled for removal in v2.0.0
|
|
* --------------------------------------------------------------------------
|
|
* ⚠️ NOTICE: V2 DATA&UI REFACTORING (by 0xfullex)
|
|
* --------------------------------------------------------------------------
|
|
* STOP: Feature PRs affecting this file are currently BLOCKED.
|
|
* Only critical bug fixes are accepted during this migration phase.
|
|
*
|
|
* This file is being refactored to v2 standards.
|
|
* Any non-critical changes will conflict with the ongoing work.
|
|
*
|
|
* 🔗 Context & Status:
|
|
* - Contribution Hold: https://github.com/CherryHQ/cherry-studio/issues/10954
|
|
* - v2 Refactor PR : https://github.com/CherryHQ/cherry-studio/pull/10162
|
|
* --------------------------------------------------------------------------
|
|
*/
|
|
interface CacheItem<T> {
|
|
data: T
|
|
timestamp: number
|
|
duration: number
|
|
}
|
|
|
|
export class CacheService {
|
|
private static cache: Map<string, CacheItem<any>> = new Map()
|
|
|
|
/**
|
|
* Set cache
|
|
* @param key Cache key
|
|
* @param data Cache data
|
|
* @param duration Cache duration (in milliseconds)
|
|
*/
|
|
static set<T>(key: string, data: T, duration: number): void {
|
|
this.cache.set(key, {
|
|
data,
|
|
timestamp: Date.now(),
|
|
duration
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Get cache
|
|
* @param key Cache key
|
|
* @returns Returns data if cache exists and not expired, otherwise returns null
|
|
*/
|
|
static get<T>(key: string): T | null {
|
|
const item = this.cache.get(key)
|
|
if (!item) return null
|
|
|
|
const now = Date.now()
|
|
if (now - item.timestamp > item.duration) {
|
|
this.remove(key)
|
|
return null
|
|
}
|
|
|
|
return item.data
|
|
}
|
|
|
|
/**
|
|
* Remove specific cache
|
|
* @param key Cache key
|
|
*/
|
|
static remove(key: string): void {
|
|
this.cache.delete(key)
|
|
}
|
|
|
|
/**
|
|
* Clear all cache
|
|
*/
|
|
static clear(): void {
|
|
this.cache.clear()
|
|
}
|
|
|
|
/**
|
|
* Check if cache exists and is valid
|
|
* @param key Cache key
|
|
* @returns boolean
|
|
*/
|
|
static has(key: string): boolean {
|
|
const item = this.cache.get(key)
|
|
if (!item) return false
|
|
|
|
const now = Date.now()
|
|
if (now - item.timestamp > item.duration) {
|
|
this.remove(key)
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
}
|