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

dlna fixes

This commit is contained in:
Luke Pulverenti 2014-06-22 01:52:31 -04:00
parent 11cb5f0b45
commit b9aac88766
28 changed files with 410 additions and 423 deletions

View file

@ -1260,16 +1260,16 @@
};
}
MediaController.registerPlayer(new chromecastPlayer());
//MediaController.registerPlayer(new chromecastPlayer());
$(MediaController).on('playerchange', function () {
//$(MediaController).on('playerchange', function () {
if (MediaController.getPlayerInfo().name == PlayerName) {
// if (MediaController.getPlayerInfo().name == PlayerName) {
if (CastPlayer.deviceState != DEVICE_STATE.ACTIVE && CastPlayer.isInitialized) {
CastPlayer.launchApp();
}
}
});
// if (CastPlayer.deviceState != DEVICE_STATE.ACTIVE && CastPlayer.isInitialized) {
// CastPlayer.launchApp();
// }
// }
//});
})(window, window.chrome, console);

View file

@ -26,11 +26,11 @@
$('#contribute', page).show();
}
DashboardPage.renderSupporterIcon(page, pluginSecurityInfo);
});
DashboardPage.reloadSystemInfo(page);
DashboardPage.reloadNews(page);
DashboardPage.sessionUpdateTimer = setInterval(DashboardPage.refreshSessionsLocally, 60000);
},
@ -55,7 +55,7 @@
var port = systemInfo.HttpServerPortNumber;
if (port == systemInfo.WebSocketPortNumber) {
$('#ports', page).html(Globalize.translate('LabelRunningOnPort').replace('{0}', '<b>' + port + '</b>'));
} else {
$('#ports', page).html(Globalize.translate('LabelRunningOnPorts').replace('{0}', '<b>' + port + '</b>').replace('{1}', '<b>' + systemInfo.WebSocketPortNumber + '</b>'));
@ -739,6 +739,25 @@
}
},
renderSupporterIcon: function (page, pluginSecurityInfo) {
var imgUrl, text;
if (pluginSecurityInfo.IsMBSupporter) {
imgUrl = "css/images/supporter/supporterbadge.png";
text = "Thank you for supporting Media Browser.";
$('.supporterIconContainer', page).html('<a class="imageLink supporterIcon" href="supporter.html" title="' + text + '"><img src="' + imgUrl + '" style="height:32px;vertical-align: middle; margin-right: .5em;" /></a><span style="position:relative;top:2px;text-decoration:none;">' + text + '</span>');
} else {
imgUrl = "css/images/supporter/nonsupporterbadge.png";
text = "Please support Media Browser.";
$('.supporterIconContainer', page).html('<a class="imageLink supporterIcon" href="supporter.html" title="' + text + '"><img src="' + imgUrl + '" style="height:32px;vertical-align: middle; margin-right: .5em;" /><span style="position:relative;top:2px;text-decoration:none;">' + text + '</span></a>');
}
},
renderHasPendingRestart: function (page, hasPendingRestart) {
$('#updateFail', page).hide();

View file

@ -43,7 +43,7 @@
else if (view == "Poster") {
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
shape: "auto",
showTitle: true,
centerText: true
});

View file

