Add flag to stop re-parsing the user file when we already know its
contents
This commit is contained in:
parent
e489a12a28
commit
ed77634a50
@ -156,7 +156,7 @@ func (this *File) Has (key string) (bool, error) {
|
|||||||
func (this *File) Get (key string) (Value, error) {
|
func (this *File) Get (key string) (Value, error) {
|
||||||
if !KeyValid(key) { return nil, ErrMalformedKey }
|
if !KeyValid(key) { return nil, ErrMalformedKey }
|
||||||
if index, ok := this.keys[key]; ok {
|
if index, ok := this.keys[key]; ok {
|
||||||
if lin := this.lines[index].(entry); ok {
|
if lin, ok := this.lines[index].(entry); ok {
|
||||||
return lin.value, nil
|
return lin.value, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,14 +166,16 @@ func (this *File) Get (key string) (Value, error) {
|
|||||||
// Set sets a value. If the key is invalid, it returns ErrMalformedKey.
|
// Set sets a value. If the key is invalid, it returns ErrMalformedKey.
|
||||||
func (this *File) Set (key string, value Value) error {
|
func (this *File) Set (key string, value Value) error {
|
||||||
if !KeyValid(key) { return ErrMalformedKey }
|
if !KeyValid(key) { return ErrMalformedKey }
|
||||||
|
ent := entry {
|
||||||
|
key: key,
|
||||||
|
value: value,
|
||||||
|
}
|
||||||
if index, ok := this.keys[key]; ok {
|
if index, ok := this.keys[key]; ok {
|
||||||
ent := this.lines[index].(entry)
|
|
||||||
ent.value = value
|
|
||||||
this.lines[index] = ent
|
this.lines[index] = ent
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
this.keys[key] = len(this.lines)
|
this.keys[key] = len(this.lines)
|
||||||
this.lines = append(this.lines, value)
|
this.lines = append(this.lines, ent)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ type config struct {
|
|||||||
open bool
|
open bool
|
||||||
watcher *fsnotify.Watcher
|
watcher *fsnotify.Watcher
|
||||||
lock sync.RWMutex
|
lock sync.RWMutex
|
||||||
|
ignoreNextUserUpdate bool
|
||||||
|
|
||||||
paths struct {
|
paths struct {
|
||||||
user string
|
user string
|
||||||
@ -68,10 +69,13 @@ func (this *config) lockAndProcessEvent (event fsnotify.Event) {
|
|||||||
if _, ok := this.paths.watching[event.Name]; !ok { return }
|
if _, ok := this.paths.watching[event.Name]; !ok { return }
|
||||||
|
|
||||||
if event.Name == this.paths.user {
|
if event.Name == this.paths.user {
|
||||||
|
if !this.ignoreNextUserUpdate {
|
||||||
previousUser := this.data.user
|
previousUser := this.data.user
|
||||||
this.reloadUser()
|
this.reloadUser()
|
||||||
newUser := this.data.user
|
newUser := this.data.user
|
||||||
this.processUserDiff(newUser.Diff(previousUser))
|
this.processUserDiff(newUser.Diff(previousUser))
|
||||||
|
}
|
||||||
|
this.ignoreNextUserUpdate = false
|
||||||
} else {
|
} else {
|
||||||
index := slices.Index(this.paths.system, event.Name)
|
index := slices.Index(this.paths.system, event.Name)
|
||||||
if index > 0 {
|
if index > 0 {
|
||||||
@ -148,6 +152,7 @@ func (this *config) saveUser () error {
|
|||||||
defer file.Close()
|
defer file.Close()
|
||||||
_, err = this.data.user.WriteTo(file)
|
_, err = this.data.user.WriteTo(file)
|
||||||
if err != nil { return err }
|
if err != nil { return err }
|
||||||
|
this.ignoreNextUserUpdate = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,7 +267,10 @@ func (this *config) Set (key string, value Value) error {
|
|||||||
if this.data.user == nil { this.data.user = NewFile() }
|
if this.data.user == nil { this.data.user = NewFile() }
|
||||||
err := this.data.user.Set(key, value)
|
err := this.data.user.Set(key, value)
|
||||||
if err != nil { return err }
|
if err != nil { return err }
|
||||||
return this.saveUser()
|
err = this.saveUser()
|
||||||
|
if err != nil { return err }
|
||||||
|
this.broadcastChange(key)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *config) Reset (key string) error {
|
func (this *config) Reset (key string) error {
|
||||||
@ -271,7 +279,10 @@ func (this *config) Reset (key string) error {
|
|||||||
if this.data.user == nil { this.data.user = NewFile() }
|
if this.data.user == nil { this.data.user = NewFile() }
|
||||||
err := this.data.user.Reset(key)
|
err := this.data.user.Reset(key)
|
||||||
if err != nil { return err }
|
if err != nil { return err }
|
||||||
return this.saveUser()
|
err = this.saveUser()
|
||||||
|
if err != nil { return err }
|
||||||
|
this.broadcastChange(key)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *config) OnChange (callback func (string)) event.Cookie {
|
func (this *config) OnChange (callback func (string)) event.Cookie {
|
||||||
|
Loading…
Reference in New Issue
Block a user