diff --git a/clip/totp.go b/clip/totp.go index ae83968..9f9ec84 100644 --- a/clip/totp.go +++ b/clip/totp.go @@ -32,6 +32,13 @@ func GenTOTP(secret string, time time.Time, forSteam bool) (string, error) { // Set oneTime to -1 for a one-time (non-continuous) TOTP copy. // For oneTime mode, this function can be used normally (not as a goroutine). func TOTPCopier(secret string, oneTime int, errorChan chan<- error, done <-chan bool) error { + var writeErrorChan func(err error) + if errorChan != nil { + writeErrorChan = func(err error) { errorChan <- err } + } else { + writeErrorChan = func(err error) {} + } + var forSteam bool if strings.HasPrefix(secret, "steam@") { secret = secret[6:] @@ -42,16 +49,16 @@ func TOTPCopier(secret string, oneTime int, errorChan chan<- error, done <-chan currentTime := time.Now() token, err := GenTOTP(secret, currentTime, forSteam) if err != nil { - errorChan <- err + writeErrorChan(err) return err // return for when not used as goroutine; should exit on error regardless } err = CopyString(true, token) if err != nil { - errorChan <- err + writeErrorChan(err) return err // return for when not used as goroutine; should exit on error regardless } if oneTime != -1 { - errorChan <- nil + writeErrorChan(err) time.Sleep(time.Duration(30-(currentTime.Second()%30)) * time.Second) } else { return nil @@ -60,7 +67,7 @@ func TOTPCopier(secret string, oneTime int, errorChan chan<- error, done <-chan // exit after sleep if indicated (will not update clipboard again) select { case <-done: - errorChan <- nil + writeErrorChan(nil) return nil default: }