Просмотр исходного кода

Revert "Merge branch 'pr/711'" (...)

Temporary revert to the old debounce behavior. It's a bit bad and drives
up CPU usage, but mostly shows correct info in the GUI. This will be
improved shortly.

This reverts commit 51443308074456ef8f6ca62b29de0bc7ed3aad85, reversing
changes made to c34f3defe1aa1fe28aca1d5e69b712d4d857da49.

Conflicts:
	auto/gui.files.go
Jakob Borg 11 лет назад
Родитель
Сommit
b0b34236e3
2 измененных файлов с 68 добавлено и 61 удалено
  1. 0 0
      auto/gui.files.go
  2. 68 61
      gui/app.js

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
auto/gui.files.go


+ 68 - 61
gui/app.js

@@ -9,9 +9,6 @@
 
 var syncthing = angular.module('syncthing', ['pascalprecht.translate']);
 var urlbase = 'rest';
-var requestTimeout = 300000; // Retry the REST request after 5 minutes without reply
-var refreshTimeout = 5000; // Do not refresh the generic status faster than 5 seconds
-var refreshQuickTimeout = 500; // Do not refresh the quick stats faster than 500 milliseconds
 
 syncthing.config(function ($httpProvider, $translateProvider) {
     $httpProvider.defaults.xsrfHeaderName = 'X-CSRF-Token';
@@ -252,19 +249,19 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
         });
     });
 
-    var nextCall = {};
+    var debouncedFuncs = {};
 
     function refreshRepo(repo) {
         var key = "refreshRepo" + repo;
-        if (nextCall[key] && nextCall[key] > Date.now()) {
-            return;
+        if (!debouncedFuncs[key]) {
+            debouncedFuncs[key] = debounce(function () {
+                $http.get(urlbase + '/model?repo=' + encodeURIComponent(repo)).success(function (data) {
+                    $scope.model[repo] = data;
+                    console.log("refreshRepo", repo, data);
+                });
+            }, 1000, true);
         }
-        nextCall[key] = Date.now() + requestTimeout;
-        $http.get(urlbase + '/model?repo=' + encodeURIComponent(repo)).success(function (data) {
-            nextCall[key] = Date.now() + refreshTimeout;
-            $scope.model[repo] = data;
-            console.log("refreshRepo", repo, data);
-        });
+        debouncedFuncs[key]();
     }
 
     function updateLocalConfig(config) {
@@ -295,13 +292,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
     }
 
     function refreshSystem() {
-        var key = "refreshSystem"
-        if (nextCall[key] && nextCall[key] > Date.now()) {
-            return;
-        }
-        nextCall[key] = Date.now() + requestTimeout;
         $http.get(urlbase + '/system').success(function (data) {
-            nextCall[key] = Date.now() + refreshQuickTimeout;
             $scope.myID = data.myID;
             $scope.system = data;
             console.log("refreshSystem", data);
@@ -314,40 +305,34 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
         }
 
         var key = "refreshCompletion" + node + repo;
-        if (nextCall[key] && nextCall[key] > Date.now()) {
-            return;
-        }
-        nextCall[key] = Date.now() + requestTimeout;
-        $http.get(urlbase + '/completion?node=' + node + '&repo=' + encodeURIComponent(repo)).success(function (data) {
-            nextCall[key] = Date.now() + refreshTimeout;
-            if (!$scope.completion[node]) {
-                $scope.completion[node] = {};
-            }
-            $scope.completion[node][repo] = data.completion;
-
-            var tot = 0,
-                cnt = 0;
-            for (var cmp in $scope.completion[node]) {
-                if (cmp === "_total") {
-                    continue;
-                }
-                tot += $scope.completion[node][cmp];
-                cnt += 1;
-            }
-            $scope.completion[node]._total = tot / cnt;
+        if (!debouncedFuncs[key]) {
+            debouncedFuncs[key] = debounce(function () {
+                $http.get(urlbase + '/completion?node=' + node + '&repo=' + encodeURIComponent(repo)).success(function (data) {
+                    if (!$scope.completion[node]) {
+                        $scope.completion[node] = {};
+                    }
+                    $scope.completion[node][repo] = data.completion;
+
+                    var tot = 0,
+                        cnt = 0;
+                    for (var cmp in $scope.completion[node]) {
+                        if (cmp === "_total") {
+                            continue;
+                        }
+                        tot += $scope.completion[node][cmp];
+                        cnt += 1;
+                    }
+                    $scope.completion[node]._total = tot / cnt;
 
-            console.log("refreshCompletion", node, repo, $scope.completion[node]);
-        });
+                    console.log("refreshCompletion", node, repo, $scope.completion[node]);
+                });
+            }, 1000, true);
+        }
+        debouncedFuncs[key]();
     }
 
     function refreshConnectionStats() {
-        var key = "refreshConnectionStats"
-        if (nextCall[key] && nextCall[key] > Date.now()) {
-            return;
-        }
-        nextCall[key] = Date.now() + requestTimeout;
         $http.get(urlbase + '/connections').success(function (data) {
-            nextCall[key] = Date.now() + refreshQuickTimeout;
             var now = Date.now(),
                 td = (now - prevDate) / 1000,
                 id;
@@ -371,13 +356,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
     }
 
     function refreshErrors() {
-        var key = "refreshErrors"
-        if (nextCall[key] && nextCall[key] > Date.now()) {
-            return;
-        }
-        nextCall[key] = Date.now() + requestTimeout;
         $http.get(urlbase + '/errors').success(function (data) {
-            nextCall[key] = Date.now() + refreshQuickTimeout;
             $scope.errors = data.errors;
             console.log("refreshErrors", data);
         });
@@ -394,14 +373,8 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
         });
     }
 
-    var refreshNodeStats = function () {
-        var key = "refreshNode";
-        if (nextCall[key] && nextCall[key] > Date.now()) {
-            return;
-        }
-        nextCall[key] = Date.now() + requestTimeout;
+    var refreshNodeStats = debounce(function () {
         $http.get(urlbase + "/stats/node").success(function (data) {
-            nextCall[key] = Date.now() + refreshTimeout;
             $scope.stats = data;
             for (var node in $scope.stats) {
                 $scope.stats[node].LastSeen = new Date($scope.stats[node].LastSeen);
@@ -409,7 +382,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
             }
             console.log("refreshNodeStats", data);
         });
-    }
+    }, 500);
 
     $scope.init = function () {
         refreshSystem();
@@ -1061,6 +1034,40 @@ function isEmptyObject(obj) {
     return true;
 }
 
+function debounce(func, wait) {
+    var timeout, args, context, timestamp, result, again;
+
+    var later = function () {
+        var last = Date.now() - timestamp;
+        if (last < wait) {
+            timeout = setTimeout(later, wait - last);
+        } else {
+            timeout = null;
+            if (again) {
+                again = false;
+                result = func.apply(context, args);
+                context = args = null;
+            }
+        }
+    };
+
+    return function () {
+        context = this;
+        args = arguments;
+        timestamp = Date.now();
+        var callNow = !timeout;
+        if (!timeout) {
+            timeout = setTimeout(later, wait);
+            result = func.apply(context, args);
+            context = args = null;
+        } else {
+            again = true;
+        }
+
+        return result;
+    };
+}
+
 syncthing.filter('natural', function () {
     return function (input, valid) {
         return input.toFixed(decimals(input, valid));

Некоторые файлы не были показаны из-за большого количества измененных файлов