diff --git a/server/lib/downloadtracker.ts b/server/lib/downloadtracker.ts index cf29313e..e948c580 100644 --- a/server/lib/downloadtracker.ts +++ b/server/lib/downloadtracker.ts @@ -20,6 +20,7 @@ export interface DownloadingItem { timeLeft: string; estimatedCompletionTime: Date; title: string; + downloadId: string; episode?: EpisodeNumberResult; } @@ -95,6 +96,7 @@ class DownloadTracker { status: item.status, timeLeft: item.timeleft, title: item.title, + downloadId: item.downloadId, })); if (queueItems.length > 0) { @@ -172,6 +174,7 @@ class DownloadTracker { timeLeft: item.timeleft, title: item.title, episode: item.episode, + downloadId: item.downloadId, })); if (queueItems.length > 0) { diff --git a/src/components/StatusBadge/index.tsx b/src/components/StatusBadge/index.tsx index e7cbbbba..0061a903 100644 --- a/src/components/StatusBadge/index.tsx +++ b/src/components/StatusBadge/index.tsx @@ -18,6 +18,7 @@ const messages = defineMessages('components.StatusBadge', { playonplex: 'Play on {mediaServerName}', openinarr: 'Open in {arr}', managemedia: 'Manage {mediaType}', + seasonnumber: 'S{seasonNumber}', seasonepisodenumber: 'S{seasonNumber}E{episodeNumber}', }); @@ -107,22 +108,34 @@ const StatusBadge = ({ } } - const tooltipContent = ( - - ); + const tooltipContent = + mediaType === 'tv' && + downloadItem.length > 1 && + downloadItem.every( + (item) => + item.downloadId && item.downloadId === downloadItem[0].downloadId + ) ? ( + + ) : ( + + ); const badgeDownloadProgress = (
{inProgress && ( <> - {mediaType === 'tv' && downloadItem[0].episode && ( - - {intl.formatMessage(messages.seasonepisodenumber, { - seasonNumber: downloadItem[0].episode.seasonNumber, - episodeNumber: downloadItem[0].episode.episodeNumber, - })} - - )} + {mediaType === 'tv' && + downloadItem[0].episode && + (downloadItem.length > 1 && + downloadItem.every( + (item) => + item.downloadId && + item.downloadId === downloadItem[0].downloadId + ) ? ( + + {intl.formatMessage(messages.seasonnumber, { + seasonNumber: downloadItem[0].episode.seasonNumber, + })} + + ) : ( + + {intl.formatMessage(messages.seasonepisodenumber, { + seasonNumber: downloadItem[0].episode.seasonNumber, + episodeNumber: downloadItem[0].episode.episodeNumber, + })} + + ))} )} @@ -230,14 +256,27 @@ const StatusBadge = ({ {inProgress && ( <> - {mediaType === 'tv' && downloadItem[0].episode && ( - - {intl.formatMessage(messages.seasonepisodenumber, { - seasonNumber: downloadItem[0].episode.seasonNumber, - episodeNumber: downloadItem[0].episode.episodeNumber, - })} - - )} + {mediaType === 'tv' && + downloadItem[0].episode && + (downloadItem.length > 1 && + downloadItem.every( + (item) => + item.downloadId && + item.downloadId === downloadItem[0].downloadId + ) ? ( + + {intl.formatMessage(messages.seasonnumber, { + seasonNumber: downloadItem[0].episode.seasonNumber, + })} + + ) : ( + + {intl.formatMessage(messages.seasonepisodenumber, { + seasonNumber: downloadItem[0].episode.seasonNumber, + episodeNumber: downloadItem[0].episode.episodeNumber, + })} + + ))} )} @@ -283,14 +322,27 @@ const StatusBadge = ({ {inProgress && ( <> - {mediaType === 'tv' && downloadItem[0].episode && ( - - {intl.formatMessage(messages.seasonepisodenumber, { - seasonNumber: downloadItem[0].episode.seasonNumber, - episodeNumber: downloadItem[0].episode.episodeNumber, - })} - - )} + {mediaType === 'tv' && + downloadItem[0].episode && + (downloadItem.length > 1 && + downloadItem.every( + (item) => + item.downloadId && + item.downloadId === downloadItem[0].downloadId + ) ? ( + + {intl.formatMessage(messages.seasonnumber, { + seasonNumber: downloadItem[0].episode.seasonNumber, + })} + + ) : ( + + {intl.formatMessage(messages.seasonepisodenumber, { + seasonNumber: downloadItem[0].episode.seasonNumber, + episodeNumber: downloadItem[0].episode.episodeNumber, + })} + + ))} )} diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index f34aa5b4..5c9aa6fe 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -1056,6 +1056,7 @@ "components.StatusBadge.openinarr": "Open in {arr}", "components.StatusBadge.playonplex": "Play on {mediaServerName}", "components.StatusBadge.seasonepisodenumber": "S{seasonNumber}E{episodeNumber}", + "components.StatusBadge.seasonnumber": "S{seasonNumber}", "components.StatusBadge.status": "{status}", "components.StatusBadge.status4k": "4K {status}", "components.StatusChecker.appUpdated": "{applicationTitle} Updated",