浏览代码

Squashed commit of pull request #1981

Conflicts:
	gui/scripts/syncthing/core/controllers/syncthingController.js
	internal/auto/gui.files.go
Jakob Borg 10 年之前
父节点
当前提交
1836ef2884
共有 3 个文件被更改,包括 51 次插入57 次删除
  1. 8 8
      gui/index.html
  2. 42 48
      gui/scripts/syncthing/core/controllers/syncthingController.js
  3. 1 1
      internal/auto/gui.files.go

+ 8 - 8
gui/index.html

@@ -49,7 +49,7 @@
           </a>
         </li>
         <li class="dropdown">
-          <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-cog" aria-label="Edit"></span>&nbsp;<span translate>Actions</span><span class="caret"></span></a>
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-cog"></span>&nbsp;<span translate>Actions</span> <span class="caret"></span></a>
           <ul class="dropdown-menu">
             <li><a href="" ng-click="editSettings()"><span class="glyphicon glyphicon-cog"></span>&nbsp;<span translate>Settings</span></a></li>
             <li><a href="" ng-click="idDevice()"><span class="glyphicon glyphicon-qrcode"></span>&nbsp;<span translate>Show ID</span></a></li>
@@ -342,8 +342,8 @@
                     <td class="text-right">{{connectionsTotal.outbps | binary}}B/s ({{connectionsTotal.outBytesTotal | binary}}B)</td>
                   </tr>
                   <tr>
-                    <th><span class="glyphicon glyphicon-home"></span>&nbsp;<span translate>Local State (Total)</span> </th>
-                    <td class="text-right">{{foldersTotalLocalFiles | alwaysNumber}} <span translate>items</span>, ~{{ foldersTotalLocalBytes | binary}}B</td>
+                    <th><span class="glyphicon glyphicon-home"></span>&nbsp;<span translate>Local State (Total)</span></th>
+                    <td class="text-right">{{localStateTotal.files | alwaysNumber}} <span translate>items</span>, ~{{localStateTotal.bytes | binary}}B</td>
                   </tr>
                   <tr>
                     <th><span class="glyphicon glyphicon-th"></span>&nbsp;<span translate>RAM Utilization</span></th>
@@ -579,7 +579,7 @@
               <input ng-disabled="currentDevice.deviceID == myID" id="addresses" class="form-control" type="text" ng-model="currentDevice._addressesStr"></input>
               <p translate class="help-block">Enter comma separated addresses ("ip:port", "host:port") or "dynamic" to perform automatic discovery of the address.</p>
             </div>
-            <div ng-if="!editingSelf" class="form-group">
+            <div class="form-group">
               <label translate>Compression</label>
               <select class="form-control" ng-model="currentDevice.compression">
                 <option value="always" translate>All Data</option>
@@ -587,7 +587,7 @@
                 <option value="never" translate>Off</option>
               </select>
             </div>
-            <div ng-if="!editingSelf" class="form-group">
+            <div class="form-group">
               <div class="checkbox">
                 <label>
                   <input type="checkbox" ng-model="currentDevice.introducer"> <span translate>Introducer</span>
@@ -596,7 +596,7 @@
               </div>
             </div>
 
-            <div class="row" ng-if="!editingSelf">
+            <div class="row">
               <div class="col-md-12">
                 <div class="form-group">
                   <label translate for="folders">Share Folders With Device</label>
@@ -619,7 +619,7 @@
         <div class="modal-footer">
           <button type="button" class="btn btn-primary btn-sm" ng-click="saveDevice()" ng-disabled="deviceEditor.$invalid"><span class="glyphicon glyphicon-ok"></span>&nbsp;<span translate>Save</span></button>
           <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span>&nbsp;<span translate>Close</span></button>
-          <button ng-if="editingExisting && !editingSelf" type="button" class="btn btn-danger pull-left btn-sm" ng-click="deleteDevice()"><span class="glyphicon glyphicon-minus"></span>&nbsp;<span translate>Delete</span></button>
+          <button ng-if="editingExisting" type="button" class="btn btn-danger pull-left btn-sm" ng-click="deleteDevice()"><span class="glyphicon glyphicon-minus"></span>&nbsp;<span translate>Delete</span></button>
         </div>
       </div>
     </div>
