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: jobs:
build: build:
runs-on: ubuntu-latest runs-on: macos-12
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3

View File

@ -68,10 +68,11 @@ func (m *MouseMover) run(heartbeatCh chan *tracker.Heartbeat, activityTracker *t
} else { } else {
didNotMoveCount := state.getDidNotMoveCount() didNotMoveCount := state.getDidNotMoveCount()
state.updateDidNotMoveCount(didNotMoveCount + 1) 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()) time.Now(), state.getLastMouseMovedTime(), state.getDidNotMoveCount())
logger.Errorf(msg) 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() { go func() {
robotgo.ShowAlert("Error with Automatic Mouse Mover", msg) robotgo.ShowAlert("Error with Automatic Mouse Mover", msg)
}() }()

View File

@ -94,6 +94,18 @@ func (s *state) updateLastMouseMovedTime(time time.Time) {
s.lastMouseMovedTime = 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 { func (s *state) getDidNotMoveCount() int {
s.mutex.RLock() s.mutex.RLock()
defer s.mutex.RUnlock() 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.False(t, state.isSystemSleeping(), "machine should not be sleeping")
assert.True(t, time.Time.IsZero(state.getLastMouseMovedTime()), "should be default") assert.True(t, time.Time.IsZero(state.getLastMouseMovedTime()), "should be default")
assert.Equal(t, state.getDidNotMoveCount(), 0, "should be 0") assert.Equal(t, state.getDidNotMoveCount(), 0, "should be 0")
assert.True(t, state.getLastErrorTime().IsZero(), "should be default")
heartbeatCh <- &tracker.Heartbeat{ heartbeatCh <- &tracker.Heartbeat{
WasAnyActivity: false, WasAnyActivity: false,
@ -174,4 +175,5 @@ func (suite *TestMover) TestMouseMoveFailure() {
time.Sleep(time.Millisecond * 500) //wait for it to be registered 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.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.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 isAppRunning bool
isSysSleeping bool isSysSleeping bool
lastMouseMovedTime time.Time lastMouseMovedTime time.Time
lastErrorTime time.Time
didNotMoveCount int didNotMoveCount int
override *override override *override
} }