pub struct Pause {
pub id: i32,
pub start: NaiveDateTime,
pub end: Option<NaiveDateTime>,
pub duration: Option<Duration>,
}Expand description
Represents a single pause period with complete timing information.
This structure models a break period detected by the activity monitor, containing all necessary information for analysis, reporting, and display. It handles both active (ongoing) and completed pause periods gracefully.
§Field Semantics
id: Unique database identifier for pause tracking and updatesstart: Precise timestamp when inactivity threshold was reachedend: Completion timestamp (None for ongoing pauses)duration: Calculated break duration (None for ongoing pauses)
§State Handling
The structure supports two primary states:
§Completed Pause
- All fields populated with meaningful values
endcontains actual completion timestampdurationcontains calculated break duration- Ready for reporting and analysis
§Ongoing Pause (Active)
startfield contains pause initiation timeendfield is None (pause still in progress)durationfield is None (cannot calculate until completion)- Can be displayed with special formatting for active state
§Duration Calculation
Durations are calculated and stored at the database level for consistency:
- Precision: Calculated to the second for accurate reporting
- Storage: Stored as seconds in database, converted to Duration for display
- Consistency: All duration calculations use same algorithm
- Timezone: Uses local time for user-friendly display
§Display Considerations
The structure is designed for easy formatting:
- Timestamps use standard format suitable for parsing
- Duration is compatible with
chrono::Durationformatting utilities - None values are handled gracefully in display formatting
- Supports both detailed and summary display modes
Fields§
§id: i32The unique identifier for the pause record in the database.
This ID is auto-generated when the pause record is created and serves as the primary key for all database operations. It’s used for updating pause records when they end and for referencing specific pauses in reports and analysis.
start: NaiveDateTimeThe timestamp when the pause period began.
This represents the precise moment when the activity monitor detected that the user had been inactive for the configured pause threshold duration. The timestamp uses local time zone for user-friendly display and reporting.
§Precision
- Stored with second-level precision in the database
- Captured when inactivity threshold is first exceeded
- Uses system local time for consistency with user expectations
end: Option<NaiveDateTime>The timestamp when the pause period ended.
This field is populated when user activity resumes after a break. It remains None for ongoing pauses that haven’t completed yet.
§State Semantics
- Some(timestamp): Pause has completed, duration can be calculated
- None: Pause is still active, user hasn’t returned yet
§Update Process
The field is updated when the monitor detects resumed activity:
- Activity monitor detects keyboard/mouse input
- Database record is updated with current timestamp
- Duration is calculated and stored simultaneously
duration: Option<Duration>The calculated duration of the pause period.
This represents the total time the user was away from the computer during this break period. The duration is calculated automatically when the pause ends and stored for efficient reporting.
§Calculation Details
- Formula:
end_time - start_time - Precision: Second-level accuracy for detailed analysis
- Storage: Converted from seconds to Duration for easy manipulation
- Filtering: Only pauses meeting minimum duration are typically displayed
§None Handling
The field is None for ongoing pauses where the end time hasn’t been determined yet. Display formatting handles this gracefully by showing placeholder values or real-time duration calculation.