Browse Source

Add progress reporting to move and copy operations

Signed-off-by: Tomasz Grobelny <tomasz@grobelny.net>
tags/v16.0.0alpha1
Tomasz Grobelny 5 years ago
parent
commit
1f6f276fa0

+ 12
- 31
apps/files/js/filelist.js View File

@@ -2207,29 +2207,6 @@
fileNames = [fileNames];
}

function Semaphore(max) {
var counter = 0;
var waiting = [];

this.acquire = function() {
if(counter < max) {
counter++;
return new Promise(function(resolve) { resolve(); });
} else {
return new Promise(function(resolve) { waiting.push(resolve); });
}
};

this.release = function() {
counter--;
if (waiting.length > 0 && counter < max) {
counter++;
var promise = waiting.shift();
promise();
}
};
}

var moveFileFunction = function(fileName) {
var $tr = self.findFileEl(fileName);
self.showFileBusyState($tr, true);
@@ -2270,14 +2247,20 @@
self.showFileBusyState($tr, false);
});
};
return this.reportOperationProgress(fileNames, moveFileFunction, callback);
},

var mcSemaphore = new Semaphore(10);
reportOperationProgress: function (fileNames, operationFunction, callback){
var self = this;
self._operationProgressBar.showProgressBar(false);
var mcSemaphore = new OCA.Files.Semaphore(5);
var counter = 0;
var promises = _.map(fileNames, function(arg) {
return mcSemaphore.acquire().then(function(){
moveFileFunction(arg).then(function(){
return operationFunction(arg).then(function(){
mcSemaphore.release();
counter++;
self._operationProgressBar.setProgressBarValue(100.0*counter/fileNames.length);
});
});
});
@@ -2286,6 +2269,7 @@
if (callback) {
callback();
}
self._operationProgressBar.hideProgressBar();
});
},

@@ -2310,7 +2294,7 @@
if (!_.isArray(fileNames)) {
fileNames = [fileNames];
}
_.each(fileNames, function(fileName) {
var copyFileFunction = function(fileName) {
var $tr = self.findFileEl(fileName);
self.showFileBusyState($tr, true);
if (targetPath.charAt(targetPath.length - 1) !== '/') {
@@ -2438,11 +2422,8 @@
}
}
});
});

if (callback) {
callback();
}
};
return this.reportOperationProgress(fileNames, copyFileFunction, callback);
},

/**

+ 1
- 0
apps/files/js/merged-index.json View File

@@ -21,6 +21,7 @@
"sidebarpreviewmanager.js",
"sidebarpreviewtext.js",
"detailtabview.js",
"semaphore.js",
"mainfileinfodetailview.js",
"operationprogressbar.js",
"detailsview.js",

+ 10
- 2
apps/files/js/operationprogressbar.js View File

@@ -37,8 +37,16 @@
});
},

showProgressBar: function() {
$('#uploadprogresswrapper .stop').show();
showProgressBar: function(showCancelButton) {
if (showCancelButton) {
showCancelButton = true;
}
$('#uploadprogressbar').progressbar({value: 0});
if(showCancelButton) {
$('#uploadprogresswrapper .stop').show();
} else {
$('#uploadprogresswrapper .stop').hide();
}
$('#uploadprogresswrapper .label').show();
$('#uploadprogressbar').fadeIn();
this.$el.trigger(new $.Event('resized'));

+ 37
- 0
apps/files/js/semaphore.js View File

@@ -0,0 +1,37 @@
/*
* Copyright (c) 2018
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/

(function(){
var Semaphore = function(max) {
var counter = 0;
var waiting = [];

this.acquire = function() {
if(counter < max) {
counter++;
return new Promise(function(resolve) { resolve(); });
} else {
return new Promise(function(resolve) { waiting.push(resolve); });
}
};

this.release = function() {
counter--;
if (waiting.length > 0 && counter < max) {
counter++;
var promise = waiting.shift();
promise();
}
};
};

OCA.Files.Semaphore = Semaphore;

})();

Loading…
Cancel
Save