mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
125 lines
3.6 KiB
JavaScript
125 lines
3.6 KiB
JavaScript
|
/*global define */
|
||
|
define(['lib/stapes', 'api/LocalStorage'], function (Stapes, LocalStorage) {
|
||
|
'use strict';
|
||
|
|
||
|
return Stapes.subclass(/** @lends Settings.prototype */{
|
||
|
storage: null, servers: [],
|
||
|
|
||
|
/**
|
||
|
* @class Settings
|
||
|
* @classdesc Local application settings
|
||
|
* @constructs
|
||
|
* @fires saved
|
||
|
* @fires loaded
|
||
|
* @fires error
|
||
|
* @fires serverAdded
|
||
|
* @fires serverChanged
|
||
|
* @fires serverRemoved
|
||
|
*/
|
||
|
constructor: function () {
|
||
|
this.storage = new LocalStorage();
|
||
|
this.storage.on({
|
||
|
error: function (message) {
|
||
|
this.emit('error', message);
|
||
|
}, got: function (settings) {
|
||
|
if (settings) {
|
||
|
this.servers = settings.servers || [];
|
||
|
}
|
||
|
this.emit('loaded');
|
||
|
}, set: function () {
|
||
|
this.emit('saved');
|
||
|
}
|
||
|
}, this);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Save current settings
|
||
|
*/
|
||
|
save: function () {
|
||
|
this.storage.set({
|
||
|
servers: this.servers
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Loads persistent settings
|
||
|
*/
|
||
|
load: function () {
|
||
|
this.storage.get();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Add a server definition
|
||
|
* @param {object} server - Server information
|
||
|
*/
|
||
|
addServer: function (server) {
|
||
|
if (this.indexOfServer(server) === -1) {
|
||
|
if (this.servers.length === 0) {
|
||
|
server.selected = true;
|
||
|
}
|
||
|
|
||
|
this.servers.push(server);
|
||
|
this.save();
|
||
|
this.emit('serverAdded', server);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Sets a server as a default server
|
||
|
* @param {number} index - Index of the server in the server list to set as default one
|
||
|
*/
|
||
|
setSelectedServer: function (index) {
|
||
|
var i;
|
||
|
for (i = 0; i < this.servers.length; i++) {
|
||
|
delete this.servers[i].selected;
|
||
|
}
|
||
|
this.servers[index].selected = true;
|
||
|
this.save();
|
||
|
this.emit('serverChanged', this.servers[index]);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Remove a server from the list
|
||
|
* @param {number} index - Index of the server in the list to remove
|
||
|
*/
|
||
|
removeServer: function (index) {
|
||
|
this.servers.splice(index, 1);
|
||
|
this.save();
|
||
|
this.emit('serverRemoved');
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Update server information
|
||
|
* @param {number} index - Index of the server to update
|
||
|
* @param {object} server - New server information
|
||
|
*/
|
||
|
updateServer: function (index, server) {
|
||
|
if (index >= 0 && index < this.servers.length) {
|
||
|
this.servers[index] = server;
|
||
|
this.save();
|
||
|
this.emit('serverChanged', server);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Find the server in the list.
|
||
|
* @param {object} server - Server to search index for
|
||
|
* @returns {number} - Index of the server in the list. -1 if server not found
|
||
|
*/
|
||
|
indexOfServer: function (server) {
|
||
|
var i, tmp;
|
||
|
|
||
|
for (i = 0; i < this.servers.length; i++) {
|
||
|
tmp = this.servers[i];
|
||
|
|
||
|
if (tmp.port === server.port && tmp.address === server.address) {
|
||
|
return i;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
});
|