1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

create localStorage abstraction

This commit is contained in:
Luke Pulverenti 2014-07-15 15:16:16 -04:00
parent ecba850f43
commit c5a40e9616
19 changed files with 138 additions and 103 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 916 B

View file

@ -22,7 +22,7 @@
var deferred = $.Deferred(); var deferred = $.Deferred();
var data = sessionStorage.getItem(key); var data = sessionStore.getItem(key);
if (data) { if (data) {
@ -51,7 +51,7 @@
}; };
}); });
sessionStorage.setItem(key, JSON.stringify(images)); sessionStore.setItem(key, JSON.stringify(images));
deferred.resolveWith(null, [images]); deferred.resolveWith(null, [images]);
}); });
} }
@ -101,7 +101,7 @@
var userId = Dashboard.getCurrentUserId(); var userId = Dashboard.getCurrentUserId();
var val = LocalSettings.val('enableBackdrops', userId); var val = store.getItem('enableBackdrops', userId);
// For bandwidth // For bandwidth
return val == '1' || (val != '0' && !$.browser.mobile); return val == '1' || (val != '0' && !$.browser.mobile);

View file

@ -1,25 +1,4 @@
function IsStorageEnabled(skipRetry) { function htmlEncode(value) {
if (!window.localStorage) {
return false;
}
try {
window.localStorage.setItem("__test", "data");
} catch (err) {
if (!skipRetry) {
if ((err.name).toUpperCase().indexOf('EXCEEDED') != -1) {
window.localStorage.clear();
return IsStorageEnabled(true);
}
}
return false;
}
return true;
}
function htmlEncode(value) {
//create a in-memory div, set it's inner text(which jQuery automatically encodes) //create a in-memory div, set it's inner text(which jQuery automatically encodes)
//then grab the encoded contents back out. The div never exists on the page. //then grab the encoded contents back out. The div never exists on the page.
return $('<div/>').text(value).html(); return $('<div/>').text(value).html();
@ -540,3 +519,43 @@ function ticks_to_human(str) {
}; };
})(window); })(window);
(function (window) {
function myStore(defaultObject) {
var self = this;
self.localData = {};
self.setItem = function (name, value) {
if (defaultObject) {
defaultObject.setItem(name, value);
} else {
self.localData[name] = value;
}
};
self.getItem = function (name) {
if (defaultObject) {
return defaultObject.getItem(name);
}
return self.localData[name];
};
self.removeItem = function (name) {
if (defaultObject) {
defaultObject.removeItem(name);
} else {
self.localData[name] = null;
}
};
}
window.store = new myStore(window.localStorage);
window.sessionStore = new myStore(window.sessionStorage);
})(window);

View file