@ -7,49 +7,56 @@
//html += '<a href="index.html" class="headerButton headerButtonLeft headerHomeButton">';
//html += '<img src="css/images/items/folders/home.png" />';
//html += '</a>';
html += '<button type="button" data-role="none" title="Menu" class="headerButton libraryMenuButton headerButtonLeft">';
html += '<button type="button" data-role="none" title="Menu" class="headerButton dashboardMenuButton barsMenuButton headerButtonLeft">';
html += '<img src="css/images/menu.png" />';
html += '</button>';
html += '<button type="button" data-role="none" title="Menu" class="headerButton libraryMenuButton barsMenuButton headerButtonLeft">';
html += '<img src="css/images/menu.png" />';
html += '</button>';
html += '<div class="libraryMenuButtonText headerButton"><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></div>';
html += '<div class="viewMenuSecondary">';
html += '<a href="nowplaying.html" class="headerButton headerButtonRight headerRemoteButton"><img src="css/images/remote.png" /></a>';
html += '<button id="btnCast" class="btnCast btnDefaultCast headerButton headerButtonRight" type="button" data-role="none"><div class="btnCastImage"></div></button>';
html += '<button id="btnCast" class="btnCast btnDefaultCast headerButton headerButtonRight" type="button" data-role="none"><div class="headerSelectedPlayer"></div><div class="btnCastImage"></div></button>';
html += '<button onclick="Search.showSearchPanel($.mobile.activePage);" type="button" data-role="none" class="headerButton headerButtonRight headerSearchButton"><img src="css/images/headersearch.png" /></button>';
if (user.Configuration.IsAdministrator) {
html += '<a href="dashboard.html" class="headerButton headerButtonRight headerSettingsButton"><img src="css/images/items/folders/settings.png" /></a>';
}
html += '<a class="headerButton headerButtonRight" href="#" onclick="Dashboard.showUserFlyout(this);">';
html += '<a class="headerButton headerButtonRight headerUserButton" href="#" onclick="Dashboard.showUserFlyout(this);">';
var userButtonHeight = 22;
if (user.PrimaryImageTag) {
var url = ApiClient.getUserImageUrl(user.Id, {
height: 18,
height: userButtonHeight,
tag: user.PrimaryImageTag,
type: "Primary"
});
html += '<img src="' + url + '" />';
html += '<img src="' + url + '" style="height:' + userButtonHeight + 'px;" />';
} else {
html += '<img src="css/images/currentuserdefaultwhite.png" />';
html += '<img src="css/images/currentuserdefaultwhite.png" style="height:' + userButtonHeight + 'px;" />';
}
html += '</a>';
if (user.Configuration.IsAdministrator) {
html += '<a href="dashboard.html" class="headerButton headerButtonRight"><img src="css/images/items/folders/settings.png" /></a>';
}
html += '</div>';
html += '</div>';
$(document.body).prepend(html);
$('.viewMenuBar').trigger('create');
$(document).trigger('headercreated');
$('.libraryMenuButton').createHoverTouch().on('hovertouch', showLibraryMenu);
$('.dashboardMenuButton').createHoverTouch().on('hovertouch', showDashboardMenu);
}
function getItemHref(item) {
@ -76,9 +83,23 @@
function showLibraryMenu() {
var panel = getLibraryMenu();
var page = $.mobile.activePage;
var panel;
updateLibraryNavLinks($.mobile.activePage);
panel = getLibraryMenu();
updateLibraryNavLinks(page);
$(panel).panel('toggle').off('mouseleave.librarymenu').on('mouseleave.librarymenu', function () {
$(this).panel("close");
});
}
function showDashboardMenu() {
var page = $.mobile.activePage;
var panel = getDashboardMenu(page);
$(panel).panel('toggle').off('mouseleave.librarymenu').on('mouseleave.librarymenu', function () {
@ -100,7 +121,7 @@
var viewMenuCssClass = (i.CollectionType || 'general') + 'ViewMenu';
var itemId = i.Id;
if (i.CollectionType == "channels") {
itemId = "channels";
}
@ -131,6 +152,8 @@
});
}
var requiresLibraryMenuRefresh = false;
function getLibraryMenu() {
var panel = $('#libraryPanel');
@ -157,6 +180,33 @@
updateLibraryMenu();
}
else if (requiresLibraryMenuRefresh) {
updateLibraryMenu();
requiresLibraryMenuRefresh = false;
}
return panel;
}
function getDashboardMenu(page) {
var panel = $('#dashboardPanel', page);
if (!panel.length) {
var html = '';
html += '<div data-role="panel" id="dashboardPanel" class="dashboardPanel" data-position="left" data-display="overlay" data-position-fixed="true" data-theme="b">';
html += '<div style="margin: 0 -1em;">';
html += '</div>';
html += '</div>';
$(document.body).append(html);
panel = $('#dashboardPanel').panel({}).trigger('create');
}
return panel;
}
@ -187,10 +237,12 @@
if (info.isLocalPlayer) {
$('.btnCast').addClass('btnDefaultCast').removeClass('btnActiveCast');
$('.headerSelectedPlayer').html('');
} else {
$('.btnCast').removeClass('btnDefaultCast').addClass('btnActiveCast');
$('.headerSelectedPlayer').html(info.deviceName || info.name);
}
}
@ -257,12 +309,30 @@
$('.libraryMenuButtonText').html('<span>' + name + '</span>');
}
else if ($(page).hasClass('allLibraryPage')) {
//else if ($(page).hasClass('type-interior')) {
// $('.libraryMenuButtonText').html('<span>' + 'Dashboard' + '</span>');
//}
else if ($(page).hasClass('allLibraryPage') || $(page).hasClass('type-interior')) {
$('.libraryMenuButtonText').html('<span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span>');
}
}
$(document).on('pageinit', ".libraryPage", function () {
function onWebSocketMessage(e, data) {
var msg = data;
if (msg.MessageType === "UserConfigurationUpdated") {
if (msg.Data.Id == Dashboard.getCurrentUserId()) {
requiresLibraryMenuRefresh = true;
}
}
}
$(document).on('pageinit', ".page", function () {
var page = this;
@ -274,10 +344,9 @@
});
}).on('pagebeforeshow', ".libraryPage", function () {
}).on('pagebeforeshow', ".page:not(.standalonePage)", function () {
var page = this;
if (!$('.viewMenuBar').length) {
Dashboard.getCurrentUser().done(function (user) {
@ -294,14 +363,25 @@
updateLibraryNavLinks(page);
}
var jpage = $(page);
if (jpage.hasClass('libraryPage')) {
$(document.body).addClass('libraryDocument').removeClass('dashboardDocument');
}
else if (jpage.hasClass('type-interior')) {
$(document.body).addClass('dashboardDocument').removeClass('libraryDocument');
} else {
$(document.body).removeClass('dashboardDocument').removeClass('libraryDocument');
}
}).on('pagebeforeshow', ".page", function () {
var page = this;
if ($(page).hasClass('libraryPage')) {
$('.viewMenuBar').show();
} else {
if ($(page).hasClass('standalonePage')) {
$('.viewMenuBar').hide();
} else {
$('.viewMenuBar').show();
}
}).on('pageshow', ".libraryPage", function () {
@ -316,8 +396,6 @@
// Scroll back up so in case vertical scroll was messed with
$(document).scrollTop(0);
}
});
$(function () {
@ -326,6 +404,7 @@
updateCastIcon();
});
$(ApiClient).on('websocketmessage', onWebSocketMessage);
});
})(window, document, jQuery);