@@ -787,7 +787,7 @@
         <div class="modal-footer">
           <button type="button" class="btn btn-primary btn-sm" ng-click="saveFolder()" ng-disabled="folderEditor.$invalid"><span class="glyphicon glyphicon-ok"></span>&nbsp;<span translate>Save</span></button>
           <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span>&nbsp;<span translate>Close</span></button>
-          <button ng-if="editingExisting" type="button" class="btn btn-danger pull-left btn-sm" ng-click="deleteFolder()"><span class="glyphicon glyphicon-minus"></span>&nbsp;<span translate>Delete</span></button>
+          <button ng-if="editingExisting" type="button" class="btn btn-danger pull-left btn-sm" ng-click="deleteFolder(currentFolder.id)"><span class="glyphicon glyphicon-minus"></span>&nbsp;<span translate>Delete</span></button>
           <button id="editIgnoresButton" ng-if="editingExisting" type="button" class="btn btn-default pull-left btn-sm" ng-click="editIgnores()"><span class="glyphicon glyphicon-eye-close"></span>&nbsp;<span translate>Ignore Patterns</span></button>
         </div>
       </div>

+ 42 - 48
gui/scripts/syncthing/core/controllers/syncthingController.js

@@ -44,13 +44,16 @@ angular.module('syncthing.core')
         $scope.neededTotal = 0;
         $scope.neededCurrentPage = 1;
         $scope.neededPageSize = 10;
-        $scope.foldersTotalLocalBytes = 0;
-        $scope.foldersTotalLocalFiles = 0;
         $scope.failed = {};
         $scope.failedCurrentPage = 1;
         $scope.failedCurrentFolder = undefined;
         $scope.failedPageSize = 10;
 
+        $scope.localStateTotal = {
+            bytes: 0,
+            files: 0
+        };
+
         $(window).bind('beforeunload', function () {
             navigatingAway = true;
         });
@@ -265,6 +268,7 @@ angular.module('syncthing.core')
         $scope.$on(Events.FOLDER_SUMMARY, function (event, arg) {
             var data = arg.data;
             $scope.model[data.folder] = data.summary;
+            recalcLocalStateTotal();
         });
 
         $scope.$on(Events.FOLDER_COMPLETION, function (event, arg) {
@@ -303,6 +307,7 @@ angular.module('syncthing.core')
                 debouncedFuncs[key] = debounce(function () {
                     $http.get(urlbase + '/db/status?folder=' + encodeURIComponent(folder)).success(function (data) {
                         $scope.model[folder] = data;
+                        recalcLocalStateTotal();
                         console.log("refreshFolder", folder, data);
                     }).error($scope.emitHTTPError);
                 }, 1000, true);
@@ -350,18 +355,23 @@ angular.module('syncthing.core')
                 }
                 $scope.announceServersFailed = failed;
 
-                $scope.foldersTotalLocalBytes = 0;
-                $scope.foldersTotalLocalFiles = 0;
-
-                for (var f in $scope.model) {
-                   $scope.foldersTotalLocalBytes += $scope.model[f].localBytes;
-                   $scope.foldersTotalLocalFiles += $scope.model[f].localFiles;
-                };
 
                 console.log("refreshSystem", data);
             }).error($scope.emitHTTPError);
         }
 
+        function recalcLocalStateTotal () {
+            $scope.localStateTotal = {
+                bytes: 0,
+                files: 0
+            };
+
+            for (var f in $scope.model) {
+               $scope.localStateTotal.bytes += $scope.model[f].localBytes;
+               $scope.localStateTotal.files += $scope.model[f].localFiles;
+            }
+        }
+
         function refreshCompletion(device, folder) {
             if (device === $scope.myID) {
                 return;
@@ -599,18 +609,6 @@ angular.module('syncthing.core')
             return Math.floor(pct);
         };
 
-        $scope.deviceIcon = function (deviceCfg) {
-            if ($scope.connections[deviceCfg.deviceID]) {
-                if ($scope.completion[deviceCfg.deviceID] && $scope.completion[deviceCfg.deviceID]._total === 100) {
-                    return 'ok';
-                } else {
-                    return 'refresh';
-                }
-            }
-
-            return 'minus';
-        };
-
         $scope.deviceStatus = function (deviceCfg) {
             if ($scope.deviceFolders(deviceCfg).length === 0) {
                 return 'unused';
@@ -812,14 +810,11 @@ angular.module('syncthing.core')
         $scope.editDevice = function (deviceCfg) {
             $scope.currentDevice = $.extend({}, deviceCfg);
             $scope.editingExisting = true;
-            $scope.editingSelf = (deviceCfg.deviceID == $scope.myID);
             $scope.currentDevice._addressesStr = deviceCfg.addresses.join(', ');
-            if (!$scope.editingSelf) {
-                $scope.currentDevice.selectedFolders = {};
-                $scope.deviceFolders($scope.currentDevice).forEach(function (folder) {
-                    $scope.currentDevice.selectedFolders[folder] = true;
-                });
-            }
+            $scope.currentDevice.selectedFolders = {};
+            $scope.deviceFolders($scope.currentDevice).forEach(function (folder) {
+                $scope.currentDevice.selectedFolders[folder] = true;
+            });
             $scope.deviceEditor.$setPristine();
             $('#editDevice').modal();
         };
@@ -841,7 +836,6 @@ angular.module('syncthing.core')
                         selectedFolders: {}
                     };
                     $scope.editingExisting = false;
-                    $scope.editingSelf = false;
                     $scope.deviceEditor.$setPristine();
                     $('#editDevice').modal();
                 });
@@ -916,27 +910,25 @@ angular.module('syncthing.core')
                 return id !== deviceCfg.deviceID;
             });
 
-            if (!$scope.editingSelf) {
-                for (var id in deviceCfg.selectedFolders) {
-                    if (deviceCfg.selectedFolders[id]) {
-                        var found = false;
-                        for (i = 0; i < $scope.folders[id].devices.length; i++) {
-                            if ($scope.folders[id].devices[i].deviceID == deviceCfg.deviceID) {
-                                found = true;
-                                break;
-                            }
+            for (var id in deviceCfg.selectedFolders) {
+                if (deviceCfg.selectedFolders[id]) {
+                    var found = false;
+                    for (i = 0; i < $scope.folders[id].devices.length; i++) {
+                        if ($scope.folders[id].devices[i].deviceID == deviceCfg.deviceID) {
+                            found = true;
+                            break;
                         }
+                    }
 
-                        if (!found) {
-                            $scope.folders[id].devices.push({
-                                deviceID: deviceCfg.deviceID
-                            });
-                        }
-                    } else {
-                        $scope.folders[id].devices = $scope.folders[id].devices.filter(function (n) {
-                            return n.deviceID != deviceCfg.deviceID;
+                    if (!found) {
+                        $scope.folders[id].devices.push({
+                            deviceID: deviceCfg.deviceID
                         });
                     }
+                } else {
+                    $scope.folders[id].devices = $scope.folders[id].devices.filter(function (n) {
+                        return n.deviceID != deviceCfg.deviceID;
+                    });
                 }
             }
 
@@ -1208,14 +1200,16 @@ angular.module('syncthing.core')
             return folders;
         };
 
-        $scope.deleteFolder = function () {
+        $scope.deleteFolder = function (id) {
             $('#editFolder').modal('hide');
             if (!$scope.editingExisting) {
                 return;
             }
 
-            delete $scope.folders[$scope.currentFolder.id];
+            delete $scope.folders[id];
+            delete $scope.model[id];
             $scope.config.folders = folderList($scope.folders);
+            recalcLocalStateTotal();
 
             $scope.saveConfig();
         };

文件差异内容过多而无法显示
+ 1 - 1
internal/auto/gui.files.go


部分文件因为文件数量过多而无法显示