Please fix this mess

This commit is contained in:
darmiel 2021-03-27 20:30:32 +01:00
parent e54fb8c079
commit a8e405fbe7
5 changed files with 50 additions and 25 deletions

View file

@ -44,7 +44,7 @@ func Execute() {
func init() {
cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.yaxc.yaml)")
regStr(rootCmd, "server", "", "URL of API-Server")
regStr(rootCmd, "server", "https://yaxc.d2a.io", "URL of API-Server")
}
// initConfig reads in config file and ENV variables if set.

View file

@ -22,6 +22,7 @@ import (
"log"
"os"
"os/signal"
"strings"
"sync"
"syscall"
"time"
@ -37,8 +38,9 @@ var (
var (
errors int
lastClipboardData string
lastClipboardHash string
lastClipboardData string
lastClipboardHash string
ignoreClipboardHash string
mu = sync.Mutex{}
errMu = sync.Mutex{}
@ -73,14 +75,8 @@ var watchCmd = &cobra.Command{
func handleErr(err error, m string) {
errMu.Lock()
errors++
e := errors
errMu.Unlock()
if e > 5 {
log.Fatalln("[err]", "(", m, ") :: Error-Limit exceeded:", errors, "::", err)
return
}
log.Println("[err] ERROR reading clipboard:", err, errors, "/ 6")
log.Println("[err]", "(", m, ") ::", errors, "errors:", err)
}
func watchClipboard(path, pass string, done chan int) {
@ -95,15 +91,18 @@ func watchClipboard(path, pass string, done chan int) {
data, err := clipboard.ReadAll()
if err != nil {
mu.Unlock()
handleErr(err, "clipboard-read")
continue
}
errors = 0
// strip data
data = strings.TrimSpace(data)
if lastClipboardData == data {
mu.Unlock()
continue
}
log.Println("[o] Changed!")
// calculate new hash
lastClipboardData = data
@ -111,17 +110,20 @@ func watchClipboard(path, pass string, done chan int) {
// check if server has current clipboard
serverHash, err := a.GetHash(path)
if err != nil {
mu.Unlock()
if err != nil && err != api.ErrErrResponse {
handleErr(err, "read-server-hash")
mu.Unlock()
continue
}
if serverHash == lastClipboardHash {
mu.Unlock()
log.Println("[ ~ ] (rea) Server Hash == Local Hash")
continue
if err != api.ErrErrResponse {
if serverHash == lastClipboardHash {
log.Println("[ ~ ] (rea) Server Hash == Local Hash")
mu.Unlock()
continue
}
}
ignoreClipboardHash = serverHash
// update server hash
if err := a.SetContent(path, pass, data); err != nil {
@ -154,12 +156,14 @@ func watchServer(path, pass string, done chan int) {
hash, err := a.GetHash(path)
if err != nil {
if err != api.ErrErrResponse {
handleErr(err, "read-server-hash")
}
mu.Unlock()
handleErr(err, "read-server-hash")
continue
}
if hash == lastClipboardHash {
if hash == lastClipboardHash || hash == ignoreClipboardHash {
mu.Unlock()
continue
}
@ -172,14 +176,22 @@ func watchServer(path, pass string, done chan int) {
continue
}
// empty
if strings.TrimSpace(data) == "" {
log.Println("[wrn] Received empty data")
mu.Unlock()
continue
}
log.Println("[ ~ ] Received new data:", data)
lastClipboardData = data
lastClipboardHash = common.MD5Hash(data)
if err := clipboard.WriteAll(data); err != nil {
mu.Unlock()
ignoreClipboardHash = hash
handleErr(err, "write-clipboard")
mu.Unlock()
continue
}

View file

@ -1,15 +1,26 @@
package api
import (
"errors"
"github.com/darmiel/yaxc/internal/common"
"github.com/imroc/req"
)
var (
ErrErrResponse = errors.New("invalid response")
)
func (a *api) GetContent(path, passphrase string) (res string, err error) {
var resp *req.Resp
if resp, err = req.Get(a.ServerURL + "/" + path); err != nil {
return
}
if resp.Response().StatusCode != 200 {
err = ErrErrResponse
return
}
res = resp.String()
// encryption
if passphrase != "" {
@ -39,6 +50,12 @@ func (a *api) GetHash(path string) (res string, err error) {
if resp, err = req.Get(a.ServerURL + "/hash/" + path); err != nil {
return
}
if resp.Response().StatusCode != 200 {
err = ErrErrResponse
return
}
res = resp.String()
return
}

View file

@ -8,10 +8,6 @@ type api struct {
func API() *api {
server := viper.GetString("server")
if server == "" {
server = "http://127.0.0.1:1332"
}
return &api{
ServerURL: server,
}

View file

@ -30,7 +30,7 @@ func (s *yAxCServer) Start() {
}
return false
},
Max: 30,
Max: 65,
Expiration: 60 * time.Second,
}))