UNPKG

iobroker.nspanel-lovelace-ui

Version:

NsPanel Lovelace UI is a Firmware for the nextion screen inside of NSPanel in the Design of Lovelace UI Design.

430 lines (429 loc) 12.8 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var pageMedia_exports = {}; __export(pageMedia_exports, { PageMedia: () => PageMedia, getValueFromBoolean: () => getValueFromBoolean }); module.exports = __toCommonJS(pageMedia_exports); var import_data_item = require("../classes/data-item"); var import_Color = require("../const/Color"); var import_icon_mapping = require("../const/icon_mapping"); var import_Page = require("../classes/Page"); var import_tools = require("../const/tools"); const PageMediaMessageDefault = { event: "entityUpd", headline: "", navigation: "~~~~~~~~~", id: "", name: "", titelColor: String(import_Color.Color.rgb_dec565(import_Color.Color.White)), artist: "", artistColor: String(import_Color.Color.rgb_dec565(import_Color.Color.White)), volume: "", iconplaypause: "", onoffbuttonColor: "", shuffle_icon: "", logo: "", options: ["", "", "", "", ""] }; class PageMedia extends import_Page.Page { config; items; step = 1; headlinePos = 0; titelPos = 0; nextArrow = false; constructor(config, options) { if (options && options.pageItems) { options.pageItems.unshift({ type: "button", dpInit: "", role: "button", data: { icon: { true: { value: { type: "const", constVal: "arrow-right-bold-circle-outline" }, color: { type: "const", constVal: { red: 205, green: 142, blue: 153 } } } }, entity1: { value: { type: "const", constVal: true } } } }); } super(config, options); this.config = options.config; if (this.items && this.items.card === "cardMedia") { this.items = options.items; } this.minUpdateInterval = 2e3; } async init() { const config = structuredClone(this.config); const tempConfig = this.enums || this.dpInit ? await this.panel.statesControler.getDataItemsFromAuto(this.dpInit, config, void 0, this.enums) : config; const tempItem = await this.panel.statesControler.createDataItems( tempConfig, this ); if (tempItem) { tempItem.card = "cardMedia"; } this.items = tempItem; await super.init(); } async onVisibilityChange(val) { await super.onVisibilityChange(val); if (val) { this.headlinePos = 0; this.titelPos = 0; } } async update() { if (!this.visibility) { return; } const item = this.items; if (item === void 0) { return; } const message = {}; { if (item.card !== "cardMedia") { return; } const test = {}; test.bla = "dd"; let duration = "0:00", elapsed = "0:00", title = "unknown"; if (item.data.title && item.data.title.text) { const v = await item.data.title.text.getString(); if (v !== null) { title = v; } } if (item.data.artist && item.data.artist.text) { const v = await item.data.artist.text.getString(); if (v !== null) { message.artist = v; } } if (item.data.duration && item.data.elapsed) { const d = await item.data.duration.getNumber(); if (d !== null) { const t = (/* @__PURE__ */ new Date()).setHours(0, 0, d, 0); duration = new Date(t).toLocaleTimeString("de-DE", { minute: "2-digit", second: "2-digit" }); } if (item.data.elapsed.type === "string") { const e = await item.data.elapsed.getString(); if (e !== null) { elapsed = e; } } else if (item.data.elapsed.type === "number") { const e = await item.data.elapsed.getNumber(); if (e !== null) { const t = (/* @__PURE__ */ new Date()).setHours(0, 0, e, 0); elapsed = new Date(t).toLocaleTimeString("de-DE", { minute: "2-digit", second: "2-digit" }); } } } message.headline = `${title}`; { const maxSize2 = 18; if (message.headline.length > maxSize2) { const s = `${message.headline} `; this.headlinePos = this.headlinePos % s.length; message.headline = (s + message.headline).substring(this.headlinePos++ % (message.headline + s).length).substring(0, 23); } } const maxSize = 35; message.name = `(${elapsed}|${duration})`; if (item.data.album) { const v = await item.data.album.getString(); if (v !== null) { if (`${v} ${message.name}`.length > maxSize) { const s = `${v} `; this.titelPos = this.titelPos % s.length; message.name = `${v.substring(this.titelPos++ % `${v} ${message.name}${s}`.length).substring(0, 35)} ${message.name}`; } else { message.name = `${v} ${message.name}`; } } } } message.shuffle_icon = ""; if (item.data.shuffle && item.data.shuffle.value && item.data.shuffle.value.type) { let value = null; switch (item.data.shuffle.value.type) { case "string": { const v = await item.data.shuffle.value.getString(); if (v !== null) { value = ["OFF", "FALSE"].indexOf(v.toUpperCase()) === -1; } break; } case "number": case "boolean": { value = await item.data.shuffle.value.getBoolean(); break; } case "object": case "array": case "mixed": { value = null; break; } } if (value !== null) { message.shuffle_icon = value ? "shuffle-variant" : "shuffle-disabled"; } } if (item.data.volume) { const v = await (0, import_tools.getScaledNumber)(item.data.volume); if (v !== null) { message.volume = String(v); } } if (item.data.mediaState) { const v = await item.data.mediaState.getString(); if (v !== null) { message.iconplaypause = !await this.getMediaState() ? "play" : "pause"; if (item.data.stop) { message.onoffbuttonColor = v.toUpperCase() !== "STOP" ? "65535" : "1374"; } else { message.onoffbuttonColor = message.iconplaypause !== "pause" ? "65535" : "1374"; } } } if (item.data.title && item.data.title.color) { const v = await getValueFromBoolean(item.data.title.color, "color"); if (v !== null) { message.titelColor = v; } } if (item.data.logo) { message.logo = "~~~~~"; } const opts = ["~~~~~", "~~~~~", "~~~~~", "~~~~~", "~~~~~"]; if (this.pageItems) { const localStep = this.pageItems.length > 6 ? 4 : 5; if (this.pageItems.length - 1 <= localStep * (this.step - 1)) { this.step = 1; } const maxSteps = localStep * this.step + 1; const minStep = localStep * (this.step - 1) + 1; for (let a = minStep; a < maxSteps; a++) { const temp = this.pageItems[a]; if (temp) { opts[a - minStep] = await temp.getPageItemPayload(); } } if (localStep === 4) { this.nextArrow = true; const temp = this.pageItems[0]; if (temp) { opts[4] = await temp.getPageItemPayload(); } } } message.navigation = this.getNavigation(); const msg = Object.assign(PageMediaMessageDefault, message, { id: "media", options: opts }); this.sendToPanel(this.getMessage(msg), false); } async getMediaState() { if (!this.items || this.items.card !== "cardMedia") { return null; } const item = this.items.data.mediaState; if (item) { const v = await item.getString(); if (v !== null) { return ["PLAY", "1", "TRUE"].indexOf(v.toUpperCase()) !== -1; } } return null; } async getOnOffState() { if (!this.items || this.items.card !== "cardMedia") { return null; } const item = this.items.data.mediaState; if (item) { const v = await item.getString(); if (v !== null) { return ["STOP", "0", "FALSE"].indexOf(v.toUpperCase()) === -1; } } return null; } getMessage(message) { return (0, import_tools.getPayload)( "entityUpd", message.headline, message.navigation, message.id, message.name, message.titelColor, message.artist, message.artistColor, message.volume, import_icon_mapping.Icons.GetIcon(message.iconplaypause), message.onoffbuttonColor, import_icon_mapping.Icons.GetIcon(message.shuffle_icon), message.logo, //'~~~~~' (0, import_tools.getPayloadArray)(message.options) ); } onStateTrigger = async () => { await this.update(); }; async reset() { this.step = 0; this.headlinePos = 0; this.titelPos = 0; } async onButtonEvent(event) { if (!this.getVisibility() || this.sleep) { return; } if ((0, import_Page.isMediaButtonActionType)(event.action)) { this.log.debug(`Receive event: ${JSON.stringify(event)}`); } else { return; } const items = this.items; if (!items || items.card !== "cardMedia") { return; } switch (event.action) { case "media-back": { items.data.backward && await items.data.backward.setStateTrue(); break; } case "media-pause": { if (items.data.pause && items.data.play) { if (await this.getMediaState()) { await items.data.pause.setStateTrue(); } else { await items.data.play.setStateTrue(); } } else if (items.data.mediaState) { } break; } case "media-next": { items.data.forward && await items.data.forward.setStateTrue(); break; } case "media-shuffle": { items.data.shuffle && (items.data.shuffle.set && await items.data.shuffle.set.setStateFlip() || items.data.shuffle.value && await items.data.shuffle.value.setStateFlip()); break; } case "volumeSlider": { if (items.data.volume) { const v = parseInt(event.opt); await (0, import_tools.setScaledNumber)(items.data.volume, v); } else { this.log.error(`Missing volumen controller. Report to dev`); } break; } case "mode-speakerlist": { break; } case "mode-playlist": { break; } case "mode-tracklist": { break; } case "mode-repeat": { break; } case "mode-equalizer": { break; } case "mode-seek": { break; } case "mode-crossfade": { break; } case "mode-favorites": { break; } case "mode-insel": { break; } case "media-OnOff": { if (items.data.stop) { if (await this.getOnOffState()) { await items.data.stop.setStateTrue(); } } break; } case "button": { if (event.id === "0" && this.nextArrow) { this.step++; await this.update(); } break; } } } } async function getValueFromBoolean(item, type, value = true) { if (item) { if ((0, import_data_item.isDataItem)(item)) { const v = await getValueFromData(item, type); if (v !== null) { return v; } } else { const colorOn = item.true && await getValueFromData(item.true, type); const colorOff = !value && item.false && await getValueFromData(item.false, type); if (colorOff) { return colorOff; } return colorOn || null; } } return null; } async function getValueFromData(item, type) { switch (type) { case "string": { return item.getString(); break; } case "color": { return item.getRGBDec(); break; } } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { PageMedia, getValueFromBoolean }); //# sourceMappingURL=pageMedia.js.map