feat(JitsiLocalStorage): Implement localStorage wrapper

This commit is contained in:
hristoterezov 2016-10-27 13:19:11 -05:00
parent 8b2491c7a2
commit 7e2fe30472
5 changed files with 124 additions and 80 deletions

View File

@ -1,5 +1,6 @@
/* global APP, JitsiMeetJS, config */
import AuthHandler from './modules/UI/authentication/AuthHandler';
import jitsiLocalStorage from './modules/util/JitsiLocalStorage';
const ConnectionEvents = JitsiMeetJS.events.connection;
const ConnectionErrors = JitsiMeetJS.errors.connection;
@ -107,9 +108,9 @@ function connect(id, password, roomName) {
export function openConnection({id, password, retry, roomName}) {
let usernameOverride
= window.localStorage.getItem("xmpp_username_override");
= jitsiLocalStorage.getItem("xmpp_username_override");
let passwordOverride
= window.localStorage.getItem("xmpp_password_override");
= jitsiLocalStorage.getItem("xmpp_password_override");
if (usernameOverride && usernameOverride.length > 0) {
id = usernameOverride;

View File

@ -31,6 +31,7 @@ var messageHandler = UI.messageHandler;
var JitsiPopover = require("./util/JitsiPopover");
var Feedback = require("./feedback/Feedback");
import FollowMe from "../FollowMe";
import jitsiLocalStorage from '../util/JitsiLocalStorage';
var eventEmitter = new EventEmitter();
UI.eventEmitter = eventEmitter;
@ -1239,7 +1240,7 @@ UI.showDeviceErrorDialog = function (micError, cameraError) {
}
if (showDoNotShowWarning) {
if (window.localStorage[localStoragePropName] === "true") {
if (jitsiLocalStorage.getItem(localStoragePropName) === "true") {
return;
}
}
@ -1308,8 +1309,8 @@ UI.showDeviceErrorDialog = function (micError, cameraError) {
let input = form.find("#doNotShowWarningAgain");
if (input.length) {
window.localStorage[localStoragePropName] =
input.prop("checked");
jitsiLocalStorage.setItem(localStoragePropName,
input.prop("checked"));
}
}
},

View File

@ -6,6 +6,7 @@ import SmallVideo from "./SmallVideo";
import UIUtils from "../util/UIUtil";
import UIEvents from '../../../service/UI/UIEvents';
import JitsiPopover from "../util/JitsiPopover";
import jitsiLocalStorage from '../../util/JitsiLocalStorage';
const MUTED_DIALOG_BUTTON_VALUES = {
cancel: 0,
@ -654,8 +655,7 @@ RemoteVideo.createContainer = function (spanId) {
RemoteVideo.showMuteParticipantDialog = function () {
//FIXME: don't show again checkbox is implemented very dirty. we should add
// this functionality to MessageHandler class.
if (window.localStorage
&& window.localStorage.getItem(
if (jitsiLocalStorage.getItem(
"dontShowMuteParticipantDialog") === "true") {
return Promise.resolve(MUTED_DIALOG_BUTTON_VALUES.muted);
}
@ -672,15 +672,13 @@ RemoteVideo.showMuteParticipantDialog = function () {
msgString,
leftButtonKey: 'dialog.muteParticipantButton',
submitFunction: () => {
if(window.localStorage) {
let form = $.prompt.getPrompt();
if (form) {
let input = form.find("#doNotShowMessageAgain");
if (input.length) {
window.localStorage.setItem(
"dontShowMuteParticipantDialog",
input.prop("checked"));
}
let form = $.prompt.getPrompt();
if (form) {
let input = form.find("#doNotShowMessageAgain");
if (input.length) {
jitsiLocalStorage.setItem(
"dontShowMuteParticipantDialog",
input.prop("checked"));
}
}
resolve(MUTED_DIALOG_BUTTON_VALUES.muted);

View File

@ -1,26 +1,6 @@
/* global JitsiMeetJS */
import UIUtil from '../UI/util/UIUtil';
let email = '';
let avatarId = '';
let displayName = '';
let language = null;
let cameraDeviceId = '';
let micDeviceId = '';
let welcomePageDisabled = false;
let localFlipX = null;
let avatarUrl = '';
function supportsLocalStorage() {
try {
return 'localStorage' in window && window.localStorage !== null;
} catch (e) {
console.log("localstorage is not supported");
return false;
}
}
import jitsiLocalStorage from '../util/JitsiLocalStorage';
function generateUniqueId() {
function _p8() {
@ -29,45 +9,43 @@ function generateUniqueId() {
return _p8() + _p8() + _p8() + _p8();
}
if (supportsLocalStorage()) {
if (!window.localStorage.jitsiMeetId) {
window.localStorage.jitsiMeetId = generateUniqueId();
console.log("generated id", window.localStorage.jitsiMeetId);
}
if (!jitsiLocalStorage.getItem("jitsiMeetId")) {
jitsiLocalStorage.setItem("jitsiMeetId",generateUniqueId());
console.log("generated id", jitsiLocalStorage.getItem("jitsiMeetId"));
}
email = UIUtil.unescapeHtml(window.localStorage.email || '');
avatarId = UIUtil.unescapeHtml(window.localStorage.avatarId || '');
if (!avatarId) {
// if there is no avatar id, we generate a unique one and use it forever
avatarId = generateUniqueId();
window.localStorage.avatarId = avatarId;
}
let avatarUrl = '';
localFlipX = JSON.parse(window.localStorage.localFlipX || true);
displayName = UIUtil.unescapeHtml(window.localStorage.displayname || '');
language = window.localStorage.language;
cameraDeviceId = window.localStorage.cameraDeviceId || '';
micDeviceId = window.localStorage.micDeviceId || '';
welcomePageDisabled = JSON.parse(
window.localStorage.welcomePageDisabled || false
);
let email = UIUtil.unescapeHtml(jitsiLocalStorage.getItem("email") || '');
let avatarId = UIUtil.unescapeHtml(jitsiLocalStorage.getItem("avatarId") || '');
if (!avatarId) {
// if there is no avatar id, we generate a unique one and use it forever
avatarId = generateUniqueId();
jitsiLocalStorage.setItem("avatarId", avatarId);
}
// Currently audio output device change is supported only in Chrome and
// default output always has 'default' device ID
var audioOutputDeviceId = window.localStorage.audioOutputDeviceId
|| 'default';
let localFlipX = JSON.parse(jitsiLocalStorage.getItem("localFlipX") || true);
let displayName = UIUtil.unescapeHtml(
jitsiLocalStorage.getItem("displayname") || '');
let language = jitsiLocalStorage.getItem("language");
let cameraDeviceId = jitsiLocalStorage.getItem("cameraDeviceId") || '';
let micDeviceId = jitsiLocalStorage.getItem("micDeviceId") || '';
let welcomePageDisabled = JSON.parse(
jitsiLocalStorage.getItem("welcomePageDisabled") || false);
if (audioOutputDeviceId !==
JitsiMeetJS.mediaDevices.getAudioOutputDevice()) {
JitsiMeetJS.mediaDevices.setAudioOutputDevice(audioOutputDeviceId)
.catch((ex) => {
console.warn('Failed to set audio output device from local ' +
'storage. Default audio output device will be used' +
'instead.', ex);
});
}
} else {
console.log("local storage is not supported");
// Currently audio output device change is supported only in Chrome and
// default output always has 'default' device ID
let audioOutputDeviceId = jitsiLocalStorage.getItem("audioOutputDeviceId")
|| 'default';
if (audioOutputDeviceId !==
JitsiMeetJS.mediaDevices.getAudioOutputDevice()) {
JitsiMeetJS.mediaDevices.setAudioOutputDevice(audioOutputDeviceId)
.catch((ex) => {
console.warn('Failed to set audio output device from local ' +
'storage. Default audio output device will be used' +
'instead.', ex);
});
}
export default {
@ -82,7 +60,8 @@ export default {
displayName = newDisplayName;
if (!disableLocalStore)
window.localStorage.displayname = UIUtil.escapeHtml(displayName);
jitsiLocalStorage.setItem("displayname",
UIUtil.escapeHtml(displayName));
},
/**
@ -102,7 +81,7 @@ export default {
email = newEmail;
if (!disableLocalStore)
window.localStorage.email = UIUtil.escapeHtml(newEmail);
jitsiLocalStorage.setItem("email", UIUtil.escapeHtml(newEmail));
},
/**
@ -142,7 +121,7 @@ export default {
},
setLanguage: function (lang) {
language = lang;
window.localStorage.language = lang;
jitsiLocalStorage.setItem("language", lang);
},
/**
@ -151,7 +130,7 @@ export default {
*/
setLocalFlipX: function (val) {
localFlipX = val;
window.localStorage.localFlipX = val;
jitsiLocalStorage.setItem("localFlipX", val);
},
/**
@ -179,7 +158,7 @@ export default {
setCameraDeviceId: function (newId, store) {
cameraDeviceId = newId;
if (store)
window.localStorage.cameraDeviceId = newId;
jitsiLocalStorage.setItem("cameraDeviceId", newId);
},
/**
@ -199,7 +178,7 @@ export default {
setMicDeviceId: function (newId, store) {
micDeviceId = newId;
if (store)
window.localStorage.micDeviceId = newId;
jitsiLocalStorage.setItem("micDeviceId", newId);
},
/**
@ -218,7 +197,8 @@ export default {
*/
setAudioOutputDeviceId: function (newId = 'default') {
return JitsiMeetJS.mediaDevices.setAudioOutputDevice(newId)
.then(() => window.localStorage.audioOutputDeviceId = newId);
.then(() =>
jitsiLocalStorage.setItem("audioOutputDeviceId", newId));
},
/**
@ -235,6 +215,6 @@ export default {
*/
setWelcomePageEnabled (enabled) {
welcomePageDisabled = !enabled;
window.localStorage.welcomePageDisabled = welcomePageDisabled;
jitsiLocalStorage.setItem("welcomePageDisabled", welcomePageDisabled);
}
};

View File

@ -0,0 +1,64 @@
/**
* Dummy implementation of Storage interface with empty methods.
*/
class DummyLocalStorage {
/**
* Empty function
*/
getItem() { }
/**
* Empty function
*/
setItem() { }
/**
* Empty function
*/
removeItem() { }
}
/**
* Wrapper class for browser's local storage object.
*/
class JitsiLocalStorage extends DummyLocalStorage {
/**
* @constructor
* @param {Storage} storage browser's local storage object.
*/
constructor(storage) {
super();
this.storage = storage || new DummyLocalStorage();
}
/**
* Returns that passed key's value.
* @param {string} keyName the name of the key you want to retrieve
* the value of.
* @returns {String|null} the value of the key. If the key does not exist,
* null is returned.
*/
getItem(keyName) {
return this.storage.getItem(keyName);
}
/**
* Adds a key to the storage, or update key's value if it already exists.
* @param {string} keyName the name of the key you want to create/update.
* @param {string} keyValue the value you want to give the key you are
* creating/updating.
*/
setItem(keyName, keyValue) {
return this.storage.setItem(keyName, keyValue);
}
/**
* Remove a key from the storage.
* @param {string} keyName the name of the key you want to remove.
*/
removeItem(keyName) {
return this.storage.removeItem(keyName);
}
}
export default new JitsiLocalStorage(window.localStorage);