Add Cross SDKs support (part 2)
[src/xds/xds-server.git] / lib / model / folder.go
1 package model
2
3 import (
4         "fmt"
5
6         "github.com/iotbzh/xds-server/lib/syncthing"
7         "github.com/iotbzh/xds-server/lib/xdsconfig"
8 )
9
10 // Folder Represent a an XDS folder
11 type Folder struct {
12         Conf *xdsconfig.Config
13         SThg *st.SyncThing
14 }
15
16 // NewFolder Create a new instance of Model Folder
17 func NewFolder(cfg *xdsconfig.Config, st *st.SyncThing) *Folder {
18         return &Folder{
19                 Conf: cfg,
20                 SThg: st,
21         }
22 }
23
24 // GetFolderFromID retrieves the Folder config from id
25 func (c *Folder) GetFolderFromID(id string) *xdsconfig.FolderConfig {
26         if idx := c.Conf.Folders.GetIdx(id); idx != -1 {
27                 return &c.Conf.Folders[idx]
28         }
29         return nil
30 }
31
32 // UpdateAll updates all the current configuration
33 func (c *Folder) UpdateAll(newCfg xdsconfig.Config) error {
34         return fmt.Errorf("Not Supported")
35         /*
36                 if err := VerifyConfig(newCfg); err != nil {
37                         return err
38                 }
39
40                 // TODO: c.Builder = c.Builder.Update(newCfg.Builder)
41                 c.Folders = c.Folders.Update(newCfg.Folders)
42
43                 // FIXME To be tested & improved error handling
44                 for _, f := range c.Folders {
45                         if err := c.SThg.FolderChange(st.FolderChangeArg{
46                                 ID:           f.ID,
47                                 Label:        f.Label,
48                                 RelativePath: f.RelativePath,
49                                 SyncThingID:  f.SyncThingID,
50                                 ShareRootDir: c.ShareRootDir,
51                         }); err != nil {
52                                 return err
53                         }
54                 }
55
56                 return nil
57         */
58 }
59
60 // UpdateFolder updates a specific folder into the current configuration
61 func (c *Folder) UpdateFolder(newFolder xdsconfig.FolderConfig) (xdsconfig.FolderConfig, error) {
62         // rootPath should not be empty
63         if newFolder.RootPath == "" {
64                 newFolder.RootPath = c.Conf.ShareRootDir
65         }
66
67         // Sanity check of folder settings
68         if err := newFolder.Verify(); err != nil {
69                 return xdsconfig.FolderConfig{}, err
70         }
71
72         c.Conf.Folders = c.Conf.Folders.Update(xdsconfig.FoldersConfig{newFolder})
73
74         err := c.SThg.FolderChange(newFolder)
75
76         newFolder.BuilderSThgID = c.Conf.Builder.SyncThingID // FIXME - should be removed after local ST config rework
77         newFolder.Status = xdsconfig.FolderStatusEnable
78
79         return newFolder, err
80 }
81
82 // DeleteFolder deletes a specific folder
83 func (c *Folder) DeleteFolder(id string) (xdsconfig.FolderConfig, error) {
84         var fld xdsconfig.FolderConfig
85         var err error
86
87         if err = c.SThg.FolderDelete(id); err != nil {
88                 return fld, err
89         }
90
91         c.Conf.Folders, fld, err = c.Conf.Folders.Delete(id)
92
93         return fld, err
94 }