mirror of https://github.com/qwc/backive.git
Make the code fit for using the unix socket and save settings
This commit is contained in:
parent
e9872668fa
commit
62350fe8b7
|
@ -1,8 +1,6 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"fyne.io/fyne/v2/app"
|
||||
|
||||
"github.com/qwc/backive"
|
||||
|
@ -11,22 +9,12 @@ import (
|
|||
|
||||
var (
|
||||
config backive.Configuration
|
||||
database backive.Database
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
database.Load()
|
||||
config.Load()
|
||||
backive.Init(config, database)
|
||||
app := app.NewWithID("Backive UI")
|
||||
backiveui.Init(app, nil, config, database)
|
||||
go func() {
|
||||
for {
|
||||
backiveui.NotificationRun()
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
}()
|
||||
|
||||
backiveui.Init(app, nil, config)
|
||||
app.Run()
|
||||
}
|
||||
|
|
5
go.mod
5
go.mod
|
@ -21,13 +21,11 @@ require (
|
|||
github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff // indirect
|
||||
github.com/gopherjs/gopherjs v0.0.0-20211219123610-ec9572f70e60 // indirect
|
||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||
github.com/hexdigest/gounit v0.0.0-20180817093830-f1874d3307cb // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/magiconair/properties v1.8.6 // indirect
|
||||
github.com/mitchellh/mapstructure v1.4.3 // indirect
|
||||
github.com/pelletier/go-toml v1.9.4 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 // indirect
|
||||
github.com/spf13/afero v1.8.2 // indirect
|
||||
github.com/spf13/cast v1.4.1 // indirect
|
||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||
|
@ -39,12 +37,9 @@ require (
|
|||
github.com/yuin/goldmark v1.4.0 // indirect
|
||||
golang.org/x/image v0.0.0-20200430140353-33d19683fad8 // indirect
|
||||
golang.org/x/mobile v0.0.0-20211207041440-4e6c2922fdee // indirect
|
||||
golang.org/x/mod v0.4.2 // indirect
|
||||
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect
|
||||
golang.org/x/sys v0.0.0-20220317061510-51cd9980dadf // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||
gopkg.in/ini.v1 v1.66.4 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
|
|
7
go.sum
7
go.sum
|
@ -264,8 +264,6 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p
|
|||
github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
|
||||
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||
github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
|
||||
github.com/hexdigest/gounit v0.0.0-20180817093830-f1874d3307cb h1:n/9MDDIvjvPY8fTNWozjyeN4UajDZX3R/X7OuEKgquw=
|
||||
github.com/hexdigest/gounit v0.0.0-20180817093830-f1874d3307cb/go.mod h1:MrMFZVYn+mNMWR7SsVxvf5L373FZy4+EDS3pBm7D9Kk=
|
||||
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
|
@ -369,8 +367,6 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
|
|||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||
github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 h1:Xuk8ma/ibJ1fOy4Ee11vHhUFHQNpHhrBneOCNHVXS5w=
|
||||
github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0/go.mod h1:7AwjWCpdPhkSmNAgUv5C7EJ4AbmjEB3r047r3DXWu3Y=
|
||||
github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
|
||||
github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
|
@ -488,7 +484,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
|
@ -708,12 +703,10 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|||
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098 h1:YuekqPskqwCCPM79F1X5Dhv4ezTCj+Ki1oNwiafxkA0=
|
||||
golang.org/x/tools v0.1.8-0.20211022200916-316ba0b74098/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
||||
|
|
|
@ -3,7 +3,10 @@ package ui
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
|
@ -13,6 +16,9 @@ import (
|
|||
"github.com/qwc/backive"
|
||||
)
|
||||
|
||||
var mockOsWriteFile = os.WriteFile
|
||||
var mockOsReadFile = os.ReadFile
|
||||
|
||||
type UISettings struct {
|
||||
hideUntil time.Time
|
||||
globalLevel int
|
||||
|
@ -22,19 +28,20 @@ var (
|
|||
app fyne.App
|
||||
window fyne.Window
|
||||
config backive.Configuration
|
||||
db backive.Database
|
||||
doNotShowUntil time.Time = time.Unix(0, 0)
|
||||
c net.Conn
|
||||
uisettings UISettings
|
||||
messageLevel int
|
||||
apphomedir string
|
||||
)
|
||||
|
||||
func Init(a fyne.App, w fyne.Window, conf backive.Configuration, d backive.Database) {
|
||||
func Init(a fyne.App, w fyne.Window, conf backive.Configuration) {
|
||||
app = a
|
||||
a.SetIcon(theme.FyneLogo())
|
||||
makeTray(app)
|
||||
config = conf
|
||||
db = d
|
||||
apphomedir, _ := os.UserHomeDir()
|
||||
apphomedir += string(os.PathSeparator) + ".config" + string(os.PathSeparator) + "backive" + string(os.PathSeparator) + "ui.json"
|
||||
go PollConnection()
|
||||
}
|
||||
|
||||
|
@ -111,15 +118,36 @@ func SetMessageLevel(level int) {
|
|||
} else {
|
||||
uisettings.globalLevel = level
|
||||
messageLevel = 0
|
||||
SaveSettings()
|
||||
}
|
||||
}
|
||||
|
||||
func SaveSettings() {
|
||||
// save internal settings to file in homedir
|
||||
jsonstr, merr := json.Marshal(uisettings)
|
||||
if merr != nil {
|
||||
panic(merr)
|
||||
}
|
||||
log.Printf("Writing database output to file: %s", jsonstr)
|
||||
saveDir, _ := path.Split(apphomedir)
|
||||
backive.CreateDirectoryIfNotExists(saveDir)
|
||||
err := mockOsWriteFile(apphomedir, []byte(jsonstr), 0644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func LoadSettings() {
|
||||
// load settings
|
||||
if _, err := os.Stat(apphomedir); err == nil {
|
||||
data, rferr := mockOsReadFile(apphomedir)
|
||||
if rferr != nil {
|
||||
panic(rferr)
|
||||
}
|
||||
json.Unmarshal(data, &uisettings)
|
||||
} /*else if os.IsNotExist(err) {
|
||||
// no data
|
||||
}*/
|
||||
}
|
||||
|
||||
func makeTray(app fyne.App) {
|
||||
|
@ -145,7 +173,7 @@ func makeTray(app fyne.App) {
|
|||
levelMenu.ChildMenu = fyne.NewMenu(
|
||||
"",
|
||||
fyne.NewMenuItem(
|
||||
"Only problems and tasks finished (resets to default with restart)",
|
||||
"Only problems and tasks finished (resets to previous with restart)",
|
||||
func() { SetMessageLevel(10) },
|
||||
),
|
||||
fyne.NewMenuItem(
|
||||
|
|
|
@ -8,6 +8,19 @@ import (
|
|||
"path"
|
||||
)
|
||||
|
||||
// MsgLevel type for setting the message level
|
||||
type MsgLevel int
|
||||
|
||||
// Constants for setting the MsgLevel
|
||||
const (
|
||||
ERROR MsgLevel = iota * 10
|
||||
FINISH
|
||||
REMIND
|
||||
INFO
|
||||
DEBUG
|
||||
)
|
||||
|
||||
// UIHandler internal data struct
|
||||
type UIHandler struct {
|
||||
ls net.Listener
|
||||
client net.Conn
|
||||
|
@ -18,6 +31,7 @@ var mockUIAccept = func(uh *UIHandler) (net.Conn, error) {
|
|||
return uh.ls.Accept()
|
||||
}
|
||||
|
||||
// Init initializing the UIHandler
|
||||
func (uh *UIHandler) Init(socketPath string) error {
|
||||
log.Println("Initializing UIHandler")
|
||||
var err error
|
||||
|
@ -30,6 +44,7 @@ func (uh *UIHandler) Init(socketPath string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Listen starts the Unix socket listener
|
||||
func (uh *UIHandler) Listen() {
|
||||
log.Println("Running UIHandler loop")
|
||||
func() {
|
||||
|
@ -43,6 +58,7 @@ func (uh *UIHandler) Listen() {
|
|||
}()
|
||||
}
|
||||
|
||||
// DisplayMessage is the method to use inside the service to display messages, with intended level
|
||||
func (uh *UIHandler) DisplayMessage(header string, message string, level int) error {
|
||||
if uh.client != nil {
|
||||
var data map[string]interface{}
|
||||
|
@ -56,8 +72,7 @@ func (uh *UIHandler) DisplayMessage(header string, message string, level int) er
|
|||
}
|
||||
uh.client.Write(b)
|
||||
return nil
|
||||
} else {
|
||||
}
|
||||
log.Println("No UI client available, msg did not get delivered.")
|
||||
return fmt.Errorf("No UI client available, msg not delivered.")
|
||||
}
|
||||
return fmt.Errorf("No UI client available, msg not delivered")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue