This repository has been archived on 2022-01-02. You can view files and clone it, but cannot push or open issues/pull-requests.
AriaNg/src/scripts/services/ariaNgSettingService.js

261 lines
9.0 KiB
JavaScript

(function () {
'use strict';
angular.module('ariaNg').factory('ariaNgSettingService', ['$window', '$location', '$filter', '$translate', 'base64', 'amMoment', 'localStorageService', 'ariaNgConstants', 'ariaNgDefaultOptions', 'ariaNgLanguages', function ($window, $location, $filter, $translate, base64, amMoment, localStorageService, ariaNgConstants, ariaNgDefaultOptions, ariaNgLanguages) {
var onFirstVisitCallbacks = [];
var sessionSettings = {
debugMode: false
};
var fireFirstVisitEvent = function () {
if (!angular.isArray(onFirstVisitCallbacks) || onFirstVisitCallbacks.length < 1) {
return;
}
for (var i = 0; i < onFirstVisitCallbacks.length; i++) {
var callback = onFirstVisitCallbacks[i];
callback();
}
};
var getDefaultLanguage = function () {
var browserLang = $window.navigator.browserLanguage ? $window.navigator.browserLanguage : $window.navigator.language;
if (!browserLang) {
return ariaNgDefaultOptions.language;
}
browserLang = browserLang.replace(/\-/g, '_');
if (!ariaNgLanguages[browserLang]) {
return ariaNgDefaultOptions.language;
}
return browserLang;
};
var getDefaultRpcHost = function () {
var currentHost = $location.$$host;
if (currentHost) {
return currentHost;
}
return ariaNgConstants.defaultHost;
};
var setOptions = function (options) {
return localStorageService.set(ariaNgConstants.optionStorageKey, options);
};
var getOptions = function () {
var options = localStorageService.get(ariaNgConstants.optionStorageKey);
if (!options) {
options = angular.extend({}, ariaNgDefaultOptions);
options.language = getDefaultLanguage();
setOptions(options);
fireFirstVisitEvent();
}
return options;
};
var getOption = function (key) {
var options = getOptions();
if (angular.isUndefined(options[key])) {
options[key] = ariaNgDefaultOptions[key];
setOptions(options);
}
return options[key];
};
var setOption = function (key, value) {
var options = getOptions();
options[key] = value;
setOptions(options);
};
return {
getAllOptions: function () {
var options = angular.extend({}, ariaNgDefaultOptions, getOptions());
if (!options.rpcHost) {
options.rpcHost = getDefaultRpcHost();
}
if (options.secret) {
options.secret = base64.decode(options.secret);
}
return options;
},
getAllSessionOptions: function () {
return angular.copy(sessionSettings);
},
applyLanguage: function (lang) {
if (!ariaNgLanguages[lang]) {
return false;
}
$translate.use(lang);
amMoment.changeLocale(lang);
return true;
},
getLanguage: function () {
return getOption('language');
},
setLanguage: function (value) {
if (this.applyLanguage(value)) {
setOption('language', value);
}
},
isEnableDebugMode: function () {
return sessionSettings.debugMode;
},
setDebugMode: function (value) {
sessionSettings.debugMode = value;
},
getTitle: function () {
return getOption('title');
},
getFinalTitle: function (context) {
var title = this.getTitle();
context = angular.extend({
downloadingCount: 0,
waitingCount: 0,
stoppedCount: 0,
downloadSpeed: 0,
uploadSpeed: 0
}, context);
title = title.replace(/\$\{downloading\}/g, $translate.instant('Downloading') + ': ' + context.downloadingCount);
title = title.replace(/\$\{waiting\}/g, $translate.instant('Waiting') + ': ' + context.waitingCount);
title = title.replace(/\$\{stopped\}/g, $translate.instant('Downloaded / Stopped') + ': ' + context.stoppedCount);
title = title.replace(/\$\{downspeed\}/g, $translate.instant('Download') + ': ' + $filter('readableVolumn')(context.downloadSpeed) + '/s');
title = title.replace(/\$\{upspeed\}/g, $translate.instant('Upload') + ': ' + $filter('readableVolumn')(context.uploadSpeed) + '/s');
title = title.replace(/\$\{title\}/g, ariaNgConstants.title);
return title;
},
setTitle: function (value) {
setOption('title', value);
},
getTitleRefreshInterval: function () {
return getOption('titleRefreshInterval');
},
setTitleRefreshInterval: function (value) {
setOption('titleRefreshInterval', Math.max(parseInt(value), 0));
},
getBrowserNotification: function () {
return getOption('browserNotification');
},
setBrowserNotification: function (value) {
setOption('browserNotification', value);
},
getJsonRpcUrl: function () {
var protocol = getOption('protocol');
var rpcHost = getOption('rpcHost');
var rpcPort = getOption('rpcPort');
if (!rpcHost) {
rpcHost = getDefaultRpcHost();
}
return protocol + '://' + rpcHost + ':' + rpcPort + '/jsonrpc';
},
setRpcHost: function (value) {
setOption('rpcHost', value);
},
setRpcPort: function (value) {
setOption('rpcPort', Math.max(parseInt(value), 0));
},
getProtocol: function () {
return getOption('protocol');
},
setProtocol: function (value) {
setOption('protocol', value);
},
isUseWebSocket: function (protocol) {
if (!protocol) {
protocol = this.getProtocol();
}
return protocol === 'ws' || protocol === 'wss';
},
getSecret: function () {
var value = getOption('secret');
return (value ? base64.decode(value) : value);
},
setSecret: function (value) {
if (value) {
value = base64.encode(value);
}
setOption('secret', value);
},
getGlobalStatRefreshInterval: function () {
return getOption('globalStatRefreshInterval');
},
setGlobalStatRefreshInterval: function (value) {
setOption('globalStatRefreshInterval', Math.max(parseInt(value), 0));
},
getDownloadTaskRefreshInterval: function () {
return getOption('downloadTaskRefreshInterval');
},
setDownloadTaskRefreshInterval: function (value) {
setOption('downloadTaskRefreshInterval', Math.max(parseInt(value), 0));
},
getDisplayOrder: function () {
var value = getOption('displayOrder');
if (!value) {
value = 'default:asc';
}
return value;
},
setDisplayOrder: function (value) {
setOption('displayOrder', value);
},
getFileListDisplayOrder: function () {
var value = getOption('fileListDisplayOrder');
if (!value) {
value = 'default:asc';
}
return value;
},
setFileListDisplayOrder: function (value) {
setOption('fileListDisplayOrder', value);
},
getPeerListDisplayOrder: function () {
var value = getOption('peerListDisplayOrder');
if (!value) {
value = 'default:asc';
}
return value;
},
setPeerListDisplayOrder: function (value) {
setOption('peerListDisplayOrder', value);
},
onFirstAccess: function (callback) {
if (!callback) {
return;
}
onFirstVisitCallbacks.push(callback);
}
};
}]);
}());