mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update web components
This commit is contained in:
parent
909402537a
commit
fcdd2e4f4b
114 changed files with 1611 additions and 1238 deletions
|
@ -91,7 +91,7 @@
|
|||
html += "</div>";
|
||||
}
|
||||
|
||||
Events.trigger($('#latestReviews', page).html(html)[0], 'create');
|
||||
$('#latestReviews', page).html(html).trigger('create');
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
picker.innerHTML = getPickerHtml();
|
||||
|
||||
Events.on(picker, 'click', 'a', function () {
|
||||
$(picker).on('click', 'a', function () {
|
||||
|
||||
var elem = this;
|
||||
|
||||
|
@ -52,9 +52,9 @@
|
|||
if (!isSelected) {
|
||||
|
||||
elem.classList.add('selectedCharacter');
|
||||
Events.trigger(picker, 'alphaselect', [this.innerHTML]);
|
||||
$(picker).trigger('alphaselect', [this.innerHTML]);
|
||||
} else {
|
||||
Events.trigger(picker, 'alphaclear');
|
||||
$(picker).trigger('alphaclear');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
if (data) {
|
||||
|
||||
Logger.log('Found backdrop id list in cache. Key: ' + key)
|
||||
console.log('Found backdrop id list in cache. Key: ' + key)
|
||||
data = JSON.parse(data);
|
||||
deferred.resolveWith(null, [data]);
|
||||
} else {
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
this.sessionListener.bind(this),
|
||||
this.receiverListener.bind(this));
|
||||
|
||||
Logger.log('chromecast.initialize');
|
||||
console.log('chromecast.initialize');
|
||||
|
||||
chrome.cast.initialize(apiConfig, this.onInitSuccess.bind(this), this.errorHandler);
|
||||
|
||||
|
@ -93,14 +93,14 @@
|
|||
*/
|
||||
CastPlayer.prototype.onInitSuccess = function () {
|
||||
this.isInitialized = true;
|
||||
Logger.log("chromecast init success");
|
||||
console.log("chromecast init success");
|
||||
};
|
||||
|
||||
/**
|
||||
* Generic error callback function
|
||||
*/
|
||||
CastPlayer.prototype.onError = function () {
|
||||
Logger.log("chromecast error");
|
||||
console.log("chromecast error");
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -115,7 +115,7 @@
|
|||
this.session = e;
|
||||
if (this.session) {
|
||||
|
||||
Logger.log('sessionListener ' + JSON.stringify(e));
|
||||
console.log('sessionListener ' + JSON.stringify(e));
|
||||
|
||||
if (this.session.media[0]) {
|
||||
this.onMediaDiscovered('activeSession', this.session.media[0]);
|
||||
|
@ -165,11 +165,11 @@
|
|||
CastPlayer.prototype.receiverListener = function (e) {
|
||||
|
||||
if (e === 'available') {
|
||||
Logger.log("chromecast receiver found");
|
||||
console.log("chromecast receiver found");
|
||||
this.hasReceivers = true;
|
||||
}
|
||||
else {
|
||||
Logger.log("chromecast receiver list empty");
|
||||
console.log("chromecast receiver list empty");
|
||||
this.hasReceivers = false;
|
||||
}
|
||||
};
|
||||
|
@ -179,7 +179,7 @@
|
|||
*/
|
||||
CastPlayer.prototype.sessionUpdateListener = function (isAlive) {
|
||||
|
||||
Logger.log('sessionUpdateListener alive: ' + isAlive);
|
||||
console.log('sessionUpdateListener alive: ' + isAlive);
|
||||
|
||||
if (isAlive) {
|
||||
}
|
||||
|
@ -188,7 +188,7 @@
|
|||
this.deviceState = DEVICE_STATE.IDLE;
|
||||
this.castPlayerState = PLAYER_STATE.IDLE;
|
||||
|
||||
Logger.log('sessionUpdateListener: setting currentMediaSession to null');
|
||||
console.log('sessionUpdateListener: setting currentMediaSession to null');
|
||||
this.currentMediaSession = null;
|
||||
|
||||
MediaController.removeActivePlayer(PlayerName);
|
||||
|
@ -201,7 +201,7 @@
|
|||
* session request in opt_sessionRequest.
|
||||
*/
|
||||
CastPlayer.prototype.launchApp = function () {
|
||||
Logger.log("chromecast launching app...");
|
||||
console.log("chromecast launching app...");
|
||||
chrome.cast.requestSession(this.onRequestSessionSuccess.bind(this), this.onLaunchError.bind(this));
|
||||
};
|
||||
|
||||
|
@ -211,7 +211,7 @@
|
|||
*/
|
||||
CastPlayer.prototype.onRequestSessionSuccess = function (e) {
|
||||
|
||||
Logger.log("chromecast session success: " + e.sessionId);
|
||||
console.log("chromecast session success: " + e.sessionId);
|
||||
this.onSessionConnected(e);
|
||||
};
|
||||
|
||||
|
@ -238,7 +238,7 @@
|
|||
*/
|
||||
CastPlayer.prototype.sessionMediaListener = function (e) {
|
||||
|
||||
Logger.log('sessionMediaListener');
|
||||
console.log('sessionMediaListener');
|
||||
this.currentMediaSession = e;
|
||||
this.currentMediaSession.addUpdateListener(this.mediaStatusUpdateHandler);
|
||||
};
|
||||
|
@ -247,7 +247,7 @@
|
|||
* Callback function for launch error
|
||||
*/
|
||||
CastPlayer.prototype.onLaunchError = function () {
|
||||
Logger.log("chromecast launch error");
|
||||
console.log("chromecast launch error");
|
||||
this.deviceState = DEVICE_STATE.ERROR;
|
||||
|
||||
//Dashboard.alert({
|
||||
|
@ -276,11 +276,11 @@
|
|||
* Callback function for stop app success
|
||||
*/
|
||||
CastPlayer.prototype.onStopAppSuccess = function (message) {
|
||||
Logger.log(message);
|
||||
console.log(message);
|
||||
this.deviceState = DEVICE_STATE.IDLE;
|
||||
this.castPlayerState = PLAYER_STATE.IDLE;
|
||||
|
||||
Logger.log('onStopAppSuccess: setting currentMediaSession to null');
|
||||
console.log('onStopAppSuccess: setting currentMediaSession to null');
|
||||
this.currentMediaSession = null;
|
||||
};
|
||||
|
||||
|
@ -291,7 +291,7 @@
|
|||
CastPlayer.prototype.loadMedia = function (options, command) {
|
||||
|
||||
if (!this.session) {
|
||||
Logger.log("no session");
|
||||
console.log("no session");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -370,13 +370,13 @@
|
|||
CastPlayer.prototype.sendMessageInternal = function (message) {
|
||||
|
||||
message = JSON.stringify(message);
|
||||
//Logger.log(message);
|
||||
//console.log(message);
|
||||
|
||||
this.session.sendMessage(messageNamespace, message, this.onPlayCommandSuccess.bind(this), this.errorHandler);
|
||||
};
|
||||
|
||||
CastPlayer.prototype.onPlayCommandSuccess = function () {
|
||||
Logger.log('Message was sent to receiver ok.');
|
||||
console.log('Message was sent to receiver ok.');
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -385,7 +385,7 @@
|
|||
*/
|
||||
CastPlayer.prototype.onMediaDiscovered = function (how, mediaSession) {
|
||||
|
||||
Logger.log("chromecast new media session ID:" + mediaSession.mediaSessionId + ' (' + how + ')');
|
||||
console.log("chromecast new media session ID:" + mediaSession.mediaSessionId + ' (' + how + ')');
|
||||
this.currentMediaSession = mediaSession;
|
||||
|
||||
if (how == 'loadMedia') {
|
||||
|
@ -408,7 +408,7 @@
|
|||
if (e == false) {
|
||||
this.castPlayerState = PLAYER_STATE.IDLE;
|
||||
}
|
||||
Logger.log("chromecast updating media: " + e);
|
||||
console.log("chromecast updating media: " + e);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -418,7 +418,7 @@
|
|||
CastPlayer.prototype.setReceiverVolume = function (mute, vol) {
|
||||
|
||||
if (!this.currentMediaSession) {
|
||||
Logger.log('this.currentMediaSession is null');
|
||||
console.log('this.currentMediaSession is null');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -446,7 +446,7 @@
|
|||
* Callback function for media command success
|
||||
*/
|
||||
CastPlayer.prototype.mediaCommandSuccessCallback = function (info, e) {
|
||||
Logger.log(info);
|
||||
console.log(info);
|
||||
};
|
||||
|
||||
// Create Cast Player
|
||||
|
@ -483,18 +483,18 @@
|
|||
}
|
||||
};
|
||||
|
||||
$(castPlayer).on("connect", function (e) {
|
||||
Events.on(castPlayer, "connect", function (e) {
|
||||
|
||||
MediaController.setActivePlayer(PlayerName, self.getCurrentTargetInfo());
|
||||
|
||||
Logger.log('cc: connect');
|
||||
console.log('cc: connect');
|
||||
// Reset this so the next query doesn't make it appear like content is playing.
|
||||
self.lastPlayerData = {};
|
||||
});
|
||||
|
||||
$(castPlayer).on("playbackstart", function (e, data) {
|
||||
Events.on(castPlayer, "playbackstart", function (e, data) {
|
||||
|
||||
Logger.log('cc: playbackstart');
|
||||
console.log('cc: playbackstart');
|
||||
|
||||
castPlayer.initializeCastPlayer();
|
||||
|
||||
|
@ -502,9 +502,9 @@
|
|||
Events.trigger(self, "playbackstart", [state]);
|
||||
});
|
||||
|
||||
$(castPlayer).on("playbackstop", function (e, data) {
|
||||
Events.on(castPlayer, "playbackstop", function (e, data) {
|
||||
|
||||
Logger.log('cc: playbackstop');
|
||||
console.log('cc: playbackstop');
|
||||
var state = self.getPlayerStateInternal(data);
|
||||
|
||||
Events.trigger(self, "playbackstop", [state]);
|
||||
|
@ -513,9 +513,9 @@
|
|||
self.lastPlayerData = {};
|
||||
});
|
||||
|
||||
$(castPlayer).on("playbackprogress", function (e, data) {
|
||||
Events.on(castPlayer, "playbackprogress", function (e, data) {
|
||||
|
||||
Logger.log('cc: positionchange');
|
||||
console.log('cc: positionchange');
|
||||
var state = self.getPlayerStateInternal(data);
|
||||
|
||||
Events.trigger(self, "positionchange", [state]);
|
||||
|
@ -825,7 +825,7 @@
|
|||
data = data || self.lastPlayerData;
|
||||
self.lastPlayerData = data;
|
||||
|
||||
Logger.log(JSON.stringify(data));
|
||||
console.log(JSON.stringify(data));
|
||||
return data;
|
||||
};
|
||||
|
||||
|
@ -843,7 +843,7 @@
|
|||
|
||||
MediaController.registerPlayer(new chromecastPlayer());
|
||||
|
||||
$(MediaController).on('playerchange', function (e, newPlayer, newTarget) {
|
||||
Events.on(MediaController, 'playerchange', function (e, newPlayer, newTarget) {
|
||||
if (newPlayer.name == PlayerName) {
|
||||
if (castPlayer.deviceState != DEVICE_STATE.ACTIVE && castPlayer.isInitialized) {
|
||||
castPlayer.launchApp();
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
DashboardPage.pollForInfo(page);
|
||||
DashboardPage.startInterval(apiClient);
|
||||
|
||||
$(apiClient).on("websocketmessage", DashboardPage.onWebSocketMessage)
|
||||
.on("websocketopen", DashboardPage.onWebSocketOpen);
|
||||
Events.on(apiClient, 'websocketmessage', DashboardPage.onWebSocketMessage);
|
||||
Events.on(apiClient, 'websocketopen', DashboardPage.onWebSocketOpen);
|
||||
|
||||
DashboardPage.lastAppUpdateCheck = null;
|
||||
DashboardPage.lastPluginUpdateCheck = null;
|
||||
|
@ -53,7 +53,8 @@
|
|||
var apiClient = ApiClient;
|
||||
|
||||
if (apiClient) {
|
||||
$(apiClient).off("websocketmessage", DashboardPage.onWebSocketMessage).off("websocketopen", DashboardPage.onWebSocketConnectionChange).off("websocketerror", DashboardPage.onWebSocketConnectionChange).off("websocketclose", DashboardPage.onWebSocketConnectionChange);
|
||||
Events.off(apiClient, 'websocketmessage', DashboardPage.onWebSocketMessage);
|
||||
Events.off(apiClient, 'websocketopen', DashboardPage.onWebSocketOpen);
|
||||
DashboardPage.stopInterval(apiClient);
|
||||
}
|
||||
|
||||
|
@ -1195,7 +1196,8 @@ $(document).on('pageshow', "#dashboardPage", DashboardPage.onPageShow).on('pageb
|
|||
return;
|
||||
}
|
||||
|
||||
$(apiClient).on('websocketmessage', onSocketMessage).on('websocketopen', onSocketOpen);
|
||||
Events.on(apiClient, 'websocketopen', onSocketOpen);
|
||||
Events.on(apiClient, 'websocketmessage', onSocketMessage);
|
||||
}
|
||||
|
||||
function startListening(apiClient) {
|
||||
|
@ -1239,7 +1241,8 @@ $(document).on('pageshow', "#dashboardPage", DashboardPage.onPageShow).on('pageb
|
|||
var apiClient = ApiClient;
|
||||
|
||||
if (apiClient) {
|
||||
$(apiClient).off('websocketopen', onSocketOpen).off('websocketmessage', onSocketOpen);
|
||||
Events.off(apiClient, 'websocketopen', onSocketOpen);
|
||||
Events.off(apiClient, 'websocketmessage', onSocketMessage);
|
||||
|
||||
stopListening(apiClient);
|
||||
}
|
||||
|
|
|
@ -1090,7 +1090,7 @@
|
|||
|
||||
var page = $.mobile.activePage;
|
||||
|
||||
Logger.log('Item updated - reloading metadata');
|
||||
console.log('Item updated - reloading metadata');
|
||||
reload(page);
|
||||
}
|
||||
}
|
||||
|
@ -1098,12 +1098,12 @@
|
|||
|
||||
function bindItemChanged(page) {
|
||||
|
||||
$(ApiClient).on("websocketmessage", onWebSocketMessageReceived);
|
||||
Events.on(ApiClient, "websocketmessage", onWebSocketMessageReceived);
|
||||
}
|
||||
|
||||
function unbindItemChanged(page) {
|
||||
|
||||
$(ApiClient).off("websocketmessage", onWebSocketMessageReceived);
|
||||
Events.off(ApiClient, "websocketmessage", onWebSocketMessageReceived);
|
||||
}
|
||||
|
||||
function onItemDeleted(e, itemId) {
|
||||
|
@ -1221,13 +1221,13 @@
|
|||
|
||||
var page = this;
|
||||
|
||||
$(LibraryBrowser).on('itemdeleting', onItemDeleted);
|
||||
Events.on(LibraryBrowser, 'itemdeleting', onItemDeleted);
|
||||
reload(page);
|
||||
|
||||
}).on('pagebeforehide', "#editItemMetadataPage", function () {
|
||||
|
||||
var page = this;
|
||||
$(LibraryBrowser).off('itemdeleting', onItemDeleted);
|
||||
Events.off(LibraryBrowser, 'itemdeleting', onItemDeleted);
|
||||
|
||||
unbindItemChanged(page);
|
||||
});
|
||||
|
|
|
@ -71,7 +71,6 @@
|
|||
page.querySelector('.listTopPaging').innerHTML = pagingHtml;
|
||||
|
||||
updateFilterControls(page, viewPanel);
|
||||
var trigger = false;
|
||||
|
||||
if (view == "List") {
|
||||
|
||||
|
@ -79,7 +78,6 @@
|
|||
items: result.Items,
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
trigger = true;
|
||||
}
|
||||
else if (view == "Poster") {
|
||||
html += LibraryBrowser.getPosterViewHtml({
|
||||
|
@ -108,10 +106,6 @@
|
|||
elem.innerHTML = html + pagingHtml;
|
||||
ImageLoader.lazyChildren(elem);
|
||||
|
||||
if (trigger) {
|
||||
Events.trigger(elem, 'create');
|
||||
}
|
||||
|
||||
$('.btnNextPage', page).on('click', function () {
|
||||
query.StartIndex += query.Limit;
|
||||
reloadItems(page, viewPanel);
|
||||
|
|
|
@ -383,7 +383,7 @@
|
|||
|
||||
$('.sliderValue', elem).html(tooltext);
|
||||
|
||||
Logger.log("slidin", pct, self.currentDurationTicks, time);
|
||||
console.log("slidin", pct, self.currentDurationTicks, time);
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -30,14 +30,14 @@
|
|||
|
||||
var requestUrl = url + "?v=" + AppInfo.appVersion;
|
||||
|
||||
Logger.log('Requesting ' + requestUrl);
|
||||
console.log('Requesting ' + requestUrl);
|
||||
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', requestUrl, true);
|
||||
|
||||
var onError = function () {
|
||||
|
||||
Logger.log('Dictionary not found. Reverting to english');
|
||||
console.log('Dictionary not found. Reverting to english');
|
||||
|
||||
// Grab the english version
|
||||
var xhr2 = new XMLHttpRequest();
|
||||
|
@ -53,7 +53,7 @@
|
|||
|
||||
xhr.onload = function (e) {
|
||||
|
||||
Logger.log('Globalize response status: ' + this.status);
|
||||
console.log('Globalize response status: ' + this.status);
|
||||
|
||||
if (this.status < 400) {
|
||||
|
||||
|
@ -74,7 +74,7 @@
|
|||
var currentCulture = 'en-US';
|
||||
function setCulture(value) {
|
||||
|
||||
Logger.log('Setting culture to ' + value);
|
||||
console.log('Setting culture to ' + value);
|
||||
currentCulture = value;
|
||||
|
||||
return Promise.all([loadDictionary('html', value), loadDictionary('javascript', value)]);
|
||||
|
@ -105,13 +105,13 @@
|
|||
|
||||
} else if (AppInfo.supportsUserDisplayLanguageSetting) {
|
||||
|
||||
Logger.log('AppInfo.supportsUserDisplayLanguageSetting is true');
|
||||
console.log('AppInfo.supportsUserDisplayLanguageSetting is true');
|
||||
|
||||
resolve(AppSettings.displayLanguage());
|
||||
|
||||
} else {
|
||||
|
||||
Logger.log('Getting culture from document');
|
||||
console.log('Getting culture from document');
|
||||
resolve(document.documentElement.getAttribute('data-culture'));
|
||||
}
|
||||
});
|
||||
|
@ -120,7 +120,7 @@
|
|||
|
||||
function ensure() {
|
||||
|
||||
Logger.log('Entering Globalize.ensure');
|
||||
console.log('Entering Globalize.ensure');
|
||||
|
||||
return getDeviceCulture().then(function (culture) {
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
var supportsTextTracks;
|
||||
var hlsPlayer;
|
||||
var requiresSettingStartTimeOnStart;
|
||||
var subtitleTrackIndexToSetOnPlaying;
|
||||
|
||||
function htmlMediaRenderer(options) {
|
||||
|
||||
|
@ -26,7 +27,7 @@
|
|||
|
||||
function onEnded() {
|
||||
showStatusBar();
|
||||
$(self).trigger('ended');
|
||||
Events.trigger(self, 'ended');
|
||||
}
|
||||
|
||||
function onTimeUpdate() {
|
||||
|
@ -46,50 +47,58 @@
|
|||
// }
|
||||
//}
|
||||
|
||||
$(self).trigger('timeupdate');
|
||||
Events.trigger(self, 'timeupdate');
|
||||
}
|
||||
|
||||
function onVolumeChange() {
|
||||
$(self).trigger('volumechange');
|
||||
Events.trigger(self, 'volumechange');
|
||||
}
|
||||
|
||||
function onOneAudioPlaying() {
|
||||
function onOneAudioPlaying(e) {
|
||||
|
||||
var elem = e.target;
|
||||
elem.removeEventListener('playing', onOneAudioPlaying);
|
||||
$('.mediaPlayerAudioContainer').hide();
|
||||
}
|
||||
|
||||
function onPlaying() {
|
||||
$(self).trigger('playing');
|
||||
Events.trigger(self, 'playing');
|
||||
}
|
||||
|
||||
function onPlay() {
|
||||
$(self).trigger('play');
|
||||
Events.trigger(self, 'play');
|
||||
}
|
||||
|
||||
function onPause() {
|
||||
$(self).trigger('pause');
|
||||
Events.trigger(self, 'pause');
|
||||
}
|
||||
|
||||
function onClick() {
|
||||
$(self).trigger('click');
|
||||
Events.trigger(self, 'click');
|
||||
}
|
||||
|
||||
function onDblClick() {
|
||||
$(self).trigger('dblclick');
|
||||
Events.trigger(self, 'dblclick');
|
||||
}
|
||||
|
||||
function onError() {
|
||||
function onError(e) {
|
||||
|
||||
var errorCode = this.error ? this.error.code : '';
|
||||
Logger.log('Media element error code: ' + errorCode);
|
||||
var elem = e.target;
|
||||
var errorCode = elem.error ? elem.error.code : '';
|
||||
console.log('Media element error code: ' + errorCode);
|
||||
|
||||
showStatusBar();
|
||||
$(self).trigger('error');
|
||||
Events.trigger(self, 'error');
|
||||
}
|
||||
|
||||
function onLoadedMetadata() {
|
||||
function onLoadedMetadata(e) {
|
||||
|
||||
var elem = e.target;
|
||||
|
||||
elem.removeEventListener('loadedmetadata', onLoadedMetadata);
|
||||
|
||||
if (!hlsPlayer) {
|
||||
this.play();
|
||||
elem.play();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,14 +128,19 @@
|
|||
return 0;
|
||||
}
|
||||
|
||||
function onOneVideoPlaying() {
|
||||
function onOneVideoPlaying(e) {
|
||||
|
||||
hideStatusBar();
|
||||
|
||||
var element = e.target;
|
||||
element.removeEventListener('playing', onOneVideoPlaying);
|
||||
|
||||
self.setCurrentTrackElement(subtitleTrackIndexToSetOnPlaying);
|
||||
|
||||
var requiresNativeControls = !self.enableCustomVideoControls();
|
||||
|
||||
if (requiresNativeControls) {
|
||||
$(this).attr('controls', 'controls');
|
||||
$(element).attr('controls', 'controls');
|
||||
}
|
||||
|
||||
if (requiresSettingStartTimeOnStart) {
|
||||
|
@ -138,7 +152,6 @@
|
|||
if (startPositionInSeekParam && src.indexOf('.m3u8') != -1) {
|
||||
|
||||
var delay = browserInfo.safari ? 2500 : 0;
|
||||
var element = this;
|
||||
if (delay) {
|
||||
setTimeout(function () {
|
||||
element.currentTime = startPositionInSeekParam;
|
||||
|
@ -173,15 +186,18 @@
|
|||
elem = $('.mediaPlayerAudio');
|
||||
}
|
||||
|
||||
return $(elem)
|
||||
.on('timeupdate', onTimeUpdate)
|
||||
.on('ended', onEnded)
|
||||
.on('volumechange', onVolumeChange)
|
||||
.one('playing', onOneAudioPlaying)
|
||||
.on('play', onPlay)
|
||||
.on('pause', onPause)
|
||||
.on('playing', onPlaying)
|
||||
.on('error', onError)[0];
|
||||
elem = elem[0];
|
||||
|
||||
elem.addEventListener('playing', onOneAudioPlaying);
|
||||
elem.addEventListener('timeupdate', onTimeUpdate);
|
||||
elem.addEventListener('ended', onEnded);
|
||||
elem.addEventListener('volumechange', onVolumeChange);
|
||||
elem.addEventListener('error', onError);
|
||||
elem.addEventListener('pause', onPause);
|
||||
elem.addEventListener('play', onPlay);
|
||||
elem.addEventListener('playing', onPlaying);
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
function enableHlsPlayer(src) {
|
||||
|
@ -221,18 +237,24 @@
|
|||
|
||||
var elem = $('#videoElement', '#videoPlayer').prepend(html);
|
||||
|
||||
return $('.itemVideo', elem)
|
||||
.one('.loadedmetadata', onLoadedMetadata)
|
||||
.one('playing', onOneVideoPlaying)
|
||||
.on('timeupdate', onTimeUpdate)
|
||||
.on('ended', onEnded)
|
||||
.on('volumechange', onVolumeChange)
|
||||
.on('play', onPlay)
|
||||
.on('pause', onPause)
|
||||
.on('playing', onPlaying)
|
||||
.on('click', onClick)
|
||||
.on('dblclick', onDblClick)
|
||||
.on('error', onError)[0];
|
||||
var itemVideo = $('.itemVideo', elem)[0];
|
||||
|
||||
itemVideo.addEventListener('loadedmetadata', onLoadedMetadata);
|
||||
itemVideo.addEventListener('playing', onOneVideoPlaying);
|
||||
|
||||
itemVideo.addEventListener('timeupdate', onTimeUpdate);
|
||||
itemVideo.addEventListener('ended', onEnded);
|
||||
itemVideo.addEventListener('volumechange', onVolumeChange);
|
||||
|
||||
itemVideo.addEventListener('voluplaymechange', onPlay);
|
||||
itemVideo.addEventListener('pause', onPause);
|
||||
itemVideo.addEventListener('playing', onPlaying);
|
||||
|
||||
itemVideo.addEventListener('click', onClick);
|
||||
itemVideo.addEventListener('dblclick', onDblClick);
|
||||
itemVideo.addEventListener('error', onError);
|
||||
|
||||
return itemVideo;
|
||||
}
|
||||
|
||||
// Save this for when playback stops, because querying the time at that point might return 0
|
||||
|
@ -274,7 +296,7 @@
|
|||
hlsPlayer.destroy();
|
||||
}
|
||||
catch (err) {
|
||||
Logger.log(err);
|
||||
console.log(err);
|
||||
}
|
||||
|
||||
hlsPlayer = null;
|
||||
|
@ -365,6 +387,15 @@
|
|||
|
||||
tracks = tracks || [];
|
||||
|
||||
var currentTrackIndex = -1;
|
||||
for (var i = 0, length = tracks.length; i < length; i++) {
|
||||
if (tracks[i].isDefault) {
|
||||
currentTrackIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
subtitleTrackIndexToSetOnPlaying = currentTrackIndex;
|
||||
|
||||
if (enableHlsPlayer(val)) {
|
||||
|
||||
setTracks(elem, tracks);
|
||||
|
@ -384,18 +415,10 @@
|
|||
|
||||
setTracks(elem, tracks);
|
||||
|
||||
$(elem).one("loadedmetadata", onLoadedMetadata);
|
||||
elem.addEventListener("loadedmetadata", onLoadedMetadata);
|
||||
playNow = true;
|
||||
}
|
||||
|
||||
var currentTrackIndex = -1;
|
||||
for (var i = 0, length = tracks.length; i < length; i++) {
|
||||
if (tracks[i].isDefault) {
|
||||
currentTrackIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
self.setCurrentTrackElement(currentTrackIndex);
|
||||
}
|
||||
|
||||
|
@ -448,28 +471,28 @@
|
|||
|
||||
if (elem.tagName == 'AUDIO') {
|
||||
|
||||
Events.off(elem, 'timeupdate', onTimeUpdate);
|
||||
Events.off(elem, 'ended', onEnded);
|
||||
Events.off(elem, 'volumechange', onVolumeChange);
|
||||
Events.off(elem, 'playing', onOneAudioPlaying);
|
||||
Events.off(elem, 'play', onPlay);
|
||||
Events.off(elem, 'pause', onPause);
|
||||
Events.off(elem, 'playing', onPlaying);
|
||||
Events.off(elem, 'error', onError);
|
||||
elem.removeEventListener('timeupdate', onTimeUpdate);
|
||||
elem.removeEventListener('ended', onEnded);
|
||||
elem.removeEventListener('volumechange', onVolumeChange);
|
||||
elem.removeEventListener('playing', onOneAudioPlaying);
|
||||
elem.removeEventListener('play', onPlay);
|
||||
elem.removeEventListener('pause', onPause);
|
||||
elem.removeEventListener('playing', onPlaying);
|
||||
elem.removeEventListener('error', onError);
|
||||
|
||||
} else {
|
||||
|
||||
Events.off(elem, 'loadedmetadata', onLoadedMetadata);
|
||||
Events.off(elem, 'playing', onOneVideoPlaying);
|
||||
Events.off(elem, 'timeupdate', onTimeUpdate);
|
||||
Events.off(elem, 'ended', onEnded);
|
||||
Events.off(elem, 'volumechange', onVolumeChange);
|
||||
Events.off(elem, 'play', onPlay);
|
||||
Events.off(elem, 'pause', onPause);
|
||||
Events.off(elem, 'playing', onPlaying);
|
||||
Events.off(elem, 'click', onClick);
|
||||
Events.off(elem, 'dblclick', onDblClick);
|
||||
Events.off(elem, 'error', onError);
|
||||
elem.removeEventListener('loadedmetadata', onLoadedMetadata);
|
||||
elem.removeEventListener('playing', onOneVideoPlaying);
|
||||
elem.removeEventListener('timeupdate', onTimeUpdate);
|
||||
elem.removeEventListener('ended', onEnded);
|
||||
elem.removeEventListener('volumechange', onVolumeChange);
|
||||
elem.removeEventListener('play', onPlay);
|
||||
elem.removeEventListener('pause', onPause);
|
||||
elem.removeEventListener('playing', onPlaying);
|
||||
elem.removeEventListener('click', onClick);
|
||||
elem.removeEventListener('dblclick', onDblClick);
|
||||
elem.removeEventListener('error', onError);
|
||||
}
|
||||
|
||||
if (elem.tagName.toLowerCase() != 'audio') {
|
||||
|
@ -492,7 +515,7 @@
|
|||
|
||||
self.setCurrentTrackElement = function (trackIndex) {
|
||||
|
||||
Logger.log('Setting new text track index to: ' + trackIndex);
|
||||
console.log('Setting new text track index to: ' + trackIndex);
|
||||
|
||||
var allTracks = mediaElement.textTracks; // get list of tracks
|
||||
|
||||
|
@ -508,7 +531,7 @@
|
|||
mode = 0; // hide all other tracks
|
||||
}
|
||||
|
||||
Logger.log('Setting track ' + i + ' mode to: ' + mode);
|
||||
console.log('Setting track ' + i + ' mode to: ' + mode);
|
||||
|
||||
// Safari uses integers for the mode property
|
||||
// http://www.jwplayer.com/html5/scripting/
|
||||
|
@ -545,7 +568,7 @@
|
|||
track.removeCue(track.cues[0]);
|
||||
}
|
||||
} catch (e) {
|
||||
Logger.log('Error removing cue from textTrack');
|
||||
console.log('Error removing cue from textTrack');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -286,13 +286,13 @@
|
|||
pageIdOn('pageshow', "indexPage", function () {
|
||||
|
||||
var page = this;
|
||||
$(MediaController).on('playbackstop', onPlaybackStop);
|
||||
Events.on(MediaController, 'playbackstop', onPlaybackStop);
|
||||
});
|
||||
|
||||
pageIdOn('pagebeforehide', "indexPage", function () {
|
||||
|
||||
var page = this;
|
||||
$(MediaController).off('playbackstop', onPlaybackStop);
|
||||
Events.off(MediaController, 'playbackstop', onPlaybackStop);
|
||||
});
|
||||
|
||||
function onPlaybackStop(e, state) {
|
||||
|
|
|
@ -123,7 +123,7 @@
|
|||
}
|
||||
|
||||
if (NavHelper.isBack()) {
|
||||
Logger.log('Not refreshing data because IsBack=true');
|
||||
console.log('Not refreshing data because IsBack=true');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,7 @@
|
|||
}
|
||||
|
||||
if ((now - last) < cacheDuration) {
|
||||
Logger.log('Not refreshing data due to age');
|
||||
console.log('Not refreshing data due to age');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -155,7 +155,7 @@
|
|||
enableFullPaperTabs: function () {
|
||||
|
||||
if (browserInfo.animate && !browserInfo.mobile) {
|
||||
//return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return AppInfo.isNativeApp;
|
||||
|
@ -385,11 +385,11 @@
|
|||
|
||||
if (isFirstLoad) {
|
||||
|
||||
Logger.log('selected tab is null, checking query string');
|
||||
console.log('selected tab is null, checking query string');
|
||||
|
||||
var selected = parseInt(getParameterByName('tab') || '0');
|
||||
|
||||
Logger.log('selected tab will be ' + selected);
|
||||
console.log('selected tab will be ' + selected);
|
||||
|
||||
if (LibraryBrowser.enableFullPaperTabs()) {
|
||||
|
||||
|
@ -3364,7 +3364,7 @@
|
|||
miscInfo.push(text);
|
||||
}
|
||||
catch (e) {
|
||||
Logger.log("Error parsing date: " + item.PremiereDate);
|
||||
console.log("Error parsing date: " + item.PremiereDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3383,7 +3383,7 @@
|
|||
}
|
||||
}
|
||||
catch (e) {
|
||||
Logger.log("Error parsing date: " + item.PremiereDate);
|
||||
console.log("Error parsing date: " + item.PremiereDate);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3409,7 +3409,7 @@
|
|||
|
||||
}
|
||||
catch (e) {
|
||||
Logger.log("Error parsing date: " + item.EndDate);
|
||||
console.log("Error parsing date: " + item.EndDate);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3430,7 +3430,7 @@
|
|||
miscInfo.push(text);
|
||||
}
|
||||
catch (e) {
|
||||
Logger.log("Error parsing date: " + item.PremiereDate);
|
||||
console.log("Error parsing date: " + item.PremiereDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1377,7 +1377,8 @@
|
|||
}
|
||||
|
||||
function initializeApiClient(apiClient) {
|
||||
$(apiClient).off('websocketmessage', onWebSocketMessage).on('websocketmessage', onWebSocketMessage);
|
||||
Events.off(apiClient, "websocketmessage", onWebSocketMessage);
|
||||
Events.on(apiClient, "websocketmessage", onWebSocketMessage);
|
||||
}
|
||||
|
||||
function clearRefreshTimes() {
|
||||
|
@ -1388,7 +1389,7 @@
|
|||
initializeApiClient(window.ApiClient);
|
||||
}
|
||||
|
||||
$(ConnectionManager).on('apiclientcreated', function (e, apiClient) {
|
||||
Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) {
|
||||
initializeApiClient(apiClient);
|
||||
});
|
||||
|
||||
|
|
|
@ -204,7 +204,7 @@
|
|||
refreshLibraryInfoInDrawer(user, drawer);
|
||||
refreshBottomUserInfoInDrawer(user, drawer);
|
||||
|
||||
Events.trigger(document, 'libraryMenuCreated');
|
||||
document.dispatchEvent(new CustomEvent("libraryMenuCreated", {}));
|
||||
updateLibraryMenu(user.localUser);
|
||||
}
|
||||
|
||||
|
|
|
@ -133,7 +133,7 @@
|
|||
airDate = parseISO8601Date(airDate, { toLocal: true }).toLocaleDateString();
|
||||
}
|
||||
catch (e) {
|
||||
Logger.log("Error parsing date: " + airDate);
|
||||
console.log("Error parsing date: " + airDate);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
|
||||
html += '</ul>';
|
||||
|
||||
Events.trigger($('.serverLogs', page).html(html)[0], 'create');
|
||||
$('.serverLogs', page).html(html).trigger('create');
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -192,7 +192,7 @@
|
|||
|
||||
if (bypass()) return;
|
||||
|
||||
Logger.log("keyCode", e.keyCode);
|
||||
console.log("keyCode", e.keyCode);
|
||||
|
||||
if (keyResult[e.keyCode]) {
|
||||
e.preventDefault();
|
||||
|
@ -307,7 +307,7 @@
|
|||
currentPlayer = player;
|
||||
currentTargetInfo = targetInfo;
|
||||
|
||||
Logger.log('Active player: ' + JSON.stringify(currentTargetInfo));
|
||||
console.log('Active player: ' + JSON.stringify(currentTargetInfo));
|
||||
|
||||
triggerPlayerChange(player, targetInfo);
|
||||
};
|
||||
|
@ -336,7 +336,7 @@
|
|||
currentPlayer = player;
|
||||
currentTargetInfo = targetInfo;
|
||||
|
||||
Logger.log('Active player: ' + JSON.stringify(currentTargetInfo));
|
||||
console.log('Active player: ' + JSON.stringify(currentTargetInfo));
|
||||
|
||||
triggerPlayerChange(player, targetInfo);
|
||||
});
|
||||
|
@ -720,7 +720,7 @@
|
|||
|
||||
// Full list
|
||||
// https://github.com/MediaBrowser/MediaBrowser/blob/master/MediaBrowser.Model/Session/GeneralCommand.cs#L23
|
||||
Logger.log('MediaController received command: ' + cmd.Name);
|
||||
console.log('MediaController received command: ' + cmd.Name);
|
||||
switch (cmd.Name) {
|
||||
|
||||
case 'SetRepeatMode':
|
||||
|
@ -950,7 +950,7 @@
|
|||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.fileExists(mediaSource.Path).then(function (exists) {
|
||||
Logger.log('LocalAssetManager.fileExists: path: ' + mediaSource.Path + ' result: ' + exists);
|
||||
console.log('LocalAssetManager.fileExists: path: ' + mediaSource.Path + ' result: ' + exists);
|
||||
deferred.resolveWith(null, [exists]);
|
||||
});
|
||||
});
|
||||
|
@ -1026,7 +1026,8 @@
|
|||
}
|
||||
|
||||
function initializeApiClient(apiClient) {
|
||||
$(apiClient).off("websocketmessage", onWebSocketMessageReceived).on("websocketmessage", onWebSocketMessageReceived);
|
||||
Events.off(apiClient, "websocketmessage", onWebSocketMessageReceived);
|
||||
Events.on(apiClient, "websocketmessage", onWebSocketMessageReceived);
|
||||
}
|
||||
|
||||
MediaController.init = function () {
|
||||
|
@ -1034,7 +1035,7 @@
|
|||
initializeApiClient(window.ApiClient);
|
||||
}
|
||||
|
||||
$(ConnectionManager).on('apiclientcreated', function (e, apiClient) {
|
||||
Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) {
|
||||
initializeApiClient(apiClient);
|
||||
});
|
||||
};
|
||||
|
|
|
@ -77,11 +77,14 @@
|
|||
return currentStream.Type == "Subtitle";
|
||||
});
|
||||
|
||||
var currentIndex = self.currentSubtitleStreamIndex || -1;
|
||||
var currentIndex = self.currentSubtitleStreamIndex;
|
||||
if (currentIndex == null) {
|
||||
currentIndex = -1;
|
||||
}
|
||||
|
||||
streams.unshift({
|
||||
Index: -1,
|
||||
Language: "Off"
|
||||
Language: Globalize.translate('ButtonOff')
|
||||
});
|
||||
|
||||
var menuItems = streams.map(function (stream) {
|
||||
|
@ -880,6 +883,15 @@
|
|||
|
||||
function bindEventsForPlayback(mediaRenderer) {
|
||||
|
||||
Events.on(mediaRenderer, 'playing', onOnePlaying);
|
||||
Events.on(mediaRenderer, 'playing', onPlaying);
|
||||
Events.on(mediaRenderer, 'volumechange', onVolumeChange);
|
||||
Events.on(mediaRenderer, 'pause', onPause);
|
||||
Events.on(mediaRenderer, 'timeupdate', onTimeUpdate);
|
||||
Events.on(mediaRenderer, 'error', onError);
|
||||
Events.on(mediaRenderer, 'click', onClick);
|
||||
Events.on(mediaRenderer, 'dblclick', onDoubleClick);
|
||||
|
||||
var hideElementsOnIdle = true;
|
||||
|
||||
if (hideElementsOnIdle) {
|
||||
|
@ -908,6 +920,16 @@
|
|||
|
||||
function unbindEventsForPlayback(mediaRenderer) {
|
||||
|
||||
Events.off(mediaRenderer, 'playing', onOnePlaying);
|
||||
Events.off(mediaRenderer, 'playing', onPlaying);
|
||||
Events.off(mediaRenderer, 'volumechange', onVolumeChange);
|
||||
|
||||
Events.off(mediaRenderer, 'pause', onPause);
|
||||
Events.off(mediaRenderer, 'timeupdate', onTimeUpdate);
|
||||
Events.off(mediaRenderer, 'error', onError);
|
||||
Events.off(mediaRenderer, 'click', onClick);
|
||||
Events.off(mediaRenderer, 'dblclick', onDoubleClick);
|
||||
|
||||
$(document).off('webkitfullscreenchange', onFullScreenChange);
|
||||
$(document).off('mozfullscreenchange', onFullScreenChange);
|
||||
$(document).off('msfullscreenchange', onFullScreenChange);
|
||||
|
@ -1091,77 +1113,6 @@
|
|||
volumeSlider.value = initialVolume * 100;
|
||||
updateVolumeButtons(initialVolume);
|
||||
|
||||
$(mediaRenderer).on("volumechange.mediaplayerevent", function (e) {
|
||||
|
||||
updateVolumeButtons(this.volume());
|
||||
|
||||
}).one("playing.mediaplayerevent", function () {
|
||||
|
||||
// For some reason this is firing at the start, so don't bind until playback has begun
|
||||
$(this).on("ended", self.onPlaybackStopped).one('ended', self.playNextAfterEnded);
|
||||
|
||||
self.onPlaybackStart(this, item, mediaSource);
|
||||
|
||||
}).on("pause.mediaplayerevent", function (e) {
|
||||
|
||||
$('#video-playButton', videoControls).show();
|
||||
$('#video-pauseButton', videoControls).hide();
|
||||
$("#pause", videoElement).show().addClass("fadeOut");
|
||||
setTimeout(function () {
|
||||
$("#pause", videoElement).hide().removeClass("fadeOut");
|
||||
}, 300);
|
||||
|
||||
}).on("playing.mediaplayerevent", function (e) {
|
||||
|
||||
$('#video-playButton', videoControls).hide();
|
||||
$('#video-pauseButton', videoControls).show();
|
||||
$("#play", videoElement).show().addClass("fadeOut");
|
||||
setTimeout(function () {
|
||||
$("#play", videoElement).hide().removeClass("fadeOut");
|
||||
}, 300);
|
||||
|
||||
}).on("timeupdate.mediaplayerevent", function () {
|
||||
|
||||
if (!positionSlider.dragging) {
|
||||
|
||||
self.setCurrentTime(self.getCurrentTicks(this), positionSlider, currentTimeElement);
|
||||
}
|
||||
|
||||
}).on("error.mediaplayerevent", function () {
|
||||
|
||||
var errorMsg = Globalize.translate('MessageErrorPlayingVideo');
|
||||
|
||||
if (item.Type == "TvChannel") {
|
||||
errorMsg += '<p>';
|
||||
errorMsg += Globalize.translate('MessageEnsureOpenTuner');
|
||||
errorMsg += '</p>';
|
||||
}
|
||||
|
||||
Dashboard.alert({
|
||||
title: Globalize.translate('HeaderVideoError'),
|
||||
message: errorMsg
|
||||
});
|
||||
|
||||
self.onPlaybackStopped.call(mediaRenderer);
|
||||
self.nextTrack();
|
||||
|
||||
}).on("click.mediaplayerevent", function (e) {
|
||||
|
||||
if (!browserInfo.mobile) {
|
||||
if (this.paused()) {
|
||||
self.unpause();
|
||||
} else {
|
||||
self.pause();
|
||||
}
|
||||
}
|
||||
|
||||
}).on("dblclick.mediaplayerevent", function () {
|
||||
|
||||
if (!browserInfo.mobile) {
|
||||
self.toggleFullscreen();
|
||||
}
|
||||
});
|
||||
|
||||
bindEventsForPlayback(mediaRenderer);
|
||||
|
||||
self.currentSubtitleStreamIndex = mediaSource.DefaultSubtitleStreamIndex;
|
||||
|
@ -1186,6 +1137,90 @@
|
|||
});
|
||||
};
|
||||
|
||||
function onOnePlaying() {
|
||||
|
||||
Events.off(this, 'playing', onOnePlaying);
|
||||
|
||||
// For some reason this is firing at the start, so don't bind until playback has begun
|
||||
Events.on(this, 'ended', self.onPlaybackStopped);
|
||||
Events.on(this, 'ended', self.playNextAfterEnded);
|
||||
|
||||
self.onPlaybackStart(this, self.currentItem, self.currentMediaSource);
|
||||
}
|
||||
|
||||
function onPlaying() {
|
||||
|
||||
var videoControls = document.querySelector('#videoPlayer .videoControls');
|
||||
var videoElement = document.querySelector('#videoPlayer #videoElement');
|
||||
|
||||
$('#video-playButton', videoControls).hide();
|
||||
$('#video-pauseButton', videoControls).show();
|
||||
$("#play", videoElement).show().addClass("fadeOut");
|
||||
setTimeout(function () {
|
||||
$("#play", videoElement).hide().removeClass("fadeOut");
|
||||
}, 300);
|
||||
}
|
||||
|
||||
function onVolumeChange() {
|
||||
|
||||
updateVolumeButtons(this.volume());
|
||||
}
|
||||
|
||||
function onPause() {
|
||||
|
||||
var videoControls = document.querySelector('#videoPlayer .videoControls');
|
||||
var videoElement = document.querySelector('#videoPlayer #videoElement');
|
||||
|
||||
$('#video-playButton', videoControls).show();
|
||||
$('#video-pauseButton', videoControls).hide();
|
||||
$("#pause", videoElement).show().addClass("fadeOut");
|
||||
setTimeout(function () {
|
||||
$("#pause", videoElement).hide().removeClass("fadeOut");
|
||||
}, 300);
|
||||
}
|
||||
|
||||
function onTimeUpdate() {
|
||||
if (!positionSlider.dragging) {
|
||||
|
||||
self.setCurrentTime(self.getCurrentTicks(this), positionSlider, currentTimeElement);
|
||||
}
|
||||
}
|
||||
|
||||
function onError() {
|
||||
var errorMsg = Globalize.translate('MessageErrorPlayingVideo');
|
||||
|
||||
if (item.Type == "TvChannel") {
|
||||
errorMsg += '<p>';
|
||||
errorMsg += Globalize.translate('MessageEnsureOpenTuner');
|
||||
errorMsg += '</p>';
|
||||
}
|
||||
|
||||
Dashboard.alert({
|
||||
title: Globalize.translate('HeaderVideoError'),
|
||||
message: errorMsg
|
||||
});
|
||||
|
||||
self.onPlaybackStopped.call(mediaRenderer);
|
||||
self.nextTrack();
|
||||
}
|
||||
|
||||
function onClick() {
|
||||
|
||||
if (!browserInfo.mobile) {
|
||||
if (this.paused()) {
|
||||
self.unpause();
|
||||
} else {
|
||||
self.pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onDoubleClick() {
|
||||
if (!browserInfo.mobile) {
|
||||
self.toggleFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
self.updatePlaylistUi = function () {
|
||||
|
||||
if (!initComplete) {
|
||||
|
|
|
@ -207,7 +207,7 @@
|
|||
profile.TranscodingProfiles.push({
|
||||
Container: 'mkv',
|
||||
Type: 'Video',
|
||||
AudioCodec: 'aac' + (canPlayAc3 ? ',ac3' : ''),
|
||||
AudioCodec: 'aac' + (canPlayAc3 ? ',ac3' : '') + (canPlayMp3 ? ',mp3' : ''),
|
||||
VideoCodec: 'h264',
|
||||
Context: 'Streaming'
|
||||
});
|
||||
|
@ -311,40 +311,6 @@
|
|||
}]
|
||||
});
|
||||
|
||||
if (!isVlc) {
|
||||
profile.CodecProfiles.push({
|
||||
Type: 'VideoAudio',
|
||||
Codec: 'aac',
|
||||
Container: 'mkv,mov',
|
||||
Conditions: [
|
||||
{
|
||||
Condition: 'NotEquals',
|
||||
Property: 'AudioProfile',
|
||||
Value: 'HE-AAC'
|
||||
}
|
||||
// Disabling this is going to require us to learn why it was disabled in the first place
|
||||
//,
|
||||
//{
|
||||
// Condition: 'NotEquals',
|
||||
// Property: 'AudioProfile',
|
||||
// Value: 'LC'
|
||||
//}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
profile.CodecProfiles.push({
|
||||
Type: 'VideoAudio',
|
||||
Codec: 'aac',
|
||||
Conditions: [
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: '6'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// These don't play very well
|
||||
if (isVlc) {
|
||||
profile.CodecProfiles.push({
|
||||
|
@ -358,6 +324,69 @@
|
|||
}
|
||||
]
|
||||
});
|
||||
|
||||
profile.CodecProfiles.push({
|
||||
Type: 'VideoAudio',
|
||||
Codec: 'aac,mp3',
|
||||
Conditions: [
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: '6'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
} else {
|
||||
|
||||
profile.CodecProfiles.push({
|
||||
Type: 'VideoAudio',
|
||||
Codec: 'aac',
|
||||
Container: 'mkv,mov',
|
||||
Conditions: [
|
||||
{
|
||||
Condition: 'NotEquals',
|
||||
Property: 'AudioProfile',
|
||||
Value: 'HE-AAC'
|
||||
},
|
||||
{
|
||||
Condition: 'Equals',
|
||||
Property: 'IsSecondaryAudio',
|
||||
Value: 'false',
|
||||
IsRequired: 'false'
|
||||
},
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: '6'
|
||||
}
|
||||
// Disabling this is going to require us to learn why it was disabled in the first place
|
||||
//,
|
||||
//{
|
||||
// Condition: 'NotEquals',
|
||||
// Property: 'AudioProfile',
|
||||
// Value: 'LC'
|
||||
//}
|
||||
]
|
||||
});
|
||||
|
||||
profile.CodecProfiles.push({
|
||||
Type: 'VideoAudio',
|
||||
Conditions: [
|
||||
{
|
||||
Condition: 'Equals',
|
||||
Property: 'IsSecondaryAudio',
|
||||
Value: 'false',
|
||||
IsRequired: 'false'
|
||||
},
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: '6'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
if (isVlc) {
|
||||
|
@ -543,6 +572,10 @@
|
|||
|
||||
self.playNextAfterEnded = function () {
|
||||
|
||||
console.log('playNextAfterEnded');
|
||||
|
||||
Events.off(this, 'ended', self.playNextAfterEnded);
|
||||
|
||||
self.nextTrack();
|
||||
};
|
||||
|
||||
|
@ -661,16 +694,18 @@
|
|||
Events.off(mediaRenderer, 'ended', self.onPlaybackStopped);
|
||||
Events.off(mediaRenderer, 'ended', self.playNextAfterEnded);
|
||||
|
||||
$(mediaRenderer).one("play", function () {
|
||||
function onPlayingOnce() {
|
||||
|
||||
Events.off(this, "play", onPlayingOnce);
|
||||
Events.on(this, 'ended', self.onPlaybackStopped);
|
||||
|
||||
$(this).one('ended', self.playNextAfterEnded);
|
||||
Events.on(this, 'ended', self.playNextAfterEnded);
|
||||
|
||||
self.startProgressInterval();
|
||||
sendProgressUpdate();
|
||||
}
|
||||
|
||||
});
|
||||
Events.on(mediaRenderer, "play", onPlayingOnce);
|
||||
|
||||
if (self.currentItem.MediaType == "Video") {
|
||||
ApiClient.stopActiveEncodings(playSessionId).then(function () {
|
||||
|
@ -958,13 +993,9 @@
|
|||
|
||||
if (mediaSource.TranscodingSubProtocol == 'hls') {
|
||||
|
||||
if (mediaSource.RunTimeTicks) {
|
||||
// Reports of stuttering with h264 stream copy in IE
|
||||
mediaUrl += '&EnableAutoStreamCopy=false';
|
||||
}
|
||||
|
||||
mediaUrl += seekParam;
|
||||
contentType = 'application/x-mpegURL';
|
||||
|
||||
} else {
|
||||
|
||||
// Reports of stuttering with h264 stream copy in IE
|
||||
|
@ -1044,7 +1075,7 @@
|
|||
LocalAssetManager.translateFilePath(resultInfo.url).then(function (path) {
|
||||
|
||||
resultInfo.url = path;
|
||||
Logger.log('LocalAssetManager.translateFilePath: path: ' + resultInfo.url + ' result: ' + path);
|
||||
console.log('LocalAssetManager.translateFilePath: path: ' + resultInfo.url + ' result: ' + path);
|
||||
deferred.resolveWith(null, [resultInfo]);
|
||||
});
|
||||
});
|
||||
|
@ -1086,7 +1117,7 @@
|
|||
Dashboard.showLoadingMsg();
|
||||
|
||||
ApiClient.detectBitrate().then(function (bitrate) {
|
||||
Logger.log('Max bitrate auto detected to ' + bitrate);
|
||||
console.log('Max bitrate auto detected to ' + bitrate);
|
||||
self.lastBitrateDetections[bitrateDetectionKey] = new Date().getTime();
|
||||
AppSettings.maxStreamingBitrate(bitrate);
|
||||
|
||||
|
@ -1295,7 +1326,7 @@
|
|||
|
||||
if (newItem) {
|
||||
|
||||
Logger.log('playing next track');
|
||||
console.log('playing next track');
|
||||
|
||||
self.playInternal(newItem, 0, function () {
|
||||
self.setPlaylistState(newIndex);
|
||||
|
@ -1433,7 +1464,7 @@
|
|||
|
||||
if (self.currentMediaRenderer) {
|
||||
|
||||
Logger.log('MediaPlayer toggling mute');
|
||||
console.log('MediaPlayer toggling mute');
|
||||
|
||||
if (self.volume()) {
|
||||
self.mute();
|
||||
|
@ -1462,7 +1493,7 @@
|
|||
|
||||
if (self.currentMediaRenderer) {
|
||||
|
||||
Logger.log('MediaPlayer setting volume to ' + val);
|
||||
console.log('MediaPlayer setting volume to ' + val);
|
||||
self.currentMediaRenderer.volume(val / 100);
|
||||
|
||||
self.onVolumeChanged(self.currentMediaRenderer);
|
||||
|
@ -1550,25 +1581,23 @@
|
|||
|
||||
if (mediaRenderer) {
|
||||
|
||||
mediaRenderer.stop();
|
||||
|
||||
Events.off(mediaRenderer, 'ended', self.playNextAfterEnded);
|
||||
|
||||
$(mediaRenderer).one("ended", function () {
|
||||
|
||||
$(this).off('.mediaplayerevent');
|
||||
|
||||
this.cleanup(destroyRenderer);
|
||||
|
||||
self.currentMediaRenderer = null;
|
||||
self.currentItem = null;
|
||||
self.currentMediaSource = null;
|
||||
self.currentSubtitleStreamIndex = null;
|
||||
self.streamInfo = {};
|
||||
|
||||
});
|
||||
mediaRenderer.stop();
|
||||
|
||||
Events.trigger(mediaRenderer, "ended");
|
||||
//self.onPlaybackStopped.call(mediaRenderer);
|
||||
|
||||
// TODO: Unbind video events
|
||||
unBindAudioEvents(mediaRenderer);
|
||||
|
||||
mediaRenderer.cleanup(destroyRenderer);
|
||||
|
||||
self.currentMediaRenderer = null;
|
||||
self.currentItem = null;
|
||||
self.currentMediaSource = null;
|
||||
self.currentSubtitleStreamIndex = null;
|
||||
self.streamInfo = {};
|
||||
|
||||
} else {
|
||||
self.currentMediaRenderer = null;
|
||||
|
@ -1583,6 +1612,14 @@
|
|||
}
|
||||
};
|
||||
|
||||
function unBindAudioEvents(mediaRenderer) {
|
||||
|
||||
Events.off(mediaRenderer, "volumechange", onVolumeChange);
|
||||
Events.off(mediaRenderer, "pause", onPause);
|
||||
Events.off(mediaRenderer, "playing", onPlaying);
|
||||
Events.off(mediaRenderer, "timeupdate", onTimeUpdate);
|
||||
}
|
||||
|
||||
self.isPlaying = function () {
|
||||
return self.playlist.length > 0;
|
||||
};
|
||||
|
@ -1761,14 +1798,14 @@
|
|||
|
||||
self.onPlaybackStopped = function () {
|
||||
|
||||
Logger.log('playback stopped');
|
||||
console.log('playback stopped');
|
||||
|
||||
document.body.classList.remove('bodyWithPopupOpen');
|
||||
|
||||
var mediaRenderer = this;
|
||||
|
||||
Events.off(mediaRenderer, '.mediaplayerevent');
|
||||
|
||||
// TODO: Unbind other events
|
||||
unBindAudioEvents(mediaRenderer);
|
||||
Events.off(mediaRenderer, 'ended', self.onPlaybackStopped);
|
||||
|
||||
var item = self.currentItem;
|
||||
|
@ -1790,6 +1827,8 @@
|
|||
|
||||
self.onPlaystateChange = function (mediaRenderer) {
|
||||
|
||||
console.log('mediaplayer onPlaystateChange');
|
||||
|
||||
var state = self.getPlayerStateInternal(mediaRenderer, self.currentItem, self.currentMediaSource);
|
||||
|
||||
Events.trigger(self, 'playstatechange', [state]);
|
||||
|
@ -1939,44 +1978,24 @@
|
|||
poster: self.getPosterUrl(item)
|
||||
});
|
||||
|
||||
Events.on(mediaRenderer, "volumechange.mediaplayerevent", function () {
|
||||
function onPlayingOnce() {
|
||||
|
||||
Logger.log('audio element event: volumechange');
|
||||
Events.off(mediaRenderer, "playing", onPlayingOnce);
|
||||
|
||||
self.onVolumeChanged(this);
|
||||
|
||||
});
|
||||
|
||||
$(mediaRenderer).one("playing.mediaplayerevent", function () {
|
||||
|
||||
Logger.log('audio element event: playing');
|
||||
console.log('audio element event: playing');
|
||||
|
||||
// For some reason this is firing at the start, so don't bind until playback has begun
|
||||
Events.on(this, 'ended', self.onPlaybackStopped);
|
||||
Events.on(mediaRenderer, 'ended', self.onPlaybackStopped);
|
||||
Events.on(mediaRenderer, 'ended', self.playNextAfterEnded);
|
||||
|
||||
$(this).one('ended', self.playNextAfterEnded);
|
||||
self.onPlaybackStart(mediaRenderer, item, mediaSource);
|
||||
}
|
||||
|
||||
self.onPlaybackStart(this, item, mediaSource);
|
||||
|
||||
}).on("pause.mediaplayerevent", function () {
|
||||
|
||||
Logger.log('audio element event: pause');
|
||||
|
||||
self.onPlaystateChange(this);
|
||||
|
||||
// In the event timeupdate isn't firing, at least we can update when this happens
|
||||
self.setCurrentTime(self.getCurrentTicks());
|
||||
|
||||
}).on("playing.mediaplayerevent", function () {
|
||||
|
||||
Logger.log('audio element event: playing');
|
||||
|
||||
self.onPlaystateChange(this);
|
||||
|
||||
// In the event timeupdate isn't firing, at least we can update when this happens
|
||||
self.setCurrentTime(self.getCurrentTicks());
|
||||
|
||||
}).on("timeupdate.mediaplayerevent", onTimeUpdate);
|
||||
Events.on(mediaRenderer, "volumechange", onVolumeChange);
|
||||
Events.on(mediaRenderer, "playing", onPlayingOnce);
|
||||
Events.on(mediaRenderer, "pause", onPause);
|
||||
Events.on(mediaRenderer, "playing", onPlaying);
|
||||
Events.on(mediaRenderer, "timeupdate", onTimeUpdate);
|
||||
|
||||
self.currentMediaRenderer = mediaRenderer;
|
||||
self.currentDurationTicks = self.currentMediaSource.RunTimeTicks;
|
||||
|
@ -1994,6 +2013,34 @@
|
|||
});
|
||||
}
|
||||
|
||||
function onVolumeChange() {
|
||||
console.log('audio element event: pause');
|
||||
|
||||
self.onPlaystateChange(this);
|
||||
|
||||
// In the event timeupdate isn't firing, at least we can update when this happens
|
||||
self.setCurrentTime(self.getCurrentTicks());
|
||||
}
|
||||
|
||||
function onPause() {
|
||||
|
||||
console.log('audio element event: pause');
|
||||
|
||||
self.onPlaystateChange(this);
|
||||
|
||||
// In the event timeupdate isn't firing, at least we can update when this happens
|
||||
self.setCurrentTime(self.getCurrentTicks());
|
||||
}
|
||||
|
||||
function onPlaying() {
|
||||
console.log('audio element event: playing');
|
||||
|
||||
self.onPlaystateChange(this);
|
||||
|
||||
// In the event timeupdate isn't firing, at least we can update when this happens
|
||||
self.setCurrentTime(self.getCurrentTicks());
|
||||
}
|
||||
|
||||
var getItemFields = "MediaSources,Chapters";
|
||||
|
||||
self.tryPair = function (target) {
|
||||
|
|
|
@ -72,7 +72,6 @@
|
|||
page.querySelector('.listTopPaging').innerHTML = pagingHtml;
|
||||
|
||||
updateFilterControls(page);
|
||||
var trigger = false;
|
||||
|
||||
if (view == "Thumb") {
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
|
@ -112,7 +111,6 @@
|
|||
items: result.Items,
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
trigger = true;
|
||||
}
|
||||
else if (view == "Poster") {
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
|
@ -150,10 +148,6 @@
|
|||
elem.innerHTML = html + pagingHtml;
|
||||
ImageLoader.lazyChildren(elem);
|
||||
|
||||
if (trigger) {
|
||||
Events.trigger(elem, 'create');
|
||||
}
|
||||
|
||||
$('.btnNextPage', page).on('click', function () {
|
||||
query.StartIndex += query.Limit;
|
||||
reloadItems(page, viewPanel);
|
||||
|
|
|
@ -370,13 +370,13 @@
|
|||
}
|
||||
}
|
||||
|
||||
$(MediaController).on('playbackstop', onPlaybackStop);
|
||||
Events.on(MediaController, 'playbackstop', onPlaybackStop);
|
||||
});
|
||||
|
||||
pageIdOn('pagebeforehide', "moviesPage", function () {
|
||||
|
||||
var page = this;
|
||||
$(MediaController).off('playbackstop', onPlaybackStop);
|
||||
Events.off(MediaController, 'playbackstop', onPlaybackStop);
|
||||
});
|
||||
|
||||
function onPlaybackStop(e, state) {
|
||||
|
|
|
@ -66,7 +66,6 @@
|
|||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
preferThumb: true,
|
||||
context: 'music',
|
||||
showItemCounts: true,
|
||||
lazy: true,
|
||||
centerText: true,
|
||||
|
@ -79,13 +78,21 @@
|
|||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
preferThumb: true,
|
||||
context: 'music',
|
||||
showItemCounts: true,
|
||||
cardLayout: true,
|
||||
lazy: true,
|
||||
showTitle: true
|
||||
});
|
||||
}
|
||||
else if (view == "Poster") {
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
centerText: true,
|
||||
showItemCounts: true,
|
||||
lazy: true
|
||||
});
|
||||
}
|
||||
|
||||
var elem = page.querySelector('#items');
|
||||
elem.innerHTML = html;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
ApiClient.getUser(userId).then(function (user) {
|
||||
|
||||
$('.username', page).html(user.Name);
|
||||
Events.trigger($('#uploadUserImage', page).val('')[0], 'change');
|
||||
$('#uploadUserImage', page).val('').trigger('change');
|
||||
|
||||
Dashboard.setPageTitle(user.Name);
|
||||
|
||||
|
|
|
@ -177,14 +177,15 @@
|
|||
}
|
||||
|
||||
function initializeApiClient(apiClient) {
|
||||
$(apiClient).off("websocketmessage", onWebSocketMessage).on("websocketmessage", onWebSocketMessage);
|
||||
Events.off(apiClient, "websocketmessage", onWebSocketMessage);
|
||||
Events.on(apiClient, "websocketmessage", onWebSocketMessage);
|
||||
}
|
||||
|
||||
if (window.ApiClient) {
|
||||
initializeApiClient(window.ApiClient);
|
||||
}
|
||||
|
||||
$(ConnectionManager).on('apiclientcreated', function (e, apiClient) {
|
||||
Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) {
|
||||
initializeApiClient(apiClient);
|
||||
});
|
||||
|
||||
|
|
|
@ -79,7 +79,6 @@
|
|||
}
|
||||
|
||||
return height + 'px';
|
||||
return '80px';
|
||||
}
|
||||
|
||||
function slideDown(elem) {
|
||||
|
@ -97,8 +96,6 @@
|
|||
return;
|
||||
}
|
||||
|
||||
onfinish();
|
||||
return;
|
||||
requestAnimationFrame(function () {
|
||||
var keyframes = [
|
||||
{ height: getHeight(elem), offset: 0 },
|
||||
|
@ -119,7 +116,6 @@
|
|||
if (!browserInfo.animate || browserInfo.mobile) {
|
||||
return;
|
||||
}
|
||||
return;
|
||||
|
||||
requestAnimationFrame(function () {
|
||||
|
||||
|
@ -541,7 +537,7 @@
|
|||
|
||||
function onPlaybackStart(e, state) {
|
||||
|
||||
Logger.log('nowplaying event: ' + e.type);
|
||||
console.log('nowplaying event: ' + e.type);
|
||||
|
||||
var player = this;
|
||||
|
||||
|
@ -569,7 +565,7 @@
|
|||
|
||||
function onPlaybackStopped(e, state) {
|
||||
|
||||
Logger.log('nowplaying event: ' + e.type);
|
||||
console.log('nowplaying event: ' + e.type);
|
||||
var player = this;
|
||||
|
||||
player.endPlayerUpdates();
|
||||
|
@ -579,7 +575,7 @@
|
|||
|
||||
function onStateChanged(e, state) {
|
||||
|
||||
//Logger.log('nowplaying event: ' + e.type);
|
||||
//console.log('nowplaying event: ' + e.type);
|
||||
var player = this;
|
||||
|
||||
if (player.isDefaultPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
|
||||
|
@ -593,11 +589,11 @@
|
|||
|
||||
if (currentPlayer) {
|
||||
|
||||
$(currentPlayer).off('playbackstart', onPlaybackStart)
|
||||
.off('playbackstop', onPlaybackStopped)
|
||||
.off('volumechange', onVolumeChanged)
|
||||
.off('playstatechange', onStateChanged)
|
||||
.off('positionchange', onStateChanged);
|
||||
Events.off(currentPlayer, 'playbackstart', onPlaybackStart);
|
||||
Events.off(currentPlayer, 'playbackstop', onPlaybackStopped);
|
||||
Events.off(currentPlayer, 'volumechange', onVolumeChanged);
|
||||
Events.off(currentPlayer, 'playstatechange', onStateChanged);
|
||||
Events.off(currentPlayer, 'positionchange', onStateChanged);
|
||||
|
||||
currentPlayer.endPlayerUpdates();
|
||||
currentPlayer = null;
|
||||
|
@ -637,11 +633,11 @@
|
|||
onStateChanged.call(player, { type: 'init' }, state);
|
||||
});
|
||||
|
||||
$(player).on('playbackstart', onPlaybackStart)
|
||||
.on('playbackstop', onPlaybackStopped)
|
||||
.on('volumechange', onVolumeChanged)
|
||||
.on('playstatechange', onStateChanged)
|
||||
.on('positionchange', onStateChanged);
|
||||
Events.on(player, 'playbackstart', onPlaybackStart);
|
||||
Events.on(player, 'playbackstop', onPlaybackStopped);
|
||||
Events.on(player, 'volumechange', onVolumeChanged);
|
||||
Events.on(player, 'playstatechange', onStateChanged);
|
||||
Events.on(player, 'positionchange', onStateChanged);
|
||||
}
|
||||
|
||||
Events.on(MediaController, 'playerchange', function () {
|
||||
|
|
|
@ -605,8 +605,8 @@
|
|||
|
||||
// This should be outside of the IF
|
||||
// But for now, if you change songs but keep the same artist, the backdrop will flicker because in-between songs it clears out the image
|
||||
if (!browserInfo.safari) {
|
||||
// Exclude from safari because it just doesn't perform well
|
||||
if (!browserInfo.mobile) {
|
||||
// Exclude from mobile because it just doesn't perform well
|
||||
Backdrops.setBackdropUrl(page, backdropUrl);
|
||||
}
|
||||
|
||||
|
@ -637,11 +637,11 @@
|
|||
|
||||
if (currentPlayer) {
|
||||
|
||||
$(currentPlayer).off('playbackstart', onPlaybackStart)
|
||||
.off('playbackstop', onPlaybackStopped)
|
||||
.off('volumechange', onStateChanged)
|
||||
.off('playstatechange', onStateChanged)
|
||||
.off('positionchange', onStateChanged);
|
||||
Events.off(currentPlayer, 'playbackstart', onPlaybackStart);
|
||||
Events.off(currentPlayer, 'playbackstop', onPlaybackStopped);
|
||||
Events.off(currentPlayer, 'volumechange', onStateChanged);
|
||||
Events.off(currentPlayer, 'playstatechange', onStateChanged);
|
||||
Events.off(currentPlayer, 'positionchange', onStateChanged);
|
||||
|
||||
currentPlayer.endPlayerUpdates();
|
||||
currentPlayer = null;
|
||||
|
@ -663,11 +663,11 @@
|
|||
onStateChanged.call(player, { type: 'init' }, state);
|
||||
});
|
||||
|
||||
$(player).on('playbackstart', onPlaybackStart)
|
||||
.on('playbackstop', onPlaybackStopped)
|
||||
.on('volumechange', onStateChanged)
|
||||
.on('playstatechange', onStateChanged)
|
||||
.on('positionchange', onStateChanged);
|
||||
Events.on(player, 'playbackstart', onPlaybackStart);
|
||||
Events.on(player, 'playbackstop', onPlaybackStopped);
|
||||
Events.on(player, 'volumechange', onStateChanged);
|
||||
Events.on(player, 'playstatechange', onStateChanged);
|
||||
Events.on(player, 'positionchange', onStateChanged);
|
||||
|
||||
var playerInfo = MediaController.getPlayerInfo();
|
||||
|
||||
|
@ -820,7 +820,7 @@
|
|||
}
|
||||
});
|
||||
|
||||
$(MediaController).on('playerchange', function () {
|
||||
Events.on(MediaController, 'playerchange', function () {
|
||||
updateCastIcon(page);
|
||||
});
|
||||
|
||||
|
@ -832,7 +832,7 @@
|
|||
|
||||
currentImgUrl = null;
|
||||
|
||||
$(MediaController).on('playerchange', onPlayerChange);
|
||||
Events.on(MediaController, 'playerchange', onPlayerChange);
|
||||
|
||||
bindToPlayer(page, MediaController.getCurrentPlayer());
|
||||
|
||||
|
@ -861,7 +861,7 @@
|
|||
|
||||
releaseCurrentPlayer();
|
||||
|
||||
$(MediaController).off('playerchange', onPlayerChange);
|
||||
Events.off(MediaController, 'playerchange', onPlayerChange);
|
||||
|
||||
lastPlayerState = null;
|
||||
$(document.body).removeClass('hiddenViewMenuBar').removeClass('hiddenNowPlayingBar');
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
};
|
||||
|
||||
options.callback(review);
|
||||
} else Logger.log("No callback function provided");
|
||||
} else console.log("No callback function provided");
|
||||
|
||||
return false;
|
||||
});
|
||||
|
@ -98,7 +98,7 @@
|
|||
id: id,
|
||||
rating: rating,
|
||||
callback: function (review) {
|
||||
Logger.log(review);
|
||||
console.log(review);
|
||||
dialog.close();
|
||||
|
||||
ApiClient.createPackageReview(review).then(function () {
|
||||
|
|
|
@ -360,7 +360,7 @@
|
|||
}
|
||||
else if (msg.MessageType === "SessionEnded") {
|
||||
|
||||
Logger.log("Server reports another session ended");
|
||||
console.log("Server reports another session ended");
|
||||
|
||||
if (MediaController.getPlayerInfo().id == msg.Data.Id) {
|
||||
MediaController.setDefaultPlayerActive();
|
||||
|
@ -385,14 +385,15 @@
|
|||
}
|
||||
|
||||
function initializeApiClient(apiClient) {
|
||||
$(apiClient).on("websocketmessage", onWebSocketMessageReceived).on("websocketopen", onWebSocketConnectionChange);
|
||||
Events.on(apiClient, "websocketmessage", onWebSocketMessageReceived);
|
||||
Events.on(apiClient, "websocketopen", onWebSocketConnectionChange);
|
||||
}
|
||||
|
||||
if (window.ApiClient) {
|
||||
initializeApiClient(window.ApiClient);
|
||||
}
|
||||
|
||||
$(ConnectionManager).on('apiclientcreated', function (e, apiClient) {
|
||||
Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) {
|
||||
initializeApiClient(apiClient);
|
||||
});
|
||||
|
||||
|
|
|
@ -154,7 +154,7 @@ var ScheduledTaskPage = {
|
|||
|
||||
var page = $.mobile.activePage;
|
||||
|
||||
Events.trigger($('#selectTriggerType', page).val('DailyTrigger')[0], 'change');
|
||||
$('#selectTriggerType', page).val('DailyTrigger').trigger('change');
|
||||
|
||||
$('#popupAddTrigger', page).on("popupafteropen", function () {
|
||||
$('#addTriggerForm input:first', this).focus();
|
||||
|
|
|
@ -284,13 +284,15 @@
|
|||
reloadList(page);
|
||||
});
|
||||
|
||||
$(ApiClient).on("websocketmessage", onWebSocketMessage).on("websocketopen", onWebSocketConnectionOpen);
|
||||
Events.on(ApiClient, "websocketmessage", onWebSocketMessage);
|
||||
Events.on(ApiClient, "websocketopen", onWebSocketConnectionOpen);
|
||||
|
||||
}).on('pagebeforehide', "#scheduledTasksPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
$(ApiClient).off("websocketmessage", onWebSocketMessage).off("websocketopen", onWebSocketConnectionOpen);
|
||||
Events.off(ApiClient, "websocketmessage", onWebSocketMessage);
|
||||
Events.off(ApiClient, "websocketopen", onWebSocketConnectionOpen);
|
||||
stopInterval();
|
||||
});
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
function onSharingSuccess(options) {
|
||||
|
||||
Logger.log('share success. shareId: ' + options.share.Id);
|
||||
console.log('share success. shareId: ' + options.share.Id);
|
||||
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
|||
|
||||
var shareId = options.share.Id;
|
||||
|
||||
Logger.log('share cancelled. shareId: ' + shareId);
|
||||
console.log('share cancelled. shareId: ' + shareId);
|
||||
|
||||
// Delete the share since it was cancelled
|
||||
ApiClient.ajax({
|
||||
|
|
|
@ -12,6 +12,13 @@
|
|||
|
||||
})();
|
||||
|
||||
// Compatibility
|
||||
window.Logger = {
|
||||
log: function(msg) {
|
||||
console.log(msg);
|
||||
}
|
||||
};
|
||||
|
||||
var Dashboard = {
|
||||
|
||||
filterHtml: function (html) {
|
||||
|
@ -888,7 +895,6 @@ var Dashboard = {
|
|||
html += '</div>';
|
||||
|
||||
$('.content-primary', page).before(html);
|
||||
Events.trigger(page, 'create');
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1054,7 +1060,7 @@ var Dashboard = {
|
|||
case 'SetRepeatMode':
|
||||
break;
|
||||
default:
|
||||
Logger.log('Unrecognized command: ' + cmd.Name);
|
||||
console.log('Unrecognized command: ' + cmd.Name);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
@ -1605,18 +1611,20 @@ var AppInfo = {};
|
|||
apiClient.getDefaultImageQuality = Dashboard.getDefaultImageQuality;
|
||||
apiClient.normalizeImageOptions = Dashboard.normalizeImageOptions;
|
||||
|
||||
$(apiClient).off("websocketmessage", Dashboard.onWebSocketMessageReceived).off('requestfail', Dashboard.onRequestFail);
|
||||
Events.off(apiClient, 'websocketmessage', Dashboard.onWebSocketMessageReceived);
|
||||
Events.on(apiClient, 'websocketmessage', Dashboard.onWebSocketMessageReceived);
|
||||
|
||||
$(apiClient).on("websocketmessage", Dashboard.onWebSocketMessageReceived).on('requestfail', Dashboard.onRequestFail);
|
||||
Events.off(apiClient, 'requestfail', Dashboard.onRequestFail);
|
||||
Events.on(apiClient, 'requestfail', Dashboard.onRequestFail);
|
||||
}
|
||||
|
||||
//localStorage.clear();
|
||||
function createConnectionManager(capabilities) {
|
||||
function createConnectionManager(credentialProviderFactory, capabilities) {
|
||||
|
||||
var credentialKey = Dashboard.isConnectMode() ? null : 'servercredentials4';
|
||||
var credentialProvider = new MediaBrowser.CredentialProvider(credentialKey);
|
||||
var credentialProvider = new credentialProviderFactory(credentialKey);
|
||||
|
||||
window.ConnectionManager = new MediaBrowser.ConnectionManager(Logger, credentialProvider, AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId, capabilities);
|
||||
window.ConnectionManager = new MediaBrowser.ConnectionManager(credentialProvider, AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId, capabilities, window.devicePixelRatio);
|
||||
|
||||
if (window.location.href.toLowerCase().indexOf('wizardstart.html') != -1) {
|
||||
window.ConnectionManager.clearData();
|
||||
|
@ -1653,12 +1661,14 @@ var AppInfo = {};
|
|||
|
||||
} else {
|
||||
|
||||
var apiClient = new MediaBrowser.ApiClient(Logger, Dashboard.serverAddress(), AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId);
|
||||
apiClient.enableAutomaticNetworking = false;
|
||||
ConnectionManager.addApiClient(apiClient);
|
||||
Dashboard.importCss(apiClient.getUrl('Branding/Css'));
|
||||
window.ApiClient = apiClient;
|
||||
resolve();
|
||||
require(['apiclient'], function(apiClientFactory) {
|
||||
var apiClient = new apiClientFactory(Dashboard.serverAddress(), AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId, window.devicePixelRatio);
|
||||
apiClient.enableAutomaticNetworking = false;
|
||||
ConnectionManager.addApiClient(apiClient);
|
||||
Dashboard.importCss(apiClient.getUrl('Branding/Css'));
|
||||
window.ApiClient = apiClient;
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -1785,7 +1795,12 @@ var AppInfo = {};
|
|||
masonry: bowerPath + '/masonry/dist/masonry.pkgd.min',
|
||||
humanedate: 'components/humanedate',
|
||||
jQuery: bowerPath + '/jquery/dist/jquery.min',
|
||||
fastclick: bowerPath + '/fastclick/lib/fastclick'
|
||||
fastclick: bowerPath + '/fastclick/lib/fastclick',
|
||||
events: apiClientBowerPath + '/events',
|
||||
credentialprovider: apiClientBowerPath + '/credentials',
|
||||
apiclient: apiClientBowerPath + '/apiclient',
|
||||
connectionmanagerfactory: apiClientBowerPath + '/connectionmanager',
|
||||
connectservice: apiClientBowerPath + '/connectservice'
|
||||
};
|
||||
|
||||
paths.hlsjs = bowerPath + "/hls.js/dist/hls.min";
|
||||
|
@ -1912,13 +1927,8 @@ var AppInfo = {};
|
|||
define("fileupload", [apiClientBowerPath + "/fileupload"]);
|
||||
}
|
||||
|
||||
define("connectservice", [apiClientBowerPath + "/connectservice"]);
|
||||
define("apiclient-store", [apiClientBowerPath + "/store"]);
|
||||
define("apiclient-events", [apiClientBowerPath + "/events"]);
|
||||
define("apiclient-logger", [apiClientBowerPath + "/logger"]);
|
||||
define("apiclient-credentials", [apiClientBowerPath + "/credentials"]);
|
||||
define("apiclient-deferred", [apiClientBowerPath + "/deferred"]);
|
||||
define("apiclient", [apiClientBowerPath + "/apiclient"]);
|
||||
define("apiclient-deferred", ["legacy/deferred"]);
|
||||
define("connectionmanager", [apiClientBowerPath + "/connectionmanager"]);
|
||||
|
||||
define("contentuploader", [apiClientBowerPath + "/sync/contentuploader"]);
|
||||
|
@ -1989,6 +1999,7 @@ var AppInfo = {};
|
|||
define("buttonenabled", ["legacy/buttonenabled"]);
|
||||
|
||||
var deps = [];
|
||||
deps.push('events');
|
||||
|
||||
if (!window.fetch) {
|
||||
deps.push('fetch');
|
||||
|
@ -1996,13 +2007,14 @@ var AppInfo = {};
|
|||
|
||||
deps.push('scripts/mediacontroller');
|
||||
deps.push('scripts/globalize');
|
||||
deps.push('apiclient-events');
|
||||
|
||||
deps.push('jQuery');
|
||||
|
||||
deps.push('paper-drawer-panel');
|
||||
|
||||
require(deps, function () {
|
||||
require(deps, function (events) {
|
||||
|
||||
window.Events = events;
|
||||
|
||||
for (var i in hostingAppInfo) {
|
||||
AppInfo[i] = hostingAppInfo[i];
|
||||
|
@ -2038,19 +2050,19 @@ var AppInfo = {};
|
|||
}
|
||||
|
||||
var deps = [];
|
||||
|
||||
if (AppInfo.isNativeApp && browserInfo.android) {
|
||||
require(['cordova/android/logging']);
|
||||
}
|
||||
deps.push('connectionmanagerfactory');
|
||||
deps.push('credentialprovider');
|
||||
|
||||
deps.push('appstorage');
|
||||
deps.push('scripts/mediaplayer');
|
||||
deps.push('scripts/appsettings');
|
||||
deps.push('apiclient');
|
||||
deps.push('connectionmanager');
|
||||
deps.push('apiclient-credentials');
|
||||
|
||||
require(deps, function () {
|
||||
require(deps, function (connectionManagerExports, credentialProviderFactory) {
|
||||
|
||||
window.MediaBrowser = window.MediaBrowser || {};
|
||||
for (var i in connectionManagerExports) {
|
||||
MediaBrowser[i] = connectionManagerExports[i];
|
||||
}
|
||||
|
||||
// TODO: This needs to be deprecated, but it's used heavily
|
||||
$.fn.checked = function (value) {
|
||||
|
@ -2100,8 +2112,7 @@ var AppInfo = {};
|
|||
promises.push(getRequirePromise(deps));
|
||||
|
||||
promises.push(Globalize.ensure());
|
||||
promises.push(createConnectionManager(capabilities));
|
||||
|
||||
promises.push(createConnectionManager(credentialProviderFactory, capabilities));
|
||||
|
||||
Promise.all(promises).then(function () {
|
||||
|
||||
|
@ -2423,7 +2434,6 @@ var AppInfo = {};
|
|||
var initialDependencies = [];
|
||||
|
||||
initialDependencies.push('isMobile');
|
||||
initialDependencies.push('apiclient-logger');
|
||||
initialDependencies.push('apiclient-store');
|
||||
initialDependencies.push('scripts/extensions');
|
||||
|
||||
|
@ -2567,7 +2577,7 @@ pageClassOn('pageshow', "page", function () {
|
|||
|
||||
if (!isConnectMode && this.id !== "loginPage" && !page.classList.contains('forgotPasswordPage') && !page.classList.contains('forgotPasswordPinPage') && !page.classList.contains('wizardPage') && this.id !== 'publicSharedItemPage') {
|
||||
|
||||
Logger.log('Not logged into server. Redirecting to login.');
|
||||
console.log('Not logged into server. Redirecting to login.');
|
||||
Dashboard.logout();
|
||||
return;
|
||||
}
|
||||
|
@ -2594,7 +2604,7 @@ window.addEventListener("beforeunload", function () {
|
|||
});
|
||||
|
||||
if (!localActivePlayers.length) {
|
||||
Logger.log('Sending close web socket command');
|
||||
console.log('Sending close web socket command');
|
||||
apiClient.closeWebSocket();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,8 +74,6 @@
|
|||
elem.innerHTML = html + pagingHtml;
|
||||
ImageLoader.lazyChildren(elem);
|
||||
|
||||
Events.trigger(elem, 'create');
|
||||
|
||||
$('.btnNextPage', page).on('click', function () {
|
||||
query.StartIndex += query.Limit;
|
||||
reloadItems(page, viewPanel);
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
};
|
||||
|
||||
var url = "http://mb3admin.com/admin/service/supporter/linkKeys";
|
||||
Logger.log(url);
|
||||
console.log(url);
|
||||
$.post(url, info).then(function (res) {
|
||||
var result = JSON.parse(res);
|
||||
Dashboard.hideLoadingMsg();
|
||||
|
@ -87,7 +87,7 @@
|
|||
} else {
|
||||
Dashboard.alert(result.ErrorMessage);
|
||||
}
|
||||
Logger.log(result);
|
||||
console.log(result);
|
||||
|
||||
});
|
||||
|
||||
|
@ -102,7 +102,7 @@
|
|||
var email = $('#txtEmail', form).val();
|
||||
|
||||
var url = "http://mb3admin.com/admin/service/supporter/retrievekey?email=" + email;
|
||||
Logger.log(url);
|
||||
console.log(url);
|
||||
$.post(url).then(function (res) {
|
||||
var result = JSON.parse(res);
|
||||
Dashboard.hideLoadingMsg();
|
||||
|
@ -111,7 +111,7 @@
|
|||
} else {
|
||||
Dashboard.alert(result.ErrorMessage);
|
||||
}
|
||||
Logger.log(result);
|
||||
console.log(result);
|
||||
|
||||
});
|
||||
|
||||
|
|
|
@ -206,7 +206,6 @@
|
|||
}
|
||||
|
||||
var elem = $('.syncActivity', page).html(html).lazyChildren();
|
||||
Events.trigger(elem[0], 'create');
|
||||
|
||||
$('.btnJobMenu', elem).on('click', function () {
|
||||
showJobMenu(page, this);
|
||||
|
@ -417,7 +416,7 @@
|
|||
});
|
||||
|
||||
startListening(page);
|
||||
$(ApiClient).on("websocketmessage", onWebSocketMessage);
|
||||
Events.on(ApiClient, "websocketmessage", onWebSocketMessage);
|
||||
|
||||
}).on('pagebeforehide', ".syncActivityPage", function () {
|
||||
|
||||
|
@ -429,7 +428,7 @@
|
|||
});
|
||||
|
||||
stopListening();
|
||||
$(ApiClient).off("websocketmessage", onWebSocketMessage);
|
||||
Events.off(ApiClient, "websocketmessage", onWebSocketMessage);
|
||||
});
|
||||
|
||||
})();
|
|
@ -411,14 +411,14 @@
|
|||
loadJob(page);
|
||||
|
||||
startListening(page);
|
||||
$(ApiClient).on("websocketmessage", onWebSocketMessage);
|
||||
Events.on(ApiClient, "websocketmessage", onWebSocketMessage);
|
||||
|
||||
}).on('pagebeforehide', ".syncJobPage", function () {
|
||||
|
||||
var page = this;
|
||||
|
||||
stopListening();
|
||||
$(ApiClient).off("websocketmessage", onWebSocketMessage);
|
||||
Events.off(ApiClient, "websocketmessage", onWebSocketMessage);
|
||||
});
|
||||
|
||||
})();
|
|
@ -156,7 +156,8 @@
|
|||
if (options.mode == 'off') {
|
||||
|
||||
this.off('click', onButtonClick);
|
||||
$(ApiClient).off("websocketmessage", onSocketMessage).off('websocketopen', onSocketOpen);
|
||||
Events.off(ApiClient, 'websocketmessage', onSocketMessage);
|
||||
Events.off(ApiClient, 'websocketopen', onSocketOpen);
|
||||
stopInterval();
|
||||
|
||||
} else if (this.length) {
|
||||
|
@ -167,7 +168,8 @@
|
|||
|
||||
startInterval();
|
||||
|
||||
$(ApiClient).on("websocketmessage", onSocketMessage).on('websocketopen', onSocketOpen);
|
||||
Events.on(ApiClient, 'websocketmessage', onSocketMessage);
|
||||
Events.on(ApiClient, 'websocketopen', onSocketOpen);
|
||||
}
|
||||
|
||||
return this;
|
||||
|
|
|
@ -298,13 +298,13 @@
|
|||
}
|
||||
}
|
||||
|
||||
$(MediaController).on('playbackstop', onPlaybackStop);
|
||||
Events.on(MediaController, 'playbackstop', onPlaybackStop);
|
||||
});
|
||||
|
||||
pageIdOn('pagebeforehide', "tvRecommendedPage", function () {
|
||||
|
||||
var page = this;
|
||||
$(MediaController).off('playbackstop', onPlaybackStop);
|
||||
Events.off(MediaController, 'playbackstop', onPlaybackStop);
|
||||
});
|
||||
|
||||
function onPlaybackStop(e, state) {
|
||||
|
|
|
@ -52,7 +52,6 @@
|
|||
var view = getPageData().view;
|
||||
|
||||
var html = '';
|
||||
var trigger = false;
|
||||
var pagingHtml = LibraryBrowser.getQueryPagingHtml({
|
||||
startIndex: query.StartIndex,
|
||||
limit: query.Limit,
|
||||
|
@ -113,7 +112,6 @@
|
|||
context: 'tv',
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
trigger = true;
|
||||
}
|
||||
else if (view == "PosterCard") {
|
||||
html = LibraryBrowser.getPosterViewHtml({
|
||||
|
@ -142,10 +140,6 @@
|
|||
elem.innerHTML = html + pagingHtml;
|
||||
ImageLoader.lazyChildren(elem);
|
||||
|
||||
if (trigger) {
|
||||
Events.trigger(elem, 'create');
|
||||
}
|
||||
|
||||
$('.btnNextPage', page).on('click', function () {
|
||||
query.StartIndex += query.Limit;
|
||||
reloadItems(page, viewPanel);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue