Add: Get seasons for plex

pull/16/head
Juraj Nyíri 4 years ago
parent eeee7ecd49
commit 8e66af961d

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

@ -41,6 +41,11 @@ class Plex {
return this.exportSectionsData(await Promise.all(sectionsRequests)); return this.exportSectionsData(await Promise.all(sectionsRequests));
}; };
getLibraryData = async (id: number): Promise<any> => {
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;
};
private exportSectionsData = (sectionsData: Array<any>): Array<any> => { private exportSectionsData = (sectionsData: Array<any>): Array<any> => {
const processedData: Array<any> = []; const processedData: Array<any> = [];
_.forEach(sectionsData, sectionData => { _.forEach(sectionsData, sectionData => {

@ -10,6 +10,8 @@ import style from './modules/style';
class PlexMeetsHomeAssistant extends HTMLElement { class PlexMeetsHomeAssistant extends HTMLElement {
plexProtocol: 'http' | 'https' = 'http'; plexProtocol: 'http' | 'https' = 'http';
plex: Plex | undefined = undefined;
movieElems: any = []; movieElems: any = [];
detailElem: HTMLElement | undefined = undefined; detailElem: HTMLElement | undefined = undefined;
@ -49,10 +51,9 @@ class PlexMeetsHomeAssistant extends HTMLElement {
loadInitialData = async (hass: HomeAssistant): Promise<void> => { loadInitialData = async (hass: HomeAssistant): Promise<void> => {
this.loading = true; this.loading = true;
this.renderPage(hass); this.renderPage(hass);
const plex = new Plex(this.config.ip, this.config.port, this.config.token, this.plexProtocol);
try { 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 // eslint-disable-next-line @typescript-eslint/camelcase
this.data.serverID = plexInfo; this.data.serverID = plexInfo;
_.forEach(plexSections, section => { _.forEach(plexSections, section => {
@ -65,6 +66,9 @@ class PlexMeetsHomeAssistant extends HTMLElement {
this.loading = false; this.loading = false;
this.render(hass); this.render(hass);
} else {
throw Error('Plex not initialized.');
}
} catch (err) { } catch (err) {
// todo: proper timeout here // todo: proper timeout here
this.error = `Plex server did not respond.<br/>Details of the error: ${escapeHtml(err.message)}`; this.error = `Plex server did not respond.<br/>Details of the error: ${escapeHtml(err.message)}`;
@ -216,13 +220,12 @@ class PlexMeetsHomeAssistant extends HTMLElement {
} }
}; };
showDetails = (data: any): void => { showDetails = async (data: any): Promise<void> => {
const doc = document.documentElement; const doc = document.documentElement;
const top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); const top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
if (this.detailElem) { if (this.detailElem) {
this.detailElem.style.transition = '0s'; this.detailElem.style.transition = '0s';
this.detailElem.style.top = `${top - 1000}px`; this.detailElem.style.top = `${top - 1000}px`;
console.log(this.detailElem.style.top);
setTimeout(() => { setTimeout(() => {
if (this.detailElem) { if (this.detailElem) {
@ -258,6 +261,10 @@ class PlexMeetsHomeAssistant extends HTMLElement {
} }
}, 200); }, 200);
} }
if (this.plex) {
const seasonsData = await this.plex.getLibraryData(data.key.split('/')[3]);
console.log(seasonsData);
}
}; };
showBackground = (): void => { showBackground = (): void => {
@ -395,6 +402,8 @@ class PlexMeetsHomeAssistant extends HTMLElement {
if (config.maxCount) { if (config.maxCount) {
this.maxCount = config.maxCount; this.maxCount = config.maxCount;
} }
this.plex = new Plex(this.config.ip, this.config.port, this.config.token, this.plexProtocol);
}; };
getCardSize = (): number => { getCardSize = (): number => {

Loading…
Cancel
Save