@@ -385,26 +385,6 @@ class BaseScanner<T> {
385385 }
386386 }
387387
388- // We want to skip specials when checking if a show is available
389- const isAllStandardSeasons =
390- seasons . length &&
391- seasons
392- . filter ( ( season ) => season . seasonNumber !== 0 )
393- . every (
394- ( season ) =>
395- season . episodes === season . totalEpisodes && season . episodes > 0
396- ) ;
397-
398- const isAll4kSeasons =
399- seasons . length &&
400- seasons
401- . filter ( ( season ) => season . seasonNumber !== 0 )
402- . every (
403- ( season ) =>
404- season . episodes4k === season . totalEpisodes &&
405- season . episodes4k > 0
406- ) ;
407-
408388 if ( media ) {
409389 media . seasons = [ ...media . seasons , ...newSeasons ] ;
410390
@@ -464,43 +444,38 @@ class BaseScanner<T> {
464444 externalServiceSlug ;
465445 }
466446
467- // If the show is already available, and there are no new seasons, dont adjust
468- // the status. Skip specials when performing availability check
469- const shouldStayAvailable =
470- media . status === MediaStatus . AVAILABLE &&
471- newSeasons . filter (
472- ( season ) =>
473- season . status !== MediaStatus . UNKNOWN &&
474- season . status !== MediaStatus . DELETED &&
475- season . seasonNumber !== 0
476- ) . length === 0 ;
477- const shouldStayAvailable4k =
478- media . status4k === MediaStatus . AVAILABLE &&
479- newSeasons . filter (
480- ( season ) =>
481- season . status4k !== MediaStatus . UNKNOWN &&
482- season . status4k !== MediaStatus . DELETED &&
483- season . seasonNumber !== 0
484- ) . length === 0 ;
485- media . status =
486- isAllStandardSeasons || shouldStayAvailable
487- ? MediaStatus . AVAILABLE
488- : media . seasons . some (
489- ( season ) =>
490- season . status === MediaStatus . PARTIALLY_AVAILABLE ||
491- season . status === MediaStatus . AVAILABLE
447+ const nonSpecialSeasons = media . seasons . filter (
448+ ( s ) => s . seasonNumber !== 0
449+ ) ;
450+
451+ // Check the actual season objects instead scanner input
452+ // to determine overall availability status
453+ const isAllStandardSeasonsAvailable =
454+ nonSpecialSeasons . length > 0 &&
455+ nonSpecialSeasons . every ( ( s ) => s . status === MediaStatus . AVAILABLE ) ;
456+
457+ const isAll4kSeasonsAvailable =
458+ nonSpecialSeasons . length > 0 &&
459+ nonSpecialSeasons . every ( ( s ) => s . status4k === MediaStatus . AVAILABLE ) ;
460+
461+ media . status = isAllStandardSeasonsAvailable
462+ ? MediaStatus . AVAILABLE
463+ : media . seasons . some (
464+ ( season ) =>
465+ season . status === MediaStatus . PARTIALLY_AVAILABLE ||
466+ season . status === MediaStatus . AVAILABLE
467+ )
468+ ? MediaStatus . PARTIALLY_AVAILABLE
469+ : ( ! seasons . length && media . status !== MediaStatus . DELETED ) ||
470+ media . seasons . some (
471+ ( season ) => season . status === MediaStatus . PROCESSING
492472 )
493- ? MediaStatus . PARTIALLY_AVAILABLE
494- : ( ! seasons . length && media . status !== MediaStatus . DELETED ) ||
495- media . seasons . some (
496- ( season ) => season . status === MediaStatus . PROCESSING
497- )
498- ? MediaStatus . PROCESSING
499- : media . status === MediaStatus . DELETED
500- ? MediaStatus . DELETED
501- : MediaStatus . UNKNOWN ;
473+ ? MediaStatus . PROCESSING
474+ : media . status === MediaStatus . DELETED
475+ ? MediaStatus . DELETED
476+ : MediaStatus . UNKNOWN ;
502477 media . status4k =
503- ( isAll4kSeasons || shouldStayAvailable4k ) && this . enable4kShow
478+ isAll4kSeasonsAvailable && this . enable4kShow
504479 ? MediaStatus . AVAILABLE
505480 : this . enable4kShow &&
506481 media . seasons . some (
@@ -520,6 +495,22 @@ class BaseScanner<T> {
520495 await mediaRepository . save ( media ) ;
521496 this . log ( `Updating existing title: ${ title } ` ) ;
522497 } else {
498+ // For new media, check actual newSeasons objects instead of scanner
499+ // input to determine overall availability status
500+ const nonSpecialNewSeasons = newSeasons . filter (
501+ ( s ) => s . seasonNumber !== 0
502+ ) ;
503+
504+ const isAllStandardSeasonsAvailable =
505+ nonSpecialNewSeasons . length > 0 &&
506+ nonSpecialNewSeasons . every ( ( s ) => s . status === MediaStatus . AVAILABLE ) ;
507+
508+ const isAll4kSeasonsAvailable =
509+ nonSpecialNewSeasons . length > 0 &&
510+ nonSpecialNewSeasons . every (
511+ ( s ) => s . status4k === MediaStatus . AVAILABLE
512+ ) ;
513+
523514 const newMedia = new Media ( {
524515 mediaType : MediaType . TV ,
525516 seasons : newSeasons ,
@@ -564,7 +555,7 @@ class BaseScanner<T> {
564555 )
565556 ? jellyfinMediaId
566557 : undefined ,
567- status : isAllStandardSeasons
558+ status : isAllStandardSeasonsAvailable
568559 ? MediaStatus . AVAILABLE
569560 : newSeasons . some (
570561 ( season ) =>
@@ -578,7 +569,7 @@ class BaseScanner<T> {
578569 ? MediaStatus . PROCESSING
579570 : MediaStatus . UNKNOWN ,
580571 status4k :
581- isAll4kSeasons && this . enable4kShow
572+ isAll4kSeasonsAvailable && this . enable4kShow
582573 ? MediaStatus . AVAILABLE
583574 : this . enable4kShow &&
584575 newSeasons . some (
0 commit comments