7 "github.com/syncthing/syncthing/lib/config"
8 "github.com/syncthing/syncthing/lib/protocol"
11 // FIXME remove and use an interface on xdsconfig.FolderConfig
12 type FolderChangeArg struct {
20 // FolderChange is called when configuration has changed
21 func (s *SyncThing) FolderChange(f FolderChangeArg) error {
24 stCfg, err := s.ConfigGet()
30 // Add new Device if needed
31 var devID protocol.DeviceID
32 if err := devID.UnmarshalText([]byte(f.SyncThingID)); err != nil {
33 s.log.Errorf("not a valid device id (err %v)\n", err)
37 newDevice := config.DeviceConfiguration{
40 Addresses: []string{"dynamic"},
44 for _, device := range stCfg.Devices {
45 if device.DeviceID == devID {
51 stCfg.Devices = append(stCfg.Devices, newDevice)
54 // Add or update Folder settings
56 if label = f.Label; label == "" {
57 label = strings.Split(id, "/")[0]
59 if id = f.ID; id == "" {
60 id = f.SyncThingID[0:15] + "_" + label
63 folder := config.FolderConfiguration{
66 RawPath: filepath.Join(f.ShareRootDir, f.RelativePath),
69 folder.Devices = append(folder.Devices, config.FolderDeviceConfiguration{
70 DeviceID: newDevice.DeviceID,
74 var fld config.FolderConfiguration
75 for _, fld = range stCfg.Folders {
76 if folder.ID == fld.ID {
83 stCfg.Folders = append(stCfg.Folders, folder)
84 fld = stCfg.Folders[0]
87 err = s.ConfigSet(stCfg)
95 // FolderDelete is called to delete a folder config
96 func (s *SyncThing) FolderDelete(id string) error {
98 stCfg, err := s.ConfigGet()
104 for i, fld := range stCfg.Folders {
106 stCfg.Folders = append(stCfg.Folders[:i], stCfg.Folders[i+1:]...)
107 err = s.ConfigSet(stCfg)