@ -69,6 +69,12 @@ export class MediaRequest {
Object . assign ( this , init ) ;
}
@AfterUpdate ( )
@AfterInsert ( )
public async sendMedia ( ) : Promise < void > {
await Promise . all ( [ this . _sendToRadarr ( ) , this . _sendToSonarr ( ) ] ) ;
}
@AfterInsert ( )
private async _notifyNewRequest() {
if ( this . status === MediaRequestStatus . PENDING ) {
@ -163,7 +169,7 @@ export class MediaRequest {
@AfterUpdate ( )
@AfterInsert ( )
p rivate async _updateParentStatus() {
p ublic async updateParentStatus ( ) : Promise < void > {
const mediaRepository = getRepository ( Media ) ;
const media = await mediaRepository . findOne ( {
where : { id : this.media.id } ,
@ -229,14 +235,13 @@ export class MediaRequest {
}
}
@AfterUpdate ( )
@AfterInsert ( )
private async _sendToRadarr() {
if (
this . status === MediaRequestStatus . APPROVED &&
this . type === MediaType . MOVIE
) {
try {
const mediaRepository = getRepository ( Media ) ;
const settings = getSettings ( ) ;
if ( settings . radarr . length === 0 && ! settings . radarr [ 0 ] ) {
logger . info (
@ -268,17 +273,49 @@ export class MediaRequest {
const movie = await tmdb . getMovie ( { movieId : this.media.tmdbId } ) ;
// Run this asynchronously so we don't wait for it on the UI side
radarr . addMovie ( {
profileId : radarrSettings.activeProfileId ,
qualityProfileId : radarrSettings.activeProfileId ,
rootFolderPath : radarrSettings.activeDirectory ,
minimumAvailability : radarrSettings.minimumAvailability ,
title : movie.title ,
tmdbId : movie.id ,
year : Number ( movie . release_date . slice ( 0 , 4 ) ) ,
monitored : true ,
searchNow : true ,
} ) ;
radarr
. addMovie ( {
profileId : radarrSettings.activeProfileId ,
qualityProfileId : radarrSettings.activeProfileId ,
rootFolderPath : radarrSettings.activeDirectory ,
minimumAvailability : radarrSettings.minimumAvailability ,
title : movie.title ,
tmdbId : movie.id ,
year : Number ( movie . release_date . slice ( 0 , 4 ) ) ,
monitored : true ,
searchNow : true ,
} )
. then ( async ( success ) = > {
if ( ! success ) {
const media = await mediaRepository . findOne ( {
where : { id : this.media.id } ,
} ) ;
if ( ! media ) {
logger . error ( 'Media not present' ) ;
return ;
}
media . status = MediaStatus . UNKNOWN ;
await mediaRepository . save ( media ) ;
logger . warn (
'Newly added movie request failed to add to Radarr, marking as unknown' ,
{
label : 'Media Request' ,
}
) ;
const userRepository = getRepository ( User ) ;
const admin = await userRepository . findOneOrFail ( {
select : [ 'id' , 'plexToken' ] ,
order : { id : 'ASC' } ,
} ) ;
notificationManager . sendNotification ( Notification . MEDIA_FAILED , {
subject : movie.title ,
message : 'Movie failed to add to Radarr' ,
notifyUser : admin ,
media ,
image : ` https://image.tmdb.org/t/p/w600_and_h900_bestv2 ${ movie . poster_path } ` ,
} ) ;
}
} ) ;
logger . info ( 'Sent request to Radarr' , { label : 'Media Request' } ) ;
} catch ( e ) {
throw new Error (
@ -288,8 +325,6 @@ export class MediaRequest {
}
}
@AfterUpdate ( )
@AfterInsert ( )
private async _sendToSonarr() {
if (
this . status === MediaRequestStatus . APPROVED &&
@ -352,23 +387,55 @@ export class MediaRequest {
}
// Run this asynchronously so we don't wait for it on the UI side
sonarr . addSeries ( {
profileId :
seriesType === 'anime' && sonarrSettings . activeAnimeProfileId
? sonarrSettings . activeAnimeProfileId
: sonarrSettings . activeProfileId ,
rootFolderPath :
seriesType === 'anime' && sonarrSettings . activeAnimeDirectory
? sonarrSettings . activeAnimeDirectory
: sonarrSettings . activeDirectory ,
title : series.name ,
tvdbid : series.external_ids.tvdb_id ,
seasons : this.seasons.map ( ( season ) = > season . seasonNumber ) ,
seasonFolder : sonarrSettings.enableSeasonFolders ,
seriesType ,
monitored : true ,
searchNow : true ,
} ) ;
sonarr
. addSeries ( {
profileId :
seriesType === 'anime' && sonarrSettings . activeAnimeProfileId
? sonarrSettings . activeAnimeProfileId
: sonarrSettings . activeProfileId ,
rootFolderPath :
seriesType === 'anime' && sonarrSettings . activeAnimeDirectory
? sonarrSettings . activeAnimeDirectory
: sonarrSettings . activeDirectory ,
title : series.name ,
tvdbid : series.external_ids.tvdb_id ,
seasons : this.seasons.map ( ( season ) = > season . seasonNumber ) ,
seasonFolder : sonarrSettings.enableSeasonFolders ,
seriesType ,
monitored : true ,
searchNow : true ,
} )
. then ( async ( success ) = > {
if ( ! success ) {
media . status = MediaStatus . UNKNOWN ;
await mediaRepository . save ( media ) ;
logger . warn (
'Newly added series request failed to add to Sonarr, marking as unknown' ,
{
label : 'Media Request' ,
}
) ;
const userRepository = getRepository ( User ) ;
const admin = await userRepository . findOneOrFail ( {
order : { id : 'ASC' } ,
} ) ;
notificationManager . sendNotification ( Notification . MEDIA_FAILED , {
subject : series.name ,
message : 'Series failed to add to Sonarr' ,
notifyUser : admin ,
image : ` https://image.tmdb.org/t/p/w600_and_h900_bestv2 ${ series . poster_path } ` ,
media ,
extra : [
{
name : 'Seasons' ,
value : this.seasons
. map ( ( season ) = > season . seasonNumber )
. join ( ', ' ) ,
} ,
] ,
} ) ;
}
} ) ;
logger . info ( 'Sent request to Sonarr' , { label : 'Media Request' } ) ;
} catch ( e ) {
throw new Error (