import { Controller } from '@hotwired/stimulus'; /* * The following line makes this controller "lazy": it won't be downloaded until needed * See https://github.com/symfony/stimulus-bridge#lazy-controllers */ /* stimulusFetch: 'lazy' */ export default class extends Controller { H264_CODECS = ['h264', 'h.264', 'x264'] H265_CODECS = ['h265', 'h.265', 'x265', 'hevc'] static values = { title: String, tmdbId: String, imdbId: String, season: String, episode: String, active: Boolean, }; static targets = ['list', 'count', 'episodeSelector', 'toggleButton', 'listContainer'] static outlets = ['loading-icon'] options = [] optionsLoaded = false isOpen = false async listTargetConnected() { this.options = this.element.querySelectorAll('tbody tr'); if (this.options.length > 0) { this.options.forEach((option) => option.querySelector('.download-btn').dataset['title'] = this.titleValue ); this.options[0].querySelector('input[type="checkbox"]').checked = true; this.dispatch('optionsLoaded', {detail: {options: this.options}}) this.loadingIconOutlet.increaseCount(); } else { this.countTarget.innerText = 0; this.episodeSelectorTarget.disabled = true; } } // // async clearCache() { // await fetch(`/torrentio/tvshows/clear/${this.tmdbIdValue}/${this.imdbIdValue}/${this.seasonValue}/${this.episodeValue}`) // .then(res => res.text()) // .then(response => {}); // } async setActive() { if (false === this.optionsLoaded) { await this.setOptions(); } } async setInActive() { this.episodeSelectorTarget.checked = false; } isActive() { return this.activeValue; } isSelected() { return this.episodeSelectorTarget.checked; } selectEpisodeForDownload() { if (true === this.isActive() && this.episodeSelectorTarget.disabled === false) { this.episodeSelectorTarget.checked = !this.episodeSelectorTarget.checked; } } download() { this.options.forEach(option => { const optionSelector = option.querySelector('input[type="checkbox"]'); if (true === optionSelector.checked) { const downloadBtn = option.querySelector('button.download-btn'); const downloadBtnController = this.application.getControllerForElementAndIdentifier(downloadBtn, 'download-button'); downloadBtnController.download(); optionSelector.checked = false; this.episodeSelectorTarget.checked = false; } }) } }