diff --git a/frontend/src/api/api.ts b/frontend/src/api/api.ts index b6f3efd..703be7b 100644 --- a/frontend/src/api/api.ts +++ b/frontend/src/api/api.ts @@ -30,15 +30,17 @@ export async function getEpisodesInfo(mediaId: number, mediaSlug: string, mediaT }); } -async function downloadMedia(mediaId: number, mediaSlug: string, mediaType: string): Promise> { +async function downloadMedia(mediaId: number, mediaSlug: string, mediaType: string, downloadId?: number): Promise> { const url = `/download/`; const data = { media_id: mediaId, media_slug: mediaSlug, type_media: mediaType, + download_id: downloadId, }; return post(url, data); } export const downloadFilm = (mediaId: number, mediaSlug: string) => downloadMedia(mediaId, mediaSlug, 'MOVIE'); -export const downloadAnimeFilm = (mediaId: number, mediaSlug: string) => downloadMedia(mediaId, mediaSlug, 'OVA'); \ No newline at end of file +export const downloadAnimeFilm = (mediaId: number, mediaSlug: string) => downloadMedia(mediaId, mediaSlug, 'OVA'); +export const downloadAnimeSeries = (mediaId: number, mediaSlug: string, downloadId: number) => downloadMedia(mediaId, mediaSlug, 'OVA', downloadId); \ No newline at end of file diff --git a/frontend/src/views/Details.vue b/frontend/src/views/Details.vue index 6d846fb..6129a2c 100644 --- a/frontend/src/views/Details.vue +++ b/frontend/src/views/Details.vue @@ -2,7 +2,7 @@ import { useRoute } from 'vue-router' import type {DownloadResponse, Episode, MediaItem, Season, SeasonResponse} from "@/api/interfaces"; import { onMounted, ref } from "vue"; -import {downloadAnimeFilm, downloadFilm, getEpisodesInfo} from "@/api/api"; +import {downloadAnimeFilm, downloadAnimeSeries, downloadFilm, getEpisodesInfo} from "@/api/api"; const route = useRoute() @@ -54,31 +54,51 @@ const toggleEpisodeSelection = () => { const downloadItems = async () => { try { - let res: DownloadResponse; switch (item.type) { case 'MOVIE': - res = (await downloadFilm(item.id, item.slug)).data; + await handleMovieDownload(); + break; + case 'TV_ANIME': + await handleTVAnimeDownload(); break; case 'OVA': case 'SPECIAL': - res = (await downloadAnimeFilm(item.id, item.slug)).data; + await handleOVADownload(); break; default: throw new Error('Tipo di media non supportato'); } - - console.log(res) - - if (res.error) { - throw new Error(`${res.error} - ${res.message}`); - } - - alertDownload(); } catch (error) { alertDownload(error); } }; +const handleMovieDownload = async () => { + alertDownload(); + const res = (await downloadFilm(item.id, item.slug)).data; + handleDownloadError(res); +}; + +const handleTVAnimeDownload = async () => { + alertDownload(); + for (const episode of animeEpisodes.value) { + const res = (await downloadAnimeSeries(item.id, item.slug, episode.episode_id)).data; + handleDownloadError(res); + } +}; + +const handleOVADownload = async () => { + alertDownload(); + const res = (await downloadAnimeFilm(item.id, item.slug)).data; + handleDownloadError(res); +}; + +const handleDownloadError = (res: DownloadResponse) => { + if (res.error) { + throw new Error(`${res.error} - ${res.message}`); + } +}; + const alertDownload = (message?: any) => { if (message) { alert(message)