diff --git a/config/config.go b/config/config.go index 61a19eb5b..ec61c2668 100644 --- a/config/config.go +++ b/config/config.go @@ -31,13 +31,14 @@ type Configuration struct { } type RepositoryConfiguration struct { - ID string `xml:"id,attr"` - Directory string `xml:"directory,attr"` - Nodes []RepositoryNodeConfiguration `xml:"node"` - ReadOnly bool `xml:"ro,attr"` - IgnorePerms bool `xml:"ignorePerms,attr"` - Invalid string `xml:"-"` // Set at runtime when there is an error, not saved - Versioning VersioningConfiguration `xml:"versioning"` + ID string `xml:"id,attr"` + Directory string `xml:"directory,attr"` + Nodes []RepositoryNodeConfiguration `xml:"node"` + ReadOnly bool `xml:"ro,attr"` + RescanIntervalS int `xml:"rescanIntervalS,attr" default:"60"` + IgnorePerms bool `xml:"ignorePerms,attr"` + Invalid string `xml:"-"` // Set at runtime when there is an error, not saved + Versioning VersioningConfiguration `xml:"versioning"` nodeIDs []protocol.NodeID } @@ -116,7 +117,6 @@ type OptionsConfiguration struct { LocalAnnMCAddr string `xml:"localAnnounceMCAddr" default:"[ff32::5222]:21026"` ParallelRequests int `xml:"parallelRequests" default:"16"` MaxSendKbps int `xml:"maxSendKbps"` - RescanIntervalS int `xml:"rescanIntervalS" default:"60"` ReconnectIntervalS int `xml:"reconnectionIntervalS" default:"60"` StartBrowser bool `xml:"startBrowser" default:"true"` UPnPEnabled bool `xml:"upnpEnabled" default:"true"` @@ -124,11 +124,12 @@ type OptionsConfiguration struct { UPnPRenewal int `xml:"upnpRenewalMinutes" default:"30"` URAccepted int `xml:"urAccepted"` // Accepted usage reporting version; 0 for off (undecided), -1 for off (permanently) - Deprecated_UREnabled bool `xml:"urEnabled,omitempty" json:"-"` - Deprecated_URDeclined bool `xml:"urDeclined,omitempty" json:"-"` - Deprecated_ReadOnly bool `xml:"readOnly,omitempty" json:"-"` - Deprecated_GUIEnabled bool `xml:"guiEnabled,omitempty" json:"-"` - Deprecated_GUIAddress string `xml:"guiAddress,omitempty" json:"-"` + Deprecated_RescanIntervalS int `xml:"rescanIntervalS,omitempty" json:"-"` + Deprecated_UREnabled bool `xml:"urEnabled,omitempty" json:"-"` + Deprecated_URDeclined bool `xml:"urDeclined,omitempty" json:"-"` + Deprecated_ReadOnly bool `xml:"readOnly,omitempty" json:"-"` + Deprecated_GUIEnabled bool `xml:"guiEnabled,omitempty" json:"-"` + Deprecated_GUIAddress string `xml:"guiAddress,omitempty" json:"-"` } type GUIConfiguration struct { @@ -372,10 +373,20 @@ func Load(rd io.Reader, myID protocol.NodeID) (Configuration, error) { } func convertV3V4(cfg *Configuration) { + // In previous versions, rescan interval was common for each repository. + // From now, it can be set independently. We have to make sure, that after upgrade + // the individual rescan interval will be defined for every existing repository. + for i := range cfg.Repositories { + cfg.Repositories[i].RescanIntervalS = cfg.Options.Deprecated_RescanIntervalS + } + + cfg.Options.Deprecated_RescanIntervalS = 0 + // In previous versions, repositories held full node configurations. // Since that's the only place where node configs were in V1, we still have // to define the deprecated fields to be able to upgrade from V1 to V4. for i, repo := range cfg.Repositories { + for j := range repo.Nodes { rncfg := cfg.Repositories[i].Nodes[j] rncfg.Deprecated_Name = "" diff --git a/config/config_test.go b/config/config_test.go index 582276e0f..696baecb9 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -33,7 +33,6 @@ func TestDefaultValues(t *testing.T) { LocalAnnMCAddr: "[ff32::5222]:21026", ParallelRequests: 16, MaxSendKbps: 0, - RescanIntervalS: 60, ReconnectIntervalS: 60, StartBrowser: true, UPnPEnabled: true, @@ -70,6 +69,7 @@ func TestNodeConfig(t *testing.T) { true + 600 `) @@ -90,6 +90,9 @@ func TestNodeConfig(t *testing.T) {
b
+ + 600 + `) @@ -105,11 +108,14 @@ func TestNodeConfig(t *testing.T) {
b
+ + 600 + `) v4data := []byte(` - + @@ -129,10 +135,11 @@ func TestNodeConfig(t *testing.T) { expectedRepos := []RepositoryConfiguration{ { - ID: "test", - Directory: "~/Sync", - Nodes: []RepositoryNodeConfiguration{{NodeID: node1}, {NodeID: node4}}, - ReadOnly: true, + ID: "test", + Directory: "~/Sync", + Nodes: []RepositoryNodeConfiguration{{NodeID: node1}, {NodeID: node4}}, + ReadOnly: true, + RescanIntervalS: 600, }, } expectedNodes := []NodeConfiguration{ @@ -204,7 +211,6 @@ func TestOverriddenValues(t *testing.T) { quux:3232 32 1234 - 600 6000 false false @@ -223,7 +229,6 @@ func TestOverriddenValues(t *testing.T) { LocalAnnMCAddr: "quux:3232", ParallelRequests: 32, MaxSendKbps: 1234, - RescanIntervalS: 600, ReconnectIntervalS: 6000, StartBrowser: false, UPnPEnabled: false, diff --git a/gui/index.html b/gui/index.html index 9ea66132a..6ce25bb05 100644 --- a/gui/index.html +++ b/gui/index.html @@ -497,6 +497,13 @@ The repository path cannot be blank.

+
+ + +

+ The rescan interval must be at least 5 seconds. +

+
@@ -581,10 +588,6 @@
-
- - -