Prevent more than one concurrent trackDimensionChanges from running
This commit is contained in:
parent
ff0de6f2e7
commit
39f39f23a7
@ -103,6 +103,8 @@ class PlayerData {
|
|||||||
|
|
||||||
private ui: UI;
|
private ui: UI;
|
||||||
|
|
||||||
|
private _isTrackDimensionChangesActive: boolean = false;
|
||||||
|
|
||||||
elementStack: ElementStack = [] as ElementStack;
|
elementStack: ElementStack = [] as ElementStack;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@ -371,49 +373,64 @@ class PlayerData {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
trackDimensionChanges() {
|
trackDimensionChanges() {
|
||||||
// get player dimensions _once_
|
if (this._isTrackDimensionChangesActive) {
|
||||||
let currentPlayerDimensions;
|
// this shouldn't really get called, _ever_ ... but sometimes it happens
|
||||||
this.isFullscreen = !!document.fullscreenElement;
|
console.warn('[PlayerData::trackDimensionChanges] trackDimensionChanges is already active!');
|
||||||
|
|
||||||
if (this.isFullscreen) {
|
|
||||||
currentPlayerDimensions = {
|
|
||||||
width: window.innerWidth,
|
|
||||||
height: window.innerHeight,
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
currentPlayerDimensions = {
|
|
||||||
width: this.element.offsetWidth,
|
|
||||||
height: this.element.offsetHeight
|
|
||||||
};
|
|
||||||
|
|
||||||
this.detectTheaterMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
// defer creating UI
|
|
||||||
this.deferredUiInitialization(currentPlayerDimensions);
|
|
||||||
|
|
||||||
// if dimensions of the player box are the same as the last known
|
|
||||||
// dimensions, we don't have to do anything ... in theory. In practice,
|
|
||||||
// sometimes restore-ar doesn't appear to register the first time, and
|
|
||||||
// this function doesn't really run often enough to warrant finding a
|
|
||||||
// real, optimized fix.
|
|
||||||
if (
|
|
||||||
this.dimensions?.width == currentPlayerDimensions.width
|
|
||||||
&& this.dimensions?.height == currentPlayerDimensions.height
|
|
||||||
) {
|
|
||||||
this.eventBus.send('restore-ar', null);
|
|
||||||
this.eventBus.send('delayed-restore-ar', {delay: 500});
|
|
||||||
this.dimensions = currentPlayerDimensions;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// in every other case, we need to check if the player is still
|
this._isTrackDimensionChangesActive = true;
|
||||||
// big enough to warrant our extension running.
|
|
||||||
this.handleSizeConstraints(currentPlayerDimensions);
|
|
||||||
// this.handleDimensionChanges(currentPlayerDimensions, this.dimensions);
|
|
||||||
|
|
||||||
// Save current dimensions to avoid triggering this function pointlessly
|
try {
|
||||||
this.dimensions = currentPlayerDimensions;
|
// get player dimensions _once_
|
||||||
|
let currentPlayerDimensions;
|
||||||
|
this.isFullscreen = !!document.fullscreenElement;
|
||||||
|
|
||||||
|
if (this.isFullscreen) {
|
||||||
|
currentPlayerDimensions = {
|
||||||
|
width: window.innerWidth,
|
||||||
|
height: window.innerHeight,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
currentPlayerDimensions = {
|
||||||
|
width: this.element.offsetWidth,
|
||||||
|
height: this.element.offsetHeight
|
||||||
|
};
|
||||||
|
|
||||||
|
this.detectTheaterMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
// defer creating UI
|
||||||
|
this.deferredUiInitialization(currentPlayerDimensions);
|
||||||
|
|
||||||
|
// if dimensions of the player box are the same as the last known
|
||||||
|
// dimensions, we don't have to do anything ... in theory. In practice,
|
||||||
|
// sometimes restore-ar doesn't appear to register the first time, and
|
||||||
|
// this function doesn't really run often enough to warrant finding a
|
||||||
|
// real, optimized fix.
|
||||||
|
if (
|
||||||
|
this.dimensions?.width == currentPlayerDimensions.width
|
||||||
|
&& this.dimensions?.height == currentPlayerDimensions.height
|
||||||
|
) {
|
||||||
|
this.eventBus.send('restore-ar', null);
|
||||||
|
this.eventBus.send('delayed-restore-ar', {delay: 500});
|
||||||
|
this.dimensions = currentPlayerDimensions;
|
||||||
|
this._isTrackDimensionChangesActive = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// in every other case, we need to check if the player is still
|
||||||
|
// big enough to warrant our extension running.
|
||||||
|
this.handleSizeConstraints(currentPlayerDimensions);
|
||||||
|
// this.handleDimensionChanges(currentPlayerDimensions, this.dimensions);
|
||||||
|
|
||||||
|
// Save current dimensions to avoid triggering this function pointlessly
|
||||||
|
this.dimensions = currentPlayerDimensions;
|
||||||
|
} catch (e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
this._isTrackDimensionChangesActive = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user