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));
};
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;

@ -41,6 +41,11 @@ class Plex {
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> => {
const processedData: Array<any> = [];
_.forEach(sectionsData, sectionData => {

@ -10,6 +10,8 @@ import style from './modules/style';
class PlexMeetsHomeAssistant extends HTMLElement {
plexProtocol: 'http' | 'https' = 'http';
plex: Plex | undefined = undefined;
movieElems: any = [];
detailElem: HTMLElement | undefined = undefined;
@ -49,10 +51,9 @@ class PlexMeetsHomeAssistant extends HTMLElement {
loadInitialData = async (hass: HomeAssistant): Promise<void> => {
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;
_.forEach(plexSections, section => {
@ -65,6 +66,9 @@ 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)}`;
@ -216,13 +220,12 @@ class PlexMeetsHomeAssistant extends HTMLElement {
}
};
showDetails = (data: any): void => {
showDetails = async (data: any): Promise<void> => {
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) {
@ -258,6 +261,10 @@ class PlexMeetsHomeAssistant extends HTMLElement {
}
}, 200);
}
if (this.plex) {
const seasonsData = await this.plex.getLibraryData(data.key.split('/')[3]);
console.log(seasonsData);
}
};
showBackground = (): void => {
@ -395,6 +402,8 @@ 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);
};
getCardSize = (): number => {

Loading…
Cancel
Save