Skip to content

Commit

Permalink
Use new preferences system
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcel Gerber committed Apr 8, 2014
1 parent 47530f4 commit 53777ee
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 50 deletions.
27 changes: 18 additions & 9 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ define(function (require, exports, module) {
var NativeApp = brackets.getModule("utils/NativeApp");
var FileSystem = brackets.getModule("filesystem/FileSystem");
var Panel = require("./src/Panel");
var PreferencesManager = brackets.getModule("preferences/PreferencesManager");
var ProxyProvider = require("./src/ProxyProvider");
var Strings = require("./src/strings");
var UI = require("./src/UI");
var Update = require("./src/Update");
var Usage = require("./src/Usage");
var StringUtils = brackets.getModule("utils/StringUtils");
var Preferences = require("./src/Preferences");

var $exports = $(exports);

Expand Down Expand Up @@ -103,7 +103,6 @@ define(function (require, exports, module) {

var _enabled = false;
var _mode = DEFAULT_MODE;
var _prefs;

function _enable() {
$exports.triggerHandler("enable");
Expand All @@ -113,10 +112,14 @@ define(function (require, exports, module) {
$exports.triggerHandler("disable");
}

function _toggleEnabled() {
function _toggleEnabled(enabled) {
// TODO: disable or enable immediately
_enabled = !_enabled;
_prefs.setValue("enabled", _enabled);
if (enabled !== undefined) { // set to a given state
_enabled = enabled;
} else {
_enabled = !_enabled;
}
Preferences.set("enabled", _enabled, true);
_updateMenuStates();

if (_enabled) {
Expand All @@ -129,7 +132,7 @@ define(function (require, exports, module) {
function _setMode(modeName) {
// TODO: warn user that connection will need to be restarted
_mode = _modes[modeName] || DEFAULT_MODE;
_prefs.setValue("mode", _mode.name);
Preferences.set("mode", _mode.name, true);
_updateMenuStates();
}

Expand Down Expand Up @@ -206,9 +209,8 @@ define(function (require, exports, module) {
}

function _loadPreferences() {
_prefs = PreferencesManager.getPreferenceStorage("com.adobe.theseus", { enabled: true, mode: "static" });
_enabled = _prefs.getValue("enabled");
_mode = _modes[_prefs.getValue("mode")] || DEFAULT_MODE;
_enabled = Preferences.get("enabled");
_mode = _modes[Preferences.get("mode")] || DEFAULT_MODE;
}

function _setupMenu() {
Expand Down Expand Up @@ -329,6 +331,13 @@ define(function (require, exports, module) {
}
});

$(Preferences).on("change.enabled", function () {
_toggleEnabled(Preferences.get("enabled"));
});
$(Preferences).on("change.mode", function () {
_setMode(Preferences.get("mode"));
});

if (_enabled) { // enable now if enabled in preferences
_enable();
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@
"fondue" : "0.5.x"
},
"engines" : {
"brackets" : ">=0.34.0"
"brackets" : ">=0.37.0"
}
}
84 changes: 84 additions & 0 deletions src/Preferences.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/*
* Copyright (c) 2014 Massachusetts Institute of Technology, Adobe Systems
* Incorporated, and other contributors. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/

/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */
/*global define, brackets, $ */

define(function (require, exports, module) {
"use strict";

var _ = brackets.getModule("thirdparty/lodash"),
PreferencesManager = brackets.getModule("preferences/PreferencesManager"),
prefs = PreferencesManager.getExtensionPrefs("theseus"),
stateManager = PreferencesManager.stateManager.getPrefixedSystem("theseus");

var preferences = {
prefs: {
// main.js
"enabled": { "type": "boolean", "value": true },
"mode": { "type": "string", "value": "static" }
},
states: {
// Usage.js
"usage.user_id": { "type": "string", "value": null },
"usage.last_agreement_shown": { "type": "number", "value": -1 },
"usage.usage_reporting_approved": { "type": "boolean", "value": false },
"usage.research_contact_approved": { "type": "boolean", "value": false },
"usage.research_contact_email": { "type": "string", "value": null },

// Update.js
"update.update_ignored": { "type": "boolean", "value": false },
"update.last_ignored_version": { "type": "string", "value": null },
"update.last_checked_at": { "type": "number", "value": 0 }
}
};

_.each(preferences.prefs, function (definition, key) {
prefs.definePreference(key, definition.type, definition.value)
.on("change", function () {
$(exports).triggerHandler("change." + key);
});
});
_.each(preferences.states, function (definition, key) {
stateManager.definePreference(key, definition.type, definition.value);
});
prefs.save();

function _getPrefLocation(key) {
return preferences.prefs[key] ? prefs : stateManager;
}
function set(key, value, save) {
var location = _getPrefLocation(key);
location.set(key, value);
if (save) {
location.save();
}
}
function get(key) {
return _getPrefLocation(key).get(key);
}

exports.set = set;
exports.get = get;
});
23 changes: 6 additions & 17 deletions src/Update.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,8 @@ define(function (require, exports, module) {
var CommandManager = brackets.getModule("command/CommandManager");
var Dialogs = brackets.getModule("widgets/Dialogs");
var ExtensionManager = brackets.getModule("extensibility/ExtensionManager");
var PreferencesManager = brackets.getModule("preferences/PreferencesManager");
var Strings = require("./strings");

var _prefs;
function _loadPreferences() {
_prefs = PreferencesManager.getPreferenceStorage("com.adobe.theseus.update", {
update_ignored: false,
last_ignored_version: 0,
last_checked_at: 0
});
}
var Preferences = require("./Preferences");

/**
* @private
Expand Down Expand Up @@ -107,8 +98,8 @@ define(function (require, exports, module) {
if ($dialog.data("buttonId") === "upgrade") {
_doUpdate(newVersion);
} else {
_prefs.setValue("update_ignored", true);
_prefs.setValue("last_ignored_version", newVersion);
Preferences.set("update.update_ignored", true);
Preferences.set("update.last_ignored_version", newVersion, true);
}
});
}
Expand All @@ -117,19 +108,17 @@ define(function (require, exports, module) {
* Determines if a Theseus update is necessary and, if so, whether to show the dialog
*/
function updateIfNecessary() {
_loadPreferences();

var lastCheckedAt = _prefs.getValue("last_checked_at");
var lastCheckedAt = Preferences.get("update.last_checked_at");
var now = new Date();
var MILLIS_IN_DAY = 86400000;
if ((now - lastCheckedAt) < MILLIS_IN_DAY) {
return;
}

_checkForUpdate().done(function (update) {
_prefs.setValue("last_checked_at", now.getTime());
Preferences.set("update.last_checked_at", now.getTime(), true);
if (update.hasUpdateAvailable) {
if (!_prefs.getValue("update_ignored") || _prefs.getValue("last_ignored_version") !== update.version) {
if (!Preferences.get("update.update_ignored") || Preferences.get("update.last_ignored_version") !== update.version) {
showUpdateDialog(update.version, update.current);
}
}
Expand Down
41 changes: 18 additions & 23 deletions src/Usage.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ define(function (require, exports, module) {
var Main = require("../main");
var NodeAgent = require("./Agent-node");
var Panel = require("./Panel");
var PreferencesManager = brackets.getModule("preferences/PreferencesManager")
var UI = require("./UI");
var Preferences = require("./Preferences");

var $exports = $(exports);

Expand All @@ -51,22 +51,12 @@ define(function (require, exports, module) {

var AGREEMENT_ID = 0; // increment every time the information we report changes

function _loadPreferences() {
_prefs = PreferencesManager.getPreferenceStorage("com.adobe.theseus.usage-reporting", {
user_id: _guid(),
last_agreement_shown: -1,
usage_reporting_approved: false,
research_contact_approved: false,
research_contact_email: undefined,
});
}

function sawAgreement() {
return _prefs.getValue("last_agreement_shown") === AGREEMENT_ID;
return Preferences.get("usage.last_agreement_shown") === AGREEMENT_ID;
}

function _agreedToUsageReporting() {
return sawAgreement() && _prefs.getValue("usage_reporting_approved");
return sawAgreement() && Preferences.get("usage.usage_reporting_approved");
}

/**
Expand All @@ -77,13 +67,14 @@ define(function (require, exports, module) {
}
**/
function recordAgreementResult(result) {
_prefs.setValue("last_agreement_shown", AGREEMENT_ID);
_prefs.setValue("usage_reporting_approved", result.usageOkay);
_prefs.setValue("research_contact_approved", result.contactOkay);
Preferences.set("usage.last_agreement_shown", AGREEMENT_ID);
Preferences.set("usage.usage_reporting_approved", result.usageOkay);
Preferences.set("usage.research_contact_approved", result.contactOkay);
console.log("Test");
if (result.email === undefined) {
_prefs.remove("research_contact_email", result.email);
Preferences.set("usage.research_contact_email", null, true);
} else {
_prefs.setValue("research_contact_email", result.email);
Preferences.set("usage.research_contact_email", result.email, true);
}

if (result.usageOkay) {
Expand All @@ -100,9 +91,9 @@ define(function (require, exports, module) {
/** returns the last hash passed to recordAgreementResult **/
function lastAgreementResult() {
return {
usageOkay: _prefs.getValue("usage_reporting_approved"),
contactOkay: _prefs.getValue("research_contact_approved"),
email: _prefs.getValue("research_contact_email"),
usageOkay: Preferences.get("usage.usage_reporting_approved"),
contactOkay: Preferences.get("usage.research_contact_approved"),
email: Preferences.get("usage.research_contact_email")
};
}

Expand Down Expand Up @@ -220,12 +211,16 @@ define(function (require, exports, module) {
}

function init() {
_loadPreferences();
var userId = Preferences.get("usage.user_id");
if (!userId) {
userId = _guid();
Preferences.set("usage.user_id", userId, true);
}

_registerProperties({
_theseusVersion: Main.version,
_bracketsVersion: brackets.metadata.version,
_userId: _prefs.getValue("user_id"),
_userId: userId,
_sessionId: _guid(),
_platform: brackets.platform
});
Expand Down

0 comments on commit 53777ee

Please sign in to comment.