Add: Support for simple entities

pull/20/head
Juraj Nyíri 3 years ago
parent 25d9dadb9a
commit 9aa1e62eef

@ -20157,6 +20157,7 @@ class PlexMeetsHomeAssistant extends HTMLElement {
this.plexProtocol = 'http';
this.plexPort = false;
this.detailsShown = false;
this.entityRegistry = [];
this.runBefore = '';
this.playTrailer = true;
this.showExtras = true;
@ -20191,7 +20192,55 @@ class PlexMeetsHomeAssistant extends HTMLElement {
this.calculatePositions();
}
};
this.fetchEntityRegistry = (conn) => conn.sendMessagePromise({
type: 'config/entity_registry/list'
});
this.loadInitialData = async () => {
if (this.hassObj) {
this.entityRegistry = await this.fetchEntityRegistry(this.hassObj.connection);
}
let { entity } = JSON.parse(JSON.stringify(this.config));
const processEntity = (entityObj, entityString) => {
lodash.forEach(this.entityRegistry, entityInRegister => {
if (lodash.isEqual(entityInRegister.entity_id, entityString)) {
switch (entityInRegister.platform) {
case 'cast':
if (lodash.isNil(entityObj.cast)) {
// eslint-disable-next-line no-param-reassign
entityObj.cast = [];
}
entityObj.cast.push(entityInRegister.entity_id);
break;
case 'androidtv':
if (lodash.isNil(entityObj.androidtv)) {
// eslint-disable-next-line no-param-reassign
entityObj.androidtv = [];
}
entityObj.androidtv.push(entityInRegister.entity_id);
break;
case 'kodi':
if (lodash.isNil(entityObj.kodi)) {
// eslint-disable-next-line no-param-reassign
entityObj.kodi = [];
}
entityObj.kodi.push(entityInRegister.entity_id);
break;
// pass
}
}
});
};
const entityOrig = entity;
if (lodash.isString(entityOrig)) {
entity = {};
processEntity(entity, entityOrig);
}
else if (lodash.isArray(entityOrig)) {
entity = {};
lodash.forEach(entityOrig, entityStr => {
processEntity(entity, entityStr);
});
}
window.addEventListener('scroll', () => {
// todo: improve performance by calculating this when needed only
if (this.detailsShown && this.activeMovieElem && !isVideoFullScreen(this)) {
@ -20259,8 +20308,7 @@ class PlexMeetsHomeAssistant extends HTMLElement {
try {
if (this.plex) {
if (this.hassObj) {
const entityConfig = JSON.parse(JSON.stringify(this.config.entity)); // todo: find a nicer solution
this.playController = new PlayController(this.hassObj, this.plex, entityConfig, this.runBefore, this.runAfter, this.config.libraryName);
this.playController = new PlayController(this.hassObj, this.plex, entity, this.runBefore, this.runAfter, this.config.libraryName);
if (this.playController) {
await this.playController.init();
}
@ -21353,10 +21401,10 @@ class PlexMeetsHomeAssistant extends HTMLElement {
};
this.setConfig = (config) => {
this.plexProtocol = 'http';
if (!config.entity || config.entity.length === 0 || !lodash.isObject(config.entity)) {
if (!config.entity || config.entity.length === 0) {
throw new Error('You need to define at least one entity');
}
if (lodash.isObject(config.entity)) {
if (lodash.isPlainObject(config.entity)) {
let entityDefined = false;
// eslint-disable-next-line consistent-return
lodash.forEach(config.entity, (value, key) => {
@ -21369,6 +21417,9 @@ class PlexMeetsHomeAssistant extends HTMLElement {
throw new Error('You need to define at least one supported entity');
}
}
else if (!lodash.isString(config.entity) && !lodash.isArray(config.entity)) {
throw new Error('You need to define at least one supported entity');
}
if (!config.token) {
throw new Error('You need to define a token');
}

6
package-lock.json generated

@ -1119,9 +1119,9 @@
"dev": true
},
"home-assistant-js-websocket": {
"version": "5.9.0",
"resolved": "https://registry.npmjs.org/home-assistant-js-websocket/-/home-assistant-js-websocket-5.9.0.tgz",
"integrity": "sha512-HSAhX+s2JgsE77sYKKqcNsukiO6Zm4CcCIwugq17MwHcEyLoecChsbQtgtbvg1dHctUAk+IHxuZ0JBx10B1YGQ=="
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/home-assistant-js-websocket/-/home-assistant-js-websocket-5.10.0.tgz",
"integrity": "sha512-QiK26d62wuQCuaXHRZ90yvaMXeHkYbQrSGQvCrF6hqxdibLXEwSXQM2uzWYUgP25Q3iKy3PLQspMBRnuBKczbQ=="
},
"hosted-git-info": {
"version": "2.8.9",

@ -25,6 +25,7 @@
"@vercel/ncc": "^0.28.5",
"axios": "^0.21.1",
"custom-card-helpers": "^1.7.0",
"home-assistant-js-websocket": "^5.10.0",
"lit-element": "^2.5.0",
"lodash": "^4.17.21"
},

@ -2,6 +2,7 @@
/* eslint-env browser */
import { HomeAssistant } from 'custom-card-helpers';
import _ from 'lodash';
import { Connection } from 'home-assistant-js-websocket';
import { supported, CSS_STYLE } from './const';
import Plex from './modules/Plex';
import PlayController from './modules/PlayController';
@ -27,6 +28,8 @@ class PlexMeetsHomeAssistant extends HTMLElement {
detailsShown = false;
entityRegistry: Array<Record<string, any>> = [];
runBefore = '';
playTrailer: string | boolean = true;
@ -141,7 +144,61 @@ class PlexMeetsHomeAssistant extends HTMLElement {
}
};
fetchEntityRegistry = (conn: Connection): Promise<Array<Record<string, any>>> =>
conn.sendMessagePromise({
type: 'config/entity_registry/list'
});
loadInitialData = async (): Promise<void> => {
if (this.hassObj) {
this.entityRegistry = await this.fetchEntityRegistry(this.hassObj.connection);
}
let { entity } = JSON.parse(JSON.stringify(this.config));
const processEntity = (entityObj: Record<string, any>, entityString: string): void => {
_.forEach(this.entityRegistry, entityInRegister => {
if (_.isEqual(entityInRegister.entity_id, entityString)) {
switch (entityInRegister.platform) {
case 'cast':
if (_.isNil(entityObj.cast)) {
// eslint-disable-next-line no-param-reassign
entityObj.cast = [];
}
entityObj.cast.push(entityInRegister.entity_id);
break;
case 'androidtv':
if (_.isNil(entityObj.androidtv)) {
// eslint-disable-next-line no-param-reassign
entityObj.androidtv = [];
}
entityObj.androidtv.push(entityInRegister.entity_id);
break;
case 'kodi':
if (_.isNil(entityObj.kodi)) {
// eslint-disable-next-line no-param-reassign
entityObj.kodi = [];
}
entityObj.kodi.push(entityInRegister.entity_id);
break;
default:
// pass
}
}
});
};
const entityOrig = entity;
if (_.isString(entityOrig)) {
entity = {};
processEntity(entity, entityOrig);
} else if (_.isArray(entityOrig)) {
entity = {};
_.forEach(entityOrig, entityStr => {
processEntity(entity, entityStr);
});
}
window.addEventListener('scroll', () => {
// todo: improve performance by calculating this when needed only
if (this.detailsShown && this.activeMovieElem && !isVideoFullScreen(this)) {
@ -212,11 +269,10 @@ class PlexMeetsHomeAssistant extends HTMLElement {
try {
if (this.plex) {
if (this.hassObj) {
const entityConfig: Record<string, any> = JSON.parse(JSON.stringify(this.config.entity)); // todo: find a nicer solution
this.playController = new PlayController(
this.hassObj,
this.plex,
entityConfig,
entity,
this.runBefore,
this.runAfter,
this.config.libraryName
@ -1428,10 +1484,10 @@ class PlexMeetsHomeAssistant extends HTMLElement {
setConfig = (config: any): void => {
this.plexProtocol = 'http';
if (!config.entity || config.entity.length === 0 || !_.isObject(config.entity)) {
if (!config.entity || config.entity.length === 0) {
throw new Error('You need to define at least one entity');
}
if (_.isObject(config.entity)) {
if (_.isPlainObject(config.entity)) {
let entityDefined = false;
// eslint-disable-next-line consistent-return
_.forEach(config.entity, (value, key) => {
@ -1443,6 +1499,8 @@ class PlexMeetsHomeAssistant extends HTMLElement {
if (!entityDefined) {
throw new Error('You need to define at least one supported entity');
}
} else if (!_.isString(config.entity) && !_.isArray(config.entity)) {
throw new Error('You need to define at least one supported entity');
}
if (!config.token) {
throw new Error('You need to define a token');

Loading…
Cancel
Save