diff --git a/dashboard-ui/css/images/clients/mb.png b/dashboard-ui/css/images/clients/mb.png index 7f11000363..33d1c37cd8 100644 Binary files a/dashboard-ui/css/images/clients/mb.png and b/dashboard-ui/css/images/clients/mb.png differ diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js index ad3c11863f..91842da491 100644 --- a/dashboard-ui/scripts/mediaplayer.js +++ b/dashboard-ui/scripts/mediaplayer.js @@ -42,7 +42,14 @@ }; self.getCurrentTicks = function (mediaElement) { - return Math.floor(10000000 * (mediaElement || currentMediaElement).currentTime) + self.startTimeTicksOffset; + + var playerTime = Math.floor(10000000 * (mediaElement || currentMediaElement).currentTime); + + //if (currentItem.MediaType == 'Audio') { + playerTime += self.startTimeTicksOffset; + //} + + return playerTime; }; self.clearPauseStop = function () { @@ -218,6 +225,8 @@ $(self).trigger('positionchange', [state]); }; + var supportsTextTracks; + self.supportsTextTracks = function () { // Does not support changing tracks via mode property @@ -225,8 +234,13 @@ return false; } - // For now, until perfected - return false; + if (supportsTextTracks == null) { + + supportsTextTracks = document.createElement('video').textTracks != null; + } + + // For now, until ready + return supportsTextTracks; }; self.canPlayVideoDirect = function (mediaSource, videoStream, audioStream, subtitleStream, maxWidth, bitrate) { diff --git a/dashboard-ui/thirdparty/mediabrowser.apiclient.js b/dashboard-ui/thirdparty/mediabrowser.apiclient.js index 954df7a30a..f7b2560eb2 100644 --- a/dashboard-ui/thirdparty/mediabrowser.apiclient.js +++ b/dashboard-ui/thirdparty/mediabrowser.apiclient.js @@ -2,8 +2,34 @@ window.MediaBrowser = {}; } -MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, window, FileReader) { +MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, window, FileReader, localStorage) { + function generateDeviceId() { + + var keys = []; + + keys.push(navigator.userAgent); + keys.push((navigator.cpuClass || "")); + + var randomId = ''; + + if (localStorage) { + + // Since the above is not guaranteed to be unique per device, add a little more + randomId = localStorage.getItem('randomId'); + + if (!randomId) { + + randomId = new Date().getTime(); + localStorage.setItem('randomId', randomId); + } + } + + keys.push(randomId); + + return MediaBrowser.SHA1(keys.join('|')); + } + /** * Creates a new api client instance * @param {String} serverAddress @@ -18,7 +44,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi var self = this; var deviceName = "Web Browser"; - var deviceId = MediaBrowser.SHA1(navigator.userAgent + (navigator.cpuClass || "")); + var deviceId = generateDeviceId(); var currentUserId; var webSocket; @@ -3155,7 +3181,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }; -}(jQuery, navigator, window.JSON, window.WebSocket, setTimeout, window, window.FileReader); +}(jQuery, navigator, window.JSON, window.WebSocket, setTimeout, window, window.FileReader, window.localStorage); /** * Provides a friendly way to create an api client instance using information from the browser's current url