Skip to content

Releases: gabrielzschmitz/Tomato.C

v1.0.3

Choose a tag to compare

@gabrielzschmitz gabrielzschmitz released this 19 Jul 14:37

Tomato.C v1.0.3

Patch release fixing session duration calculations to include short and long
breaks, deduplicating history log records for accurate statistics, and adding
comprehensive unit tests for edge-case handling of the history subsystem.

What's fixed/changed

  • Accurate session duration — HistSessionsForDay and GetPomodoroHistoryDay
    now compute duration via the pomodoro formula (cycles × work + (cycles−1) × short + long) instead of relying on current_step_time or total_elapsed.
    This gives the correct planned session length including all breaks,
    regardless of how the session ended
  • History overview matching per-day display — createPomodoroHistoryStats
    (used by tomato -h) now counts total session time including pauses instead
    of work-only minutes, making the overview consistent with the per-day
    breakdown
  • TUI history statistics no longer overcounts — the statistics dialog
    (CreateHistoryStatsDialog) deduplicates log records by session_index and
    uses the formula for focus time instead of summing current_step_time / 60
    across every per-minute record, which was inflating session count and focus
    minutes by 145× per session
  • Day history dialog shows real end time — end times are now read from
    session_start_time + total_elapsed (the actual wall-clock end of the
    session), not derived from start_time + formula_duration. Skipped sessions
    correctly display their real (instantaneous) end time
  • Session row numbering is now per-day sequential — history dialogs and tomato -h today number sessions 1, 2, 3… per day instead of showing the global
    session_index, which could start at arbitrary numbers like #8
  • Thread-safe time functions — localtime_r replaces non-reentrant localtime
    in all history display functions
  • Session count in -h today — fixed a bug where sessions existed but the
    output incorrectly showed "No pomodoro history found."
  • 8 new unit tests for HistSessionsForDay — covering skipped sessions
    (endTime == startTime), multi-record deduplication, formula-based duration,
    end-time from total_elapsed, uncompleted sessions (duration 0), same-day
    multiple sessions, and day filtering

Full changelog: CHANGELOG.md


To update, rebuild from source with ./build.sh --install. See the
README for details.

v1.0.2

Choose a tag to compare

@gabrielzschmitz gabrielzschmitz released this 18 Jul 20:08

Tomato.C v1.0.2

Patch release adding default static frame support for sprite
animations, pre-loading all three icon sets at startup for instant
switching, and fixing rendering of notes and page transitions when
animations are disabled.

What's fixed/changed

  • Default static frame support — Rollfilm now has a
    default_frame field parsed from an optional /Df suffix on
    sprite header lines. When animations are not active (e.g.
    !ANIMATIONS), the renderer seeks to this frame for a stable
    static display instead of cycling through all frames
  • Multi-format icon switching — All three icon types (nerd-icons,
    emojis, ascii) are parsed at initialization into a 2D array
    icon_animations[MAX_ICON_TYPES][MAX_ANIMATIONS], with
    app->animations as a pointer to the active set. This
    eliminates file I/O at switch time and makes icon changes update
    the display immediately via LEFT/RIGHT/SPACE in the preferences
    menu, not just after closing the select sub-dialog
  • Default static frame indices defined for all scenes — every
    .asc sprite file across all scenes (continue, help, longpause,
    mainmenu, notes, notes_transition, shortpause, worktime) and all
    three icon types now specifies a default frame via /Df for
    consistent non-animated presentation
  • Notes rendering with !ANIMATIONS — the notes scene no longer
    skips renderNotesScene in the non-animated code path; the page
    indicator and animation panel now render correctly without
    animations enabled
  • Page transitions with !ANIMATIONSUpdateNotes now
    completes transition state (clearing transitioning, applying
    the target page) even when animations are disabled, preventing
    the page advancement from getting stuck

Full changelog: CHANGELOG.md


To update, rebuild from source with ./build.sh --install. See the
README for details.

v1.0.1

Choose a tag to compare

@gabrielzschmitz gabrielzschmitz released this 17 Jul 20:43

Tomato.C v1.0.1

Patch release fixing the ErrorCode 8 crash when running outside the project
directory and introducing $DATADIR token expansion for portable TOML
configuration files.

What's fixed/changed

  • Fix use-after-free in config loading — notification audio_path and noise
    sound_path values read from TOML config files were stored as dangling
    pointers after toml_free() invalidated the parser's string table, causing
    InitApp() to read corrupted memory and fail with ErrorCode 8 when running
    outside the project directory
  • $DATADIR token expansion — TOML config values for audio_path, sound_path, and
    logging paths now support the $DATADIR token, resolved at load time to the
    compile-time DATADIR path, making config files portable across installation
    prefixes and working directories
  • Updated sample_config.toml — all hardcoded audio_path and sound_path values
    replaced with $DATADIR/sounds/... tokens to prevent path breakage

Full changelog: CHANGELOG.md


To update, rebuild from source with sudo ./build.sh --install. See the
README for details.

v1.0.0

Choose a tag to compare

@gabrielzschmitz gabrielzschmitz released this 17 Jul 15:41

Tomato.C v1.0.0

Initial release of Tomato.C, a terminal-based Pomodoro timer with a built-in notes editor, white noise player, and session history tracker.

What's included

  • Pomodoro timer - work/break cycles with configurable durations and 1–8 pomodoros per session, pause/resume/skip, auto-start prompts, and unfinished-session detection
  • Notes/task editor - Vim-like modal editing (NORMAL/INSERT/VISUAL), hierarchical notes with configurable nesting, pagination with animated transitions, undo/redo
  • Status bar - 11 modules (InputMode, RealTime, Scene, CurrentStatus, LineColumn, Progress, Streak, Date, Weekday, TerminalSize, Icons) configurable by position and icon set
  • White noise - Rain, Fire, Wind, Thunder tracks with per-track and master volume
  • Desktop notifications - libnotify (Linux) and sound alerts per stage
  • Session history - binary log, contribution graph, streak tracking, day-by-day detail, and IPC status via Unix socket (tomato -t)
  • Configuration - TOML-based (system + user), fully customizable keybindings per mode and scene, runtime preferences dialog, 3 icon sets (Nerd Fonts, Emojis, ASCII)
  • Build - POSIX make, Linux and macOS (Intel + ARM), CI via GitHub Actions
  • Testing - 10 unit suites + 5 integration suites

Full changelog: CHANGELOG.md


To install, build from source with the provided build.sh script. See the README for details.