mirror of
https://github.com/prashantgupta24/automatic-mouse-mover.git
synced 2024-12-22 16:34:11 +00:00
dev work
* adding system tray feature * updated glide lock * working prototype * added notify package * refactoring packages * moved stuff out * adding lock file * changing activity function * moving stuff around * refactoring
This commit is contained in:
parent
710a03c803
commit
0d1828505b
56
cmd/main.go
Normal file
56
cmd/main.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/getlantern/systray"
|
||||||
|
"github.com/getlantern/systray/example/icon"
|
||||||
|
"github.com/prashantgupta24/automatic-mouse-mover/src/mousemover"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
systray.Run(onReady, onExit)
|
||||||
|
}
|
||||||
|
|
||||||
|
func onReady() {
|
||||||
|
go func() {
|
||||||
|
systray.SetIcon(icon.Data)
|
||||||
|
systray.SetTitle("AMM")
|
||||||
|
ammStart := systray.AddMenuItem("Start", "start the app")
|
||||||
|
ammPause := systray.AddMenuItem("Pause", "pause the app")
|
||||||
|
systray.AddSeparator()
|
||||||
|
mQuit := systray.AddMenuItem("Quit", "Quit the whole app")
|
||||||
|
// Sets the icon of a menu item. Only available on Mac.
|
||||||
|
//mQuit.SetIcon(icon.Data)
|
||||||
|
var quit chan struct{}
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-ammStart.ClickedCh:
|
||||||
|
fmt.Println("starting the app")
|
||||||
|
quit = mousemover.Start()
|
||||||
|
//notify.SendMessage("starting the app")
|
||||||
|
|
||||||
|
case <-ammPause.ClickedCh:
|
||||||
|
fmt.Println("pausing the app")
|
||||||
|
if quit != nil {
|
||||||
|
quit <- struct{}{}
|
||||||
|
} else {
|
||||||
|
fmt.Println("app is not started")
|
||||||
|
}
|
||||||
|
|
||||||
|
case <-mQuit.ClickedCh:
|
||||||
|
fmt.Println("Requesting quit")
|
||||||
|
systray.Quit()
|
||||||
|
fmt.Println("Finished quitting")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
func onExit() {
|
||||||
|
// clean up here
|
||||||
|
fmt.Println("exiting")
|
||||||
|
|
||||||
|
}
|
39
glide.lock
generated
39
glide.lock
generated
@ -1,5 +1,5 @@
|
|||||||
hash: 2f203324a3ca8f6d3a3e571dc0393f79835b0ea6194850ddc6b03e9355dfddcb
|
hash: 0e9d554853b2c3ed23ba323715540d961c06465a1a125959a698d6162e17f91d
|
||||||
updated: 2019-03-07T18:33:39.501851-08:00
|
updated: 2019-03-13T16:48:18.629713-07:00
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/BurntSushi/xgb
|
- name: github.com/BurntSushi/xgb
|
||||||
version: 27f122750802c950b2c869a5b63dafcf590ced95
|
version: 27f122750802c950b2c869a5b63dafcf590ced95
|
||||||
@ -13,22 +13,49 @@ imports:
|
|||||||
- ewmh
|
- ewmh
|
||||||
- xevent
|
- xevent
|
||||||
- xprop
|
- xprop
|
||||||
|
- name: github.com/deckarep/gosx-notifier
|
||||||
|
version: e127226297fb751aa3b582db5e92361fcbfc5a6c
|
||||||
|
- name: github.com/getlantern/context
|
||||||
|
version: c447772a6520c1a3ae6294a7df725ee08230f14e
|
||||||
|
- name: github.com/getlantern/errors
|
||||||
|
version: e24b7f4ff7c70be59bbefca6b7695d68cda8b399
|
||||||
|
- name: github.com/getlantern/golog
|
||||||
|
version: cca714f7feb5df8e455f409b549d384441ac4578
|
||||||
|
- name: github.com/getlantern/hex
|
||||||
|
version: 083fba3033ad473db3dd31c9bb368473d37581a7
|
||||||
|
- name: github.com/getlantern/hidden
|
||||||
|
version: d52a649ab33af200943bb599898dbdcfdbc94cb7
|
||||||
|
- name: github.com/getlantern/ops
|
||||||
|
version: 37353306c90844c8e0591956f56611f46299d202
|
||||||
|
- name: github.com/getlantern/systray
|
||||||
|
version: 26d5b920200dbc1869c4bfde4571497082f83caa
|
||||||
|
subpackages:
|
||||||
|
- example/icon
|
||||||
- name: github.com/go-ole/go-ole
|
- name: github.com/go-ole/go-ole
|
||||||
version: 97b6244175ae18ea6eef668034fd6565847501c9
|
version: 97b6244175ae18ea6eef668034fd6565847501c9
|
||||||
subpackages:
|
subpackages:
|
||||||
- oleutil
|
- oleutil
|
||||||
|
- name: github.com/go-stack/stack
|
||||||
|
version: 2fee6af1a9795aafbe0253a0cfbdf668e1fb8a9a
|
||||||
- name: github.com/go-vgo/robotgo
|
- name: github.com/go-vgo/robotgo
|
||||||
version: 7e017b4cb4d39e6af9cad664c075739fe9cc76fd
|
version: 193b4935d4b146c729d763c2c59a0d3e7f3cee8a
|
||||||
subpackages:
|
subpackages:
|
||||||
- clipboard
|
- clipboard
|
||||||
- name: github.com/lxn/win
|
- name: github.com/lxn/win
|
||||||
version: e90c084872a829e2193ded9dbdb9a0180ddcfac0
|
version: 0040366d745006bbf7528ac96de2de375846aa79
|
||||||
- name: github.com/otiai10/gosseract
|
- name: github.com/otiai10/gosseract
|
||||||
version: ca64adaa320dc563d0966d58d3811512cb3362dc
|
version: ca64adaa320dc563d0966d58d3811512cb3362dc
|
||||||
|
- name: github.com/oxtoacart/bpool
|
||||||
|
version: 8c4636f812cc8920c26e2002b988c878b1fd6f5e
|
||||||
|
- name: github.com/prashantgupta24/activity-tracker
|
||||||
|
version: d567f73735304c333bba0a151cf4aca8602c1ae2
|
||||||
|
subpackages:
|
||||||
|
- src/activity
|
||||||
|
- src/mouse
|
||||||
- name: github.com/robotn/gohook
|
- name: github.com/robotn/gohook
|
||||||
version: bbbbefb5ff8541a05870596ea081ad8581b5879f
|
version: bbbbefb5ff8541a05870596ea081ad8581b5879f
|
||||||
- name: github.com/shirou/gopsutil
|
- name: github.com/shirou/gopsutil
|
||||||
version: 27ec6a0789cefd42d1aa3ea7455b48fce7a401db
|
version: ebc97eefea9b062f9f1624c042c98f196fc90248
|
||||||
subpackages:
|
subpackages:
|
||||||
- cpu
|
- cpu
|
||||||
- host
|
- host
|
||||||
@ -47,7 +74,7 @@ imports:
|
|||||||
subpackages:
|
subpackages:
|
||||||
- bmp
|
- bmp
|
||||||
- name: golang.org/x/sys
|
- name: golang.org/x/sys
|
||||||
version: 1c9583448a9c3aa0f9a6a5241bf73c0bd8aafded
|
version: fead79001313d15903fb4605b4a1b781532cd93e
|
||||||
subpackages:
|
subpackages:
|
||||||
- unix
|
- unix
|
||||||
- windows
|
- windows
|
||||||
|
13
glide.yaml
13
glide.yaml
@ -1,4 +1,13 @@
|
|||||||
package: .
|
package: github.com/prashantgupta24/automatic-mouse-mover
|
||||||
import:
|
import:
|
||||||
|
- package: github.com/deckarep/gosx-notifier
|
||||||
|
- package: github.com/getlantern/systray
|
||||||
|
subpackages:
|
||||||
|
- example/icon
|
||||||
- package: github.com/go-vgo/robotgo
|
- package: github.com/go-vgo/robotgo
|
||||||
version: ~0.70.0
|
version: ^0.80.0
|
||||||
|
- package: github.com/prashantgupta24/activity-tracker
|
||||||
|
version: ^0.0.1
|
||||||
|
subpackages:
|
||||||
|
- src/activity
|
||||||
|
- src/mouse
|
||||||
|
@ -1,99 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/go-vgo/robotgo"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
timeToCheck = 3
|
|
||||||
)
|
|
||||||
|
|
||||||
type mousePos struct {
|
|
||||||
mouseX int
|
|
||||||
mouseY int
|
|
||||||
}
|
|
||||||
|
|
||||||
func moveMouse(comm chan struct{}, quit chan struct{}) {
|
|
||||||
ticker := time.NewTicker(time.Second * timeToCheck)
|
|
||||||
isIdle := true
|
|
||||||
movePixel := 10
|
|
||||||
lastMousePos := getMousePos()
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-ticker.C:
|
|
||||||
fmt.Println("ticked : ", isIdle)
|
|
||||||
currentMousePos := getMousePos()
|
|
||||||
if isIdle && isPointerIdle(currentMousePos, lastMousePos) {
|
|
||||||
fmt.Println("moving mouse")
|
|
||||||
nextMouseMov := &mousePos{
|
|
||||||
mouseX: currentMousePos.mouseX + movePixel,
|
|
||||||
mouseY: currentMousePos.mouseY + movePixel,
|
|
||||||
}
|
|
||||||
robotgo.Move(nextMouseMov.mouseX, nextMouseMov.mouseY)
|
|
||||||
lastMousePos = nextMouseMov
|
|
||||||
} else {
|
|
||||||
lastMousePos = currentMousePos
|
|
||||||
}
|
|
||||||
isIdle = true
|
|
||||||
movePixel *= -1
|
|
||||||
case <-comm:
|
|
||||||
isIdle = false
|
|
||||||
//fmt.Println("val received: ", isIdle)
|
|
||||||
case <-quit:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func isPointerIdle(currentMousePos, lastMousePos *mousePos) bool {
|
|
||||||
fmt.Println("current : ", currentMousePos)
|
|
||||||
fmt.Println("last : ", lastMousePos)
|
|
||||||
|
|
||||||
if currentMousePos.mouseX == lastMousePos.mouseX &&
|
|
||||||
currentMousePos.mouseY == lastMousePos.mouseY {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func getMousePos() *mousePos {
|
|
||||||
x, y := robotgo.GetMousePos()
|
|
||||||
return &mousePos{
|
|
||||||
mouseX: x,
|
|
||||||
mouseY: y,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func isMouseClicked(comm chan struct{}) {
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
mleft := robotgo.AddEvent("mleft")
|
|
||||||
if mleft == 0 {
|
|
||||||
fmt.Println("mleft clicked")
|
|
||||||
time.Sleep(100 * time.Millisecond)
|
|
||||||
comm <- struct{}{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
mright := robotgo.AddEvent("mright")
|
|
||||||
if mright == 0 {
|
|
||||||
fmt.Println("mright clicked")
|
|
||||||
time.Sleep(100 * time.Millisecond)
|
|
||||||
comm <- struct{}{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
comm := make(chan struct{})
|
|
||||||
quit := make(chan struct{})
|
|
||||||
go isMouseClicked(comm)
|
|
||||||
moveMouse(comm, quit)
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
package main
|
package mousemover
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
44
src/mousemover/mouseMover.go
Normal file
44
src/mousemover/mouseMover.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package mousemover
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-vgo/robotgo"
|
||||||
|
"github.com/prashantgupta24/activity-tracker/src/activity"
|
||||||
|
"github.com/prashantgupta24/activity-tracker/src/mouse"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Start() (quit chan struct{}) {
|
||||||
|
quit = make(chan struct{})
|
||||||
|
|
||||||
|
activityTracker := &activity.ActivityTracker{
|
||||||
|
TimeToCheck: 5,
|
||||||
|
}
|
||||||
|
|
||||||
|
heartbeatCh, quitActivityTracker := activityTracker.Start()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
movePixel := 10
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case heartbeat := <-heartbeatCh:
|
||||||
|
if !heartbeat.IsActivity {
|
||||||
|
currentMousePos := mouse.GetPosition()
|
||||||
|
fmt.Println("moving mouse at : ", time.Now())
|
||||||
|
nextMouseMov := &mouse.Position{
|
||||||
|
MouseX: currentMousePos.MouseX + movePixel,
|
||||||
|
MouseY: currentMousePos.MouseY + movePixel,
|
||||||
|
}
|
||||||
|
robotgo.Move(nextMouseMov.MouseX, nextMouseMov.MouseY)
|
||||||
|
movePixel *= -1
|
||||||
|
}
|
||||||
|
case <-quit:
|
||||||
|
fmt.Println("stopping mouse mover")
|
||||||
|
quitActivityTracker <- struct{}{}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return quit
|
||||||
|
}
|
16
src/notify/notify.go
Normal file
16
src/notify/notify.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package notify
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
gosxnotifier "github.com/deckarep/gosx-notifier"
|
||||||
|
)
|
||||||
|
|
||||||
|
//SendMessage to OSX notification centre
|
||||||
|
func SendMessage(msg string) {
|
||||||
|
note := gosxnotifier.NewNotification(msg)
|
||||||
|
err := note.Push()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("could not send notification")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user