Merge pull request #36 from prashantgupta24/error-handling

🐛 fix multiple error window bug
This commit is contained in:
Prashant Gupta 2022-10-03 21:50:22 -07:00 committed by GitHub
commit 93224b122b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 19 additions and 3 deletions

View File

@ -9,7 +9,7 @@ on:
jobs:
build:
runs-on: ubuntu-latest
runs-on: macos-12
steps:
- uses: actions/checkout@v3

View File

@ -68,10 +68,11 @@ func (m *MouseMover) run(heartbeatCh chan *tracker.Heartbeat, activityTracker *t
} else {
didNotMoveCount := state.getDidNotMoveCount()
state.updateDidNotMoveCount(didNotMoveCount + 1)
msg := fmt.Sprintf("Mouse pointer cannot be moved at %v. Last moved at %v. Happened %v times. See README for details.",
state.updateLastErrorTime(time.Now())
msg := fmt.Sprintf("Mouse pointer cannot be moved at %v. Last moved at %v. Happened %v times. (Only notifies once every 24 hours.) See README for details.",
time.Now(), state.getLastMouseMovedTime(), state.getDidNotMoveCount())
logger.Errorf(msg)
if state.getDidNotMoveCount() >= 10 {
if state.getDidNotMoveCount() >= 10 && (time.Since(state.lastErrorTime).Hours() > 24) { //show only 1 error in a 24 hour window
go func() {
robotgo.ShowAlert("Error with Automatic Mouse Mover", msg)
}()

View File

@ -94,6 +94,18 @@ func (s *state) updateLastMouseMovedTime(time time.Time) {
s.lastMouseMovedTime = time
}
func (s *state) getLastErrorTime() time.Time {
s.mutex.RLock()
defer s.mutex.RUnlock()
return s.lastErrorTime
}
func (s *state) updateLastErrorTime(time time.Time) {
s.mutex.Lock()
defer s.mutex.Unlock()
s.lastErrorTime = time
}
func (s *state) getDidNotMoveCount() int {
s.mutex.RLock()
defer s.mutex.RUnlock()

View File

@ -166,6 +166,7 @@ func (suite *TestMover) TestMouseMoveFailure() {
assert.False(t, state.isSystemSleeping(), "machine should not be sleeping")
assert.True(t, time.Time.IsZero(state.getLastMouseMovedTime()), "should be default")
assert.Equal(t, state.getDidNotMoveCount(), 0, "should be 0")
assert.True(t, state.getLastErrorTime().IsZero(), "should be default")
heartbeatCh <- &tracker.Heartbeat{
WasAnyActivity: false,
@ -174,4 +175,5 @@ func (suite *TestMover) TestMouseMoveFailure() {
time.Sleep(time.Millisecond * 500) //wait for it to be registered
assert.True(t, time.Time.IsZero(state.getLastMouseMovedTime()), "should be default but is ", state.getLastMouseMovedTime())
assert.NotEqual(t, state.getDidNotMoveCount(), 0, "should not be 0")
assert.NotEqual(t, state.getLastErrorTime(), 0, "should not be 0")
}

View File

@ -19,6 +19,7 @@ type state struct {
isAppRunning bool
isSysSleeping bool
lastMouseMovedTime time.Time
lastErrorTime time.Time
didNotMoveCount int
override *override
}