Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(stopwatch): timer was not accurate #437

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

fuhrmannb
Copy link

Stopwatch does not track correctly time since update process time can be longer that tick time update.

This patch adds a start time with sT attribute to track time of stopwatch start.

Also adapt view to have accuracy matching the tick interval. To have directly the raw duration value, use Elapsed() method.

Issue: #237

Stopwatch does not track correctly time since update process time can be
longer that tick time update.

This patch adds a start time with `sT` attribute to track time of
stopwatch start.

Also adapt view to have accuracy matching the tick interval. To have
directly the raw duration value, use `Elapsed()` method.

Issue: charmbracelet#237
@fuhrmannb fuhrmannb force-pushed the stopwatch-precise-timer branch from 98f46b6 to 763f892 Compare November 18, 2023 14:32
Copy link
Member

@caarlos0 caarlos0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey, thanks for this!

just one comment regarding the variable name :)

@@ -46,6 +46,7 @@ type ResetMsg struct {
// Model for the stopwatch component.
type Model struct {
d time.Duration
sT time.Time
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i would name this start instead 🤔

Suggested change
sT time.Time
start time.Time

@@ -118,6 +119,12 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
if msg.ID != m.id {
return m, nil
}
if msg.running && !m.running {
m.sT = time.Now()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
m.sT = time.Now()
m.start = time.Now()

m.sT = time.Now()
}
if !msg.running && m.running {
m.d += time.Since(m.sT)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
m.d += time.Since(m.sT)
m.d += time.Since(m.start)

@@ -137,12 +143,15 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {

// Elapsed returns the time elapsed.
func (m Model) Elapsed() time.Duration {
if m.running {
return m.d + time.Since(m.sT)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return m.d + time.Since(m.sT)
return m.d + time.Since(m.start)

@caarlos0 caarlos0 added the bug Something isn't working label Aug 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants