import '@polymer/app-layout/app-header-layout/app-header-layout.js'; import '@polymer/app-layout/app-header/app-header.js'; import '@polymer/app-layout/app-toolbar/app-toolbar.js'; import '@polymer/paper-button/paper-button.js'; import '@polymer/paper-card/paper-card.js'; import '@polymer/paper-dialog/paper-dialog.js'; import '@polymer/paper-input/paper-textarea.js'; import '@polymer/paper-item/paper-item-body.js'; import '@polymer/paper-item/paper-item.js'; import { html } from '@polymer/polymer/lib/utils/html-tag.js'; import { PolymerElement } from '@polymer/polymer/polymer-element.js'; import '../../src/components/ha-menu-button.js'; import '../../src/resources/ha-style.js'; import '../../src/util/hass-mixins.js'; import formatDateTime from '../../js/common/datetime/format_date_time.js'; /* * @appliesMixin window.hassMixins.LocalizeMixin */ class HaPanelMailbox extends window.hassMixins.LocalizeMixin(PolymerElement) { static get template() { return html`
[[localize('panel.mailbox')]]

[[localize('ui.panel.mailbox.playback_title')]]

[[localize('ui.panel.mailbox.delete_prompt')]]

[[localize('ui.common.cancel')]] [[localize('ui.panel.mailbox.delete_button')]]
`; } static get properties() { return { hass: { type: Object, }, narrow: { type: Boolean, value: false, }, showMenu: { type: Boolean, value: false, }, platforms: { type: Array, }, _messages: { type: Array, }, currentMessage: { type: Object, }, }; } connectedCallback() { super.connectedCallback(); this.hassChanged = this.hassChanged.bind(this); this.hass.connection.subscribeEvents(this.hassChanged, 'mailbox_updated') .then(function (unsub) { this._unsubEvents = unsub; }.bind(this)); this.computePlatforms().then(function (platforms) { this.platforms = platforms; this.hassChanged(); }.bind(this)); } disconnectedCallback() { super.disconnectedCallback(); if (this._unsubEvents) this._unsubEvents(); } hassChanged() { if (!this._messages) { this._messages = []; } this.getMessages().then(function (items) { this._messages = items; }.bind(this)); } openMP3Dialog(event) { var platform = event.model.item.platform; this.currentMessage = event.model.item; this.$.mp3dialog.open(); this.$.mp3src.src = '/api/mailbox/media/' + platform + '/' + event.model.item.sha; this.$.transcribe.innerText = event.model.item.message; this.$.mp3.load(); this.$.mp3.play(); } _mp3Closed() { this.$.mp3.pause(); } openDeleteDialog() { this.$.confirmdel.open(); } deleteSelected() { var msg = this.currentMessage; this.hass.callApi('DELETE', 'mailbox/delete/' + msg.platform + '/' + msg.sha); this.$.mp3dialog.close(); } getMessages() { const items = this.platforms.map(function (platform) { return this.hass.callApi('GET', 'mailbox/messages/' + platform).then(function (values) { var platformItems = []; var arrayLength = values.length; for (var i = 0; i < arrayLength; i++) { var datetime = formatDateTime(new Date(values[i].info.origtime * 1000)); platformItems.push({ timestamp: datetime, caller: values[i].info.callerid, message: values[i].text, sha: values[i].sha, duration: values[i].info.duration, platform: platform }); } return platformItems; }); }.bind(this)); return Promise.all(items).then(function (platformItems) { var arrayLength = items.length; var final = []; for (var i = 0; i < arrayLength; i++) { final = final.concat(platformItems[i]); } final.sort(function (a, b) { return new Date(b.timestamp) - new Date(a.timestamp); }); return final; }); } computePlatforms() { return this.hass.callApi('GET', 'mailbox/platforms'); } } customElements.define('ha-panel-mailbox', HaPanelMailbox);