import ServerConnections from '../../components/ServerConnections'; import loading from '../../components/loading/loading'; import keyboardnavigation from '../../scripts/keyboardNavigation'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; import dom from '../../scripts/dom'; import { appRouter } from '../../components/router/appRouter'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; import './style.scss'; import '../../elements/emby-button/paper-icon-button-light'; export class PdfPlayer { constructor() { this.name = 'PDF Player'; this.type = PluginType.MediaPlayer; this.id = 'pdfplayer'; this.priority = 1; this.onDialogClosed = this.onDialogClosed.bind(this); this.onWindowKeyUp = this.onWindowKeyUp.bind(this); this.onTouchStart = this.onTouchStart.bind(this); } play(options) { this.progress = 0; this.loaded = false; this.cancellationToken = false; this.pages = {}; loading.show(); const elem = this.createMediaElement(); return this.setCurrentSrc(elem, options); } stop() { this.unbindEvents(); const stopInfo = { src: this.item }; Events.trigger(this, 'stopped', [stopInfo]); const elem = this.mediaElement; if (elem) { dialogHelper.close(elem); this.mediaElement = null; } // hide loading animation loading.hide(); // cancel page render this.cancellationToken = true; } destroy() { // Nothing to do here } currentItem() { return this.item; } currentTime() { return this.progress; } duration() { return this.book ? this.book.numPages : 0; } volume() { return 100; } isMuted() { return false; } paused() { return false; } seekable() { return true; } onWindowKeyUp(e) { const key = keyboardnavigation.getKeyName(e); if (!this.loaded) return; switch (key) { case 'l': case 'ArrowRight': case 'Right': this.next(); break; case 'j': case 'ArrowLeft': case 'Left': this.previous(); break; case 'Escape': this.stop(); break; } } onTouchStart(e) { if (!this.loaded || !e.touches || e.touches.length === 0) return; if (e.touches[0].clientX < dom.getWindowSize().innerWidth / 2) { this.previous(); } else { this.next(); } } onDialogClosed() { this.stop(); } bindMediaElementEvents() { const elem = this.mediaElement; elem.addEventListener('close', this.onDialogClosed, { once: true }); elem.querySelector('.btnExit').addEventListener('click', this.onDialogClosed, { once: true }); } bindEvents() { this.bindMediaElementEvents(); document.addEventListener('keyup', this.onWindowKeyUp); document.addEventListener('touchstart', this.onTouchStart); } unbindMediaElementEvents() { const elem = this.mediaElement; elem.removeEventListener('close', this.onDialogClosed); elem.querySelector('.btnExit').removeEventListener('click', this.onDialogClosed); } unbindEvents() { if (this.mediaElement) { this.unbindMediaElementEvents(); } document.removeEventListener('keyup', this.onWindowKeyUp); document.removeEventListener('touchstart', this.onTouchStart); } createMediaElement() { let elem = this.mediaElement; if (elem) { return elem; } elem = document.getElementById('pdfPlayer'); if (!elem) { elem = dialogHelper.createDialog({ exitAnimationDuration: 400, size: 'fullscreen', autoFocus: false, scrollY: false, exitAnimation: 'fadeout', removeOnClose: true }); let html = ''; html += ''; html += '