diff --git a/gui/default/index.html b/gui/default/index.html index 8954de040..bccd4f961 100644 --- a/gui/default/index.html +++ b/gui/default/index.html @@ -381,264 +381,269 @@

Folders ({{folderList().length}})

-
-
- +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Folder Status{{folderStatusText(folder)}}
 Folder ID{{folder.id}}
 Folder Path + {{folder.path}} +
 Error + {{model[folder.id].invalid || model[folder.id].error}} +
 Global State + +  {{model[folder.id].globalFiles | alwaysNumber | localeNumber}}  +  {{model[folder.id].globalDirectories | alwaysNumber | localeNumber}}  +  ~{{model[folder.id].globalBytes | binary}}B + +
 Local State +
+ +  {{model[folder.id].localFiles | alwaysNumber | localeNumber}}  +  {{model[folder.id].localDirectories | alwaysNumber | localeNumber}}  +  ~{{model[folder.id].localBytes | binary}}B + +
+ +
+ + Altered by ignoring deletes. + +  Help + + +
+
 Out of Sync Items + {{model[folder.id].needTotalItems | alwaysNumber | localeNumber}} items, ~{{model[folder.id].needBytes | binary}}B +
 Scan Time Remaining + ~ {{scanRemaining(folder.id)}} +
 Failed Items + {{model[folder.id].pullErrors | alwaysNumber | localeNumber}} items +
 Locally Changed Items + {{model[folder.id].receiveOnlyTotalItems | alwaysNumber | localeNumber}} items, ~{{model[folder.id].receiveOnlyChangedBytes | binary}}B +
 Folder Type + Send & Receive + Send Only + Receive Only + Receive Encrypted +
 Ignore Permissions + Yes +
 Rescans +
+ +  {{folder.rescanIntervalS | duration}}  +  Disabled + + +  {{folder.rescanIntervalS | duration}}  +  Enabled + + +  {{folder.rescanIntervalS | duration}}  +  Failed to set up, retrying + +
+
+ +  Disabled  +  Disabled + + +  Disabled  +  Enabled + + +  Disabled  +  Failed to set up, retrying + +
+
 File Pull Order + Random + Alphabetic + Smallest First + Largest First + Oldest First + Newest First +
 File Versioning + + Trash Can + Simple + Staggered + External + + + +   Disabled{{folder.versioning.params.cleanoutDays * 86400 | duration:"d"}} + + +   {{folder.versioning.params.keep}} + + +   Forever{{folder.versioning.params.maxAge | duration}} + + +   Disabled{{folder.versioning.cleanupIntervalS | duration}} + + + +   {{folder.versioning.fsPath === '' ? '.stversions' : folder.versioning.fsPath}} + + +
 Shared With + + +  {{deviceName(devices[device.deviceID])}}1{{deviceName(devices[device.deviceID])}}2{{deviceName(devices[device.deviceID])}}, + + +
 Last ScanNever + {{folderStats[folder.id].lastScan | date:'yyyy-MM-dd HH:mm:ss'}} +
 Latest Change + + Updated {%file%} + Deleted {%file%} + +
-
- - ({{scanPercentage(folder.id) | percent}}) - ({{syncPercentage(folder.id) | percent}}, {{model[folder.id].needBytes | binary}}B) - - + -
- {{folder.label.length != 0 ? folder.label : folder.id}} -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Folder Status{{folderStatusText(folder)}}
 Folder ID{{folder.id}}
 Folder Path - {{folder.path}} -
 Error - {{model[folder.id].invalid || model[folder.id].error}} -
 Global State - -  {{model[folder.id].globalFiles | alwaysNumber | localeNumber}}  -  {{model[folder.id].globalDirectories | alwaysNumber | localeNumber}}  -  ~{{model[folder.id].globalBytes | binary}}B - -
 Local State -
- -  {{model[folder.id].localFiles | alwaysNumber | localeNumber}}  -  {{model[folder.id].localDirectories | alwaysNumber | localeNumber}}  -  ~{{model[folder.id].localBytes | binary}}B - -
- -
- - Altered by ignoring deletes. - -  Help - - -
-
 Out of Sync Items - {{model[folder.id].needTotalItems | alwaysNumber | localeNumber}} items, ~{{model[folder.id].needBytes | binary}}B -
 Scan Time Remaining - ~ {{scanRemaining(folder.id)}} -
 Failed Items - {{model[folder.id].pullErrors | alwaysNumber | localeNumber}} items -
 Locally Changed Items - {{model[folder.id].receiveOnlyTotalItems | alwaysNumber | localeNumber}} items, ~{{model[folder.id].receiveOnlyChangedBytes | binary}}B -
 Folder Type - Send & Receive - Send Only - Receive Only - Receive Encrypted -
 Ignore Permissions - Yes -
 Rescans -
