mirror of
https://github.com/aleksilassila/reiverr.git
synced 2026-04-22 00:35:12 +02:00
feat: Series requesting and local file management
This commit is contained in:
6
src/lib/apis/combined-types.d.ts
vendored
Normal file
6
src/lib/apis/combined-types.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
import type { MovieDownload, MovieFileResource, RadarrRelease } from './radarr/radarr-api';
|
||||
import type { EpisodeFileResource, EpisodeDownload, SonarrRelease } from './sonarr/sonarr-api';
|
||||
|
||||
export type Release = RadarrRelease | SonarrRelease;
|
||||
export type FileResource = MovieFileResource | EpisodeFileResource;
|
||||
export type Download = MovieDownload | EpisodeDownload;
|
||||
@@ -133,7 +133,7 @@ export class RadarrApi implements Api<paths> {
|
||||
})
|
||||
.then((r) => r.data || []) || Promise.resolve([]);
|
||||
|
||||
downloadRadarrMovie = (guid: string, indexerId: number) =>
|
||||
downloadMovie = (guid: string, indexerId: number) =>
|
||||
this.getClient()
|
||||
?.POST('/api/v3/release', {
|
||||
params: {},
|
||||
@@ -144,7 +144,7 @@ export class RadarrApi implements Api<paths> {
|
||||
})
|
||||
.then((res) => res.response.ok) || Promise.resolve(false);
|
||||
|
||||
getMovieFilesByMovieId = (movieId: number): Promise<MovieFileResource[]> =>
|
||||
getFilesByMovieId = (movieId: number): Promise<MovieFileResource[]> =>
|
||||
this.getClient()
|
||||
?.GET('/api/v3/moviefile', {
|
||||
params: {
|
||||
@@ -154,7 +154,7 @@ export class RadarrApi implements Api<paths> {
|
||||
}
|
||||
})
|
||||
.then((r) => r.data || []) || Promise.resolve([]);
|
||||
deleteRadarrMovieFile = (id: number) =>
|
||||
deleteMovieFile = (id: number) =>
|
||||
this.getClient()
|
||||
?.DELETE('/api/v3/moviefile/{id}', {
|
||||
params: {
|
||||
@@ -177,7 +177,7 @@ export class RadarrApi implements Api<paths> {
|
||||
.then((r) => (r.data?.records?.filter((record) => record.movie) as MovieDownload[]) || []) ||
|
||||
Promise.resolve([]);
|
||||
|
||||
getRadarrDownloadsById = (radarrId: number) =>
|
||||
getDownloadsById = (radarrId: number) =>
|
||||
this.getRadarrDownloads().then((downloads) => downloads.filter((d) => d.movie.id === radarrId));
|
||||
|
||||
getRadarrDownloadsByTmdbId = (tmdbId: number) =>
|
||||
|
||||
@@ -9,10 +9,12 @@ import { appState } from '../../stores/app-state.store';
|
||||
import { createLocalStorageStore } from '../../stores/localstorage.store';
|
||||
|
||||
export type SonarrSeries = components['schemas']['SeriesResource'];
|
||||
export type SonarrSeason = components['schemas']['SeasonResource'];
|
||||
export type SonarrRelease = components['schemas']['ReleaseResource'];
|
||||
export type SeriesDownload = components['schemas']['QueueResource'] & { series: SonarrSeries };
|
||||
export type EpisodeDownload = components['schemas']['QueueResource'] & { series: SonarrSeries };
|
||||
export type DiskSpaceInfo = components['schemas']['DiskSpaceResource'];
|
||||
export type SonarrEpisode = components['schemas']['EpisodeResource'];
|
||||
export type EpisodeFileResource = components['schemas']['EpisodeFileResource'];
|
||||
|
||||
export interface SonarrSeriesOptions {
|
||||
title: string;
|
||||
@@ -80,7 +82,18 @@ export class SonarrApi implements Api<paths> {
|
||||
return get(tmdbToTvdbCache)[tmdbId];
|
||||
};
|
||||
|
||||
getSonarrSeries = (): Promise<SonarrSeries[]> =>
|
||||
getSeriesById = (id: number): Promise<SonarrSeries | undefined> =>
|
||||
this.getClient()
|
||||
?.GET('/api/v3/series/{id}', {
|
||||
params: {
|
||||
path: {
|
||||
id
|
||||
}
|
||||
}
|
||||
})
|
||||
.then((r) => r.data) || Promise.resolve(undefined);
|
||||
|
||||
getAllSeries = (): Promise<SonarrSeries[]> =>
|
||||
this.getClient()
|
||||
?.GET('/api/v3/series', {
|
||||
params: {}
|
||||
@@ -177,7 +190,7 @@ export class SonarrApi implements Api<paths> {
|
||||
})
|
||||
.then((res) => res.response.ok) || Promise.resolve(false);
|
||||
|
||||
getSonarrDownloads = (): Promise<SeriesDownload[]> =>
|
||||
getSonarrDownloads = (): Promise<EpisodeDownload[]> =>
|
||||
this.getClient()
|
||||
?.GET('/api/v3/queue', {
|
||||
params: {
|
||||
@@ -191,7 +204,7 @@ export class SonarrApi implements Api<paths> {
|
||||
(r) =>
|
||||
(r.data?.records?.filter(
|
||||
(record) => record.episode && record.series
|
||||
) as SeriesDownload[]) || []
|
||||
) as EpisodeDownload[]) || []
|
||||
) || Promise.resolve([]);
|
||||
|
||||
getSonarrDownloadsById = (sonarrId: number) =>
|
||||
@@ -210,37 +223,48 @@ export class SonarrApi implements Api<paths> {
|
||||
})
|
||||
.then((res) => res.response.ok) || Promise.resolve(false);
|
||||
|
||||
getSonarrEpisodes = async (seriesId: number) => {
|
||||
const episodesPromise =
|
||||
this.getClient()
|
||||
?.GET('/api/v3/episode', {
|
||||
params: {
|
||||
query: {
|
||||
seriesId
|
||||
}
|
||||
getFilesBySeriesId = (seriesId: number): Promise<EpisodeFileResource[]> =>
|
||||
this.getClient()
|
||||
?.GET('/api/v3/episodefile', {
|
||||
params: {
|
||||
query: {
|
||||
seriesId
|
||||
}
|
||||
})
|
||||
.then((r) => r.data || []) || Promise.resolve([]);
|
||||
}
|
||||
})
|
||||
.then((r) => r.data || []) || Promise.resolve([]);
|
||||
|
||||
const episodeFilesPromise =
|
||||
this.getClient()
|
||||
?.GET('/api/v3/episodefile', {
|
||||
params: {
|
||||
query: {
|
||||
seriesId
|
||||
}
|
||||
}
|
||||
})
|
||||
.then((r) => r.data || []) || Promise.resolve([]);
|
||||
|
||||
const episodes = await episodesPromise;
|
||||
const episodeFiles = await episodeFilesPromise;
|
||||
|
||||
return episodes.map((episode) => ({
|
||||
episode,
|
||||
episodeFile: episodeFiles.find((file) => file.id === episode.episodeFileId)
|
||||
}));
|
||||
};
|
||||
// getSonarrEpisodes = async (seriesId: number) => {
|
||||
// const episodesPromise =
|
||||
// this.getClient()
|
||||
// ?.GET('/api/v3/episode', {
|
||||
// params: {
|
||||
// query: {
|
||||
// seriesId
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// .then((r) => r.data || []) || Promise.resolve([]);
|
||||
//
|
||||
// const episodeFilesPromise =
|
||||
// this.getClient()
|
||||
// ?.GET('/api/v3/episodefile', {
|
||||
// params: {
|
||||
// query: {
|
||||
// seriesId
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// .then((r) => r.data || []) || Promise.resolve([]);
|
||||
//
|
||||
// const episodes = await episodesPromise;
|
||||
// const episodeFiles = await episodeFilesPromise;
|
||||
//
|
||||
// return episodes.map((episode) => ({
|
||||
// episode,
|
||||
// episodeFile: episodeFiles.find((file) => file.id === episode.episodeFileId)
|
||||
// }));
|
||||
// };
|
||||
|
||||
fetchSonarrReleases = async (episodeId: number) =>
|
||||
this.getClient()
|
||||
@@ -265,13 +289,14 @@ export class SonarrApi implements Api<paths> {
|
||||
})
|
||||
.then((r) => r.data || []) || Promise.resolve([]);
|
||||
|
||||
fetchSonarrEpisodes = async (seriesId: number): Promise<SonarrEpisode[]> => {
|
||||
getEpisodes = async (seriesId: number, seasonNumber?: number): Promise<SonarrEpisode[]> => {
|
||||
return (
|
||||
this.getClient()
|
||||
?.GET('/api/v3/episode', {
|
||||
params: {
|
||||
query: {
|
||||
seriesId
|
||||
seriesId,
|
||||
seasonNumber
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user