45 Commits

Author SHA1 Message Date
Jens Krause
3f4acec9f5
feat(args): parse countdown by given time (past or future) (#112)
* feat(args): parse `countdown` by time

* fix lint

No `Default` for `AppTime` needed...

* app: pass `countdown_until` down

* fix `parse_duration_by_time` and `parse_duration`

to handle different formats they support

* fix(countdown): percentage panics

`Duration::ZERO` needs to be considered

* `DirectedDuration`

* fix comment

* rename arg: `countdown-target`

* `ss`->`mm`, fix formats, update README

* alias `--ct`
2025-10-01 12:40:27 +02:00
Jens Krause
901cf69472
feat(screen): LocalTime (#90) 2025-08-30 21:48:56 +02:00
Jens Krause
c494f0e829
refactor(footer): AppTimeFormat data handling (#89)
- Extract local state of `app_time_format` from `footer` to have it globally available
- Add a deserialization fallback for deprecated `AppTimeFormat::Hidden`
- Persist `footer_app_time` toggle state
2025-08-27 19:44:02 +02:00
Jens Krause
bfa40fd8f1
Rust 1.88.0 (#85)
* Rust 1.88.0

* nix flake update

* cargo upgrade

* lint

all `uninlined_format_args` related
@see https://rust-lang.github.io/rust-clippy/master/index.html#uninlined_format_args
2025-06-28 11:39:22 +02:00
Jens Krause
44af71c01c
(args) set content by given duration (#81) 2025-05-12 12:14:27 +02:00
Jens Krause
52ed8267be
(pomodoro/countdown) Change initial value (#79)
- While editing, an user can apply changes as a new initial value (pomodoro/countdown only).
- New keybinding: `[^s]save initial value` 
- Update keybinding: `[s]ave changes` (instead of `[Enter]`)
- Refactor event handling to re-structure `edit` / `non-edit` modes.
- Refactor footer to reflect latest keybindings
2025-05-02 12:39:26 +02:00
Jens Krause
e6291a3131
Update keybindings (#76)
* (pomodoro) reset both clocks at once

* quit app by pressing `q` only

* (countdown) enter/esc keybindings

* (timer) enter/esc keybindings

* (pomodoro) enter/esc keybindings

* update footer label

* fix(coundown): don't reset elapsed clock

while skipping editing changes

* fix(clock): order of actions matters for ESC

handling. Set `pause` instead of `initial` mode while toggeling back.

* fix(timer): order of actions matters (ESC key)

* (footer) update order, lowercase standard keys
2025-04-30 11:11:33 +02:00
Jens Krause
90d9988e7a
(pomodoro) count WORK rounds (#75) 2025-04-29 16:20:02 +02:00
Jens Krause
d9399eafc9
fix(countdown): Reset MET if countdown is set by cli arguments (#71)
* fix: Reset MET if countdown is set by args

* update CHANGELOG
2025-03-03 12:21:17 +01:00
Jens Krause
e95ecb9e9c
feat(notification): Animate (blink) clock entering done mode (#65)
Optional.
2025-02-05 19:29:56 +01:00
Jens Krause
886deb3311
fix(notification): remove callbacks in favour of mpsc messaging (#64) 2025-02-05 13:35:24 +01:00
Jens Krause
7ff167368d
--features sound (#63)
to enable `sound` notification for local builds only. Needed to avoid
endless issues by building the app for different platforms. Sound
support can be hard.
2025-02-04 17:39:50 +01:00
Jens Krause
a54b1b409a
feat(clock): sound notification (experimental) (#62) 2025-02-04 17:28:41 +01:00
Jens Krause
8f50bc5fc6
AppEvent (#61)
Extend `events` to provide a `mpsc` channel to send `AppEvent`'s from
anywhere in the app straight to the `App`.
2025-02-04 15:05:02 +01:00
Jens Krause
d3c436da0b
feat: native desktop notifications (experimental) (#59)
* desktop notification by entering `Mode::DONE` for `countdown` and `pomodoro`

* remove redundant `on_done_called` check

* remove build warning (release only)

* log notification errors

* cli arg to enable desktop notifications

* persistant notification settings

* ctrl shortcut

* update changelog

* max timer notification
2025-01-28 19:28:34 +01:00
Jens Krause
6d2bf5ac09
Edit countdown by local time (#49) 2025-01-13 18:44:56 +01:00
Jens Krause
9ea9f88266
feat(countdown): persist elapsed time (#46) 2025-01-10 16:01:03 +01:00
Jens Krause
c8af76c9e5
feat(countdown): rocket countdown (#45) 2025-01-08 18:52:18 +01:00
Jens Krause
468b4a5abf
simplify style settings, improve naming (#44)
* simplify style settings by passing `style` directly to Widgets. No need to store it in `state` of widgets.
* remove unneeded things
* naming (state vs. widgets)
2025-01-07 19:02:57 +01:00
Jens Krause
94bdeeab11
feat(footer): show local time (#42) 2025-01-06 18:31:22 +01:00
Jens K.
a4f8885eb1
feat(cli): arg --menu (#37)
- Add `--menu` to args
- Add `--version` to args
- Change default behavior: At a first run of the app, the menu will be shown by default (similar to what @tschinz suggested in #33). However, if an user hides the menu later and closes the app, the menu will be hidden again with a next start. Just because the app restores the last app state.
2025-01-01 15:13:10 +01:00
jk
7206714f96
extract Content into common 2024-12-28 13:18:43 +01:00
Jens K.
9bfe4e528b
extract clock elements (#28)
Few tests. Extract `Style` to `common`.
2024-12-28 12:32:27 +01:00
jk
3ea715f83b
fix: initial values via args 2024-12-26 20:03:55 +01:00
jk
ed7c17caf9
DurationEx 2024-12-26 15:14:41 +01:00
Jens K.
ae1a48e5e8
Progressbar (#25)
* Progressbar
* header
* label
* border
2024-12-25 12:21:36 +01:00
Jens K.
d86f8905f2
Cleanup (#23)
* simplify footer

* improve: &T vs. &mut T

* remove header

* adjust table space

* update README
2024-12-23 14:24:15 +01:00
Jens K.
98ee2bc16b
menu: appearance + controls (#22) 2024-12-23 10:39:53 +01:00
Jens K.
c9b444e91a
Persist app state (#21) 2024-12-22 18:56:55 +01:00
Jens K.
2cf411e2ae
more args: mode, style, decis (#20) 2024-12-21 18:00:46 +01:00
Jens K.
d705f20e2d
deciseconds (#19) 2024-12-21 16:50:26 +01:00
Jens K.
ab10a38901
clock style (#18) 2024-12-18 13:51:22 +01:00
Jens K.
b7d6a6c139
Args (#14) 2024-12-14 18:24:51 +01:00
Jens K.
6c7bedabe3
Pipe events into subviews (#13)
and match only unhandled events afterwards
2024-12-12 18:43:12 +01:00
Jens K.
64300631c7
Editable Countdown (#12)
- Editable `Countdown`
- ASCII Symbols for `Clock` states
- Update labels
2024-12-12 14:16:05 +01:00
Jens K.
4c38ac368e
Pomodoro (editable) (#11) 2024-12-12 09:00:36 +01:00
jk
04d3dced63
src/clock.rs -> src/widgets/clock.rs 2024-12-06 15:24:23 +01:00
Jens K.
929e453d85
ClockWidget (#10) 2024-12-05 17:25:09 +01:00
Jens K.
634884d483
Logging (#8)
- Add `Logger`, `Config`
- Back to `nixos-unstable`
- `nix flake update`
2024-12-04 13:29:58 +01:00
Jens K.
cbb6a60ee9
StatefulWidgets (#7)
* trait EventHandler
* StatefulWidget: AppWidget, CountdownWidget
* StatefulWidget: TimerWidget
2024-12-03 11:23:43 +01:00
Jens K.
4f66ea86d4
Clock<T> (#6) 2024-12-02 17:54:47 +01:00
Jens K.
2f587c97b5
Event handling (#5)
- Refactor `event` handling (heavily inspired by [crates-tui](https://github.com/ratatui/crates-tui/) via [Tui with Terminal and EventHandler](https://ratatui.rs/recipes/apps/terminal-and-event-handler/))
- Refactor widget structure
- Disable `nixos-unstable` temporarily
- Add `.rustfmt.toml`
2024-12-02 15:43:04 +01:00
Jens K.
3d0d55c8d8
rustfmt, clippy, gh actions, justfile, Default app (#4)
* `Default` app
* add zed settings
* add justfile
* flake: update devShell, ignore tests, add `just`
* update README
* gh actions: lint, format, tests. build
2024-11-29 15:49:55 +01:00
Jens K.
a9e573122d
footer (#3) 2024-11-28 21:57:01 +01:00
Jens K.
b1e9b027a2
standard layout (#2) 2024-11-28 16:02:01 +01:00