View file

@ -291,7 +291,7 @@
currentPlayer.shuffle(id);
};
self.playlist = function() {
self.playlist = function () {
return currentPlayer.playlist || [];
};
@ -430,7 +430,7 @@
var mirror = (!target.isLocalPlayer && target.supportedCommands.indexOf('DisplayContent') != -1) ? 'true' : 'false';
html += '<input type="radio" class="radioSelectPlayerTarget" name="radioSelectPlayerTarget" data-mirror="' + mirror + '" data-commands="' + target.supportedCommands.join(',') + '" data-mediatypes="' + target.playableMediaTypes.join(',') + '" data-playername="' + target.playerName + '" data-targetid="' + target.id + '" data-targetname="' + target.name + '" id="' + id + '" value="' + target.id + '"' + checkedHtml + '>';
html += '<input type="radio" class="radioSelectPlayerTarget" name="radioSelectPlayerTarget" data-mirror="' + mirror + '" data-commands="' + target.supportedCommands.join(',') + '" data-mediatypes="' + target.playableMediaTypes.join(',') + '" data-playername="' + target.playerName + '" data-targetid="' + target.id + '" data-targetname="' + target.name + '" data-devicename="' + target.deviceName + '" id="' + id + '" value="' + target.id + '"' + checkedHtml + '>';
html += '<label for="' + id + '" style="font-weight:normal;">' + target.name;
if (target.appName) {
@ -460,6 +460,9 @@
html += '<div class="players"></div>';
html += '<br/>';
html += '<p><a href="nowplaying.html" data-role="button" data-mini="true" data-icon="remote">' + Globalize.translate('ButtonRemoteControl') + '</a></p>';
html += '</div>';
$(document.body).append(html);
@ -506,6 +509,7 @@
var playerName = this.getAttribute('data-playername');
var targetId = this.getAttribute('data-targetid');
var targetName = this.getAttribute('data-targetname');
var deviceName = this.getAttribute('data-deviceName');
var playableMediaTypes = this.getAttribute('data-mediatypes').split(',');
var supportedCommands = this.getAttribute('data-commands').split(',');
@ -513,7 +517,8 @@
id: targetId,
name: targetName,
playableMediaTypes: playableMediaTypes,
supportedCommands: supportedCommands
supportedCommands: supportedCommands,
deviceName: deviceName
});
});

View file

