Files
duplicati/Duplicati/Server/webroot/ngax/scripts/controllers/AppController.js
T

186 lines
7.8 KiB
JavaScript
Raw Normal View History

2017-02-07 21:51:14 +01:00
backupApp.controller('AppController', function($scope, $cookies, $location, AppService, BrandingService, ServerStatus, SystemInfo, AppUtils, DialogService, gettextCatalog) {
$scope.brandingService = BrandingService.watch($scope);
$scope.state = ServerStatus.watch($scope);
$scope.systemInfo = SystemInfo.watch($scope);
2017-02-07 21:51:14 +01:00
$scope.localized = {};
2017-02-07 21:51:14 +01:00
$scope.location = $location;
$scope.saved_theme = $scope.active_theme = $cookies.get('current-theme') || 'default';
$scope.throttle_active = false;
// If we want the theme settings
// to be persisted on the server,
// set to "true" here
var save_theme_on_server = false;
$scope.doReconnect = function() {
ServerStatus.reconnect();
};
2016-10-15 14:59:04 +02:00
2016-11-01 11:39:28 +01:00
$scope.resume = function() {
2016-10-15 14:59:04 +02:00
ServerStatus.resume().then(function() {}, AppUtils.connectionError);
};
2016-11-01 11:39:28 +01:00
$scope.pause = function(duration) {
ServerStatus.pause(duration).then(function() {}, AppUtils.connectionError);
};
2016-11-08 14:36:09 +01:00
$scope.isLoggedIn = $cookies.get('session-auth') != null && $cookies.get('session-auth') != '';
$scope.log_out = function() {
AppService.log_out().then(function() {
$cookies.remove('session-auth', { path: '/' });
location.reload(true);
}, AppUtils.connectionError);
};
2017-02-07 21:51:14 +01:00
$scope.pauseOptions = function() {
if ($scope.state.programState != 'Running') {
$scope.resume();
} else {
DialogService.htmlDialog(
gettextCatalog.getString('Pause options'),
'templates/pause.html',
[gettextCatalog.getString('OK'), gettextCatalog.getString('Cancel')],
function(index, text, cur) {
if (index == 0 && cur != null && cur.time != null) {
var time = cur.time;
$scope.pause(time == 'infinite' ? '' : time);
}
}
);
}
};
$scope.throttleOptions = function() {
DialogService.htmlDialog(
gettextCatalog.getString('Throttle settings'),
'templates/throttle.html',
[gettextCatalog.getString('OK'), gettextCatalog.getString('Cancel')],
function(index, text, cur) {
if (index == 0 && cur != null && cur.uploadspeed != null && cur.downloadspeed != null) {
var patchdata = {
'max-download-speed': cur.downloadthrottleenabled ? cur.downloadspeed : '',
'max-upload-speed': cur.uploadthrottleenabled ? cur.uploadspeed : '',
};
AppService.patch('/serversettings', patchdata, {headers: {'Content-Type': 'application/json; charset=utf-8'}}).then(function(data) {
$scope.throttle_active = cur.downloadthrottleenabled || cur.uploadthrottleenabled;
}, AppUtils.connectionError);
}
}
);
2017-02-07 21:51:14 +01:00
};
function updateCurrentPage() {
$scope.active_theme = $scope.saved_theme;
if ($location.$$path == '/' || $location.$$path == '')
2017-02-07 21:51:14 +01:00
$scope.current_page = 'home';
else if ($location.$$path == '/addstart' || $location.$$path == '/add' || $location.$$path == '/import')
$scope.current_page = 'add';
else if ($location.$$path == '/restorestart' || $location.$$path == '/restore' || $location.$$path == '/restoredirect' || $location.$$path.indexOf('/restore/') == 0)
$scope.current_page = 'restore';
else if ($location.$$path == '/settings')
$scope.current_page = 'settings';
else if ($location.$$path == '/log')
$scope.current_page = 'log';
else if ($location.$$path == '/about')
$scope.current_page = 'about';
else
$scope.current_page = '';
};
$scope.$on('serverstatechanged', function() {
// Unwanted jQuery interference, but the menu is built with this
if (ServerStatus.state.programState == 'Paused') {
$('#contextmenu_pause').removeClass('open');
$('#contextmenulink_pause').removeClass('open');
}
});
//$scope.$on('$routeUpdate', updateCurrentPage);
$scope.$watch('location.$$path', updateCurrentPage);
updateCurrentPage();
function loadCurrentTheme() {
if (save_theme_on_server) {
AppService.get('/uisettings/ngax').then(
function(data) {
var theme = 'default';
if (data.data != null && (data.data['theme'] || '').trim().length > 0)
theme = data.data['theme'];
var now = new Date();
var exp = new Date(now.getFullYear()+10, now.getMonth(), now.getDate());
$cookies.put('current-theme', theme, { expires: exp });
$scope.saved_theme = $scope.active_theme = theme;
}, function() {}
);
}
};
// In case the cookie is out-of-sync
loadCurrentTheme();
$scope.$on('update_theme', function(event, args) {
var theme = 'default';
if (args != null && (args.theme || '').trim().length != 0)
theme = args.theme;
if (save_theme_on_server) {
// Set it here to avoid flickering when the page changes
$scope.saved_theme = $scope.active_theme = theme;
AppService.patch('/uisettings/ngax', { 'theme': theme }, {'headers': {'Content-Type': 'application/json'}}).then(
function(data) {
var now = new Date();
var exp = new Date(now.getFullYear()+10, now.getMonth(), now.getDate());
$cookies.put('current-theme', theme, { expires: exp });
$scope.saved_theme = $scope.active_theme = theme;
}, function() {}
);
} else {
var now = new Date();
var exp = new Date(now.getFullYear()+10, now.getMonth(), now.getDate());
$cookies.put('current-theme', theme, { expires: exp });
$scope.saved_theme = $scope.active_theme = theme;
}
loadCurrentTheme();
});
$scope.$on('preview_theme', function(event, args) {
if (args == null || (args.theme + '').trim().length == 0)
$scope.active_theme = $scope.saved_theme;
else
$scope.active_theme = args.theme || '';
});
AppService.get('/serversettings').then(function(data) {
$scope.forceActualDate = AppUtils.parseBoolString(data.data['--force-actual-date']);
var ut = data.data['max-upload-speed'];
var dt = data.data['max-download-speed'];
$scope.throttle_active = (ut != null && ut.trim().length != 0) || (dt != null && dt.trim().length != 0);
var firstpw = data.data['has-asked-for-password-protection'];
var haspw = data.data['server-passphrase'];
if (!firstpw && haspw == '') {
DialogService.dialog(
gettextCatalog.getString('First run setup'),
gettextCatalog.getString('If your machine is in a multi-user environment (i.e. the machine has more than one account), you need to set a password to prevent other users from accessing data on your account.\nDo you want to set a password now?'),
[gettextCatalog.getString('No, my machine has only a single account'), gettextCatalog.getString('Yes')],
function(btn) {
AppService.patch('/serversettings', { 'has-asked-for-password-protection': 'true'}, {'headers': {'Content-Type': 'application/json'}});
if (btn == 1) {
$location.path('/settings');
}
}
);
}
}, AppUtils.connectionError);
});