|
|
|
@ -18670,6 +18670,10 @@ class Plex {
|
|
|
|
|
});
|
|
|
|
|
return this.exportSectionsData(await Promise.all(sectionsRequests));
|
|
|
|
|
};
|
|
|
|
|
this.getLibraryData = async (id) => {
|
|
|
|
|
const url = `${this.protocol}://${this.ip}:${this.port}/library/metadata/${id}/children?X-Plex-Token=${this.token}`;
|
|
|
|
|
return (await axios.get(url)).data.MediaContainer.Metadata;
|
|
|
|
|
};
|
|
|
|
|
this.exportSectionsData = (sectionsData) => {
|
|
|
|
|
const processedData = [];
|
|
|
|
|
lodash.forEach(sectionsData, sectionData => {
|
|
|
|
@ -19149,6 +19153,7 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
|
constructor() {
|
|
|
|
|
super(...arguments);
|
|
|
|
|
this.plexProtocol = 'http';
|
|
|
|
|
this.plex = undefined;
|
|
|
|
|
this.movieElems = [];
|
|
|
|
|
this.detailElem = undefined;
|
|
|
|
|
this.data = {};
|
|
|
|
@ -19162,9 +19167,9 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
|
this.loadInitialData = async (hass) => {
|
|
|
|
|
this.loading = true;
|
|
|
|
|
this.renderPage(hass);
|
|
|
|
|
const plex = new Plex(this.config.ip, this.config.port, this.config.token, this.plexProtocol);
|
|
|
|
|
try {
|
|
|
|
|
const [plexInfo, plexSections] = await Promise.all([plex.getServerInfo(), plex.getSectionsData()]);
|
|
|
|
|
if (this.plex) {
|
|
|
|
|
const [plexInfo, plexSections] = await Promise.all([this.plex.getServerInfo(), this.plex.getSectionsData()]);
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
|
|
|
this.data.serverID = plexInfo;
|
|
|
|
|
lodash.forEach(plexSections, section => {
|
|
|
|
@ -19176,6 +19181,10 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
|
this.loading = false;
|
|
|
|
|
this.render(hass);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
throw Error('Plex not initialized.');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (err) {
|
|
|
|
|
// todo: proper timeout here
|
|
|
|
|
this.error = `Plex server did not respond.<br/>Details of the error: ${escapeHtml(err.message)}`;
|
|
|
|
@ -19313,13 +19322,12 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
|
this.detailElem.style.visibility = 'hidden';
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
this.showDetails = (data) => {
|
|
|
|
|
this.showDetails = async (data) => {
|
|
|
|
|
const doc = document.documentElement;
|
|
|
|
|
const top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
|
|
|
|
|
if (this.detailElem) {
|
|
|
|
|
this.detailElem.style.transition = '0s';
|
|
|
|
|
this.detailElem.style.top = `${top - 1000}px`;
|
|
|
|
|
console.log(this.detailElem.style.top);
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
if (this.detailElem) {
|
|
|
|
|
this.detailElem.style.visibility = 'visible';
|
|
|
|
@ -19349,6 +19357,10 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
|
}
|
|
|
|
|
}, 200);
|
|
|
|
|
}
|
|
|
|
|
if (this.plex) {
|
|
|
|
|
const seasonsData = await this.plex.getLibraryData(data.key.split('/')[3]);
|
|
|
|
|
console.log(seasonsData);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
this.showBackground = () => {
|
|
|
|
|
const contentbg = this.getElementsByClassName('contentbg');
|
|
|
|
@ -19467,6 +19479,7 @@ class PlexMeetsHomeAssistant extends HTMLElement {
|
|
|
|
|
if (config.maxCount) {
|
|
|
|
|
this.maxCount = config.maxCount;
|
|
|
|
|
}
|
|
|
|
|
this.plex = new Plex(this.config.ip, this.config.port, this.config.token, this.plexProtocol);
|
|
|
|
|
};
|
|
|
|
|
this.getCardSize = () => {
|
|
|
|
|
return 3;
|
|
|
|
|