@ -1,21 +1,8 @@
(function () {
videoPlayer = function (mediaPlayer, item, mediaSource, startPosition, user) {
if (mediaPlayer == null) {
throw new Error("mediaPlayer cannot be null");
}
if (item == null) {
throw new Error("item cannot be null");
}
if (user == null) {
throw new Error("user cannot be null");
}
var self = mediaPlayer;
function createVideoPlayer(self) {
var timeout;
var video;
var initialVolume;
var fullscreenExited = false;
var idleState = true;
@ -30,12 +17,6 @@
self.currentSubtitleStreamIndex = null;
self.initVideoPlayer = function () {
video = playVideo(item, mediaSource, startPosition);
return video;
};
self.getCurrentSubtitleStream = function () {
return self.getSubtitleStream(self.currentSubtitleStreamIndex);
};
@ -219,7 +200,7 @@
return s.Type == 'Subtitle' && s.IsTextSubtitleStream;
});
var allTracks = video.textTracks; // get list of tracks
var allTracks = self.currentMediaElement.textTracks; // get list of tracks
for (var i = 0; i < allTracks.length; i++) {
@ -239,7 +220,7 @@
return;
}
var allTracks = video.textTracks; // get list of tracks
var allTracks = self.currentMediaElement.textTracks; // get list of tracks
for (var i = 0; i < allTracks.length; i++) {
@ -256,7 +237,7 @@
}
}
$('track', video).each(function () {
$('track', self.currentMediaElement).each(function () {
var currentSrc = this.src;
@ -267,22 +248,6 @@
});
};
$(document).on('webkitfullscreenchange mozfullscreenchange fullscreenchange', function (e) {
var videoControls = $('#videoControls');
$('.itemVideo').off('mousemove keydown scroll', idleHandler);
if (self.isFullScreen()) {
enterFullScreen();
idleState = true;
$('.itemVideo').on('mousemove keydown scroll', idleHandler).trigger('mousemove');
} else {
videoControls.removeClass("active inactive");
exitFullScreenToWindow();
}
});
function onPositionSliderChange() {
isPositionSliderActive = false;
@ -365,12 +330,6 @@
hideFlyout($('#video-qualityFlyout'));
});
$("body").on("mousemove", "#videoPlayer.fullscreenVideo #itemVideo", function () {
idleHandler(this);
});
var trackChange = false;
var tooltip = $('<div id="slider-tooltip"></div>');
@ -399,9 +358,18 @@
tooltip.remove();
});
$(".mediaFlyoutContainer").on("click", "a", function (e) {
if (confirm("This option will close the video player. Proceed?")) {
self.stop();
} else {
e.preventDefault();
}
});
});
function idleHandler() {
var video = $(".itemVideo");
var videoControls = $("#videoControls");
@ -447,14 +415,6 @@
}
function changeHandler(event) {
document.addEventListener(event, function () {
fullscreenExited = self.isFullScreen() == false;
});
}
function enterFullScreen() {
var player = $("#videoPlayer");
@ -512,6 +472,7 @@
$(document.body).off("mousedown.hidesearchhints");
}
function getChaptersFlyoutHtml() {
var html = '';
@ -577,7 +538,7 @@
return currentStream.Type == "Audio";
});
var currentIndex = getParameterByName('AudioStreamIndex', video.currentSrc);
var currentIndex = getParameterByName('AudioStreamIndex', self.currentMediaElement.currentSrc);
var html = '';
@ -716,12 +677,12 @@
var html = '';
var currentSrc = video.currentSrc.toLowerCase();
var currentSrc = self.currentMediaElement.currentSrc.toLowerCase();
var isStatic = currentSrc.indexOf('static=true') != -1;
var transcodingExtension = self.getTranscodingExtension();
var currentAudioStreamIndex = getParameterByName('AudioStreamIndex', video.currentSrc);
var currentAudioStreamIndex = getParameterByName('AudioStreamIndex', self.currentMediaElement.currentSrc);
var options = getVideoQualityOptions(self.currentMediaSource.MediaStreams, currentAudioStreamIndex, transcodingExtension);
@ -833,7 +794,66 @@
return options;
}
function playVideo(item, mediaSource, startPosition) {
function bindEventsForPlayback() {
$(document).on('webkitfullscreenchange.videoplayer mozfullscreenchange.videoplayer fullscreenchange.videoplayer', function (e) {
$('.itemVideo').off('mousemove.videoplayer keydown.videoplayer scroll.videoplayer', idleHandler);
if (self.isFullScreen()) {
enterFullScreen();
idleState = true;
$('.itemVideo').on('mousemove.videoplayer keydown.videoplayer scroll.videoplayer', idleHandler).trigger('mousemove');
} else {
$('#videoControls').removeClass("active inactive");
exitFullScreenToWindow();
}
fullscreenExited = self.isFullScreen() == false;
}).on("msfullscreenchange.videoplayer", function (e) {
fullscreenExited = self.isFullScreen() == false;
}).on("keyup.videoplayer", function (e) {
if (fullscreenExited) {
$("#videoPlayer", $("#mediaPlayer")).removeClass("fullscreenVideo");
fullscreenExited = false;
return;
}
if (e.keyCode == 27) {
self.stop();
}
});
// Stop playback on browser back button nav
$(window).one("popstate.videoplayer", function () {
self.stop();
return;
});
$(document.body).on("mousemove.videplayer", "#videoPlayer.fullscreenVideo #itemVideo", function () {
idleHandler(this);
});
}
function unbindEventsForPlayback() {
$(document).off('webkitfullscreenchange.videoplayer mozfullscreenchange.videoplayer fullscreenchange.videoplayer').off("msfullscreenchange.videoplayer").off("keyup.videoplayer");
// Stop playback on browser back button nav
$(window).off("popstate.videoplayer");
$(document.body).off("mousemove.videplayer", "#videoPlayer.fullscreenVideo #itemVideo");
$('.itemVideo').off('mousemove.videoplayer keydown.videoplayer scroll.videoplayer');
}
self.playVideo = function (item, mediaSource, startPosition) {
var mediaStreams = mediaSource.MediaStreams || [];
@ -892,18 +912,15 @@
// None of the browsers seem to like this
EnableAutoStreamCopy: false
})) + seekParam;
var webmVideoUrl = ApiClient.getUrl('Videos/' + item.Id + '/stream.webm', $.extend({}, baseParams, {
VideoCodec: 'vpx',
AudioCodec: 'Vorbis',
maxWidth: webmQuality.maxWidth,
videoBitrate: webmQuality.videoBitrate,
audioBitrate: webmQuality.audioBitrate,
EnableAutoStreamCopy: false
})) + seekParam;
var hlsVideoUrl = ApiClient.getUrl('Videos/' + item.Id + '/stream.m3u8', $.extend({}, baseParams, {
@ -915,7 +932,6 @@
AudioCodec: m3U8Quality.audioCodec,
profile: 'baseline',
level: '3'
})) + seekParam;
//======================================================================================>
@ -975,9 +991,8 @@
html += '</video>';
var mediaPlayer = $("#mediaPlayer").show();
var videoPlayer = $("#videoPlayer", mediaPlayer);
var videoControls = $('#videoControls', mediaPlayer);
var mediaPlayerContainer = $("#mediaPlayer").show();
var videoControls = $('#videoControls', mediaPlayerContainer);
//show stop button
$('#video-stopButton', videoControls).show();
@ -985,7 +1000,8 @@
$('#video-pauseButton', videoControls).show();
$('#video-previousTrackButton', videoControls).hide();
$('#video-nextTrackButton', videoControls).hide();
var videoElement = $('#videoElement', mediaPlayer).prepend(html);
var videoElement = $('#videoElement', mediaPlayerContainer).prepend(html);
$('#video-qualityButton', videoControls).show();
@ -1000,7 +1016,8 @@
if (subtitleStreams.length) {
$('#video-subtitleButton', videoControls).show().prop("disabled", false);
} else {
$('#video-subtitleButton', videoControls).hide().prop("disabled", true);;
$('#video-subtitleButton', videoControls).hide().prop("disabled", true);
;
}
if (item.Chapters && item.Chapters.length) {
@ -1026,17 +1043,17 @@
volumeSlider.val(initialVolume).slider('refresh');
updateVolumeButtons(initialVolume);
video.on("volumechange", function (e) {
video.on("volumechange.mediaplayerevent", function (e) {
var vol = this.volume;
updateVolumeButtons(vol);
}).one("playing", function () {
}).one("playing.mediaplayerevent", function () {
self.onPlaybackStart(this, item, mediaSource);
}).on("pause", function (e) {
}).on("pause.mediaplayerevent", function (e) {
$('#video-playButton', videoControls).show();
$('#video-pauseButton', videoControls).hide();
@ -1050,7 +1067,7 @@
self.stop();
}, 5 * 60 * 1000); // 5 minutes
}).on("playing", function (e) {
}).on("playing.mediaplayerevent", function (e) {
$('#video-playButton', videoControls).hide();
$('#video-pauseButton', videoControls).show();
@ -1062,14 +1079,14 @@
// Remove pause setop timer
self.clearPauseStop();
}).on("timeupdate", function () {
}).on("timeupdate.mediaplayerevent", function () {
if (!isPositionSliderActive) {
self.setCurrentTime(self.getCurrentTicks(this), positionSlider, currentTimeElement);
}
}).on("error", function () {
}).on("error.mediaplayerevent", function () {
self.clearPauseStop();
@ -1090,7 +1107,7 @@
message: errorMsg
});
}).on("click", function (e) {
}).on("click.mediaplayerevent", function (e) {
if (this.paused) {
self.unpause();
@ -1098,23 +1115,23 @@
self.pause();
}
}).on("dblclick", function () {
}).on("dblclick.mediaplayerevent", function () {
self.toggleFullscreen();
}).on("seeking", function (e) {
}).on("seeking.mediaplayerevent", function (e) {
$("html").css("cursor", "wait");
}).on("seeked", function (e) {
}).on("seeked.mediaplayerevent", function (e) {
$("html").css("cursor", "default");
}).on("loadstart", function () {
}).on("loadstart.mediaplayerevent", function () {
$("html").css("cursor", "progress");
}).on("canplay", function () {
}).on("canplay.mediaplayerevent", function () {
$("html").css("cursor", "default");
@ -1124,47 +1141,22 @@
self.onPlaybackStopped.call(this);
unbindEventsForPlayback();
}).on('ended.playnext', self.playNextAfterEnded);
// Stop playback on browser back button nav
$(window).on("popstate", function () {
self.stop();
return;
});
bindEventsForPlayback();
$(".mediaFlyoutContainer").on("click", "a", function (e) {
if (confirm("This option will close the video player. Proceed?")) {
self.stop();
} else {
e.preventDefault();
}
});
changeHandler("fullscreenchange");
changeHandler("mozfullscreenchange");
changeHandler("webkitfullscreenchange");
changeHandler("msfullscreenchange");
$(document).on("keyup.enhancePlayer", function (e) {
if (fullscreenExited) {
videoPlayer.removeClass("fullscreenVideo");
fullscreenExited = false;
return;
}
if (e.keyCode == 27) {
self.stop();
$(this).off("keyup.enhancePlayer");
}
});
mediaPlayer.trigger("create");
mediaPlayerContainer.trigger("create");
fullscreenExited = false;
self.currentSubtitleStreamIndex = mediaSource.DefaultSubtitleStreamIndex;
return video[0];
}
};
};
}
createVideoPlayer(MediaPlayer);
})();

