diff --git a/dashboard-ui/css/images/media/audioflyout.png b/dashboard-ui/css/images/media/audioflyout.png
deleted file mode 100644
index cd13df0978..0000000000
Binary files a/dashboard-ui/css/images/media/audioflyout.png and /dev/null differ
diff --git a/dashboard-ui/css/images/media/qualityflyout.png b/dashboard-ui/css/images/media/qualityflyout.png
deleted file mode 100644
index da7ab544c9..0000000000
Binary files a/dashboard-ui/css/images/media/qualityflyout.png and /dev/null differ
diff --git a/dashboard-ui/css/images/media/selected.png b/dashboard-ui/css/images/media/selected.png
deleted file mode 100644
index 00d65f8fc3..0000000000
Binary files a/dashboard-ui/css/images/media/selected.png and /dev/null differ
diff --git a/dashboard-ui/css/images/media/subtitleflyout.png b/dashboard-ui/css/images/media/subtitleflyout.png
deleted file mode 100644
index 821005c50c..0000000000
Binary files a/dashboard-ui/css/images/media/subtitleflyout.png and /dev/null differ
diff --git a/dashboard-ui/css/images/media/tvflyout.png b/dashboard-ui/css/images/media/tvflyout.png
deleted file mode 100644
index af467a9de8..0000000000
Binary files a/dashboard-ui/css/images/media/tvflyout.png and /dev/null differ
diff --git a/dashboard-ui/scripts/backdrops.js b/dashboard-ui/scripts/backdrops.js
index a6901b278e..4c4e68870e 100644
--- a/dashboard-ui/scripts/backdrops.js
+++ b/dashboard-ui/scripts/backdrops.js
@@ -22,7 +22,7 @@
var deferred = $.Deferred();
- var data = sessionStorage.getItem(key);
+ var data = sessionStore.getItem(key);
if (data) {
@@ -51,7 +51,7 @@
};
});
- sessionStorage.setItem(key, JSON.stringify(images));
+ sessionStore.setItem(key, JSON.stringify(images));
deferred.resolveWith(null, [images]);
});
}
@@ -101,7 +101,7 @@
var userId = Dashboard.getCurrentUserId();
- var val = LocalSettings.val('enableBackdrops', userId);
+ var val = store.getItem('enableBackdrops', userId);
// For bandwidth
return val == '1' || (val != '0' && !$.browser.mobile);
diff --git a/dashboard-ui/scripts/extensions.js b/dashboard-ui/scripts/extensions.js
index e3cc999f97..4710c46ae2 100644
--- a/dashboard-ui/scripts/extensions.js
+++ b/dashboard-ui/scripts/extensions.js
@@ -1,25 +1,4 @@
-function IsStorageEnabled(skipRetry) {
-
- 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) {
+function htmlEncode(value) {
//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.
return $('
').text(value).html();
@@ -539,4 +518,44 @@ function ticks_to_human(str) {
}
};
+})(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);
\ No newline at end of file
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js
index 029fd31349..087a99b6f6 100644
--- a/dashboard-ui/scripts/librarybrowser.js
+++ b/dashboard-ui/scripts/librarybrowser.js
@@ -1,4 +1,4 @@
-var LibraryBrowser = (function (window, document, $, screen, localStorage) {
+var LibraryBrowser = (function (window, document, $, screen, store) {
$(function () {
$("body").on("create", function () {
@@ -12,7 +12,7 @@
getDefaultPageSize: function () {
- var saved = localStorage.getItem('pagesize_');
+ var saved = store.getItem('pagesize_');
if (saved) {
return parseInt(saved);
@@ -32,7 +32,7 @@
loadSavedQueryValues: function (key, query) {
- var values = localStorage.getItem(key + '_' + Dashboard.getCurrentUserId());
+ var values = store.getItem(key + '_' + Dashboard.getCurrentUserId());
if (values) {
@@ -56,7 +56,7 @@
}
try {
- localStorage.setItem(key + '_' + Dashboard.getCurrentUserId(), JSON.stringify(values));
+ store.setItem(key + '_' + Dashboard.getCurrentUserId(), JSON.stringify(values));
} catch (e) {
}
@@ -65,7 +65,7 @@
saveViewSetting: function (key, value) {
try {
- localStorage.setItem(key + '_' + Dashboard.getCurrentUserId() + '_view', value);
+ store.setItem(key + '_' + Dashboard.getCurrentUserId() + '_view', value);
} catch (e) {
}
@@ -74,7 +74,7 @@
getSavedViewSetting: function (key) {
var deferred = $.Deferred();
- var val = localStorage.getItem(key + '_' + Dashboard.getCurrentUserId() + '_view');
+ var val = store.getItem(key + '_' + Dashboard.getCurrentUserId() + '_view');
deferred.resolveWith(null, [val]);
return deferred.promise();
@@ -325,7 +325,7 @@
html += 'Resume';
}
- if (MediaController.canQueueMediaType(mediaType)) {
+ if (MediaController.canQueueMediaType(mediaType, itemType)) {
html += 'Queue';
}
@@ -1507,7 +1507,7 @@
if (query.Limit && updatePageSizeSetting !== false) {
try {
- localStorage.setItem('pagesize_', query.Limit);
+ store.setItem('pagesize_', query.Limit);
} catch (e) {
}
@@ -2279,4 +2279,4 @@
};
-})(window, document, jQuery, screen, localStorage);
\ No newline at end of file
+})(window, document, jQuery, screen, window.store);
\ No newline at end of file
diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js
index 3e17690c4b..770931610a 100644
--- a/dashboard-ui/scripts/librarylist.js
+++ b/dashboard-ui/scripts/librarylist.js
@@ -241,7 +241,7 @@
html += '' + Globalize.translate('HeaderMenu') + '';
var href = posterItem.getAttribute('data-href') || posterItem.href;
-
+
html += '' + Globalize.translate('ButtonOpen') + '';
html += '' + Globalize.translate('ButtonOpenInNewTab') + '';
@@ -261,7 +261,7 @@
html += '' + Globalize.translate('ButtonPlayTrailer') + '';
}
- if (MediaController.canQueueMediaType(item.MediaType)) {
+ if (MediaController.canQueueMediaType(item.MediaType, item.Type)) {
html += '' + Globalize.translate('ButtonQueue') + '';
}
@@ -313,7 +313,7 @@
var posterItem = this;
var itemId = posterItem.getAttribute('data-itemid');
-
+
$(posterItem).addClass('hasContextMenu');
var userId = Dashboard.getCurrentUserId();
diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js
index 677b733d15..487eaa1825 100644
--- a/dashboard-ui/scripts/librarymenu.js
+++ b/dashboard-ui/scripts/librarymenu.js
@@ -223,7 +223,7 @@
function getTopParentId() {
- return getParameterByName('topParentId') || sessionStorage.getItem('topParentId') || null;
+ return getParameterByName('topParentId') || sessionStore.getItem('topParentId') || null;
}
window.LibraryMenu = {
@@ -263,7 +263,7 @@
'' :
getTopParentId() || '';
- sessionStorage.setItem('topParentId', id);
+ sessionStore.setItem('topParentId', id);
$('.lnkMediaFolder').each(function () {
diff --git a/dashboard-ui/scripts/localsettings.js b/dashboard-ui/scripts/localsettings.js
deleted file mode 100644
index b06d11bf77..0000000000
--- a/dashboard-ui/scripts/localsettings.js
+++ /dev/null
@@ -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);
\ No newline at end of file
diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js
index cbc0e7b7b6..0cdbdd3c88 100644
--- a/dashboard-ui/scripts/mediacontroller.js
+++ b/dashboard-ui/scripts/mediacontroller.js
@@ -203,7 +203,11 @@
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);
};
diff --git a/dashboard-ui/scripts/mediaplayer-video.js b/dashboard-ui/scripts/mediaplayer-video.js
index eefe103152..426ba09fb2 100644
--- a/dashboard-ui/scripts/mediaplayer-video.js
+++ b/dashboard-ui/scripts/mediaplayer-video.js
@@ -398,7 +398,7 @@
var maxWidth = parseInt(this.getAttribute('data-maxwidth'));
var bitrate = parseInt(this.getAttribute('data-bitrate'));
- localStorage.setItem('preferredVideoBitrate', bitrate);
+ store.setItem('preferredVideoBitrate', bitrate);
self.changeStream(self.getCurrentTicks(), {
diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js
index fdb295c1ad..edb3a73291 100644
--- a/dashboard-ui/scripts/mediaplayer.js
+++ b/dashboard-ui/scripts/mediaplayer.js
@@ -1,4 +1,4 @@
-(function (document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window) {
+(function (document, setTimeout, clearTimeout, screen, store, $, setInterval, window) {
function mediaPlayer() {
@@ -116,11 +116,13 @@
var currentSrc = element.currentSrc;
- var transcodingExtension = self.getTranscodingExtension();
+ var transcodingExtension;
var isStatic;
if (self.currentItem.MediaType == "Video") {
+ transcodingExtension = self.getTranscodingExtension();
+
if (params.AudioStreamIndex != null) {
currentSrc = replaceQueryString(currentSrc, 'AudioStreamIndex', params.AudioStreamIndex);
}
@@ -155,6 +157,8 @@
currentSrc = replaceQueryString(currentSrc, 'Static', finalParams.isStatic);
currentSrc = replaceQueryString(currentSrc, 'AudioCodec', finalParams.audioCodec);
isStatic = finalParams.isStatic;
+ } else {
+ transcodingExtension = '.mp3';
}
var isSeekableMedia = self.currentMediaSource.RunTimeTicks;
@@ -436,7 +440,7 @@
};
self.getBitrateSetting = function () {
- return parseInt(localStorage.getItem('preferredVideoBitrate') || '') || 1500000;
+ return parseInt(store.getItem('preferredVideoBitrate') || '') || 1500000;
};
function getOptimalMediaSource(mediaType, versions) {
@@ -768,13 +772,13 @@
self.saveVolume = function (val) {
if (val) {
- localStorage.setItem("volume", val);
+ store.setItem("volume", val);
}
};
self.getSavedVolume = function () {
- return localStorage.getItem("volume") || 0.5;
+ return store.getItem("volume") || 0.5;
};
self.shuffle = function (id) {
@@ -1291,4 +1295,4 @@
window.MediaController.setActivePlayer(window.MediaPlayer);
-})(document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window);
\ No newline at end of file
+})(document, setTimeout, clearTimeout, screen, window.store, $, setInterval, window);
\ No newline at end of file
diff --git a/dashboard-ui/scripts/mypreferenceswebclient.js b/dashboard-ui/scripts/mypreferenceswebclient.js
index c9943d9048..c0254a604c 100644
--- a/dashboard-ui/scripts/mypreferenceswebclient.js
+++ b/dashboard-ui/scripts/mypreferenceswebclient.js
@@ -2,8 +2,8 @@
function loadForm(page, userId, displayPreferences) {
- $('#selectThemeSong', page).val(LocalSettings.val('enableThemeSongs', userId) || '').selectmenu("refresh");
- $('#selectBackdrop', page).val(LocalSettings.val('enableBackdrops', userId) || '').selectmenu("refresh");
+ $('#selectThemeSong', page).val(store.getItem('enableThemeSongs', userId) || '').selectmenu("refresh");
+ $('#selectBackdrop', page).val(store.getItem('enableBackdrops', userId) || '').selectmenu("refresh");
$('#selectHomeSection1', page).val(displayPreferences.CustomPrefs.home0 || '').selectmenu("refresh");
$('#selectHomeSection2', page).val(displayPreferences.CustomPrefs.home1 || '').selectmenu("refresh");
@@ -15,8 +15,8 @@
function saveUser(page, userId, displayPreferences) {
- LocalSettings.val('enableThemeSongs', userId, $('#selectThemeSong', page).val());
- LocalSettings.val('enableBackdrops', userId, $('#selectBackdrop', page).val());
+ store.setItem('enableThemeSongs', userId, $('#selectThemeSong', page).val());
+ store.setItem('enableBackdrops', userId, $('#selectBackdrop', page).val());
displayPreferences.CustomPrefs.home0 = $('#selectHomeSection1', page).val();
displayPreferences.CustomPrefs.home1 = $('#selectHomeSection2', page).val();
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index 5ec0816083..ab77860771 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -95,17 +95,14 @@ var Dashboard = {
getAccessToken: function () {
- return localStorage.getItem('token');
+ return store.getItem('token');
},
getCurrentUserId: function () {
- if (!window.localStorage) {
- return null;
- }
-
var autoLoginUserId = getParameterByName('u');
- var storedUserId = localStorage.getItem("userId");
+
+ var storedUserId = store.getItem("userId");
if (autoLoginUserId && autoLoginUserId != storedUserId) {
@@ -118,10 +115,8 @@ var Dashboard = {
setCurrentUser: function (userId, token) {
- if (window.localStorage) {
- localStorage.setItem("userId", userId);
- localStorage.setItem("token", token);
- }
+ store.setItem("userId", userId);
+ store.setItem("token", token);
ApiClient.setCurrentUserId(userId, token);
Dashboard.getUserPromise = null;
@@ -129,10 +124,8 @@ var Dashboard = {
logout: function (logoutWithServer) {
- if (window.localStorage) {
- localStorage.removeItem("userId");
- localStorage.removeItem("token");
- }
+ store.removeItem("userId");
+ store.removeItem("token");
if (logoutWithServer === false) {
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.");
}
- 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);
$(ApiClient).on("websocketopen", Dashboard.onWebSocketOpened)
diff --git a/dashboard-ui/scripts/thememediaplayer.js b/dashboard-ui/scripts/thememediaplayer.js
index 574b243869..8d3f955c3e 100644
--- a/dashboard-ui/scripts/thememediaplayer.js
+++ b/dashboard-ui/scripts/thememediaplayer.js
@@ -1,4 +1,4 @@
-(function (document, $, localStorage) {
+(function (document, $) {
var currentOwnerId;
var currentThemeIds = [];
@@ -44,7 +44,7 @@
var userId = Dashboard.getCurrentUserId();
- var val = LocalSettings.val('enableThemeSongs', userId);
+ var val = store.getItem('enableThemeSongs', userId);
// For bandwidth
return val == '1' || (val != '0' && !$.browser.mobile);
@@ -67,4 +67,4 @@
}
});
-})(document, jQuery, window.localStorage);
\ No newline at end of file
+})(document, jQuery);
\ No newline at end of file
diff --git a/dashboard-ui/scripts/tvlatest.js b/dashboard-ui/scripts/tvlatest.js
index 851fda5c11..fc01feb6dc 100644
--- a/dashboard-ui/scripts/tvlatest.js
+++ b/dashboard-ui/scripts/tvlatest.js
@@ -25,7 +25,7 @@
shape: "backdrop",
preferThumb: true,
inheritThumb: false,
- showParentTitle: true,
+ showParentTitle: false,
showUnplayedIndicator: false,
showChildCountIndicator: true,
overlayText: screenWidth >= 600,
diff --git a/dashboard-ui/thirdparty/cast_sender.js b/dashboard-ui/thirdparty/cast_sender.js
new file mode 100644
index 0000000000..5d5ec38860
--- /dev/null
+++ b/dashboard-ui/thirdparty/cast_sender.js
@@ -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);
+ }
+});
+})();