Add folder synchronization status.
[src/xds/xds-server.git] / lib / folder / folder-pathmap.go
index 8711df2..f73f271 100644 (file)
@@ -7,29 +7,44 @@ import (
        "path/filepath"
 
        common "github.com/iotbzh/xds-common/golib"
+       "github.com/iotbzh/xds-server/lib/xdsconfig"
+       uuid "github.com/satori/go.uuid"
 )
 
 // IFOLDER interface implementation for native/path mapping folders
 
 // PathMap .
 type PathMap struct {
-       config FolderConfig
+       globalConfig *xdsconfig.Config
+       config       FolderConfig
 }
 
 // NewFolderPathMap Create a new instance of PathMap
-func NewFolderPathMap() *PathMap {
-       f := PathMap{}
+func NewFolderPathMap(gc *xdsconfig.Config) *PathMap {
+       f := PathMap{
+               globalConfig: gc,
+       }
        return &f
 }
 
+// NewUID Get a UUID
+func (f *PathMap) NewUID(suffix string) string {
+       return uuid.NewV1().String() + "_" + suffix
+}
+
 // Add a new folder
 func (f *PathMap) Add(cfg FolderConfig) (*FolderConfig, error) {
        if cfg.DataPathMap.ServerPath == "" {
                return nil, fmt.Errorf("ServerPath must be set")
        }
 
-       // Sanity check
+       // Use shareRootDir if ServerPath is a relative path
        dir := cfg.DataPathMap.ServerPath
+       if !filepath.IsAbs(dir) {
+               dir = filepath.Join(f.globalConfig.FileConf.ShareRootDir, dir)
+       }
+
+       // Sanity check
        if !common.Exists(dir) {
                // try to create if not existing
                if err := os.MkdirAll(dir, 0755); err != nil {
@@ -52,7 +67,9 @@ func (f *PathMap) Add(cfg FolderConfig) (*FolderConfig, error) {
        }
 
        f.config = cfg
-       f.config.RootPath = cfg.DataPathMap.ServerPath
+       f.config.RootPath = dir
+       f.config.DataPathMap.ServerPath = dir
+       f.config.IsInSync = true
        f.config.Status = StatusEnable
 
        return &f.config, nil
@@ -77,6 +94,16 @@ func (f *PathMap) Remove() error {
        return nil
 }
 
+// RegisterEventChange requests registration for folder change event
+func (f *PathMap) RegisterEventChange(cb *EventCB, data *EventCBData) error {
+       return nil
+}
+
+// UnRegisterEventChange remove registered callback
+func (f *PathMap) UnRegisterEventChange() error {
+       return nil
+}
+
 // Sync Force folder files synchronization
 func (f *PathMap) Sync() error {
        return nil