trigger editor
This commit is contained in:
@@ -116,6 +116,7 @@ func New(addr string) (lucifer3.Service, error) {
|
||||
Devices map[string]*uistate.Device `json:"devices"`
|
||||
Assignments map[uuid.UUID]*uistate.Assignment `json:"assignments"`
|
||||
Scripts map[string][]script.Line `json:"scripts"`
|
||||
Triggers map[uuid.UUID]*script.Trigger `json:"triggers"`
|
||||
Full *uistate.Data `json:"full,omitempty"`
|
||||
}
|
||||
|
||||
@@ -131,8 +132,10 @@ func New(addr string) (lucifer3.Service, error) {
|
||||
defer ws.Close()
|
||||
|
||||
svc.mu.Lock()
|
||||
err = ws.WriteJSON(ChangedPatch{Full: &svc.data})
|
||||
patch := ChangedPatch{Full: gentools.Ptr(svc.data.Copy())}
|
||||
svc.mu.Unlock()
|
||||
|
||||
err = ws.WriteJSON(patch)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -157,34 +160,44 @@ func New(addr string) (lucifer3.Service, error) {
|
||||
Devices: make(map[string]*uistate.Device),
|
||||
Assignments: make(map[uuid.UUID]*uistate.Assignment),
|
||||
Scripts: make(map[string][]script.Line),
|
||||
Triggers: make(map[uuid.UUID]*script.Trigger),
|
||||
Full: nil,
|
||||
}
|
||||
|
||||
svc.mu.Lock()
|
||||
data := svc.data.Copy()
|
||||
svc.mu.Unlock()
|
||||
|
||||
for _, patch := range patches {
|
||||
if patch.Device != nil {
|
||||
if patch.Device.Delete {
|
||||
statePatch.Devices[patch.Device.ID] = nil
|
||||
} else {
|
||||
statePatch.Devices[patch.Device.ID] = gentools.Ptr(svc.data.Devices[patch.Device.ID])
|
||||
statePatch.Devices[patch.Device.ID] = gentools.Ptr(data.Devices[patch.Device.ID])
|
||||
}
|
||||
}
|
||||
if patch.Assignment != nil {
|
||||
if patch.Assignment.Delete {
|
||||
statePatch.Assignments[patch.Assignment.ID] = nil
|
||||
} else {
|
||||
statePatch.Assignments[patch.Assignment.ID] = gentools.Ptr(svc.data.Assignments[patch.Assignment.ID])
|
||||
statePatch.Assignments[patch.Assignment.ID] = gentools.Ptr(data.Assignments[patch.Assignment.ID])
|
||||
}
|
||||
}
|
||||
if patch.Script != nil {
|
||||
if len(patch.Script.Lines) > 0 {
|
||||
statePatch.Scripts[patch.Script.Name] = svc.data.Scripts[patch.Script.Name]
|
||||
statePatch.Scripts[patch.Script.Name] = data.Scripts[patch.Script.Name]
|
||||
} else {
|
||||
statePatch.Scripts[patch.Script.Name] = nil
|
||||
}
|
||||
}
|
||||
if patch.Trigger != nil {
|
||||
if patch.Trigger.Delete {
|
||||
statePatch.Triggers[patch.Trigger.ID] = nil
|
||||
} else {
|
||||
statePatch.Triggers[patch.Trigger.ID] = gentools.Ptr(data.Triggers[patch.Trigger.ID])
|
||||
}
|
||||
}
|
||||
}
|
||||
svc.mu.Unlock()
|
||||
|
||||
err := ws.WriteJSON(statePatch)
|
||||
if err != nil {
|
||||
@@ -302,12 +315,15 @@ func (s *service) HandleEvent(bus *lucifer3.EventBus, event lucifer3.Event) {
|
||||
|
||||
func (s *service) addSub(ch chan uistate.Patch) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
s.subs = append(s.subs, ch)
|
||||
s.mu.Unlock()
|
||||
}
|
||||
|
||||
func (s *service) removeSub(ch chan uistate.Patch) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
s.subs = append([]chan uistate.Patch{}, s.subs...)
|
||||
for i, sub := range s.subs {
|
||||
if sub == ch {
|
||||
@@ -315,7 +331,6 @@ func (s *service) removeSub(ch chan uistate.Patch) {
|
||||
break
|
||||
}
|
||||
}
|
||||
s.mu.Unlock()
|
||||
}
|
||||
|
||||
type commandInput struct {
|
||||
|
||||
Reference in New Issue
Block a user