Files
XCDesktop/shared/types/time.ts
2026-03-08 01:34:54 +08:00

102 lines
2.2 KiB
TypeScript

export type { TabType } from './tab.js'
export interface TimePeriod {
start: string
end: string
}
export interface TabRecord {
tabId: string
filePath: string | null
fileName: string
tabType: import('./tab.js').TabType
duration: number
focusedPeriods: TimePeriod[]
}
export interface TimingSession {
id: string
startTime: string
endTime?: string
duration: number
status: 'active' | 'paused' | 'ended'
tabRecords: TabRecord[]
}
export interface TabSummary {
fileName: string
tabType: import('./tab.js').TabType
totalDuration: number
focusCount: number
}
export interface DayTimeData {
date: string
totalDuration: number
sessions: TimingSession[]
tabSummary: Record<string, TabSummary>
lastUpdated: string
}
export interface DaySummary {
totalDuration: number
sessions: number
topTabs: Array<{ fileName: string; duration: number }>
}
export interface MonthTimeData {
year: number
month: number
days: Record<string, DaySummary>
monthlyTotal: number
averageDaily: number
activeDays: number
lastUpdated: string
}
export interface YearTimeData {
year: number
months: Record<string, { totalDuration: number; activeDays: number }>
yearlyTotal: number
averageMonthly: number
averageDaily: number
totalActiveDays: number
}
export interface CurrentTimerState {
isRunning: boolean
isPaused: boolean
currentSession: {
id: string
startTime: string
duration: number
currentTab: {
tabId: string
fileName: string
tabType: import('./tab.js').TabType
} | null
} | null
todayDuration: number
}
export interface TimeStats {
totalDuration: number
activeDays: number
averageDaily: number
longestDay: { date: string; duration: number } | null
longestSession: { date: string; duration: number } | null
topTabs: Array<{ fileName: string; duration: number; percentage: number }>
tabTypeDistribution: Array<{ tabType: import('./tab.js').TabType; duration: number; percentage: number }>
}
export interface TimeTrackingEvent {
type: 'tab-switch' | 'tab-open' | 'tab-close' | 'window-focus' | 'window-blur' | 'app-quit' | 'heartbeat'
timestamp: string
tabInfo?: {
tabId: string
filePath: string | null
fileName: string
tabType: import('./tab.js').TabType
}
}