|
|
-
-
- // Settings handling
- define(["sugar-web/datastore"], function (datastore) {
- var settings = {};
-
- // Default value
- settings.init = function() {
- this.name = "<No name>";
- this.color = 22;
- this.colorvalue = null;
- this.activities = [];
- this.view = 0;
- this.language = "en";
- var navigatorLanguage = navigator.language;
- if (navigatorLanguage) {
- if (navigatorLanguage.indexOf("fr") != -1)
- this.language = "fr";
- else if (navigatorLanguage.indexOf("es") != -1)
- this.language = "es";
- else if (navigatorLanguage.indexOf("de") != -1)
- this.language = "de";
- else if (navigatorLanguage.indexOf("ar") != -1)
- this.language = "ar";
- else if (navigatorLanguage.indexOf("ja") != -1)
- this.language = "ja";
- else if (navigatorLanguage.indexOf("pl") != -1)
- this.language = "pl";
- else if (navigatorLanguage.indexOf("pt") != -1)
- this.language = "pt";
- }
- this.options = {stats: true, sync: true};
- this.connected = false;
- this.server = null;
- this.networkId = null;
- this.privateJournal = null;
- this.sharedJournal = null;
- this.genericActivity = {directory: "icons", icon: "application-x-generic.svg"};
- this.token = null;
- this.histoy = null;
- }
- settings.init();
-
- // Load settings from local storage
- settings.load = function(then) {
- // Load settings
- var that = this;
- datastore.localStorage.load(function() {
- that.history = datastore.localStorage.getValue('sugar_history');
- var preferences = datastore.localStorage.getValue('sugar_settings');
- if (preferences == null || preferences.name === undefined) {
- if (then) {
- then(false);
- }
- return;
- }
- that.name = preferences.name;
- that.color = preferences.color;
- that.colorvalue = preferences.colorvalue;
- that.view = preferences.view;
- if (preferences.language !== undefined) {
- that.language = preferences.language;
- }
- if (preferences.connected !== undefined) {
- that.connected = preferences.connected;
- }
- if (preferences.server !== undefined) {
- that.server = preferences.server;
- }
- if (preferences.networkId !== undefined) {
- that.networkId = preferences.networkId;
- }
- if (preferences.privateJournal !== undefined) {
- that.privateJournal = preferences.privateJournal;
- }
- if (preferences.sharedJournal !== undefined) {
- that.sharedJournal = preferences.sharedJournal;
- }
- if (preferences.token !== undefined) {
- that.token = preferences.token;
- }
- if (preferences.options !== undefined) {
- that.options = preferences.options;
- }
-
- // Set language
- l10n.language.code = that.language;
-
- // Load activities
- that.activities = preferences.activities;
-
- // Load datastore entries for each activity
- that.updateEntries();
- if (then) {
- then(true);
- }
- });
- };
-
- // Update entries for each activity
- settings.updateEntries = function() {
- var length = this.activities ? this.activities.length : 0;
- for (var i = 0 ; i < length ; i++) {
- var activity = this.activities[i];
- activity.instances = datastore.find(activity.id);
- activity.instances.sort(function(e0, e1) {
- return parseInt(e1.metadata.timestamp) - parseInt(e0.metadata.timestamp);
- });
- }
- };
-
- // Save settings to local storage
- settings.save = function() {
- datastore.localStorage.setValue('sugar_settings', {
- name: this.name,
- color: this.color,
- options: this.options,
- colorvalue: xoPalette.colors[this.color],
- activities: this.activities,
- view: app.getView(),
- language: this.language,
- connected: this.connected,
- server: this.server,
- networkId: this.networkId,
- privateJournal: this.privateJournal,
- sharedJournal: this.sharedJournal,
- token: this.token
- });
- };
-
- // Save settings to the server
- settings.saveToServer = function(remoteserver, then, error) {
- if (this.networkId != null) {
- var that = this;
- remoteserver.putUser(
- this.networkId,
- {
- name: that.name,
- color: xoPalette.colors[that.color],
- language: that.language,
- options: that.options,
- favorites: that.getFavoritesActivitiesName()
- },
- function(inSender, inResponse) {
- if (then) {
- then();
- }
- },
- function(inResponse, inCode) {
- console.log("WARNING: Error updating network user");
- if (error) {
- error(inResponse, inCode);
- }
- }
- );
- }
- else {
- if (then) {
- then();
- }
- }
- };
-
- // Merge current settings with the one in parameter
- settings.merge = function(preferences) {
- var changed = false;
- if (preferences.name !== undefined && preferences.name != this.name) { this.name = preferences.name; changed = true; }
- if (this.colorvalue == null || preferences.color !== undefined && (preferences.color.fill != this.colorvalue.fill || preferences.color.stroke != this.colorvalue.stroke)) {
- this.colorvalue = preferences.color;
- this.color = util.getColorIndex(this.colorvalue);
- changed = true;
- }
- if (preferences.language !== undefined && preferences.language != this.language) { this.language = preferences.language; changed = true; }
- if (preferences.favorites !== undefined) {
- var favoriteCount = 0;
- for(var i = 0 ; i < this.activities.length ; i++) {
- var wasfavorite = this.activities[i].favorite;
- this.activities[i].favorite = false;
- for (var j = 0 ; j < preferences.favorites.length ; j++) {
- if (preferences.favorites[j] == this.activities[i].id) {
- this.activities[i].favorite = true;
- }
- }
- changed = changed || (wasfavorite != this.activities[i].favorite);
- }
- }
- if (preferences.server !== undefined && preferences.server != this.server) { this.server = preferences.server; changed = true; }
- if (preferences.networkId !== undefined && preferences.networkId != this.networkId) { this.networkId = preferences.networkId; changed = true; }
- if (preferences.private_journal !== undefined && preferences.private_journal != this.privateJournal) { this.privateJournal = preferences.private_journal; }
- if (preferences.shared_journal !== undefined && preferences.shared_journal != this.sharedJournal) { this.sharedJournal = preferences.shared_journal; }
- if (preferences.options !== undefined && this.options !== undefined) {
- for(var prop in preferences.options) {
- if (!this.options.hasOwnProperty(prop) || (this.options[prop] != preferences.options[prop])) {
- this.options[prop] = preferences.options[prop];
- changed = true;
- }
- }
- }
- return changed;
- };
-
- // Reset settings
- settings.reset = function(full) {
- datastore.localStorage.removeValue('sugar_settings');
- if (full) {
- datastore.localStorage.removeValue('sugar_history');
- datastore.localStorage.removeValue('sugar_stats');
- }
- };
-
- // Get properties
- settings.getName = function() {
- return this.name;
- };
- settings.getColor = function() {
- return xoPalette.colors[this.color];
- };
- settings.getView = function() {
- return this.view;
- };
- settings.getLanguage = function() {
- return this.language;
- };
- settings.getActivities = function() {
- return this.activities;
- };
- settings.getActivitiesByName = function(name) {
- if (name === undefined || name == null || name.length == 0) {
- return this.activities;
- }
- var activities = this.activities;
- var matching = [];
- for (var i = 0 ; i < activities.length ; i++) {
- if (activities[i].name.toLowerCase().indexOf(name) != -1) {
- matching.push(activities[i]);
- }
- }
- return matching;
- };
- settings.getActivity = function(id) {
- for(var i = 0 ; i < this.activities.length ; i++) {
- if (this.activities[i].id == id) {
- return this.activities[i];
- }
- }
- return this.genericActivity;
- };
- settings.getFavoritesActivities = function() {
- var favorites = [];
- for(var i = 0 ; i < this.activities.length ; i++) {
- if (this.activities[i].favorite) {
- favorites.push(this.activities[i]);
- }
- }
- return favorites;
- };
- settings.getFavoritesActivitiesName = function() {
- var favorites = this.getFavoritesActivities();
- var names = [];
- for(var i = 0 ; i < favorites.length ; i++) {
- names.push(favorites[i].id);
- }
- return names;
- };
- settings.isConnected = function() {
- return this.connected || util.getClientType() == constant.webAppType;
- };
- settings.getServer = function() {
- return this.server;
- };
- settings.getNetworkId = function() {
- var token = this.token;
- if (!token || !token.x_key) {
- return null;
- }
- return token.x_key;
- };
- settings.getPrivateJournal = function() {
- return this.privateJournal;
- };
- settings.getSharedJournal = function() {
- return this.sharedJournal;
- };
- settings.getToken = function() {
- return this.token;
- };
- settings.getHistory = function() {
- return this.history;
- };
- settings.getOptions = function(name) {
- if (!this.options) return undefined;
- return this.options[name];
- }
-
- // Set properties
- settings.setName = function(newname) {
- this.name = newname;
- };
- settings.setColor = function(newcolor) {
- if (newcolor >= 0 && newcolor < xoPalette.colors.length) {
- this.color = newcolor;
- }
- };
- settings.setLanguage = function(newlanguage) {
- this.language = newlanguage;
- };
- settings.setActivities = function(list) {
- this.activities = list;
- };
- settings.setConnected = function(connected) {
- this.connected = connected;
- };
- settings.setServer = function(server) {
- this.server = server;
- };
- settings.setNetworkId = function(nid) {
- this.networkId = nid;
- };
- settings.setPrivateJournal = function(privateJournal) {
- this.privateJournal = privateJournal;
- };
- settings.setSharedJournal = function(sharedJournal) {
- this.sharedJournal = sharedJournal;
- };
- settings.setToken = function(token) {
- this.token = token;
- };
- settings.setOptions = function(optionName, optionValue) {
- if (!this.options) { this.options = {} }
- this.options[optionName] = optionValue;
- };
- settings.addUserInHistory = function() {
- var user = { name: this.name, color: this.color, server: this.server };
- var history = !this.history ? [] : this.history;
- for (var i = 0 ; i < history.length ; i++) {
- if (this.name.toLowerCase() == history[i].name.toLowerCase() &&
- ((this.server == null && history[i].server == null) ||
- (this.server && this.server.url && history[i].server && history[i].server.url && this.server.url == history[i].server.url))
- ) {
- history[i] = history[history.length-1];
- history[history.length-1] = user;
- datastore.localStorage.setValue('sugar_history', history)
- return;
- }
- }
- history.push(user);
- if (history.length > constant.maxUserHistory) {
- var newHistory = [];
- for (var i = 0 ; i < history.length-1 ; i++) {
- newHistory.push(history[i+1]);
- }
- history = newHistory;
- }
- datastore.localStorage.setValue('sugar_history', history);
- };
-
- // Update activities
- settings.updateActivities = function(list) {
- // Some activities updated, update it
- var updated = false;
- var seen = 0;
- for (var i = 0 ; i < list.length ; i++) {
- var found = false;
- for (var j = 0 ; !found && j < this.activities.length ; j++) {
- if (list[i].id == this.activities[j].id) {
- found = true;
- seen++;
- if (this.activities[j].version != list[i].version) {
- this.activities[j].name = list[i].name;
- this.activities[j].version = list[i].version;
- this.activities[j].directory = list[i].directory;
- this.activities[j].icon = list[i].icon;
- updated = true;
- }
- }
- }
- if (!found) {
- this.activities.push(list[i]);
- updated = true;
- }
- }
-
- // Some activities disappeared, remove it
- if (seen != this.activities.length) {
- updated = true;
- var newactivities = [];
- for (var i = 0 ; i < this.activities.length ; i++) {
- var found = false;
- for (var j = 0 ; !found && j < list.length ; j++) {
- if (this.activities[i].id == list[j].id || this.activities[i].type == "native") {
- found = true;
- newactivities.push(this.activities[i]);
- }
- }
- }
- this.activities = newactivities;
- }
- return updated;
- };
-
- // Color playing
- settings.nextColor = function() {
- this.color = (this.color+1)%xoPalette.colors.length;
- };
-
- // Activity handling
- settings.runActivity = function(activity, objectId, name, sharedId, help) {
- if (activity.type != null && activity.type == "native") {
- if (sugarizerOS) {
- sugarizerOS.runActivity(activity.id);
- sugarizerOS.addApplicationToJournal(sugarizerOS.log, activity, datastore);
- return;
- }
- console.log("No sugarizerOS instance found");
- }
- if (activity.activityId == null) {
- activity.activityId = datastore.createUUID();
- }
- this.save();
- var location = activity.directory+"/index.html?aid="+activity.activityId+"&a="+activity.id;
- if (objectId === undefined) {
- if (activity.instances != null && activity.instances.length > 0) {
- objectId = activity.instances[0].objectId;
- location = location + "&o="+objectId + "&n="+activity.instances[0].metadata.title;
- } else {
- location = location + "&n=" +activity.name;
- }
- } else if (objectId != null) {
- location = location + "&o=" + objectId + "&n="+name;
- } else {
- location = location + "&n=" +activity.name;
- }
- if (sharedId) {
- location = location + "&s=" + sharedId;
- }
- if (help) {
- location = location + "&h=1";
- }
- stats.trace(constant.viewNames[app.getView()], (objectId ? 're' : '') + 'launch_activity', activity.id, objectId);
- window.location = location;
- };
- settings.switchFavoriteActivity = function(activity) {
- activity.favorite = !activity.favorite;
- return activity.favorite;
- };
- return settings;
- });
|