1
0
Fork 0
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:
Luke Pulverenti 2015-12-23 12:46:01 -05:00
parent 909402537a
commit fcdd2e4f4b
114 changed files with 1611 additions and 1238 deletions

View file

@ -91,7 +91,7 @@
html += "</div>";
}
Events.trigger($('#latestReviews', page).html(html)[0], 'create');
$('#latestReviews', page).html(html).trigger('create');
});
}

View file

@ -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');
}
});
}

View file

@ -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 {

View file

@ -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();

View file

@ -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);
}

View file

@ -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);
});

View file

@ -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);

View file

@ -383,7 +383,7 @@
$('.sliderValue', elem).html(tooltext);
Logger.log("slidin", pct, self.currentDurationTicks, time);
console.log("slidin", pct, self.currentDurationTicks, time);
});
});

View file

@ -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) {

View file

@ -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');
}
}

View file

@ -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) {

View file

@ -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);
}
}
}

View file

@ -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);
});

View file

@ -204,7 +204,7 @@
refreshLibraryInfoInDrawer(user, drawer);
refreshBottomUserInfoInDrawer(user, drawer);
Events.trigger(document, 'libraryMenuCreated');
document.dispatchEvent(new CustomEvent("libraryMenuCreated", {}));
updateLibraryMenu(user.localUser);
}

View file

@ -133,7 +133,7 @@
airDate = parseISO8601Date(airDate, { toLocal: true }).toLocaleDateString();
}
catch (e) {
Logger.log("Error parsing date: " + airDate);
console.log("Error parsing date: " + airDate);
}

View file

@ -43,7 +43,7 @@
html += '</ul>';
Events.trigger($('.serverLogs', page).html(html)[0], 'create');
$('.serverLogs', page).html(html).trigger('create');
});
});

View file

@ -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);
});
};

View file

@ -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) {

View file

@ -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) {

View file

@ -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);

View file

@ -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) {

View file

@ -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;

View file

@ -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);

View file

@ -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);
});

View file

@ -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 () {

View file

@ -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');

View file

@ -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 () {

View file

@ -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);
});

View file

@ -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();

View file

@ -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();
});

View file

@ -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({

View file

@ -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();
}
}

View file

@ -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);

View file

@ -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);
});

View file

@ -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);
});
})();

View file

@ -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);
});
})();

View file

@ -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;

View file

@ -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) {

View file

@ -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);