View file

@ -475,8 +475,7 @@
self.currentItem = item;
self.currentMediaSource = getOptimalMediaSource(item.MediaType, item.MediaSources);
videoPlayer(self, item, self.currentMediaSource, startPosition, user);
mediaElement = self.initVideoPlayer();
mediaElement = self.playVideo(item, self.currentMediaSource, startPosition);
self.currentDurationTicks = self.currentMediaSource.RunTimeTicks;
} else if (item.MediaType === "Audio") {
@ -940,7 +939,7 @@
var isVideo = self.currentItem.MediaType == "Video";
$(elem).off("ended.playnext").on("ended", function () {
$(elem).off("ended.playnext").one("ended", function () {
$(this).off();
@ -1106,7 +1105,7 @@
var playerElement = this;
$(playerElement).off('ended.playbackstopped');
$(playerElement).off('.mediaplayerevent').off('ended.playbackstopped');
clearProgressInterval();
@ -1259,25 +1258,25 @@
this.volume = initialVolume;
this.play();
}).on("volumechange", function () {
}).on("volumechange.mediaplayerevent", function () {
self.onVolumeChanged(this);
}).one("playing", function () {
}).one("playing.mediaplayerevent", function () {
$('.mediaPlayerAudioContainer').hide();
self.onPlaybackStart(this, item, mediaSource);
}).on("pause", function () {
}).on("pause.mediaplayerevent", function () {
self.onPlaystateChange(this);
}).on("playing", function () {
}).on("playing.mediaplayerevent", function () {
self.onPlaystateChange(this);
}).on("timeupdate", function () {
}).on("timeupdate.mediaplayerevent", function () {
self.setCurrentTime(self.getCurrentTicks(this));

View file

@ -19,7 +19,7 @@
self.getNotificationsSummary().done(function (summary) {
var item = $('.btnNotifications').removeClass('levelNormal').removeClass('levelWarning').removeClass('levelError').html(summary.UnreadCount);
var item = $('.btnNotificationsInner').removeClass('levelNormal').removeClass('levelWarning').removeClass('levelError').html(summary.UnreadCount);
if (summary.UnreadCount) {
item.addClass('level' + summary.MaxUnreadNotificationLevel);
@ -207,13 +207,9 @@
window.Notifications = new notifications();
$(Dashboard).on('interiorheaderrendered', function (e, header, user) {
$(document).on('headercreated', function (e) {
if (!user || $('.notificationsButton', header).length) {
return;
}
$('<a class="imageLink btnNotifications" href="#" title="Notifications">0</a>').insertAfter($('.btnCurrentUser', header)).on('click', Notifications.showNotificationsFlyout);
$('<a class="headerButton headerButtonRight btnNotifications" href="#" title="Notifications"><div class="btnNotificationsInner">0</div></a>').insertBefore($('.headerUserButton')).on('click', Notifications.showNotificationsFlyout);
Notifications.updateNotificationCount();
});

View file

@ -24,6 +24,9 @@
html += '<div style="display:inline-block;width:12px;"></div>';
html += '<a id="playlistButton" class="mediaButton playlistButton" href="playlist.html" data-role="button" data-icon="bullets" data-iconpos="notext" data-inline="true" title="' + Globalize.translate('ButtonPlaylist') + '">' + Globalize.translate('ButtonPlaylist') + '</a>';
html += '<button id="previousTrackButton" class="mediaButton previousTrackButton" title="' + Globalize.translate('ButtonPreviousTrack') + '" type="button" data-icon="previous-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPreviousTrack') + '</button>';
html += '<a class="mediaButton remoteControlButton" title="' + Globalize.translate('ButtonRemoteControl') + '" href="nowplaying.html" data-role="button" data-icon="remote" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonRemoteControl') + '</a>';
html += '<button id="playButton" class="mediaButton unpauseButton" title="' + Globalize.translate('ButtonPlay') + '" type="button" data-icon="play" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPlay') + '</button>';
html += '<button id="pauseButton" class="mediaButton pauseButton" title="' + Globalize.translate('ButtonPause') + '" type="button" data-icon="pause" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPause') + '</button>';

View file

@ -252,6 +252,7 @@
}).map(function (s) {
return {
name: s.DeviceName,
deviceName: s.DeviceName,
id: s.Id,
playerName: self.name,
appName: s.Client,

View file

@ -59,30 +59,13 @@ var Dashboard = {
return Dashboard.getUserPromise;
},
validateCurrentUser: function (page) {
validateCurrentUser: function () {
Dashboard.getUserPromise = null;
if (Dashboard.getCurrentUserId()) {
Dashboard.getCurrentUser();
}
page = page || $.mobile.activePage;
var header = $('.header', page);
if (header.length) {
// Re-render the header
header.remove();
if (Dashboard.getUserPromise) {
Dashboard.getUserPromise.done(function (user) {
Dashboard.ensureHeader(page, user);
});
} else {
Dashboard.ensureHeader(page);
}
}
},
getCurrentUserId: function () {
@ -544,21 +527,21 @@ var Dashboard = {
Dashboard.validateCurrentUser();
},
ensureHeader: function (page, user) {
ensureHeader: function (page) {
if (!page.hasClass('libraryPage') && !$('.headerButtons', page).length) {
if (page.hasClass('standalonePage')) {
Dashboard.renderHeader(page, user);
Dashboard.renderHeader(page);
}
},
renderHeader: function (page, user) {
var headerHtml = '';
renderHeader: function (page) {
var header = $('.header', page);
if (!header.length) {
var headerHtml = '';
headerHtml += '<div class="header">';
headerHtml += '<a class="logo" href="index.html">';
@ -570,67 +553,9 @@ var Dashboard = {
headerHtml += '</a>';
if (page.hasClass('type-interior')) {
headerHtml += '<div>';
headerHtml += '<button type="button" data-icon="bars" data-inline="true" data-iconpos="notext" class="ui-alt-icon" onclick="Dashboard.showDashboardMenu();">Menu</button>';
headerHtml += '</div>';
}
headerHtml += '</div>';
page.prepend(headerHtml);
header = $('.header', page).trigger('create');
}
var imageColor = "black";
headerHtml = '';
headerHtml += '<div class="headerButtons">';
if (user && !page.hasClass('wizardPage')) {
headerHtml += '<a class="imageLink btnCurrentUser" href="#" onclick="Dashboard.showUserFlyout(this);"><span class="currentUsername" style="font-weight:normal;">' + user.Name + '</span>';
if (user.PrimaryImageTag) {
var url = ApiClient.getUserImageUrl(user.Id, {
width: 28,
tag: user.PrimaryImageTag,
type: "Primary"
});
headerHtml += '<img src="' + url + '" />';
} else {
headerHtml += '<img src="css/images/currentuserdefault' + imageColor + '.png" />';
}
headerHtml += '</a>';
if (user.Configuration.IsAdministrator) {
var href = window.location.toString().toLowerCase().indexOf('dashboard.html') == -1 ? 'dashboard.html' : '#';
headerHtml += '<a class="imageLink btnTools" href="' + href + '" data-role="button" data-icon="gear" data-inline="true" data-iconpos="notext">Tools</a>';
}
}
headerHtml += '</div>';
header.append(headerHtml).trigger('create');
if (!$('.supporterIcon', header).length) {
Dashboard.getPluginSecurityInfo().done(function (pluginSecurityInfo) {
if (pluginSecurityInfo.IsMBSupporter) {
$('<a class="imageLink supporterIcon" href="supporter.html" title="Thank you for supporting Media Browser."><img src="css/images/supporter/supporterbadge.png" /></a>').insertBefore($('.btnTools', header));
} else {
$('<a class="imageLink supporterIcon" href="supporter.html" title="Become a Media Browser supporter!"><img src="css/images/supporter/nonsupporterbadge.png" /></a>').insertBefore($('.btnTools', header));
}
});
}
$(Dashboard).trigger('interiorheaderrendered', [header, user]);
},
ensureToolsMenu: function (page, user) {
@ -645,12 +570,9 @@ var Dashboard = {
var html = '<div class="content-secondary ui-bar-a toolsSidebar">';
html += '<p class="libraryPanelHeader" style="margin: 30px 0 20px 25px;"><a href="index.html" class="imageLink"><img src="css/images/mblogoicon.png" style="height:28px;" /><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a></p>';
if (user.Configuration.IsAdministrator) {
html += '<div style="position:absolute;top:20px;right:20px;"><a data-role="button" data-theme="b" data-icon="edit" data-iconpos="notext" href="edititemmetadata.html" title="Metadata Manager">Metadata Manager</a></div>';
}
//html += '<p class="libraryPanelHeader" style="margin: 25px 0 20px 20px;"><a href="index.html" class="imageLink"><img src="css/images/mblogoicon.png" style="height:28px;" /><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a></p>';
html += '<br/>';
html += '<div class="sidebarLinks">';
var links = Dashboard.getToolsMenuLinks(page);
@ -688,7 +610,7 @@ var Dashboard = {
html += '<div data-role="panel" id="dashboardPanel" class="dashboardPanel" data-position="left" data-display="overlay" data-position-fixed="true" data-theme="b">';
html += '<p class="libraryPanelHeader" style="margin: 20px 0 20px 15px;"><a href="index.html" class="imageLink"><img src="css/images/mblogoicon.png" /><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a></p>';
html += '<p class="libraryPanelHeader" style="margin: 15px 0 15px 15px;"><a href="index.html" class="imageLink"><img src="css/images/mblogoicon.png" /><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a></p>';
for (i = 0, length = links.length; i < length; i++) {
@ -719,13 +641,6 @@ var Dashboard = {
}
},
showDashboardMenu: function () {
var page = $.mobile.activePage;
$("#dashboardPanel", page).panel("open");
},
getToolsMenuLinks: function (page) {
var pageElem = page[0];
@ -906,7 +821,7 @@ var Dashboard = {
else if (msg.MessageType === "RestartRequired") {
Dashboard.updateSystemInfo(msg.Data);
}
else if (msg.MessageType === "UserUpdated") {
else if (msg.MessageType === "UserUpdated" || msg.MessageType === "UserConfigurationUpdated") {
Dashboard.validateCurrentUser();
var user = msg.Data;
@ -952,15 +867,6 @@ var Dashboard = {
}
});
}
else if (msg.MessageType === "ScheduledTaskEnded") {
Dashboard.getCurrentUser().done(function (currentUser) {
if (currentUser.Configuration.IsAdministrator) {
Dashboard.showTaskCompletionNotification(msg.Data);
}
});
}
else if (msg.MessageType === "GeneralCommand") {
var cmd = msg.Data;
@ -1007,35 +913,6 @@ var Dashboard = {
},
showTaskCompletionNotification: function (result) {
var html = '';
if (result.Status == "Completed") {
html += '<img src="css/images/notifications/done.png" class="notificationIcon" />';
return;
}
else if (result.Status == "Cancelled") {
html += '<img src="css/images/notifications/info.png" class="notificationIcon" />';
return;
}
else {
html += '<img src="css/images/notifications/error.png" class="notificationIcon" />';
}
html += '<span>';
html += result.Name + " " + result.Status;
html += '</span>';
var timeout = 0;
if (result.Status == 'Cancelled') {
timeout = 2000;
}
Dashboard.showFooterNotification({ html: html, id: result.Id, forceShow: true, timeout: timeout });
},
showPackageInstallNotification: function (installation, status) {
var html = '';
@ -1160,7 +1037,7 @@ var Dashboard = {
parent = $('.ui-content', page)[0];
}
$(parent).prepend("<h2 class='pageTitle'>" + (document.title || "&nbsp;") + "</h2>");
$(parent).prepend("<h1 class='pageTitle'>" + (document.title || "&nbsp;") + "</h1>");
},
setPageTitle: function (title) {
@ -1439,7 +1316,7 @@ $(document).on('pagebeforeshow', ".page", function () {
}
Dashboard.ensureToolsMenu(page, user);
Dashboard.ensureHeader(page, user);
Dashboard.ensureHeader(page);
Dashboard.ensurePageTitle(page);
});
}

View file

@ -51,8 +51,6 @@
var userId = getParameterByName("userId");
Dashboard.validateCurrentUser(page);
if (userId) {
Dashboard.alert(Globalize.translate('SettingsSaved'));
} else {

View file

@ -43,7 +43,6 @@
var page = $.mobile.activePage;
Dashboard.validateCurrentUser(page);
reloadUser(page);
}

View file

@ -165,8 +165,6 @@
Dashboard.hideLoadingMsg();
Dashboard.validateCurrentUser(page);
Dashboard.alert(Globalize.translate('SettingsSaved'));
}

View file

@ -75,7 +75,6 @@
ApiClient.deleteUser(id).done(function () {
Dashboard.validateCurrentUser(page);
UserProfilesPage.loadPageData();
});
}