126 lines
6.3 KiB
JavaScript
126 lines
6.3 KiB
JavaScript
backupApp.controller('StateController', function($scope, $timeout, ServerStatus, BackupList, AppService, AppUtils, DialogService, gettextCatalog) {
|
|
$scope.state = ServerStatus.watch($scope);
|
|
$scope.backups = BackupList.watch($scope);
|
|
$scope.ServerStatus = ServerStatus;
|
|
|
|
$scope.activeTask = null;
|
|
|
|
var updateActiveTask = function() {
|
|
$scope.activeTaskID = $scope.state.activeTask == null ? null : $scope.state.activeTask.Item1;
|
|
$scope.activeBackup = $scope.state.activeTask == null ? null : BackupList.lookup[$scope.state.activeTask.Item2];
|
|
$scope.nextTask = ($scope.state.schedulerQueueIds == null || $scope.state.schedulerQueueIds.length == 0) ? null : BackupList.lookup[$scope.state.schedulerQueueIds[0].Item2];
|
|
$scope.nextScheduledTask = ($scope.state.proposedSchedule == null || $scope.state.proposedSchedule.length == 0) ? null : BackupList.lookup[$scope.state.proposedSchedule[0].Item1];
|
|
$scope.nextScheduledTime = ($scope.state.proposedSchedule == null || $scope.state.proposedSchedule.length == 0) ? null : $scope.state.proposedSchedule[0].Item2;
|
|
};
|
|
|
|
$scope.$on('backuplistchanged', updateActiveTask);
|
|
$scope.$on('serverstatechanged', updateActiveTask);
|
|
$scope.$on('serverstatechanged.pauseTimeRemain', function() { $timeout(function() {$scope.$digest(); }) });
|
|
|
|
$scope.sendResume = function() {
|
|
ServerStatus.resume().then(function() {}, AppUtils.connectionError);
|
|
};
|
|
|
|
function updateStateDisplay() {
|
|
var text = gettextCatalog.getString('Running …');
|
|
var pg = -1;
|
|
if ($scope.state.lastPgEvent != null && $scope.state.activeTask != null)
|
|
{
|
|
text = ServerStatus.progress_state_text[$scope.state.lastPgEvent.Phase || ''] || $scope.state.lastPgEvent.Phase;
|
|
|
|
|
|
if ($scope.state.lastPgEvent.Phase == 'Backup_ProcessingFiles' || $scope.state.lastPgEvent.Phase == 'Restore_DownloadingRemoteFiles') {
|
|
if ($scope.state.lastPgEvent.StillCounting) {
|
|
text = gettextCatalog.getString('Counting ({{files}} files found, {{size}})', { files: $scope.state.lastPgEvent.TotalFileCount, size: AppUtils.formatSizeString($scope.state.lastPgEvent.TotalFileSize) });
|
|
pg = 0;
|
|
} else {
|
|
var unaccountedbytes = ($scope.state.lastPgEvent.CurrentFilecomplete) ? 0 : $scope.state.lastPgEvent.CurrentFileoffset;
|
|
var filesleft = $scope.state.lastPgEvent.TotalFileCount - $scope.state.lastPgEvent.ProcessedFileCount;
|
|
var sizeleft = $scope.state.lastPgEvent.TotalFileSize - $scope.state.lastPgEvent.ProcessedFileSize - unaccountedbytes;
|
|
pg = ($scope.state.lastPgEvent.ProcessedFileSize + unaccountedbytes) / $scope.state.lastPgEvent.TotalFileSize;
|
|
|
|
if ($scope.state.lastPgEvent.ProcessedFileCount == 0)
|
|
pg = 0;
|
|
else if (pg >= 0.90)
|
|
pg = 0.90;
|
|
|
|
// If we have a speed append it
|
|
var speed_txt = ($scope.state.lastPgEvent.BackendSpeed < 0) ? "" : " at "+AppUtils.formatSizeString($scope.state.lastPgEvent.BackendSpeed)+"/s";
|
|
|
|
var restoring_text = $scope.state.lastPgEvent.Phase == 'Restore_DownloadingRemoteFiles' ? 'Restoring: ' : '';
|
|
|
|
// Finally construct the whole text
|
|
text = gettextCatalog.getString(restoring_text + '{{files}} files ({{size}}) to go {{speed_txt}}', { files: filesleft, size: AppUtils.formatSizeString(sizeleft), speed_txt: speed_txt});
|
|
}
|
|
}
|
|
else if ($scope.state.lastPgEvent.Phase == 'Backup_Finalize' || $scope.state.lastPgEvent.Phase == 'Backup_WaitForUpload')
|
|
{
|
|
pg = 0.90;
|
|
}
|
|
else if ($scope.state.lastPgEvent.Phase == 'Backup_Delete' || $scope.state.lastPgEvent.Phase == 'Backup_Compact')
|
|
{
|
|
pg = 0.95;
|
|
}
|
|
else if ($scope.state.lastPgEvent.Phase == 'Backup_VerificationUpload' || $scope.state.lastPgEvent.Phase == 'Backup_PostBackupVerify')
|
|
{
|
|
pg = 0.98;
|
|
}
|
|
else if ($scope.state.lastPgEvent.Phase == 'Backup_Complete' || $scope.state.lastPgEvent.Phase == 'Backup_WaitForUpload')
|
|
{
|
|
pg = 1;
|
|
}
|
|
else if ($scope.state.lastPgEvent.OverallProgress > 0) {
|
|
pg = $scope.state.lastPgEvent.OverallProgress;
|
|
}
|
|
}
|
|
|
|
$scope.StateText = text;
|
|
$scope.Progress = pg;
|
|
};
|
|
|
|
$scope.$watch('state.lastPgEvent', updateStateDisplay, true);
|
|
$scope.$on('serverstatechanged', updateStateDisplay);
|
|
|
|
$scope.stopDialog = function() {
|
|
if ($scope.activeTaskID == null)
|
|
return;
|
|
|
|
var taskId = $scope.activeTaskID;
|
|
var txt = $scope.state.lastPgEvent == null ? '' : ($scope.state.lastPgEvent.Phase || '');
|
|
|
|
function handleClick(ix) {
|
|
if (ix == 0)
|
|
{
|
|
AppService.post('/task/' + taskId + '/stopaftercurrentfile');
|
|
$scope.StopReqId = taskId;
|
|
}
|
|
else if (ix == 1) {
|
|
AppService.post('/task/' + taskId + '/stopnow');
|
|
$scope.StopReqId = taskId;
|
|
}
|
|
};
|
|
|
|
if (txt.indexOf('Backup_') == 0)
|
|
{
|
|
DialogService.dialog(
|
|
gettextCatalog.getString("Stop running backup"),
|
|
gettextCatalog.getString("You can stop the backup after any file uploads currently in progress have finished."),
|
|
[gettextCatalog.getString("Stop after current file"), gettextCatalog.getString("Stop now"), gettextCatalog.getString("Cancel")],
|
|
handleClick
|
|
);
|
|
}
|
|
else
|
|
{
|
|
DialogService.dialog(
|
|
gettextCatalog.getString("Stop running task"),
|
|
gettextCatalog.getString("You can stop the task immediately, or allow the process to continue its current file and then stop."),
|
|
[gettextCatalog.getString("Stop after the current file"), gettextCatalog.getString("Stop now"), gettextCatalog.getString("Cancel")],
|
|
handleClick
|
|
);
|
|
}
|
|
};
|
|
|
|
updateStateDisplay();
|
|
updateActiveTask();
|
|
});
|