diff --git a/cmd/rpcfetch/apply.go b/cmd/rpcfetch/apply.go index 4ab24e0..c304c7a 100644 --- a/cmd/rpcfetch/apply.go +++ b/cmd/rpcfetch/apply.go @@ -98,6 +98,10 @@ func apply() { confLock.RUnlock() if nonce, err := retry(&act, s); err != nil { + if errors.Is(err, syscall.EINTR) || errors.Is(err, discord.ErrNonce) { + log.Printf("abandoned further attempts on current tick: %v", err) + return + } log.Fatalf("error setting activity: %s", err) } else { log.Printf("activity updated with nonce %s", nonce) @@ -109,20 +113,25 @@ var retryTicker = time.NewTicker(100 * time.Millisecond) func retry(act *discord.Activity, s *applyState) (nonce string, err error) { fyne.DoAndWait(func() { uiUpdateClientInfo(s) }) + i := 0 for range retryTicker.C { - nonce, err = d.SetActivity(act) - if err == nil { + if i == 5 { break } + nonce, err = d.SetActivity(act) + if err == nil { + fyne.DoAndWait(func() { uiSetFailureState(true) }) + break + } + i++ if errors.Is(err, syscall.EINTR) || errors.Is(err, discord.ErrNonce) { - log.Println("retrying in 100 milliseconds...") + log.Printf("retrying in 100 milliseconds...") } else { log.Printf("cannot set activity: %v", err) } fyne.DoAndWait(func() { uiSetFailureState(false) }) } - fyne.DoAndWait(func() { uiSetFailureState(true) }) return } diff --git a/cmd/rpcfetch/ui.go b/cmd/rpcfetch/ui.go index 3393f62..1e85e99 100644 --- a/cmd/rpcfetch/ui.go +++ b/cmd/rpcfetch/ui.go @@ -375,15 +375,11 @@ func ui() error { presetUp.SetIcon(theme.MoveUpIcon()) presetDown.SetIcon(theme.MoveDownIcon()) - go func() { - for range time.Tick(time.Second) { - fyne.DoAndWait(func() { statusTimer.SetText(time.Now().UTC().Sub(launchTime).Round(time.Second).String()) }) - } - }() - active.Store(true) go func() { for range time.Tick(1 * time.Second) { + fyne.DoAndWait(func() { statusTimer.SetText(time.Now().UTC().Sub(launchTime).Round(time.Second).String()) }) + if active.Load() { apply() }