add download for all anime episodes

This commit is contained in:
Francesco Grazioso 2024-05-05 12:59:09 +02:00
parent 3af9edec4f
commit dde4a924ef
2 changed files with 36 additions and 14 deletions

View File

@ -30,15 +30,17 @@ export async function getEpisodesInfo(mediaId: number, mediaSlug: string, mediaT
}); });
} }
async function downloadMedia(mediaId: number, mediaSlug: string, mediaType: string): Promise<AxiosResponse<DownloadResponse>> { async function downloadMedia(mediaId: number, mediaSlug: string, mediaType: string, downloadId?: number): Promise<AxiosResponse<DownloadResponse>> {
const url = `/download/`; const url = `/download/`;
const data = { const data = {
media_id: mediaId, media_id: mediaId,
media_slug: mediaSlug, media_slug: mediaSlug,
type_media: mediaType, type_media: mediaType,
download_id: downloadId,
}; };
return post(url, data); return post(url, data);
} }
export const downloadFilm = (mediaId: number, mediaSlug: string) => downloadMedia(mediaId, mediaSlug, 'MOVIE'); export const downloadFilm = (mediaId: number, mediaSlug: string) => downloadMedia(mediaId, mediaSlug, 'MOVIE');
export const downloadAnimeFilm = (mediaId: number, mediaSlug: string) => downloadMedia(mediaId, mediaSlug, 'OVA'); 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);

View File

@ -2,7 +2,7 @@
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import type {DownloadResponse, Episode, MediaItem, Season, SeasonResponse} from "@/api/interfaces"; import type {DownloadResponse, Episode, MediaItem, Season, SeasonResponse} from "@/api/interfaces";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import {downloadAnimeFilm, downloadFilm, getEpisodesInfo} from "@/api/api"; import {downloadAnimeFilm, downloadAnimeSeries, downloadFilm, getEpisodesInfo} from "@/api/api";
const route = useRoute() const route = useRoute()
@ -54,31 +54,51 @@ const toggleEpisodeSelection = () => {
const downloadItems = async () => { const downloadItems = async () => {
try { try {
let res: DownloadResponse;
switch (item.type) { switch (item.type) {
case 'MOVIE': case 'MOVIE':
res = (await downloadFilm(item.id, item.slug)).data; await handleMovieDownload();
break;
case 'TV_ANIME':
await handleTVAnimeDownload();
break; break;
case 'OVA': case 'OVA':
case 'SPECIAL': case 'SPECIAL':
res = (await downloadAnimeFilm(item.id, item.slug)).data; await handleOVADownload();
break; break;
default: default:
throw new Error('Tipo di media non supportato'); throw new Error('Tipo di media non supportato');
} }
console.log(res)
if (res.error) {
throw new Error(`${res.error} - ${res.message}`);
}
alertDownload();
} catch (error) { } catch (error) {
alertDownload(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) => { const alertDownload = (message?: any) => {
if (message) { if (message) {
alert(message) alert(message)