diff --git a/frontend/src/api/utils.ts b/frontend/src/api/utils.ts index 9133e82..25a0f8a 100644 --- a/frontend/src/api/utils.ts +++ b/frontend/src/api/utils.ts @@ -24,6 +24,15 @@ export const handleTVAnimeDownload = async (episodeCount: number, item: MediaIte } }; +export const handleTvAnimeEpisodesDownload = async (episodes: Episode[], item: MediaItem) => { + alertDownload(); + for (const episode of episodes) { + const res = (await downloadAnimeSeries(item.id, item.slug, episode.episode_id)).data; + handleDownloadError(res); + } + +} + export const handleOVADownload = async (item: MediaItem) => { alertDownload(); const res = (await downloadAnimeFilm(item.id, item.slug)).data; diff --git a/frontend/src/views/Details.vue b/frontend/src/views/Details.vue index 352b99c..536f481 100644 --- a/frontend/src/views/Details.vue +++ b/frontend/src/views/Details.vue @@ -3,8 +3,14 @@ import { useRoute } from 'vue-router' import type {Episode, MediaItem, SeasonResponse} from "@/api/interfaces"; import { onMounted, ref } from "vue"; import { getEpisodesInfo } from "@/api/api"; -import { alertDownload, handleMovieDownload, handleOVADownload, handleTVAnimeDownload, handleTVDownload } from "@/api/utils"; -import {i} from "vite/dist/node/types.d-aGj9QkWt"; +import { + alertDownload, + handleMovieDownload, + handleOVADownload, + handleTVAnimeDownload, + handleTvAnimeEpisodesDownload, + handleTVDownload +} from "@/api/utils"; const route = useRoute() @@ -15,6 +21,7 @@ const totalEpisodes = ref(0) const tvShowEpisodes = ref([]) const loading = ref(false) const selectingEpisodes = ref(false) +const selectedEpisodes = ref([]) onMounted(async () => { if (['MOVIE', 'OVA', 'SPECIAL'].includes(item.type)) { @@ -54,10 +61,35 @@ onMounted(async () => { const toggleEpisodeSelection = () => { selectingEpisodes.value = !selectingEpisodes.value + selectedEpisodes.value = [] } -const downloadItems = async () => { - console.log(item) +const toggleEpisodeSelect = (episode: Episode) => { + if (selectedEpisodes.value.includes(episode)) { + selectedEpisodes.value = selectedEpisodes.value.filter(e => e !== episode) + } else { + selectedEpisodes.value.push(episode) + } +} + +const downloadSelectedEpisodes = async () => { + try { + switch (item.type) { + case 'TV': + // await handleTVDownload(selectedEpisodes.value, item); + case 'TV_ANIME': + await handleTvAnimeEpisodesDownload(selectedEpisodes.value, item); + break; + default: + throw new Error('Tipo di media non supportato'); + } + toggleEpisodeSelection(); + } catch (error) { + alertDownload(error); + } +}; + +const downloadAllItems = async () => { try { switch (item.type) { case 'TV': @@ -102,14 +134,17 @@ const downloadItems = async () => {
@@ -122,11 +157,13 @@ const downloadItems = async () => {

Non ci sono episodi...

-
Episodio {{ episode.number }}
-
+ v-for="episode in animeEpisodes" + :key="episode.id" + class="episode-item" + :style="{ backgroundColor: selectedEpisodes.includes(episode) ? '#42b883' : '#333' }" + @click="selectingEpisodes ? toggleEpisodeSelect(episode) : null"> +
Episodio {{ episode.number }}
+
Stagione {{ index + 1 }}