102 lines
2.2 KiB
TypeScript
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
|
|
}
|
|
}
|