This is a pomodoro timer macOS app.
The initial design of this app focuses on updating the UI between Timer Calls (synchronously). As-observed during runtime, this can create up to a 30 second delay over a 15 minute timer to update the UI during each session (you'll see the additional time in the Banner Notification at the end). This should be handled by using an event-based system that can dispatch a new thread to update the UI when a new event is fired every second. Below is a mermaid diagram to help assist with this explanation.
sequenceDiagram
participant cl as Clock
participant ui as UserInterface
loop Every 1 Second
cl->>ui: New Event fired
ui->>cl: Returns from updating the User Interface
cl->>cl: Next second occurs
end
sequenceDiagram
participant cl as Clock
participant eh as EventHandler
participant ui as UserInterface
loop Every 1 Second
cl->>eh: New Event fired
eh->>ui: [thread2] Updates the UI
cl->>cl: Next second occurs
end
- Build initial timer
- Add Start/Stop Buttons
- Disable user activity after timer start
- Add local app notifications (request access to Sounds and Banner notifications)
- Convert app to AppKit from SwiftUI (In progress)
- Convert app to Objective-C from Swift (Soon ™️)
- Any contributions should be owned by the author
- Any contributions made should not be built using Generative AI, or other AI platforms or systems (Copilot will promptly be denied all submissions to this repo)
- Duplicate Issues and PRs will be closed, referencing the original Issue or PR that it links back to
- Please feel free to fork and modify this repo to make it your own - this app is released under a GPLv2.0 License at this time
Please note that at this time, the main focus is to allow users to use this app for personal productivity use cases. This app does not have any intention of being released at-cost to any user for any reason at this time. This license allows others to fork, modify, redistribute, and commercialize future editions of this app as long as the app (and all future modifications) remain source-available to all users and non-users of the product.