- -  {{folder.rescanIntervalS | duration}}  -  Disabled - - -  {{folder.rescanIntervalS | duration}}  -  Enabled - - -  {{folder.rescanIntervalS | duration}}  -  Failed to set up, retrying - -
-
- -  Disabled  -  Disabled - - -  Disabled  -  Enabled - - -  Disabled  -  Failed to set up, retrying - -
-
 File Pull Order - Random - Alphabetic - Smallest First - Largest First - Oldest First - Newest First -
 File Versioning - - Trash Can - Simple - Staggered - External - - - -   Disabled{{folder.versioning.params.cleanoutDays * 86400 | duration:"d"}} - - -   {{folder.versioning.params.keep}} - - -   Forever{{folder.versioning.params.maxAge | duration}} - - -   Disabled{{folder.versioning.cleanupIntervalS | duration}} - - - -   {{folder.versioning.fsPath === '' ? '.stversions' : folder.versioning.fsPath}} - - -
 Shared With - - -  {{deviceName(devices[device.deviceID])}}1{{deviceName(devices[device.deviceID])}}2{{deviceName(devices[device.deviceID])}}, - - -
 Last ScanNever - {{folderStats[folder.id].lastScan | date:'yyyy-MM-dd HH:mm:ss'}} -
 Latest Change - - Updated {%file%} - Deleted {%file%} - -
-
-
@@ -770,215 +775,220 @@

Remote Devices ({{otherDevices().length}})

-
-
- +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Device Status{{deviceStatusText(deviceCfg)}}
 Last seen +
+ Never +
+
+
+ {{deviceStats[deviceCfg.deviceID].lastSeen | date:"yyyy-MM-dd HH:mm:ss"}} +
+
+ More than a week ago + More than a month ago + More than a year ago +
+
+
 Sync StatusUp to Date + ({{completion[deviceCfg.deviceID]._total | percent}}) +
 Download Rate + + {{connections[deviceCfg.deviceID].inbps | binary}}B/s + {{connections[deviceCfg.deviceID].inbps*8 | metric}}bps + ({{connections[deviceCfg.deviceID].inBytesTotal | binary}}B) +
+ Limit: + {{deviceCfg.maxRecvKbps*1024 | binary}}B/s + {{deviceCfg.maxRecvKbps*1024*8 | metric}}bps + +
+
+
 Upload Rate + + {{connections[deviceCfg.deviceID].outbps | binary}}B/s + {{connections[deviceCfg.deviceID].outbps*8 | metric}}bps + ({{connections[deviceCfg.deviceID].outBytesTotal | binary}}B) +
+ Limit: + {{deviceCfg.maxSendKbps*1024 | binary}}B/s + {{deviceCfg.maxSendKbps*1024*8 | metric}}bps + +
+
+
 Out of Sync Items + {{completion[deviceCfg.deviceID]._needItems | alwaysNumber | localeNumber}} items, ~{{completion[deviceCfg.deviceID]._needBytes | binary}}B +
 Address + + {{deviceAddr(deviceCfg)}} + + + + {{addr}}
+ {{abbreviatedError(addr)}}
+
+ + {{addr}}
+ {{abbreviatedError(addr)}}
+
+
 Connection Type + + {{rdConnTypeString(rdConnType(deviceCfg.deviceID))}} + +
 Number of Connections + 1 + {{connections[deviceCfg.deviceID].secondary.length | alwaysNumber}} + 1 +
 Allowed Networks + {{deviceCfg.allowedNetworks.join(", ")}} +
 Compression + All Data + Metadata Only + Off +
 IntroducerYes
 Introduced By{{ deviceName(devices[deviceCfg.introducedBy]) || deviceShortID(deviceCfg.introducedBy) }}
 Auto AcceptYes
 Identification + + {{deviceShortID(deviceCfg.deviceID)}} + +
 UntrustedYes
 Version{{connections[deviceCfg.deviceID].clientVersion}}
 Folders + + +  {{folderLabel(folderID)}}1{{folderLabel(folderID)}}2{{folderLabel(folderID)}}, + + +
 Remote GUI + + {{remoteGUIAddress(deviceCfg)}} + Unknown +
+
+
-
{{deviceName(deviceCfg)}}
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Device Status{{deviceStatusText(deviceCfg)}}
 Last seen -
- Never -
-
-
- {{deviceStats[deviceCfg.deviceID].lastSeen | date:"yyyy-MM-dd HH:mm:ss"}} -
-
- More than a week ago - More than a month ago - More than a year ago -
-
-
 Sync StatusUp to Date - ({{completion[deviceCfg.deviceID]._total | percent}}) -
 Download Rate - - {{connections[deviceCfg.deviceID].inbps | binary}}B/s - {{connections[deviceCfg.deviceID].inbps*8 | metric}}bps - ({{connections[deviceCfg.deviceID].inBytesTotal | binary}}B) -
- Limit: - {{deviceCfg.maxRecvKbps*1024 | binary}}B/s - {{deviceCfg.maxRecvKbps*1024*8 | metric}}bps - -
-
-
 Upload Rate - - {{connections[deviceCfg.deviceID].outbps | binary}}B/s - {{connections[deviceCfg.deviceID].outbps*8 | metric}}bps - ({{connections[deviceCfg.deviceID].outBytesTotal | binary}}B) -
- Limit: - {{deviceCfg.maxSendKbps*1024 | binary}}B/s - {{deviceCfg.maxSendKbps*1024*8 | metric}}bps - -
-
-
 Out of Sync Items - {{completion[deviceCfg.deviceID]._needItems | alwaysNumber | localeNumber}} items, ~{{completion[deviceCfg.deviceID]._needBytes | binary}}B -
 Address - - {{deviceAddr(deviceCfg)}} - - - - {{addr}}
- {{abbreviatedError(addr)}}
-
- - {{addr}}
- {{abbreviatedError(addr)}}
-
-
 Connection Type - - {{rdConnTypeString(rdConnType(deviceCfg.deviceID))}} - -
 Number of Connections - 1 + {{connections[deviceCfg.deviceID].secondary.length | alwaysNumber}} - 1 -
 Allowed Networks - {{deviceCfg.allowedNetworks.join(", ")}} -
 Compression - All Data - Metadata Only - Off -
 IntroducerYes
 Introduced By{{ deviceName(devices[deviceCfg.introducedBy]) || deviceShortID(deviceCfg.introducedBy) }}
 Auto AcceptYes
 Identification - - {{deviceShortID(deviceCfg.deviceID)}} - -
 UntrustedYes
 Version{{connections[deviceCfg.deviceID].clientVersion}}
 Folders - - -  {{folderLabel(folderID)}}1{{folderLabel(folderID)}}2{{folderLabel(folderID)}}, - - -
 Remote GUI - - {{remoteGUIAddress(deviceCfg)}} - Unknown -
-
-
-
+
+ + + + +

+ Optional group for the device. Can be different on each device. +

+
diff --git a/gui/default/syncthing/folder/editFolderModalView.html b/gui/default/syncthing/folder/editFolderModalView.html index 09643c887..fc6faa74c 100644 --- a/gui/default/syncthing/folder/editFolderModalView.html +++ b/gui/default/syncthing/folder/editFolderModalView.html @@ -18,6 +18,16 @@ Optional descriptive label for the folder. Can be different on each device.

+
+ + + + +

+ Optional group for the folder. Can be different on each device. +

+
diff --git a/lib/config/deviceconfiguration.go b/lib/config/deviceconfiguration.go index 18b58e51b..d4753b715 100644 --- a/lib/config/deviceconfiguration.go +++ b/lib/config/deviceconfiguration.go @@ -36,6 +36,7 @@ type DeviceConfiguration struct { Untrusted bool `json:"untrusted" xml:"untrusted"` RemoteGUIPort int `json:"remoteGUIPort" xml:"remoteGUIPort"` RawNumConnections int `json:"numConnections" xml:"numConnections"` + Group string `json:"group" xml:"group,attr,omitempty"` } func (cfg DeviceConfiguration) Copy() DeviceConfiguration { diff --git a/lib/config/folderconfiguration.go b/lib/config/folderconfiguration.go index c6696eee3..a003f5541 100644 --- a/lib/config/folderconfiguration.go +++ b/lib/config/folderconfiguration.go @@ -54,6 +54,7 @@ type FolderConfiguration struct { Path string `json:"path" xml:"path,attr"` Type FolderType `json:"type" xml:"type,attr"` Devices []FolderDeviceConfiguration `json:"devices" xml:"device"` + Group string `json:"group" xml:"group,attr,omitempty" restart:"false"` RescanIntervalS int `json:"rescanIntervalS" xml:"rescanIntervalS,attr" default:"3600"` FSWatcherEnabled bool `json:"fsWatcherEnabled" xml:"fsWatcherEnabled,attr" default:"true"` FSWatcherDelayS float64 `json:"fsWatcherDelayS" xml:"fsWatcherDelayS,attr" default:"10"`