forked from macdylan/sm2uploader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
localstorage.go
70 lines (61 loc) · 1.34 KB
/
localstorage.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
import (
"os"
"gopkg.in/yaml.v3"
)
type LocalStorage struct {
Printers []*Printer `yaml:"printers"`
savePath string
}
func NewLocalStorage(savePath string) *LocalStorage {
s := &LocalStorage{
Printers: []*Printer{},
savePath: savePath,
}
if b, err := os.ReadFile(savePath); err == nil {
yaml.Unmarshal(b, &s)
}
return s
}
// Add to add printers to LocalStorage
func (ls *LocalStorage) Add(printers ...*Printer) {
// Iterate over each printer
for _, p := range printers {
// Skip if printer ID is empty
if p.ID == "" {
continue
}
// Iterate over each printer in LocalStorage
for idx, x := range ls.Printers {
// If printer ID matches, update IP and Token if necessary
if x.ID == p.ID {
if x.IP != p.IP {
ls.Printers[idx].IP = p.IP
}
if p.Token != "" && x.Token != p.Token {
ls.Printers[idx].Token = p.Token
}
// Go to exists label
goto exists
}
}
// Append printer to LocalStorage
ls.Printers = append(ls.Printers, p)
// Label for when printer already exists
exists:
}
}
func (ls *LocalStorage) Save() (err error) {
if b, err := yaml.Marshal(ls); err == nil {
return os.WriteFile(ls.savePath, b, 0644)
}
return
}
func (ls *LocalStorage) Find(host string) *Printer {
for _, p := range ls.Printers {
if p.ID == host || p.IP == host {
return p
}
}
return nil
}