diff --git a/gui/default/assets/css/overrides.css b/gui/default/assets/css/overrides.css
index 2adebda39..b773cf000 100644
--- a/gui/default/assets/css/overrides.css
+++ b/gui/default/assets/css/overrides.css
@@ -180,7 +180,7 @@ input[type="checkbox"].extended-attributes-filter-rule-checkbox {
margin-right: .14285715em;
}
-.remote-devices-panel {
+.inline-icon {
display: inline-block;
}
@@ -460,15 +460,17 @@ ul.three-columns li, ul.two-columns li {
}
@media (max-width: 419px) {
- /* the selectors are build to target only the content of folder and device
- panels as it would "destroy" e.g. out of sync or recent changes listings */
+ /* The selectors are build to target only the content of folder and device
+ panels as it would "destroy" e.g. out of sync or recent changes listings.
+ The !important is needed to override .visible-xs that sets display to a
+ specific table element instead of block. */
div[id^='device-'].panel-collapse table,
div[id^='folder-'].panel-collapse table,
div[id^='device-'].panel-collapse tbody,
div[id^='folder-'].panel-collapse tbody,
div[id^='device-'].panel-collapse tr,
div[id^='folder-'].panel-collapse tr {
- display: block;
+ display: block !important;
}
div[id^='device-'].panel-collapse th,
div[id^='folder-'].panel-collapse th,
diff --git a/gui/default/assets/lang/lang-en.json b/gui/default/assets/lang/lang-en.json
index 4a34c972f..7a7731483 100644
--- a/gui/default/assets/lang/lang-en.json
+++ b/gui/default/assets/lang/lang-en.json
@@ -99,6 +99,7 @@
"Device ID": "Device ID",
"Device Identification": "Device Identification",
"Device Name": "Device Name",
+ "Device Status": "Device Status",
"Device is untrusted, enter encryption password": "Device is untrusted, enter encryption password",
"Device rate limits": "Device rate limits",
"Device that last modified the item": "Device that last modified the item",
@@ -168,6 +169,7 @@
"Folder ID": "Folder ID",
"Folder Label": "Folder Label",
"Folder Path": "Folder Path",
+ "Folder Status": "Folder Status",
"Folder Type": "Folder Type",
"Folder type \"{%receiveEncrypted%}\" can only be set when adding a new folder.": "Folder type \"{{receiveEncrypted}}\" can only be set when adding a new folder.",
"Folder type \"{%receiveEncrypted%}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.": "Folder type \"{{receiveEncrypted}}\" cannot be changed after adding the folder. You need to remove the folder, delete or decrypt the data on disk, and add the folder again.",
diff --git a/gui/default/index.html b/gui/default/index.html
index 4c55ffd7b..729e50580 100644
--- a/gui/default/index.html
+++ b/gui/default/index.html
@@ -395,37 +395,12 @@
- Paused
- Unknown
- Unshared
- Waiting to Scan
- Cleaning Versions
- Waiting to Clean
- Stopped
-
- Scanning
-
- ({{scanPercentage(folder.id) | percent}})
-
-
-
- Up to Date
- Local Additions
-
- Waiting to Sync
-
-
-
- Preparing to Sync
-
-
-
- Syncing
- ({{syncPercentage(folder.id) | percent}}, {{model[folder.id].needBytes | binary}}B)
-
- Out of Sync
- Failed Items
- {{'Unexpected Items' | translate}}
+ {{folderStatusText(folder)}}
+ ({{scanPercentage(folder.id) | percent}})
+ ({{syncPercentage(folder.id) | percent}}, {{model[folder.id].needBytes | binary}}B)
+
+
+
{{folder.label.length != 0 ? folder.label : folder.id}}
@@ -436,6 +411,10 @@
+
+ Folder Status |
+ {{folderStatusText(folder)}} |
+
Folder ID |
{{folder.id}} |
@@ -794,23 +773,16 @@
-
-
- Up to Date
- Connected (Unused)
-
- Syncing ({{completion[deviceCfg.deviceID]._total | percent}}, {{completion[deviceCfg.deviceID]._needBytes | binary}}B)
-
- Paused
- Paused (Unused)
- Disconnected
- Disconnected (Inactive)
- Disconnected (Unused)
+
+ {{deviceStatusText(deviceCfg)}}
+ ({{completion[deviceCfg.deviceID]._total | percent}}, {{completion[deviceCfg.deviceID]._needBytes | binary}}B)
+
+
-
+
-
+
{{deviceName(deviceCfg)}}
@@ -818,6 +790,10 @@
+
+ Device Status |
+ {{deviceStatusText(deviceCfg)}} |
+
Last seen |
diff --git a/gui/default/syncthing/core/syncthingController.js b/gui/default/syncthing/core/syncthingController.js
index bc04e8fe2..5b761feb2 100755
--- a/gui/default/syncthing/core/syncthingController.js
+++ b/gui/default/syncthing/core/syncthingController.js
@@ -1151,6 +1151,113 @@ angular.module('syncthing.core')
}
};
+ $scope.deviceStatusIcon = function(cfg) {
+ switch ($scope.deviceStatus(cfg)) {
+ case 'disconnected':
+ case 'disconnected-inactive':
+ return 'fa-power-off';
+ case 'insync':
+ return 'fa-check';
+ case 'paused':
+ return 'fa-pause';
+ case 'syncing':
+ return 'fa-sync';
+ case 'unused-disconnected':
+ case 'unused-insync':
+ case 'unused-paused':
+ return 'fa-unlink';
+ }
+ };
+
+ $scope.deviceStatusText = function(device) {
+ switch ($scope.deviceStatus(device)) {
+ case 'disconnected':
+ return $translate.instant('Disconnected');
+ case 'disconnected-inactive':
+ return $translate.instant('Disconnected (Inactive)');
+ case 'insync':
+ return $translate.instant('Up to Date');
+ case 'paused':
+ return $translate.instant('Paused');
+ case 'syncing':
+ return $translate.instant('Syncing');
+ case 'unused-disconnected':
+ return $translate.instant('Disconnected (Unused)');
+ case 'unused-insync':
+ return $translate.instant('Connected (Unused)');
+ case 'unused-paused':
+ return $translate.instant('Paused (Unused)');
+ }
+ };
+
+ $scope.folderStatusIcon = function(cfg) {
+ switch ($scope.folderStatus(cfg)) {
+ case 'clean-waiting':
+ case 'scan-waiting':
+ case 'sync-preparing':
+ case 'sync-waiting':
+ return 'fa-hourglass-half';
+ case 'cleaning':
+ return 'fa-recycle';
+ case 'faileditems':
+ case 'localunencrypted':
+ case 'outofsync':
+ return 'fa-exclamation-circle';
+ case 'idle':
+ case 'localadditions':
+ return 'fa-check';
+ case 'paused':
+ return 'fa-pause';
+ case 'scanning':
+ return 'fa-search';
+ case 'stopped':
+ return 'fa-stop';
+ case 'syncing':
+ return 'fa-sync';
+ case 'unknown':
+ return 'fa-question-circle';
+ case 'unshared':
+ return 'fa-unlink';
+ }
+ };
+
+ $scope.folderStatusText = function(folder) {
+ switch ($scope.folderStatus(folder)) {
+ case 'clean-waiting':
+ return $translate.instant('Waiting to Clean');
+ case 'cleaning':
+ return $translate.instant('Cleaning Versions');
+ case 'faileditems':
+ return $translate.instant('Failed Items');
+ case 'idle':
+ return $translate.instant('Up to Date');
+ case 'localadditions':
+ return $translate.instant('Local Additions');
+ case 'localunencrypted':
+ return $translate.instant('Unexpected Items');
+ case 'outofsync':
+ return $translate.instant('Out of Sync');
+ case 'paused':
+ return $translate.instant('Paused');
+ case 'scan-waiting':
+ return $translate.instant('Waiting to Scan');
+ case 'scanning':
+ return $translate.instant('Scanning');
+ case 'stopped':
+ return $translate.instant('Stopped');
+ case 'sync-preparing':
+ return $translate.instant('Preparing to Sync');
+ case 'sync-waiting':
+ return $translate.instant('Waiting to Sync');
+ case 'syncing':
+ return $translate.instant('Syncing');
+ case 'unknown':
+ return $translate.instant('Unknown');
+ case 'unshared':
+ return $translate.instant('Unshared');
+ }
+ };
+
$scope.deviceClass = function (deviceCfg) {
if (typeof $scope.connections[deviceCfg.deviceID] === 'undefined') {
return 'info';
|