mirror of
https://github.com/darmiel/yaxc.git
synced 2024-09-20 14:56:14 +08:00
Updated watch
This commit is contained in:
parent
2f5caf3a1f
commit
e54fb8c079
|
@ -60,6 +60,4 @@ func init() {
|
|||
|
||||
pasteCmd.Flags().StringVarP(&pasteAnywherePath, "anywhere", "a", "", "Path (Anywhere)")
|
||||
pasteCmd.Flags().StringVarP(&pastePassphrase, "passphrase", "s", "", "Encryption Key")
|
||||
|
||||
regStrP(pasteCmd, "passphrase", "s", "", "Secret")
|
||||
}
|
||||
|
|
215
cmd/watch.go
215
cmd/watch.go
|
@ -34,25 +34,6 @@ var (
|
|||
watchPassphrase string
|
||||
)
|
||||
|
||||
// watchCmd represents the watch command
|
||||
var watchCmd = &cobra.Command{
|
||||
Use: "watch",
|
||||
Long: `Watch Clipboard`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
// start watcher
|
||||
// clipboard
|
||||
go watchClipboard(watchAnywherePath, watchPassphrase)
|
||||
go watchServer(watchAnywherePath, watchPassphrase)
|
||||
|
||||
log.Println("Started clipboard-watcher. Press CTRL-C to stop.")
|
||||
sc := make(chan os.Signal, 1)
|
||||
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-sc
|
||||
log.Println("Stopped.")
|
||||
},
|
||||
}
|
||||
|
||||
var (
|
||||
errors int
|
||||
|
||||
|
@ -63,6 +44,32 @@ var (
|
|||
errMu = sync.Mutex{}
|
||||
)
|
||||
|
||||
// watchCmd represents the watch command
|
||||
var watchCmd = &cobra.Command{
|
||||
Use: "watch",
|
||||
Long: `Watch Clipboard`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
d := make(chan int, 1)
|
||||
|
||||
// start watcher
|
||||
// clipboard
|
||||
go watchClipboard(watchAnywherePath, watchPassphrase, d)
|
||||
go watchServer(watchAnywherePath, watchPassphrase, d)
|
||||
|
||||
log.Println("Started clipboard-watcher. Press CTRL-C to stop.")
|
||||
sc := make(chan os.Signal, 1)
|
||||
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-sc
|
||||
|
||||
// stop watchers
|
||||
d <- 1
|
||||
d <- 1
|
||||
|
||||
log.Println("Stopped.")
|
||||
},
|
||||
}
|
||||
|
||||
func handleErr(err error, m string) {
|
||||
errMu.Lock()
|
||||
errors++
|
||||
|
@ -76,94 +83,114 @@ func handleErr(err error, m string) {
|
|||
log.Println("[err] ERROR reading clipboard:", err, errors, "/ 6")
|
||||
}
|
||||
|
||||
func watchClipboard(path, pass string) {
|
||||
func watchClipboard(path, pass string, done chan int) {
|
||||
a := api.API()
|
||||
t := time.NewTicker(100 * time.Millisecond)
|
||||
|
||||
for {
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
mu.Lock()
|
||||
select {
|
||||
case <-t.C:
|
||||
mu.Lock()
|
||||
|
||||
data, err := clipboard.ReadAll()
|
||||
if err != nil {
|
||||
data, err := clipboard.ReadAll()
|
||||
if err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "clipboard-read")
|
||||
continue
|
||||
}
|
||||
errors = 0
|
||||
|
||||
if lastClipboardData == data {
|
||||
mu.Unlock()
|
||||
continue
|
||||
}
|
||||
|
||||
// calculate new hash
|
||||
lastClipboardData = data
|
||||
lastClipboardHash = common.MD5Hash(data)
|
||||
|
||||
// check if server has current clipboard
|
||||
serverHash, err := a.GetHash(path)
|
||||
if err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "read-server-hash")
|
||||
continue
|
||||
}
|
||||
|
||||
if serverHash == lastClipboardHash {
|
||||
mu.Unlock()
|
||||
log.Println("[ ~ ] (rea) Server Hash == Local Hash")
|
||||
continue
|
||||
}
|
||||
|
||||
// update server hash
|
||||
if err := a.SetContent(path, pass, data); err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "set-server-content")
|
||||
continue
|
||||
}
|
||||
|
||||
log.Println("[ ok] Updated contents.")
|
||||
mu.Unlock()
|
||||
handleErr(err, "clipboard-read")
|
||||
continue
|
||||
break
|
||||
|
||||
case <-done:
|
||||
log.Println("[ ok] Stopping watch clipboard")
|
||||
return
|
||||
}
|
||||
errors = 0
|
||||
|
||||
if lastClipboardData == data {
|
||||
mu.Unlock()
|
||||
continue
|
||||
}
|
||||
|
||||
// calculate new hash
|
||||
lastClipboardData = data
|
||||
lastClipboardHash = common.MD5Hash(data)
|
||||
|
||||
// check if server has current clipboard
|
||||
serverHash, err := a.GetHash(path)
|
||||
if err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "read-server-hash")
|
||||
continue
|
||||
}
|
||||
|
||||
if serverHash == lastClipboardHash {
|
||||
mu.Unlock()
|
||||
log.Println("[ ~ ] (rea) Server Hash == Local Hash")
|
||||
continue
|
||||
}
|
||||
|
||||
// update server hash
|
||||
if err := a.SetContent(path, pass, data); err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "set-server-content")
|
||||
continue
|
||||
}
|
||||
|
||||
log.Println("[ ok] Updated contents.")
|
||||
mu.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
func watchServer(path, pass string) {
|
||||
func watchServer(path, pass string, done chan int) {
|
||||
a := api.API()
|
||||
t := time.NewTicker(1 * time.Second)
|
||||
|
||||
for {
|
||||
time.Sleep(1 * time.Second)
|
||||
mu.Lock()
|
||||
select {
|
||||
case <-t.C:
|
||||
|
||||
hash, err := a.GetHash(path)
|
||||
if err != nil {
|
||||
time.Sleep(1 * time.Second)
|
||||
mu.Lock()
|
||||
|
||||
hash, err := a.GetHash(path)
|
||||
if err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "read-server-hash")
|
||||
continue
|
||||
}
|
||||
|
||||
if hash == lastClipboardHash {
|
||||
mu.Unlock()
|
||||
continue
|
||||
}
|
||||
|
||||
// get data
|
||||
data, err := a.GetContent(path, pass)
|
||||
if err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "read-server-contents")
|
||||
continue
|
||||
}
|
||||
|
||||
log.Println("[ ~ ] Received new data:", data)
|
||||
|
||||
lastClipboardData = data
|
||||
lastClipboardHash = common.MD5Hash(data)
|
||||
|
||||
if err := clipboard.WriteAll(data); err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "write-clipboard")
|
||||
continue
|
||||
}
|
||||
|
||||
log.Println("[ ok] Wrote client content")
|
||||
mu.Unlock()
|
||||
handleErr(err, "read-server-hash")
|
||||
continue
|
||||
break
|
||||
|
||||
case <-done:
|
||||
log.Println("[ ok] Stopping watch server")
|
||||
return
|
||||
}
|
||||
|
||||
if hash == lastClipboardHash {
|
||||
mu.Unlock()
|
||||
continue
|
||||
}
|
||||
|
||||
// get data
|
||||
data, err := a.GetContent(path, pass)
|
||||
if err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "read-server-contents")
|
||||
continue
|
||||
}
|
||||
|
||||
log.Println("[ ~ ] Received new data:", data)
|
||||
|
||||
lastClipboardData = data
|
||||
lastClipboardHash = common.MD5Hash(data)
|
||||
|
||||
if err := clipboard.WriteAll(data); err != nil {
|
||||
mu.Unlock()
|
||||
handleErr(err, "write-clipboard")
|
||||
continue
|
||||
}
|
||||
|
||||
log.Println("[ ok] Wrote client content")
|
||||
mu.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
1
go.mod
1
go.mod
|
@ -3,6 +3,7 @@ module github.com/darmiel/yaxc
|
|||
go 1.16
|
||||
|
||||
require (
|
||||
github.com/atotto/clipboard v0.1.4 // indirect
|
||||
github.com/go-redis/redis/v8 v8.8.0
|
||||
github.com/gofiber/fiber/v2 v2.6.0
|
||||
github.com/imroc/req v0.3.0
|
||||
|
|
2
go.sum
2
go.sum
|
@ -21,6 +21,8 @@ github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu
|
|||
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
|
||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
|
||||
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||
|
|
|
@ -33,3 +33,12 @@ func (a *api) SetContent(path, passphrase, content string) (err error) {
|
|||
_, err = req.Post(a.ServerURL+"/"+path, content)
|
||||
return
|
||||
}
|
||||
|
||||
func (a *api) GetHash(path string) (res string, err error) {
|
||||
var resp *req.Resp
|
||||
if resp, err = req.Get(a.ServerURL + "/hash/" + path); err != nil {
|
||||
return
|
||||
}
|
||||
res = resp.String()
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue