6 "github.com/iotbzh/xds-server/lib/syncthing"
7 "github.com/iotbzh/xds-server/lib/xdsconfig"
10 // Folder Represent a an XDS folder
12 Conf *xdsconfig.Config
16 // NewFolder Create a new instance of Model Folder
17 func NewFolder(cfg *xdsconfig.Config, st *st.SyncThing) *Folder {
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]
32 // UpdateAll updates all the current configuration
33 func (c *Folder) UpdateAll(newCfg xdsconfig.Config) error {
34 return fmt.Errorf("Not Supported")
36 if err := VerifyConfig(newCfg); err != nil {
40 // TODO: c.Builder = c.Builder.Update(newCfg.Builder)
41 c.Folders = c.Folders.Update(newCfg.Folders)
43 // FIXME To be tested & improved error handling
44 for _, f := range c.Folders {
45 if err := c.SThg.FolderChange(st.FolderChangeArg{
48 RelativePath: f.RelativePath,
49 SyncThingID: f.SyncThingID,
50 ShareRootDir: c.ShareRootDir,
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
67 // Sanity check of folder settings
68 if err := newFolder.Verify(); err != nil {
69 return xdsconfig.FolderConfig{}, err
72 c.Conf.Folders = c.Conf.Folders.Update(xdsconfig.FoldersConfig{newFolder})
74 err := c.SThg.FolderChange(newFolder)
76 newFolder.BuilderSThgID = c.Conf.Builder.SyncThingID // FIXME - should be removed after local ST config rework
77 newFolder.Status = xdsconfig.FolderStatusEnable
82 // DeleteFolder deletes a specific folder
83 func (c *Folder) DeleteFolder(id string) (xdsconfig.FolderConfig, error) {
84 var fld xdsconfig.FolderConfig
87 if err = c.SThg.FolderDelete(id); err != nil {
91 c.Conf.Folders, fld, err = c.Conf.Folders.Delete(id)