|
|
@ -20275,7 +20275,7 @@ class PlexMeetsHomeAssistantEditor extends HTMLElement {
|
|
|
|
this.valueUpdated = () => {
|
|
|
|
this.valueUpdated = () => {
|
|
|
|
const originalConfig = lodash.clone(this.config);
|
|
|
|
const originalConfig = lodash.clone(this.config);
|
|
|
|
this.config.protocol = this.protocol.value;
|
|
|
|
this.config.protocol = this.protocol.value;
|
|
|
|
this.config.ip = this.ip.value.replace(/^https?\:\/\//i, '').replace(/\/$/, '');
|
|
|
|
this.config.ip = this.ip.value.replace(/^https?:\/\//i, '').replace(/\/$/, '');
|
|
|
|
this.config.token = this.token.value;
|
|
|
|
this.config.token = this.token.value;
|
|
|
|
this.config.port = this.port.value;
|
|
|
|
this.config.port = this.port.value;
|
|
|
|
if (this.loaded) {
|
|
|
|
if (this.loaded) {
|
|
|
@ -20527,7 +20527,7 @@ class PlexMeetsHomeAssistantEditor extends HTMLElement {
|
|
|
|
this.content.appendChild(this.protocol);
|
|
|
|
this.content.appendChild(this.protocol);
|
|
|
|
this.ip.label = 'Plex IP Address / Hostname';
|
|
|
|
this.ip.label = 'Plex IP Address / Hostname';
|
|
|
|
if (this.config.ip) {
|
|
|
|
if (this.config.ip) {
|
|
|
|
this.ip.value = this.config.ip.replace(/^https?\:\/\//i, '').replace(/\/$/, '');
|
|
|
|
this.ip.value = this.config.ip.replace(/^https?:\/\//i, '').replace(/\/$/, '');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
this.ip.value = this.config.ip;
|
|
|
|
this.ip.value = this.config.ip;
|
|
|
@ -20559,7 +20559,7 @@ class PlexMeetsHomeAssistantEditor extends HTMLElement {
|
|
|
|
this.content.appendChild(this.libraryName);
|
|
|
|
this.content.appendChild(this.libraryName);
|
|
|
|
this.content.appendChild(warningLibrary);
|
|
|
|
this.content.appendChild(warningLibrary);
|
|
|
|
this.appendChild(this.content);
|
|
|
|
this.appendChild(this.content);
|
|
|
|
this.plex = new Plex(this.config.ip.replace(/^https?\:\/\//i, '').replace(/\/$/, ''), this.plexPort, this.config.token, this.plexProtocol, this.config.sort);
|
|
|
|
this.plex = new Plex(this.config.ip.replace(/^https?:\/\//i, '').replace(/\/$/, ''), this.plexPort, this.config.token, this.plexProtocol, this.config.sort);
|
|
|
|
this.sections = await this.plex.getSections();
|
|
|
|
this.sections = await this.plex.getSections();
|
|
|
|
lodash.forEach(this.sections, section => {
|
|
|
|
lodash.forEach(this.sections, section => {
|
|
|
|
if (lodash.isEqual(section.title, this.config.libraryName) && lodash.isEqual(section.type, 'artist')) {
|
|
|
|
if (lodash.isEqual(section.title, this.config.libraryName) && lodash.isEqual(section.type, 'artist')) {
|
|
|
@ -20581,6 +20581,7 @@ class PlexMeetsHomeAssistantEditor extends HTMLElement {
|
|
|
|
this.content.appendChild(this.useShuffle);
|
|
|
|
this.content.appendChild(this.useShuffle);
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
this.livetv = await this.plex.getLiveTV();
|
|
|
|
this.livetv = await this.plex.getLiveTV();
|
|
|
|
this.collections = await this.plex.getCollections();
|
|
|
|
this.collections = await this.plex.getCollections();
|
|
|
@ -21971,11 +21972,12 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
this.error = '';
|
|
|
|
this.error = '';
|
|
|
|
this.contentBGHeight = 0;
|
|
|
|
this.contentBGHeight = 0;
|
|
|
|
this.initialDataLoaded = false;
|
|
|
|
this.initialDataLoaded = false;
|
|
|
|
|
|
|
|
this.haWindow = PlexMeetsHomeAssistant.querySelectorAllShadows('hui-view')[0];
|
|
|
|
this.renderNewElementsIfNeeded = () => {
|
|
|
|
this.renderNewElementsIfNeeded = () => {
|
|
|
|
const loadAdditionalRowsCount = 2; // todo: make this configurable
|
|
|
|
const loadAdditionalRowsCount = 2; // todo: make this configurable
|
|
|
|
const height = getHeight(this.content);
|
|
|
|
const height = getHeight(this.content);
|
|
|
|
if (!this.detailsShown &&
|
|
|
|
if (!this.detailsShown &&
|
|
|
|
window.innerHeight + window.scrollY > height + getOffset(this.content).top - 300 &&
|
|
|
|
window.innerHeight + this.haWindow.scrollTop > height - 300 &&
|
|
|
|
this.renderedItems > 0 &&
|
|
|
|
this.renderedItems > 0 &&
|
|
|
|
this.renderedItems < this.data[this.config.libraryName].length &&
|
|
|
|
this.renderedItems < this.data[this.config.libraryName].length &&
|
|
|
|
(!this.maxCount || this.renderedItems < this.maxCount) &&
|
|
|
|
(!this.maxCount || this.renderedItems < this.maxCount) &&
|
|
|
@ -22018,7 +22020,7 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
if (this.hassObj) {
|
|
|
|
if (this.hassObj) {
|
|
|
|
this.entityRegistry = await fetchEntityRegistry(this.hassObj.connection);
|
|
|
|
this.entityRegistry = await fetchEntityRegistry(this.hassObj.connection);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
window.addEventListener('scroll', () => {
|
|
|
|
window.addEventListener('wheel', () => {
|
|
|
|
// todo: improve performance by calculating this when needed only
|
|
|
|
// todo: improve performance by calculating this when needed only
|
|
|
|
if (this.detailsShown && this.activeMovieElem && !isVideoFullScreen(this) && this.isVisible) {
|
|
|
|
if (this.detailsShown && this.activeMovieElem && !isVideoFullScreen(this) && this.isVisible) {
|
|
|
|
const seasonContainers = this.getElementsByClassName('seasonContainer');
|
|
|
|
const seasonContainers = this.getElementsByClassName('seasonContainer');
|
|
|
@ -23947,6 +23949,17 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
return document.createElement('plex-meets-homeassistant-editor');
|
|
|
|
return document.createElement('plex-meets-homeassistant-editor');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
PlexMeetsHomeAssistant.querySelectorAllShadows = (selector, el = document.body) => {
|
|
|
|
|
|
|
|
// recurse on childShadows
|
|
|
|
|
|
|
|
const childShadows = Array.from(el.querySelectorAll('*'))
|
|
|
|
|
|
|
|
.map(el2 => el2.shadowRoot)
|
|
|
|
|
|
|
|
.filter(Boolean);
|
|
|
|
|
|
|
|
// console.log('[querySelectorAllShadows]', selector, el, `(${childShadows.length} shadowRoots)`);
|
|
|
|
|
|
|
|
const childResults = childShadows.map((child) => PlexMeetsHomeAssistant.querySelectorAllShadows(selector, child));
|
|
|
|
|
|
|
|
// fuse all results into singular, flat array
|
|
|
|
|
|
|
|
const result = Array.from(el.querySelectorAll(selector));
|
|
|
|
|
|
|
|
return result.concat(childResults).flat();
|
|
|
|
|
|
|
|
};
|
|
|
|
customElements.define('plex-meets-homeassistant-editor', PlexMeetsHomeAssistantEditor);
|
|
|
|
customElements.define('plex-meets-homeassistant-editor', PlexMeetsHomeAssistantEditor);
|
|
|
|
customElements.define('plex-meets-homeassistant', PlexMeetsHomeAssistant);
|
|
|
|
customElements.define('plex-meets-homeassistant', PlexMeetsHomeAssistant);
|
|
|
|
window.customCards = window.customCards || [];
|
|
|
|
window.customCards = window.customCards || [];
|
|
|
|