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

fix scheduled task crash

This commit is contained in:
Luke Pulverenti 2015-09-03 21:34:57 -04:00
parent b38145c4d3
commit a88319b05d
5 changed files with 47 additions and 248 deletions

View file

@ -4,7 +4,7 @@
<title>Emby</title>
</head>
<body>
<div id="musicRecommendedPage" data-role="page" class="page libraryPage backdropPage pageWithAbsoluteTabs" data-backdroptype="musicartist" data-require="scripts/musicrecommended">
<div id="musicRecommendedPage" data-dom-cache="true" data-role="page" class="page libraryPage backdropPage pageWithAbsoluteTabs" data-backdroptype="musicartist" data-require="scripts/musicrecommended">
<div class="libraryViewNav libraryViewNavWithMinHeight">
<paper-tabs hidescrollbuttons noink>
<paper-tab><iron-icon icon="info"></iron-icon>${TabSuggestions}</paper-tab>

View file

@ -4,7 +4,7 @@
<title>Emby</title>
</head>
<body>
<div id="playlistsPage" data-role="page" class="page libraryPage noSecondaryNavPage" data-require="scripts/playlists" data-title="${HeaderPlaylists}">
<div id="playlistsPage" data-dom-cache="true" data-role="page" class="page libraryPage noSecondaryNavPage" data-require="scripts/playlists" data-title="${HeaderPlaylists}">
<div data-role="content">
<div class="viewSettings">

View file