@ -1,4 +1,4 @@
var LibraryBrowser = (function (window, document, $, screen, localStorage) { var LibraryBrowser = (function (window, document, $, screen, store) {
$(function () { $(function () {
$("body").on("create", function () { $("body").on("create", function () {
@ -12,7 +12,7 @@
getDefaultPageSize: function () { getDefaultPageSize: function () {
var saved = localStorage.getItem('pagesize_'); var saved = store.getItem('pagesize_');
if (saved) { if (saved) {
return parseInt(saved); return parseInt(saved);
@ -32,7 +32,7 @@
loadSavedQueryValues: function (key, query) { loadSavedQueryValues: function (key, query) {
var values = localStorage.getItem(key + '_' + Dashboard.getCurrentUserId()); var values = store.getItem(key + '_' + Dashboard.getCurrentUserId());
if (values) { if (values) {
@ -56,7 +56,7 @@
} }
try { try {
localStorage.setItem(key + '_' + Dashboard.getCurrentUserId(), JSON.stringify(values)); store.setItem(key + '_' + Dashboard.getCurrentUserId(), JSON.stringify(values));
} catch (e) { } catch (e) {
} }
@ -65,7 +65,7 @@
saveViewSetting: function (key, value) { saveViewSetting: function (key, value) {
try { try {
localStorage.setItem(key + '_' + Dashboard.getCurrentUserId() + '_view', value); store.setItem(key + '_' + Dashboard.getCurrentUserId() + '_view', value);
} catch (e) { } catch (e) {
} }
@ -74,7 +74,7 @@
getSavedViewSetting: function (key) { getSavedViewSetting: function (key) {
var deferred = $.Deferred(); var deferred = $.Deferred();
var val = localStorage.getItem(key + '_' + Dashboard.getCurrentUserId() + '_view'); var val = store.getItem(key + '_' + Dashboard.getCurrentUserId() + '_view');
deferred.resolveWith(null, [val]); deferred.resolveWith(null, [val]);
return deferred.promise(); return deferred.promise();
@ -325,7 +325,7 @@
html += '<li><a href="#" onclick="MediaController.play({ids:[\'' + itemId + '\'],startPositionTicks:' + resumePositionTicks + '});LibraryBrowser.closePlayMenu();">Resume</a></li>'; html += '<li><a href="#" onclick="MediaController.play({ids:[\'' + itemId + '\'],startPositionTicks:' + resumePositionTicks + '});LibraryBrowser.closePlayMenu();">Resume</a></li>';
} }
if (MediaController.canQueueMediaType(mediaType)) { if (MediaController.canQueueMediaType(mediaType, itemType)) {
html += '<li><a href="#" onclick="MediaController.queue(\'' + itemId + '\');LibraryBrowser.closePlayMenu();">Queue</a></li>'; html += '<li><a href="#" onclick="MediaController.queue(\'' + itemId + '\');LibraryBrowser.closePlayMenu();">Queue</a></li>';
} }
@ -1507,7 +1507,7 @@
if (query.Limit && updatePageSizeSetting !== false) { if (query.Limit && updatePageSizeSetting !== false) {
try { try {
localStorage.setItem('pagesize_', query.Limit); store.setItem('pagesize_', query.Limit);
} catch (e) { } catch (e) {
} }
@ -2279,4 +2279,4 @@
}; };
})(window, document, jQuery, screen, localStorage); })(window, document, jQuery, screen, window.store);

View file

@ -261,7 +261,7 @@
html += '<li data-icon="video"><a href="#" class="btnPlayTrailer" data-itemid="' + itemId + '">' + Globalize.translate('ButtonPlayTrailer') + '</a></li>'; html += '<li data-icon="video"><a href="#" class="btnPlayTrailer" data-itemid="' + itemId + '">' + Globalize.translate('ButtonPlayTrailer') + '</a></li>';
} }
if (MediaController.canQueueMediaType(item.MediaType)) { if (MediaController.canQueueMediaType(item.MediaType, item.Type)) {
html += '<li data-icon="plus"><a href="#" class="btnQueue" data-itemid="' + itemId + '">' + Globalize.translate('ButtonQueue') + '</a></li>'; html += '<li data-icon="plus"><a href="#" class="btnQueue" data-itemid="' + itemId + '">' + Globalize.translate('ButtonQueue') + '</a></li>';
} }

View file

@ -223,7 +223,7 @@
function getTopParentId() { function getTopParentId() {
return getParameterByName('topParentId') || sessionStorage.getItem('topParentId') || null; return getParameterByName('topParentId') || sessionStore.getItem('topParentId') || null;
} }
window.LibraryMenu = { window.LibraryMenu = {
@ -263,7 +263,7 @@
'' : '' :
getTopParentId() || ''; getTopParentId() || '';
sessionStorage.setItem('topParentId', id); sessionStore.setItem('topParentId', id);
$('.lnkMediaFolder').each(function () { $('.lnkMediaFolder').each(function () {

View file

@ -1,30 +0,0 @@
(function ($, window, document) {
function get(key, userId) {
return localStorage.getItem(key + '-' + userId);
}
function set(key, userId, value) {
localStorage.setItem(key + '-' + userId, value);
}
function localSettings() {
var self = this;
self.val = function (key, userId, value) {
if (arguments.length < 3) {
return get(key, userId);
}
set(key, userId, value);
};
}
window.LocalSettings = new localSettings();
})(jQuery, window, document);

View file

@ -203,7 +203,11 @@
return self.getPlayerInfo().playableMediaTypes.indexOf(item.MediaType) != -1; return self.getPlayerInfo().playableMediaTypes.indexOf(item.MediaType) != -1;
}; };
self.canQueueMediaType = function (mediaType) { self.canQueueMediaType = function (mediaType, itemType) {
if (itemType == 'MusicAlbum' || itemType == 'MusicArtist' || itemType == 'MusicGenre') {
mediaType = 'Audio';
}
return currentPlayer.canQueueMediaType(mediaType); return currentPlayer.canQueueMediaType(mediaType);
}; };

View file

@ -398,7 +398,7 @@
var maxWidth = parseInt(this.getAttribute('data-maxwidth')); var maxWidth = parseInt(this.getAttribute('data-maxwidth'));
var bitrate = parseInt(this.getAttribute('data-bitrate')); var bitrate = parseInt(this.getAttribute('data-bitrate'));
localStorage.setItem('preferredVideoBitrate', bitrate); store.setItem('preferredVideoBitrate', bitrate);
self.changeStream(self.getCurrentTicks(), { self.changeStream(self.getCurrentTicks(), {

View file

@ -1,4 +1,4 @@
(function (document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window) { (function (document, setTimeout, clearTimeout, screen, store, $, setInterval, window) {
function mediaPlayer() { function mediaPlayer() {
@ -116,11 +116,13 @@
var currentSrc = element.currentSrc; var currentSrc = element.currentSrc;
var transcodingExtension = self.getTranscodingExtension(); var transcodingExtension;
var isStatic; var isStatic;
if (self.currentItem.MediaType == "Video") { if (self.currentItem.MediaType == "Video") {
transcodingExtension = self.getTranscodingExtension();
if (params.AudioStreamIndex != null) { if (params.AudioStreamIndex != null) {
currentSrc = replaceQueryString(currentSrc, 'AudioStreamIndex', params.AudioStreamIndex); currentSrc = replaceQueryString(currentSrc, 'AudioStreamIndex', params.AudioStreamIndex);
} }
@ -155,6 +157,8 @@
currentSrc = replaceQueryString(currentSrc, 'Static', finalParams.isStatic); currentSrc = replaceQueryString(currentSrc, 'Static', finalParams.isStatic);
currentSrc = replaceQueryString(currentSrc, 'AudioCodec', finalParams.audioCodec); currentSrc = replaceQueryString(currentSrc, 'AudioCodec', finalParams.audioCodec);
isStatic = finalParams.isStatic; isStatic = finalParams.isStatic;
} else {
transcodingExtension = '.mp3';
} }
var isSeekableMedia = self.currentMediaSource.RunTimeTicks; var isSeekableMedia = self.currentMediaSource.RunTimeTicks;
@ -436,7 +440,7 @@
}; };
self.getBitrateSetting = function () { self.getBitrateSetting = function () {
return parseInt(localStorage.getItem('preferredVideoBitrate') || '') || 1500000; return parseInt(store.getItem('preferredVideoBitrate') || '') || 1500000;
}; };
function getOptimalMediaSource(mediaType, versions) { function getOptimalMediaSource(mediaType, versions) {
@ -768,13 +772,13 @@
self.saveVolume = function (val) { self.saveVolume = function (val) {
if (val) { if (val) {
localStorage.setItem("volume", val); store.setItem("volume", val);
} }
}; };
self.getSavedVolume = function () { self.getSavedVolume = function () {
return localStorage.getItem("volume") || 0.5; return store.getItem("volume") || 0.5;
}; };
self.shuffle = function (id) { self.shuffle = function (id) {
@ -1291,4 +1295,4 @@
window.MediaController.setActivePlayer(window.MediaPlayer); window.MediaController.setActivePlayer(window.MediaPlayer);
})(document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window); })(document, setTimeout, clearTimeout, screen, window.store, $, setInterval, window);

View file

@ -2,8 +2,8 @@
function loadForm(page, userId, displayPreferences) { function loadForm(page, userId, displayPreferences) {
$('#selectThemeSong', page).val(LocalSettings.val('enableThemeSongs', userId) || '').selectmenu("refresh"); $('#selectThemeSong', page).val(store.getItem('enableThemeSongs', userId) || '').selectmenu("refresh");
$('#selectBackdrop', page).val(LocalSettings.val('enableBackdrops', userId) || '').selectmenu("refresh"); $('#selectBackdrop', page).val(store.getItem('enableBackdrops', userId) || '').selectmenu("refresh");
$('#selectHomeSection1', page).val(displayPreferences.CustomPrefs.home0 || '').selectmenu("refresh"); $('#selectHomeSection1', page).val(displayPreferences.CustomPrefs.home0 || '').selectmenu("refresh");
$('#selectHomeSection2', page).val(displayPreferences.CustomPrefs.home1 || '').selectmenu("refresh"); $('#selectHomeSection2', page).val(displayPreferences.CustomPrefs.home1 || '').selectmenu("refresh");
@ -15,8 +15,8 @@
function saveUser(page, userId, displayPreferences) { function saveUser(page, userId, displayPreferences) {
LocalSettings.val('enableThemeSongs', userId, $('#selectThemeSong', page).val()); store.setItem('enableThemeSongs', userId, $('#selectThemeSong', page).val());
LocalSettings.val('enableBackdrops', userId, $('#selectBackdrop', page).val()); store.setItem('enableBackdrops', userId, $('#selectBackdrop', page).val());
displayPreferences.CustomPrefs.home0 = $('#selectHomeSection1', page).val(); displayPreferences.CustomPrefs.home0 = $('#selectHomeSection1', page).val();
displayPreferences.CustomPrefs.home1 = $('#selectHomeSection2', page).val(); displayPreferences.CustomPrefs.home1 = $('#selectHomeSection2', page).val();

View file

@ -95,17 +95,14 @@ var Dashboard = {
getAccessToken: function () { getAccessToken: function () {
return localStorage.getItem('token'); return store.getItem('token');
}, },
getCurrentUserId: function () { getCurrentUserId: function () {
if (!window.localStorage) {
return null;
}
var autoLoginUserId = getParameterByName('u'); var autoLoginUserId = getParameterByName('u');
var storedUserId = localStorage.getItem("userId");
var storedUserId = store.getItem("userId");
if (autoLoginUserId && autoLoginUserId != storedUserId) { if (autoLoginUserId && autoLoginUserId != storedUserId) {
@ -118,10 +115,8 @@ var Dashboard = {
setCurrentUser: function (userId, token) { setCurrentUser: function (userId, token) {
if (window.localStorage) { store.setItem("userId", userId);
localStorage.setItem("userId", userId); store.setItem("token", token);
localStorage.setItem("token", token);
}
ApiClient.setCurrentUserId(userId, token); ApiClient.setCurrentUserId(userId, token);
Dashboard.getUserPromise = null; Dashboard.getUserPromise = null;
@ -129,10 +124,8 @@ var Dashboard = {
logout: function (logoutWithServer) { logout: function (logoutWithServer) {
if (window.localStorage) { store.removeItem("userId");
localStorage.removeItem("userId"); store.removeItem("token");
localStorage.removeItem("token");
}
if (logoutWithServer === false) { if (logoutWithServer === false) {
window.location = "login.html"; window.location = "login.html";
@ -1228,10 +1221,6 @@ var Dashboard = {
alert("This browser does not support web sockets. For a better experience, try a newer browser such as Chrome, Firefox, IE10+, Safari (iOS) or Opera."); alert("This browser does not support web sockets. For a better experience, try a newer browser such as Chrome, Firefox, IE10+, Safari (iOS) or Opera.");
} }
else if (!IsStorageEnabled()) {
alert("This browser does not support local storage or is running in private mode. For a better experience, try a newer browser such as Chrome, Firefox, IE10+, Safari (iOS) or Opera.");
}
window.ApiClient = MediaBrowser.ApiClient.create("Dashboard", window.dashboardVersion); window.ApiClient = MediaBrowser.ApiClient.create("Dashboard", window.dashboardVersion);
$(ApiClient).on("websocketopen", Dashboard.onWebSocketOpened) $(ApiClient).on("websocketopen", Dashboard.onWebSocketOpened)

View file

@ -1,4 +1,4 @@
(function (document, $, localStorage) { (function (document, $) {
var currentOwnerId; var currentOwnerId;
var currentThemeIds = []; var currentThemeIds = [];
@ -44,7 +44,7 @@
var userId = Dashboard.getCurrentUserId(); var userId = Dashboard.getCurrentUserId();
var val = LocalSettings.val('enableThemeSongs', userId); var val = store.getItem('enableThemeSongs', userId);
// For bandwidth // For bandwidth
return val == '1' || (val != '0' && !$.browser.mobile); return val == '1' || (val != '0' && !$.browser.mobile);
@ -67,4 +67,4 @@
} }
}); });
})(document, jQuery, window.localStorage); })(document, jQuery);

View file

@ -25,7 +25,7 @@
shape: "backdrop", shape: "backdrop",
preferThumb: true, preferThumb: true,
inheritThumb: false, inheritThumb: false,
showParentTitle: true, showParentTitle: false,
showUnplayedIndicator: false, showUnplayedIndicator: false,
showChildCountIndicator: true, showChildCountIndicator: true,
overlayText: screenWidth >= 600, overlayText: screenWidth >= 600,

49
dashboard-ui/thirdparty/cast_sender.js vendored Normal file
View file

@ -0,0 +1,49 @@
(function() {var chrome = window.chrome || {};
chrome.cast = chrome.cast || {};
chrome.cast.media = chrome.cast.media || {};
chrome.cast.ApiBootstrap_ = function() {
};
chrome.cast.ApiBootstrap_.EXTENSION_IDS = ["boadgeojelhgndaghljhdicfkmllpafd", "dliochdbjfkdbacpmhlcpmleaejidimm", "hfaagokkkhdbgiakmmlclaapfelnkoah", "fmfcbgogabcbclcofgocippekhfcmgfj", "enhhojjnijigcajfphajepfemndkmdlo"];
chrome.cast.ApiBootstrap_.findInstalledExtension_ = function(callback) {
//chrome.cast.ApiBootstrap_.findInstalledExtensionHelper_(0, callback);
};
chrome.cast.ApiBootstrap_.findInstalledExtensionHelper_ = function(index, callback) {
index == chrome.cast.ApiBootstrap_.EXTENSION_IDS.length ? callback(null) : chrome.cast.ApiBootstrap_.isExtensionInstalled_(chrome.cast.ApiBootstrap_.EXTENSION_IDS[index], function(installed) {
installed ? callback(chrome.cast.ApiBootstrap_.EXTENSION_IDS[index]) : chrome.cast.ApiBootstrap_.findInstalledExtensionHelper_(index + 1, callback);
});
};
chrome.cast.ApiBootstrap_.getCastSenderUrl_ = function(extensionId) {
return "chrome-extension://" + extensionId + "/cast_sender.js";
};
chrome.cast.ApiBootstrap_.isExtensionInstalled_ = function(extensionId, callback) {
var xmlhttp = new XMLHttpRequest;
xmlhttp.onreadystatechange = function() {
4 == xmlhttp.readyState && 200 == xmlhttp.status && callback(!0);
};
xmlhttp.onerror = function() {
callback(!1);
};
try {
// Throws an error in other browsers
xmlhttp.open("GET", chrome.cast.ApiBootstrap_.getCastSenderUrl_(extensionId), !0);
xmlhttp.send();
} catch (ex) {
}
};
chrome.cast.ApiBootstrap_.findInstalledExtension_(function(extensionId) {
if (extensionId) {
console.log("Found cast extension: " + extensionId);
chrome.cast.extensionId = extensionId;
var apiScript = document.createElement("script");
apiScript.src = chrome.cast.ApiBootstrap_.getCastSenderUrl_(extensionId);
(document.head || document.documentElement).appendChild(apiScript);
} else {
var msg = "No cast extension found";
console.log(msg);
var callback = window.__onGCastApiAvailable;
callback && "function" == typeof callback && callback(!1, msg);
}
});
})();