X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=lib%2Fagent%2Fproject-st.go;h=c4e8fce36d1be5cd58abba329b92424686f98ad9;hb=4d843d2bde236ec23810d0904dfb8aebbc53a37b;hp=dba5978cc77fe83df902b80144821548e4310821;hpb=be13167b869161b6e19dc3e94835245cdc7911e5;p=src%2Fxds%2Fxds-agent.git diff --git a/lib/agent/project-st.go b/lib/agent/project-st.go index dba5978..c4e8fce 100644 --- a/lib/agent/project-st.go +++ b/lib/agent/project-st.go @@ -1,6 +1,8 @@ package agent import ( + "fmt" + "github.com/iotbzh/xds-agent/lib/apiv1" st "github.com/iotbzh/xds-agent/lib/syncthing" ) @@ -56,8 +58,8 @@ func (p *STProject) Add(cfg apiv1.ProjectConfig) (*apiv1.ProjectConfig, error) { p.Log.Errorf("Project ID in XDSServer and local ST differ: %s != %s", svrPrj.ID, locPrj.ID) } - // Use Update function to setup remains fields - return p.UpdateProject(*svrPrj) + // Use Setup function to setup remains fields + return p.Setup(*svrPrj) } // Delete a project @@ -77,16 +79,16 @@ func (p *STProject) GetProject() *apiv1.ProjectConfig { return &prj } -// UpdateProject Update project config -func (p *STProject) UpdateProject(prj apiv1.ProjectConfig) (*apiv1.ProjectConfig, error) { +// Setup Setup local project config +func (p *STProject) Setup(prj apiv1.ProjectConfig) (*apiv1.ProjectConfig, error) { // Update folder p.folder = p.server.ProjectToFolder(prj) svrPrj := p.GetProject() // Register events to update folder status // Register to XDS Server events - p.server.EventOn("event:FolderStateChanged", p._cbServerFolderChanged) - if err := p.server.EventRegister("FolderStateChanged", svrPrj.ID); err != nil { + p.server.EventOn("event:folder-state-change", "", p._cbServerFolderChanged) + if err := p.server.EventRegister("folder-state-change", svrPrj.ID); err != nil { p.Log.Warningf("XDS Server EventRegister failed: %v", err) return svrPrj, err } @@ -103,6 +105,21 @@ func (p *STProject) UpdateProject(prj apiv1.ProjectConfig) (*apiv1.ProjectConfig return svrPrj, nil } +// Update Update some field of a project +func (p *STProject) Update(prj apiv1.ProjectConfig) (*apiv1.ProjectConfig, error) { + + if p.folder.ID != prj.ID { + return nil, fmt.Errorf("Invalid id") + } + + err := p.server.FolderUpdate(p.server.ProjectToFolder(prj), p.folder) + if err != nil { + return nil, err + } + + return p.GetProject(), nil +} + // GetServer Get the XdsServer that holds this project func (p *STProject) GetServer() *XdsServer { return p.server @@ -128,12 +145,12 @@ func (p *STProject) IsInSync() (bool, error) { // callback use to update (XDS Server) folder IsInSync status -func (p *STProject) _cbServerFolderChanged(data interface{}) { +func (p *STProject) _cbServerFolderChanged(pData interface{}, data interface{}) error { evt := data.(XdsEventFolderChange) // Only process event that concerns this project/folder ID if p.folder.ID != evt.Folder.ID { - return + return nil } if evt.Folder.IsInSync != p.folder.DataCloudSync.STSvrIsInSync || @@ -142,10 +159,11 @@ func (p *STProject) _cbServerFolderChanged(data interface{}) { p.folder.DataCloudSync.STSvrIsInSync = evt.Folder.IsInSync p.folder.DataCloudSync.STSvrStatus = evt.Folder.Status - if err := p.events.Emit(apiv1.EVTProjectChange, p.server.FolderToProject(*p.folder)); err != nil { - p.Log.Warningf("Cannot notify project change: %v", err) + if err := p.events.Emit(apiv1.EVTProjectChange, p.server.FolderToProject(*p.folder), ""); err != nil { + p.Log.Warningf("Cannot notify project change (from server): %v", err) } } + return nil } // callback use to update IsInSync status @@ -180,8 +198,8 @@ func (p *STProject) _cbLocalSTEvents(ev st.Event, data *st.EventsCBData) { p.folder.DataCloudSync.STLocIsInSync = inSync p.folder.DataCloudSync.STLocStatus = sts - if err := p.events.Emit(apiv1.EVTProjectChange, p.server.FolderToProject(*p.folder)); err != nil { - p.Log.Warningf("Cannot notify project change: %v", err) + if err := p.events.Emit(apiv1.EVTProjectChange, p.server.FolderToProject(*p.folder), ""); err != nil { + p.Log.Warningf("Cannot notify project change (local): %v", err) } } }