@ -453,33 +453,33 @@ function parseISO8601Date(s, options) {
// The query params for the embedded page are also added as a property/value
// object on the options object. You can access it from your page notifications
// via data.options.pageData.
$(document).bind("pagebeforechange", function (e, data) {
//$(document).bind("pagebeforechange", function (e, data) {
// We only want to handle the case where we are being asked
// to go to a page by URL, and only if that URL is referring
// to an internal page by id.
// // We only want to handle the case where we are being asked
// // to go to a page by URL, and only if that URL is referring
// // to an internal page by id.
if (typeof data.toPage === "string") {
var u = $.mobile.path.parseUrl(data.toPage);
if ($.mobile.path.isEmbeddedPage(u)) {
// if (typeof data.toPage === "string") {
// var u = $.mobile.path.parseUrl(data.toPage);
// if ($.mobile.path.isEmbeddedPage(u)) {
// The request is for an internal page, if the hash
// contains query (search) params, strip them off the
// toPage URL and then set options.dataUrl appropriately
// so the location.hash shows the originally requested URL
// that hash the query params in the hash.
// // The request is for an internal page, if the hash
// // contains query (search) params, strip them off the
// // toPage URL and then set options.dataUrl appropriately
// // so the location.hash shows the originally requested URL
// // that hash the query params in the hash.
var u2 = $.mobile.path.parseUrl(u.hash.replace(/^#/, ""));
if (u2.search) {
if (!data.options.dataUrl) {
data.options.dataUrl = data.toPage;
}
data.options.pageData = queryStringToObject(u2.search);
data.toPage = u.hrefNoHash + "#" + u2.pathname;
}
}
}
});
// var u2 = $.mobile.path.parseUrl(u.hash.replace(/^#/, ""));
// if (u2.search) {
// if (!data.options.dataUrl) {
// data.options.dataUrl = data.toPage;
// }
// data.options.pageData = queryStringToObject(u2.search);
// data.toPage = u.hrefNoHash + "#" + u2.pathname;
// }
// }
// }
//});
})(jQuery, window);

View file

@ -5,6 +5,7 @@
var libraryBrowser = {
getDefaultPageSize: function (key, defaultValue) {
return 100;
var saved = appStorage.getItem(key || pageSizeKey);
if (saved) {

View file

@ -859,19 +859,7 @@ $.ui.plugin = {
//simply set the active page's minimum height to screen height, depending on orientation
resetActivePageHeight: function( height ) {
var page = $( "." + $.mobile.activePageClass ),
pageHeight = page.height(),
pageOuterHeight = page.outerHeight( true );
height = (typeof height === "number") ? height : $.mobile.getScreenHeight();
// Remove any previous min-height setting
page.css( "min-height", "" );
// Set the minimum height only if the height as determined by CSS is insufficient
if ( page.height() < height ) {
page.css( "min-height", height - ( pageOuterHeight - pageHeight ) );
}
},
loading: function () {
@ -1354,187 +1342,6 @@ if ( !$.support.boxShadow ) {
};
})( jQuery );
// throttled resize event
(function( $ ) {
$.event.special.throttledresize = {
setup: function() {
$( this ).bind( "resize", handler );
},
teardown: function() {
$( this ).unbind( "resize", handler );
}
};
var throttle = 250,
handler = function() {
curr = ( new Date() ).getTime();
diff = curr - lastCall;
if ( diff >= throttle ) {
lastCall = curr;
$( this ).trigger( "throttledresize" );
} else {
if ( heldCall ) {
clearTimeout( heldCall );
}
// Promise a held call will still execute
heldCall = setTimeout( handler, throttle - diff );
}
},
lastCall = 0,
heldCall,
curr,
diff;
})( jQuery );
(function( $, window ) {
var win = $( window ),
event_name = "orientationchange",
get_orientation,
last_orientation,
initial_orientation_is_landscape,
initial_orientation_is_default,
portrait_map = { "0": true, "180": true },
ww, wh, landscape_threshold;
// It seems that some device/browser vendors use window.orientation values 0 and 180 to
// denote the "default" orientation. For iOS devices, and most other smart-phones tested,
// the default orientation is always "portrait", but in some Android and RIM based tablets,
// the default orientation is "landscape". The following code attempts to use the window
// dimensions to figure out what the current orientation is, and then makes adjustments
// to the to the portrait_map if necessary, so that we can properly decode the
// window.orientation value whenever get_orientation() is called.
//
// Note that we used to use a media query to figure out what the orientation the browser
// thinks it is in:
//
// initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)");
//
// but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1,
// where the browser *ALWAYS* applied the landscape media query. This bug does not
// happen on iPad.
if ( $.support.orientation ) {
// Check the window width and height to figure out what the current orientation
// of the device is at this moment. Note that we've initialized the portrait map
// values to 0 and 180, *AND* we purposely check for landscape so that if we guess
// wrong, , we default to the assumption that portrait is the default orientation.
// We use a threshold check below because on some platforms like iOS, the iPhone
// form-factor can report a larger width than height if the user turns on the
// developer console. The actual threshold value is somewhat arbitrary, we just
// need to make sure it is large enough to exclude the developer console case.
ww = window.innerWidth || win.width();
wh = window.innerHeight || win.height();
landscape_threshold = 50;
initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold;
// Now check to see if the current window.orientation is 0 or 180.
initial_orientation_is_default = portrait_map[ window.orientation ];
// If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR*
// if the initial orientation is portrait, but window.orientation reports 90 or -90, we
// need to flip our portrait_map values because landscape is the default orientation for
// this device/browser.
if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) {
portrait_map = { "-90": true, "90": true };
}
}
$.event.special.orientationchange = $.extend( {}, $.event.special.orientationchange, {
setup: function() {
// If the event is supported natively, return false so that jQuery
// will bind to the event using DOM methods.
if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
return false;
}
// Get the current orientation to avoid initial double-triggering.
last_orientation = get_orientation();
// Because the orientationchange event doesn't exist, simulate the
// event by testing window dimensions on resize.
win.bind( "throttledresize", handler );
},
teardown: function() {
// If the event is not supported natively, return false so that
// jQuery will unbind the event using DOM methods.
if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
return false;
}
// Because the orientationchange event doesn't exist, unbind the
// resize event handler.
win.unbind( "throttledresize", handler );
},
add: function( handleObj ) {
// Save a reference to the bound event handler.
var old_handler = handleObj.handler;
handleObj.handler = function( event ) {
// Modify event object, adding the .orientation property.
event.orientation = get_orientation();
// Call the originally-bound event handler and return its result.
return old_handler.apply( this, arguments );
};
}
});
// If the event is not supported natively, this handler will be bound to
// the window resize event to simulate the orientationchange event.
function handler() {
// Get the current orientation.
var orientation = get_orientation();
if ( orientation !== last_orientation ) {
// The orientation has changed, so trigger the orientationchange event.
last_orientation = orientation;
win.trigger( event_name );
}
}
// Get the current page orientation. This method is exposed publicly, should it
// be needed, as jQuery.event.special.orientationchange.orientation()
$.event.special.orientationchange.orientation = get_orientation = function() {
var isPortrait = true, elem = document.documentElement;
// prefer window orientation to the calculation based on screensize as
// the actual screen resize takes place before or after the orientation change event
// has been fired depending on implementation (eg android 2.3 is before, iphone after).
// More testing is required to determine if a more reliable method of determining the new screensize
// is possible when orientationchange is fired. (eg, use media queries + element + opacity)
if ( $.support.orientation ) {
// if the window orientation registers as 0 or 180 degrees report
// portrait, otherwise landscape
isPortrait = portrait_map[ window.orientation ];
} else {
isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1;
}
return isPortrait ? "portrait" : "landscape";
};
$.fn[ event_name ] = function( fn ) {
return fn ? this.bind( event_name, fn ) : this.trigger( event_name );
};
// jQuery < 1.8
if ( $.attrFn ) {
$.attrFn[ event_name ] = true;
}
}( jQuery, this ));
(function( $, undefined ) {
var props = {
"animation": {},
@ -4500,7 +4307,14 @@ $.fn.fieldcontain = function(/* options */) {
TransitionHandler,
promise;
this._triggerCssTransitionEvents( to, from, "before" );
this._triggerCssTransitionEvents(to, from, "before");
if (from) {
from[0].style.display = 'none';
}
to[0].style.display = 'block';
this._triggerCssTransitionEvents(to, from);
return;
// TODO put this in a binding to events *outside* the widget
this._hideLoading();
@ -4839,7 +4653,6 @@ $.fn.fieldcontain = function(/* options */) {
this._releaseTransitionLock();
this._triggerWithDeprecated("transition", triggerData);
this._triggerWithDeprecated("change", triggerData);
},
// determine the current base url
@ -5062,35 +4875,23 @@ $.fn.fieldcontain = function(/* options */) {
// TODO ensure that the navigate binding in the content widget happens at the right time
$.mobile.pageContainer.pagecontainer();
//set page min-heights to be device specific
$.mobile.document.bind( "pageshow", function(e) {
// We need to wait for window.load to make sure that styles have already been rendered,
// otherwise heights of external toolbars will have the wrong value
if ( loadDeferred ) {
loadDeferred.done( $.mobile.resetActivePageHeight );
} else {
$.mobile.resetActivePageHeight();
}
});
function removePage(page) {
$(page).removeWithDependents();
page.parentNode.removeChild(page);
}
function cleanPages(currentPage) {
function cleanPages(newPage) {
var pages = document.querySelectorAll("div[data-role='page']");
if (pages.length < 5) {
return;
//return;
}
for (var i = 0, length = pages.length; i < length; i++) {
var page = pages[i];
if (page != currentPage) {
if (page != newPage) {
removePage(page);
break;
}
}
}
@ -5098,16 +4899,13 @@ $.fn.fieldcontain = function(/* options */) {
//set page min-heights to be device specific
$.mobile.document.bind("pagehide", function (e,data) {
var page = e.target;
var toPage = data.toPage ? data.toPage[0] : null;
//check if this is a same page transition and if so don't remove the page
if (!data.samePage) {
cleanPages(page);
if (toPage && toPage.getAttribute('data-dom-cache')) {
cleanPages(toPage);
}
});
$.mobile.window.bind( "throttledresize", $.mobile.resetActivePageHeight );
};//navreadyDeferred done callback
$( function() { domreadyDeferred.resolve(); } );
@ -6809,11 +6607,11 @@ $.widget( "mobile.panel", {
},
_bindFixListener: function() {
this._on( $( window ), { "throttledresize": "_positionPanel" });
this._on( $( window ), { "resize": "_positionPanel" });
},
_unbindFixListener: function() {
this._off( $( window ), "throttledresize" );
this._off($(window), "resize");
},
_unfixPanel: function() {