Change progress emitter

1. Do not use cached value for BytesCompleted
2. Refactor JS a bit
3. Allow disabling progress emitter
This commit is contained in:
Audrius Butkevicius 2014-11-25 22:07:18 +00:00
parent c7d779fe88
commit ea17542e4b
4 changed files with 22 additions and 24 deletions

View File

@ -301,20 +301,19 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
} }
} }
for(var folder in $scope.progress){ for(var folder in $scope.progress){
var refresh = false;
if (!(folder in progress)) { if (!(folder in progress)) {
refresh = true;
refreshFolder(folder); refreshFolder(folder);
} else { if ($scope.neededFolder == folder) {
refreshNeed(folder);
}
} else if ($scope.neededFolder == folder) {
for(file in $scope.progress[folder]){ for(file in $scope.progress[folder]){
if (!(file in progress[folder])) { if (!(file in progress[folder])) {
refresh = true; refreshNeed(folder);
break;
} }
} }
} }
if (refresh) {
refreshNeed(folder);
}
} }
$scope.progress = progress; $scope.progress = progress;
console.log("DownloadProgress", $scope.progress); console.log("DownloadProgress", $scope.progress);
@ -444,15 +443,13 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
}); });
} }
function refreshNeed (folder) { function refreshNeed(folder) {
if ($scope.neededFolder == folder) { $http.get(urlbase + "/need?folder=" + encodeURIComponent(folder)).success(function (data) {
$http.get(urlbase + "/need?folder=" + encodeURIComponent(folder)).success(function (data) { if ($scope.neededFolder == folder) {
if ($scope.neededFolder == folder) { console.log("refreshNeed", folder, data);
console.log("refreshNeed", folder, data); $scope.needed = data;
$scope.needed = data; }
} });
});
}
} }
var refreshDeviceStats = debounce(function () { var refreshDeviceStats = debounce(function () {
@ -536,7 +533,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
} }
var pct = 100 * $scope.model[folder].inSyncBytes / $scope.model[folder].globalBytes; var pct = 100 * $scope.model[folder].inSyncBytes / $scope.model[folder].globalBytes;
return Math.min(Math.floor(pct), 100); return Math.floor(pct);
}; };
$scope.deviceIcon = function (deviceCfg) { $scope.deviceIcon = function (deviceCfg) {
@ -1037,7 +1034,7 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
$scope.showNeed = function (folder) { $scope.showNeed = function (folder) {
$scope.neededFolder = folder; $scope.neededFolder = folder;
refreshNeed(folder); refreshNeed(folder);
$('#needed').modal().result.finally(function(){ $('#needed').modal().on('hidden.bs.modal', function(){
$scope.neededFolder = undefined; $scope.neededFolder = undefined;
$scope.needed = undefined; $scope.needed = undefined;
}); });

File diff suppressed because one or more lines are too long

View File

@ -145,7 +145,9 @@ func NewModel(cfg *config.ConfigWrapper, deviceName, clientName, clientVersion s
finder: files.NewBlockFinder(db, cfg), finder: files.NewBlockFinder(db, cfg),
progressEmitter: NewProgressEmitter(cfg), progressEmitter: NewProgressEmitter(cfg),
} }
go m.progressEmitter.Serve() if cfg.Options().ProgressUpdateIntervalS > -1 {
go m.progressEmitter.Serve()
}
var timeout = 20 * 60 // seconds var timeout = 20 * 60 // seconds
if t := os.Getenv("STDEADLOCKTIMEOUT"); len(t) > 0 { if t := os.Getenv("STDEADLOCKTIMEOUT"); len(t) > 0 {

View File

@ -120,10 +120,9 @@ func (t *ProgressEmitter) BytesCompleted(folder string) (bytes int64) {
t.mut.Lock() t.mut.Lock()
defer t.mut.Unlock() defer t.mut.Unlock()
files, ok := t.last[folder] for _, s := range t.registry {
if ok { if s.folder == folder {
for _, s := range files { bytes += s.Progress().BytesDone
bytes += s.BytesDone
} }
} }
if debug { if debug {