@@ -8,6 +8,7 @@ import { formatSize, getRawResolution } from "~/utils.ts"
88
99type SonarrAllMedia = paths [ "/api/v3/series" ] [ "get" ] [ "responses" ] [ "200" ] [ "content" ] [ "application/json" ]
1010type SonarrSeries = SonarrAllMedia [ number ]
11+ type SonarrQualityProfiles = paths [ "/api/v3/qualityprofile" ] [ "get" ] [ "responses" ] [ "200" ] [ "content" ] [ "application/json" ]
1112
1213type SeriesEpisodes = paths [ "/api/v3/episode" ] [ "get" ] [ "responses" ] [ "200" ] [ "content" ] [ "application/json" ]
1314type SeriesEpisode = SeriesEpisodes [ number ] | undefined
@@ -38,6 +39,8 @@ type SeriesBySeason = { series: SonarrSeries; seasons: SeasonsArray }
3839
3940const seriesTitle = ( series : SonarrSeries ) => series . title
4041const seriesYear = ( series : SonarrSeries ) => series . year
42+ const seriesQualityProfile = ( series : SonarrSeries , qualityProfiles : SonarrQualityProfiles ) =>
43+ qualityProfiles . find ( ( profile ) => profile . id === series . qualityProfileId ) ?. name
4144const seasonIdentifier = ( seasonNumber : number ) => seasonNumber . toString ( ) . padStart ( 2 , "0" )
4245const episodeIdentifier = ( episode ?: SeriesEpisode ) => episode ?. episodeNumber ?. toString ( ) . padStart ( 2 , "0" )
4346const seriesType = ( series : SonarrSeries ) => series . seriesType
@@ -84,6 +87,10 @@ export class SonarrClient extends ArrClient {
8487 return await this . makeRequest < SonarrAllMedia > ( "series" )
8588 }
8689
90+ public getAllQualityProfiles ( ) : Promise < Result < SonarrQualityProfiles > > {
91+ return this . makeRequest < SonarrQualityProfiles > ( "qualityprofile" )
92+ }
93+
8794 private async getAllEpisodesForSeries ( series : SonarrSeries ) : Promise < Result < SeriesEpisodes > > {
8895 if ( ! series . id ) return err ( `series id is missing for series '${ series . title } '` )
8996 const episodes = await this . makeRequest < SeriesEpisodes > ( `episode?seriesId=${ series . id } &includeEpisodeFile=true` )
@@ -144,6 +151,9 @@ export class SonarrClient extends ArrClient {
144151 const allSeriesBySeason = await this . getAllSeriesBySeason ( )
145152 if ( isErr ( allSeriesBySeason ) ) return allSeriesBySeason
146153
154+ const qualityProfiles = await this . getAllQualityProfiles ( )
155+ if ( isErr ( qualityProfiles ) ) return err ( "failed to get sonarr quality profiles" , qualityProfiles )
156+
147157 const data : SonarrMediaData = [ ]
148158
149159 if ( this . #options. byEpisode ) {
@@ -159,6 +169,7 @@ export class SonarrClient extends ArrClient {
159169 episode : episodeIdentifier ( episode ) ,
160170 type : seriesType ( series ) ,
161171 monitored : episode ?. monitored ,
172+ qualityProfile : seriesQualityProfile ( series , qualityProfiles ) ,
162173 releaseGroup : episodeReleaseGroup ( episode ) ,
163174 source : episodeSource ( episode ) ,
164175 videoCodec : episodeVideoCodec ( episode ) ,
@@ -182,6 +193,7 @@ export class SonarrClient extends ArrClient {
182193 season : seasonIdentifier ( seasonNumber ) ,
183194 type : seriesType ( series ) ,
184195 monitored : series . seasons ?. find ( ( seasonElement ) => seasonElement . seasonNumber === seasonNumber ) ?. monitored ,
196+ qualityProfile : seriesQualityProfile ( series , qualityProfiles ) ,
185197 releaseGroup : gatherEpisodeData ( [ season ] , episodeReleaseGroup ) ,
186198 source : gatherEpisodeData ( [ season ] , episodeSource ) ,
187199 videoCodec : gatherEpisodeData ( [ season ] , episodeVideoCodec ) ,
@@ -202,6 +214,7 @@ export class SonarrClient extends ArrClient {
202214 year : seriesYear ( series ) ,
203215 type : seriesType ( series ) ,
204216 monitored : series . monitored ,
217+ qualityProfile : seriesQualityProfile ( series , qualityProfiles ) ,
205218 releaseGroup : gatherEpisodeData ( seasons , episodeReleaseGroup ) ,
206219 source : gatherEpisodeData ( seasons , episodeSource ) ,
207220 videoCodec : gatherEpisodeData ( seasons , episodeVideoCodec ) ,
0 commit comments