';
optionHtml += '';
@@ -1071,6 +1135,10 @@
};
+ function supportsContentOverVideoPlayer() {
+ return true;
+ }
+
self.playVideoInternal = function (item, mediaSource, startPosition, streamInfo) {
var videoUrl = streamInfo.url;
@@ -1150,7 +1218,7 @@
$('.videoSubtitleButton').hide();
}
- if (item.Chapters && item.Chapters.length) {
+ if (item.Chapters && item.Chapters.length && supportsContentOverVideoPlayer()) {
$('.videoChaptersButton').show();
} else {
$('.videoChaptersButton').hide();
@@ -1162,7 +1230,7 @@
$('#video-fullscreenButton', videoControls).show();
}
- if ($.browser.mobile) {
+ if (AppInfo.hasPhysicalVolumeButtons) {
$('.volumeSliderContainer', videoControls).addClass('hide');
$('.muteButton', videoControls).addClass('hide');
$('.unmuteButton', videoControls).addClass('hide');
diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js
index 0ace4e90ca..02e42a0ffe 100644
--- a/dashboard-ui/scripts/mediaplayer.js
+++ b/dashboard-ui/scripts/mediaplayer.js
@@ -943,6 +943,11 @@
self.getPosterUrl = function (item) {
+ // Safari often shows the poster under the video, which doesn't look good
+ if ($.browser.safari) {
+ return null;
+ }
+
var screenWidth = Math.max(screen.height, screen.width);
if (item.BackdropImageTags && item.BackdropImageTags.length) {
@@ -1717,7 +1722,17 @@
}).on("timeupdate.mediaplayerevent", function () {
- self.setCurrentTime(self.getCurrentTicks(this));
+ var currentTicks = self.getCurrentTicks(this);
+ // Seeing transcoded audio looping in safari, going past the runtime but restarting the audio
+ if ($.browser.safari && self.currentDurationTicks && (currentTicks > self.currentDurationTicks)) {
+ if (currentPlaylistIndex < self.playlist.length - 1) {
+ self.nextTrack();
+ } else {
+ self.stop();
+ }
+ } else {
+ self.setCurrentTime(currentTicks);
+ }
})[0];
};
@@ -1734,7 +1749,7 @@
window.MediaPlayer = new mediaPlayer();
- Dashboard.ready(function() {
+ Dashboard.ready(function () {
window.MediaController.registerPlayer(window.MediaPlayer);
window.MediaController.setActivePlayer(window.MediaPlayer, window.MediaPlayer.getTargets()[0]);
});
diff --git a/dashboard-ui/scripts/notifications.js b/dashboard-ui/scripts/notifications.js
index 42059d0025..98d1c56697 100644
--- a/dashboard-ui/scripts/notifications.js
+++ b/dashboard-ui/scripts/notifications.js
@@ -45,40 +45,46 @@
self.showNotificationsFlyout = function () {
- var html = '
';
+ Dashboard.getCurrentUser().done(function (user) {
+ var html = '
';
- html += '
';
+ html += '
';
+ html += '' + Globalize.translate('HeaderNotifications') + '';
- html += '';
- $(document.body).append(html);
+ html += '
';
- $('.notificationsFlyout').panel({}).trigger('create').panel("open").on("panelclose", function () {
+ html += '
';
- $(this).off("panelclose").remove();
+ $(document.body).append(html);
- });
+ $('.notificationsFlyout').panel({}).trigger('create').panel("open").on("panelclose", function () {
- self.isFlyout = true;
+ $(this).off("panelclose").remove();
- var startIndex = 0;
- var limit = 5;
- var elem = $('.notificationsFlyoutlist');
+ });
- refreshNotifications(startIndex, limit, elem, null, false).done(function() {
-
- self.markNotificationsRead([]);
+ self.isFlyout = true;
+
+ var startIndex = 0;
+ var limit = 5;
+ var elem = $('.notificationsFlyoutlist');
+
+ refreshNotifications(startIndex, limit, elem, null, false).done(function () {
+
+ self.markNotificationsRead([]);
+ });
});
};
diff --git a/dashboard-ui/scripts/nowplayingbar.js b/dashboard-ui/scripts/nowplayingbar.js
index 5dd5b6b52f..62a2d24c5b 100644
--- a/dashboard-ui/scripts/nowplayingbar.js
+++ b/dashboard-ui/scripts/nowplayingbar.js
@@ -8,6 +8,7 @@
var unmuteButton;
var muteButton;
var volumeSlider;
+ var volumeSliderContainer;
var isVolumeSliderActive;
var unpauseButton;
var pauseButton;
@@ -128,6 +129,8 @@
}
});
+ volumeSliderContainer = $('.volumeSliderContainer', elem);
+
positionSlider = $('.positionSlider', elem).on('slidestart', function () {
isPositionSliderActive = true;
@@ -186,26 +189,6 @@
var playerInfo = MediaController.getPlayerInfo();
- var supportedCommands = playerInfo.supportedCommands;
-
- if (supportedCommands.indexOf('SetVolume') == -1) {
- volumeSlider.prop('disabled', 'disabled');
- } else {
- volumeSlider.prop('disabled', '');
- }
-
- if (supportedCommands.indexOf('Mute') == -1) {
- muteButton.prop('disabled', 'disabled');
- } else {
- muteButton.prop('disabled', '');
- }
-
- if (supportedCommands.indexOf('Unmute') == -1) {
- unmuteButton.prop('disabled', 'disabled');
- } else {
- unmuteButton.prop('disabled', '');
- }
-
var playState = state.PlayState || {};
if (playState.IsPaused) {
@@ -219,7 +202,7 @@
hideButton(unpauseButton);
}
- updatePlayerVolumeState(state);
+ updatePlayerVolumeState(state, playerInfo);
var nowPlayingItem = state.NowPlayingItem || {};
if (!isPositionSliderActive) {
@@ -258,25 +241,71 @@
updateNowPlayingInfo(state);
}
- function updatePlayerVolumeState(state) {
+ function updatePlayerVolumeState(state, playerInfo) {
+
+ playerInfo = playerInfo || MediaController.getPlayerInfo();
if (!muteButton) {
getNowPlayingBar();
}
var playState = state.PlayState || {};
+ var supportedCommands = playerInfo.supportedCommands;
+
+ var showMuteButton = true;
+ var showUnmuteButton = true;
+ var showVolumeSlider = true;
+
+ //if (supportedCommands.indexOf('SetVolume') == -1) {
+ // volumeSlider.prop('disabled', 'disabled');
+ //} else {
+ // volumeSlider.prop('disabled', '');
+ //}
+
+ if (supportedCommands.indexOf('Mute') == -1) {
+ showMuteButton = false;
+ }
+
+ if (supportedCommands.indexOf('Unmute') == -1) {
+ showUnmuteButton = false;
+ }
if (playState.IsMuted) {
- hideButton(muteButton);
- showButton(unmuteButton);
-
+ showMuteButton = false;
} else {
+ showUnmuteButton = false;
+ }
+
+ if (supportedCommands.indexOf('SetVolume') == -1) {
+ showVolumeSlider = false;
+ }
+
+ if (playerInfo.isLocalPlayer && AppInfo.hasPhysicalVolumeButtons) {
+ showMuteButton = false;
+ showUnmuteButton = false;
+ showVolumeSlider = false;
+ }
+
+ if (showMuteButton) {
showButton(muteButton);
+ } else {
+ hideButton(muteButton);
+ }
+
+ if (showUnmuteButton) {
+ showButton(unmuteButton);
+ } else {
hideButton(unmuteButton);
}
+ if (showVolumeSlider) {
+ volumeSliderContainer.show();
+ } else {
+ volumeSliderContainer.hide();
+ }
+
if (!isVolumeSliderActive) {
volumeSlider.val(playState.VolumeLevel || 0);
}
diff --git a/dashboard-ui/scripts/selectserver.js b/dashboard-ui/scripts/selectserver.js
index b284a80213..bbd9e4ad7d 100644
--- a/dashboard-ui/scripts/selectserver.js
+++ b/dashboard-ui/scripts/selectserver.js
@@ -20,13 +20,8 @@
break;
case MediaBrowser.ConnectionState.ServerSignIn:
{
- if (Dashboard.isRunningInCordova()) {
-
- Dashboard.onServerChanged(null, null, apiClient);
- Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id);
- } else {
- showServerConnectionFailure();
- }
+ Dashboard.onServerChanged(null, null, apiClient);
+ Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id);
}
break;
default:
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index a73ee4f21e..72df535014 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -179,7 +179,7 @@ var Dashboard = {
Dashboard.getUserPromise = null;
},
- logout: function (logoutWithServer, forceReload) {
+ logout: function (logoutWithServer) {
function onLogoutDone() {
@@ -192,11 +192,7 @@ var Dashboard = {
loginPage = 'login.html';
}
- if (forceReload) {
- window.location.href = loginPage;
- } else {
- Dashboard.navigate(loginPage);
- }
+ Dashboard.navigate(loginPage);
}
if (logoutWithServer === false) {
@@ -576,7 +572,7 @@ var Dashboard = {
var apiClient = ApiClient;
- if (apiClient.accessToken()) {
+ if (apiClient && apiClient.accessToken()) {
if (apiClient.enableFooterNotifications) {
apiClient.getSystemInfo().done(function (info) {
@@ -968,17 +964,11 @@ var Dashboard = {
{
var args = cmd.Arguments;
- if (args.TimeoutMs && WebNotifications.supported()) {
- var notification = {
- title: args.Header,
- body: args.Text,
- timeout: args.TimeoutMs
- };
-
- WebNotifications.show(notification);
+ if (args.TimeoutMs) {
+ Dashboard.showFooterNotification({ html: "" + args.Header + "
" + args.Text, timeout: args.TimeoutMs });
}
else {
- Dashboard.showFooterNotification({ html: "" + args.Header + "
" + args.Text, timeout: args.TimeoutMs });
+ Dashboard.alert({ title: args.Header, message: args.Text });
}
break;
@@ -1554,9 +1544,11 @@ var AppInfo = {};
if (!isCordova) {
AppInfo.enableFooterNotifications = true;
+ AppInfo.enableSupporterMembership = true;
}
AppInfo.enableUserImage = true;
+ AppInfo.hasPhysicalVolumeButtons = isCordova || $.browser.mobile;
}
function initializeApiClient(apiClient) {
@@ -1678,6 +1670,10 @@ var AppInfo = {};
$(document.body).addClass('bottomSecondaryNav');
}
+ if (!AppInfo.enableSupporterMembership) {
+ $(document.body).addClass('supporterMembershipDisabled');
+ }
+
if (Dashboard.isRunningInCordova()) {
$(document).addClass('nativeApp');
}
@@ -1699,16 +1695,17 @@ var AppInfo = {};
videoPlayerHtml += '';
videoPlayerHtml += '';
- videoPlayerHtml += '';
+ // Embedding onclicks due to issues not firing in cordova safari
+ videoPlayerHtml += '';
videoPlayerHtml += '';
- videoPlayerHtml += '';
+ videoPlayerHtml += '';
videoPlayerHtml += '';
- videoPlayerHtml += '';
+ videoPlayerHtml += '';
videoPlayerHtml += '';
- videoPlayerHtml += '';
+ videoPlayerHtml += '';
videoPlayerHtml += '';
videoPlayerHtml += '';
@@ -1961,7 +1958,7 @@ $(document).on('pagecreate', ".page", function () {
var isSettingsPage = page.hasClass('type-interior');
if (!user.Policy.IsAdministrator && isSettingsPage) {
- window.location.replace("index.html");
+ Dashboard.logout();
return;
}
@@ -1981,7 +1978,7 @@ $(document).on('pagecreate', ".page", function () {
if (isConnectMode) {
if (!Dashboard.isServerlessPage()) {
- Dashboard.logout(true, true);
+ Dashboard.logout(true);
return;
}
}
@@ -1989,7 +1986,7 @@ $(document).on('pagecreate', ".page", function () {
if (!isConnectMode && this.id !== "loginPage" && !page.hasClass('forgotPasswordPage') && !page.hasClass('wizardPage')) {
console.log('Not logged into server. Redirecting to login.');
- Dashboard.logout(true, true);
+ Dashboard.logout(true);
return;
}
diff --git a/dashboard-ui/scripts/sync.js b/dashboard-ui/scripts/sync.js
index 5b7c26efde..2a7a4f7416 100644
--- a/dashboard-ui/scripts/sync.js
+++ b/dashboard-ui/scripts/sync.js
@@ -346,6 +346,10 @@
function isAvailable(item, user) {
+ if (Dashboard.isRunningInCordova()) {
+ return false;
+ }
+
return item.SupportsSync;
}
diff --git a/dashboard-ui/scripts/syncactivity.js b/dashboard-ui/scripts/syncactivity.js
index 77c9bf26ae..3826f0de8a 100644
--- a/dashboard-ui/scripts/syncactivity.js
+++ b/dashboard-ui/scripts/syncactivity.js
@@ -293,7 +293,7 @@
Dashboard.getPluginSecurityInfo().done(function (pluginSecurityInfo) {
- if (pluginSecurityInfo.IsMBSupporter) {
+ if (pluginSecurityInfo.IsMBSupporter || !AppInfo.enableSupporterMembership) {
$('.syncPromotion', page).hide();
} else {
$('.syncPromotion', page).show();
diff --git a/dashboard-ui/support.html b/dashboard-ui/support.html
index 8d94615358..65d79aa58b 100644
--- a/dashboard-ui/support.html
+++ b/dashboard-ui/support.html
@@ -12,8 +12,8 @@
${ProjectHasCommunity}
diff --git a/dashboard-ui/supporter.html b/dashboard-ui/supporter.html
index bd1d967bc5..31bc96d756 100644
--- a/dashboard-ui/supporter.html
+++ b/dashboard-ui/supporter.html
@@ -13,8 +13,8 @@
@@ -55,6 +55,7 @@
+