6 common "github.com/iotbzh/xds-common/golib"
7 "github.com/iotbzh/xds-server/lib/syncthing"
8 "github.com/iotbzh/xds-server/lib/xdsconfig"
11 // Folder Represent a an XDS folder
13 Conf *xdsconfig.Config
17 // NewFolder Create a new instance of Model Folder
18 func NewFolder(cfg *xdsconfig.Config, st *st.SyncThing) *Folder {
25 // GetFolderFromID retrieves the Folder config from id
26 func (c *Folder) GetFolderFromID(id string) *xdsconfig.FolderConfig {
27 if idx := c.Conf.Folders.GetIdx(id); idx != -1 {
28 return &c.Conf.Folders[idx]
33 // UpdateAll updates all the current configuration
34 func (c *Folder) UpdateAll(newCfg xdsconfig.Config) error {
35 return fmt.Errorf("Not Supported")
37 if err := VerifyConfig(newCfg); err != nil {
41 // TODO: c.Builder = c.Builder.Update(newCfg.Builder)
42 c.Folders = c.Folders.Update(newCfg.Folders)
44 // FIXME To be tested & improved error handling
45 for _, f := range c.Folders {
46 if err := c.SThg.FolderChange(st.FolderChangeArg{
49 RelativePath: f.RelativePath,
50 SyncThingID: f.SyncThingID,
51 ShareRootDir: c.FileConf.ShareRootDir,
61 // UpdateFolder updates a specific folder into the current configuration
62 func (c *Folder) UpdateFolder(newFolder xdsconfig.FolderConfig) (xdsconfig.FolderConfig, error) {
63 // rootPath should not be empty
64 if newFolder.RootPath == "" {
65 newFolder.RootPath = c.Conf.FileConf.ShareRootDir
68 // Sanity check of folder settings
69 if err := newFolder.Verify(); err != nil {
70 return xdsconfig.FolderConfig{}, err
73 // Normalize path (needed for Windows path including bashlashes)
74 newFolder.RelativePath = common.PathNormalize(newFolder.RelativePath)
76 // Update config folder
77 c.Conf.Folders = c.Conf.Folders.Update(xdsconfig.FoldersConfig{newFolder})
79 // Update Syncthing folder
80 err := c.SThg.FolderChange(newFolder)
82 newFolder.BuilderSThgID = c.Conf.Builder.SyncThingID // FIXME - should be removed after local ST config rework
83 newFolder.Status = xdsconfig.FolderStatusEnable
88 // DeleteFolder deletes a specific folder
89 func (c *Folder) DeleteFolder(id string) (xdsconfig.FolderConfig, error) {
90 var fld xdsconfig.FolderConfig
93 if err = c.SThg.FolderDelete(id); err != nil {
97 c.Conf.Folders, fld, err = c.Conf.Folders.Delete(id)
102 // ForceSync Force the synchronization of a folder
103 func (c *Folder) ForceSync(id string) error {
104 return c.SThg.FolderScan(id, "")
107 // IsFolderInSync Returns true when folder is in sync
108 func (c *Folder) IsFolderInSync(id string) (bool, error) {
109 return c.SThg.IsFolderInSync(id)