/*
- * Copyright (C) 2017 "IoT.bzh"
+ * Copyright (C) 2017-2018 "IoT.bzh"
* Author Sebastien Douheret <sebastien@iot.bzh>
*
* Licensed under the Apache License, Version 2.0 (the "License");
package agent
import (
+ "encoding/json"
"fmt"
- st "github.com/iotbzh/xds-agent/lib/syncthing"
- "github.com/iotbzh/xds-agent/lib/xaapiv1"
- "github.com/iotbzh/xds-server/lib/xsapiv1"
+ st "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/syncthing"
+ "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/xaapiv1"
+ "gerrit.automotivelinux.org/gerrit/src/xds/xds-server.git/lib/xsapiv1"
)
// IPROJECT interface implementation for syncthing projects
// Register events to update folder status
// Register to XDS Server events
- 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)
+ if _, err := p.server.EventOn(xsapiv1.EVTFolderStateChange, "", p._cbServerFolderChanged); err != nil {
+ p.Log.Errorf("XDS Server EventOn '%s' failed: %v", xsapiv1.EVTFolderStateChange, err)
return svrPrj, err
}
// callback use to update (XDS Server) folder IsInSync status
func (p *STProject) _cbServerFolderChanged(pData interface{}, data interface{}) error {
- evt := data.(xsapiv1.EventMsg)
+ evt := xsapiv1.EventMsg{}
+ d, err := json.Marshal(data)
+ if err != nil {
+ p.Log.Errorf("Cannot marshal XDS Server event folder-change err=%v", err)
+ return err
+ }
+ if err = json.Unmarshal(d, &evt); err != nil {
+ p.Log.Errorf("Cannot unmarshal XDS Server event folder-change err=%v", err)
+ return err
+ }
+
+ fld, err := evt.DecodeFolderConfig()
+ if err != nil {
+ p.Log.Errorf("Cannot decode FolderChanged event: %v", data)
+ }
// Only process event that concerns this project/folder ID
- if p.folder.ID != evt.Folder.ID {
+ if p.folder.ID != fld.ID {
return nil
}
- if evt.Folder.IsInSync != p.folder.DataCloudSync.STSvrIsInSync ||
- evt.Folder.Status != p.folder.DataCloudSync.STSvrStatus {
+ if fld.IsInSync != p.folder.DataCloudSync.STSvrIsInSync ||
+ fld.Status != p.folder.DataCloudSync.STSvrStatus {
- p.folder.DataCloudSync.STSvrIsInSync = evt.Folder.IsInSync
- p.folder.DataCloudSync.STSvrStatus = evt.Folder.Status
+ p.folder.DataCloudSync.STSvrIsInSync = fld.IsInSync
+ p.folder.DataCloudSync.STSvrStatus = fld.Status
if err := p.events.Emit(xaapiv1.EVTProjectChange, p.server.FolderToProject(*p.folder), ""); err != nil {
p.Log.Warningf("Cannot notify project change (from server): %v", err)