|
|
|
@ -12,6 +12,18 @@ let cachedDailyLimit: number | null = null; |
|
|
|
let limitCacheTime: number = 0; |
|
|
|
let limitCacheTime: number = 0; |
|
|
|
const LIMIT_CACHE_DURATION = 5 * 60 * 1000; // 5 minutes
|
|
|
|
const LIMIT_CACHE_DURATION = 5 * 60 * 1000; // 5 minutes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Get local date string in YYYY-MM-DD format (not UTC) |
|
|
|
|
|
|
|
* This ensures the daily reset happens at local midnight, not UTC midnight |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
function getLocalDateString(): string { |
|
|
|
|
|
|
|
const now = new Date(); |
|
|
|
|
|
|
|
const year = now.getFullYear(); |
|
|
|
|
|
|
|
const month = String(now.getMonth() + 1).padStart(2, '0'); |
|
|
|
|
|
|
|
const day = String(now.getDate()).padStart(2, '0'); |
|
|
|
|
|
|
|
return `${year}-${month}-${day}`; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Get time limit data from localStorage (for usage tracking only) |
|
|
|
* Get time limit data from localStorage (for usage tracking only) |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
@ -22,7 +34,7 @@ function getTimeLimitData(): Omit<TimeLimitData, 'dailyLimit'> { |
|
|
|
const data = JSON.parse(stored); |
|
|
|
const data = JSON.parse(stored); |
|
|
|
return { |
|
|
|
return { |
|
|
|
dailyTimeUsed: data.dailyTimeUsed || 0, |
|
|
|
dailyTimeUsed: data.dailyTimeUsed || 0, |
|
|
|
lastResetDate: data.lastResetDate || new Date().toISOString().split('T')[0] |
|
|
|
lastResetDate: data.lastResetDate || getLocalDateString() |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
} catch (e) { |
|
|
|
@ -32,7 +44,7 @@ function getTimeLimitData(): Omit<TimeLimitData, 'dailyLimit'> { |
|
|
|
// Return default data
|
|
|
|
// Return default data
|
|
|
|
return { |
|
|
|
return { |
|
|
|
dailyTimeUsed: 0, |
|
|
|
dailyTimeUsed: 0, |
|
|
|
lastResetDate: new Date().toISOString().split('T')[0] |
|
|
|
lastResetDate: getLocalDateString() |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -52,7 +64,7 @@ function saveTimeLimitData(data: Omit<TimeLimitData, 'dailyLimit'>): void { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
function shouldResetDaily(): boolean { |
|
|
|
function shouldResetDaily(): boolean { |
|
|
|
const data = getTimeLimitData(); |
|
|
|
const data = getTimeLimitData(); |
|
|
|
const today = new Date().toISOString().split('T')[0]; |
|
|
|
const today = getLocalDateString(); |
|
|
|
return data.lastResetDate !== today; |
|
|
|
return data.lastResetDate !== today; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -63,7 +75,7 @@ function resetIfNeeded(): void { |
|
|
|
if (shouldResetDaily()) { |
|
|
|
if (shouldResetDaily()) { |
|
|
|
const data = getTimeLimitData(); |
|
|
|
const data = getTimeLimitData(); |
|
|
|
data.dailyTimeUsed = 0; |
|
|
|
data.dailyTimeUsed = 0; |
|
|
|
data.lastResetDate = new Date().toISOString().split('T')[0]; |
|
|
|
data.lastResetDate = getLocalDateString(); |
|
|
|
saveTimeLimitData(data); |
|
|
|
saveTimeLimitData(data); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -166,6 +178,6 @@ export function addTimeSpent(seconds: number): void { |
|
|
|
export function resetDailyCounter(): void { |
|
|
|
export function resetDailyCounter(): void { |
|
|
|
const data = getTimeLimitData(); |
|
|
|
const data = getTimeLimitData(); |
|
|
|
data.dailyTimeUsed = 0; |
|
|
|
data.dailyTimeUsed = 0; |
|
|
|
data.lastResetDate = new Date().toISOString().split('T')[0]; |
|
|
|
data.lastResetDate = getLocalDateString(); |
|
|
|
saveTimeLimitData(data); |
|
|
|
saveTimeLimitData(data); |
|
|
|
} |
|
|
|
} |
|
|
|
|