- {data.parts.every(
- (part) => part.mediaInfo?.status === MediaStatus.AVAILABLE
- ) && (
-
- {intl.formatMessage(globalMessages.available)}
-
- )}
- {!data.parts.every(
- (part) => part.mediaInfo?.status === MediaStatus.AVAILABLE
- ) &&
- data.parts.some(
- (part) => part.mediaInfo?.status === MediaStatus.AVAILABLE
+
+
+
+ (part.mediaInfo?.downloadStatus ?? []).length > 0
+ )}
+ />
+
+ {settings.currentSettings.movie4kEnabled &&
+ hasPermission(
+ [Permission.REQUEST_4K, Permission.REQUEST_4K_MOVIE],
+ {
+ type: 'or',
+ }
) && (
-
- {intl.formatMessage(globalMessages.partiallyavailable)}
-
+
+
+ (part.mediaInfo?.downloadStatus4k ?? []).length > 0
+ )}
+ />
+
)}
{data.name}
-
+
{intl.formatMessage(messages.numberofmovies, {
count: data.parts.length,
})}
-
- {data.parts.some(
- (part) =>
- !part.mediaInfo || part.mediaInfo?.status === MediaStatus.UNKNOWN
- ) && (
-
- )}
+
+ {hasPermission(Permission.REQUEST) &&
+ (collectionStatus !== MediaStatus.AVAILABLE ||
+ (settings.currentSettings.movie4kEnabled &&
+ hasPermission(
+ [Permission.REQUEST_4K, Permission.REQUEST_4K_MOVIE],
+ { type: 'or' }
+ ) &&
+ collectionStatus4k !== MediaStatus.AVAILABLE)) && (
+
+
{
+ setRequestModal(true);
+ setIs4k(collectionStatus === MediaStatus.AVAILABLE);
+ }}
+ text={
+ <>
+
+
+ {intl.formatMessage(
+ collectionStatus === MediaStatus.AVAILABLE
+ ? messages.requestcollection4k
+ : messages.requestcollection
+ )}
+
+ >
+ }
+ >
+ {settings.currentSettings.movie4kEnabled &&
+ hasPermission(
+ [Permission.REQUEST_4K, Permission.REQUEST_4K_MOVIE],
+ { type: 'or' }
+ ) &&
+ collectionStatus !== MediaStatus.AVAILABLE &&
+ collectionStatus4k !== MediaStatus.AVAILABLE && (
+ {
+ setRequestModal(true);
+ setIs4k(true);
+ }}
+ >
+
+
+ {intl.formatMessage(messages.requestcollection4k)}
+
+
+ )}
+
+
+ )}
diff --git a/src/components/MovieDetails/index.tsx b/src/components/MovieDetails/index.tsx
index 0f35c6c4..58b74801 100644
--- a/src/components/MovieDetails/index.tsx
+++ b/src/components/MovieDetails/index.tsx
@@ -378,31 +378,31 @@ const MovieDetails: React.FC = ({ movie }) => {
- {data.mediaInfo && data.mediaInfo.status !== MediaStatus.UNKNOWN && (
-
- 0}
- plexUrl={data.mediaInfo?.plexUrl}
- plexUrl4k={data.mediaInfo?.plexUrl4k}
- />
-
- )}
-
+
0}
+ status={data.mediaInfo?.status}
+ inProgress={(data.mediaInfo?.downloadStatus ?? []).length > 0}
plexUrl={data.mediaInfo?.plexUrl}
- plexUrl4k={
- data.mediaInfo?.plexUrl4k &&
- (hasPermission(Permission.REQUEST_4K) ||
- hasPermission(Permission.REQUEST_4K_MOVIE))
- ? data.mediaInfo.plexUrl4k
- : undefined
- }
/>
+ {settings.currentSettings.movie4kEnabled &&
+ hasPermission(
+ [Permission.REQUEST_4K, Permission.REQUEST_4K_MOVIE],
+ {
+ type: 'or',
+ }
+ ) && (
+
+ 0
+ }
+ plexUrl4k={data.mediaInfo?.plexUrl4k}
+ />
+
+ )}
{data.title}{' '}
diff --git a/src/components/RequestList/RequestItem/index.tsx b/src/components/RequestList/RequestItem/index.tsx
index 28cdf2b6..59cdea66 100644
--- a/src/components/RequestList/RequestItem/index.tsx
+++ b/src/components/RequestList/RequestItem/index.tsx
@@ -190,7 +190,8 @@ const RequestItem: React.FC = ({
- {requestData.media.status === MediaStatus.UNKNOWN ||
+ {requestData.media[requestData.is4k ? 'status4k' : 'status'] ===
+ MediaStatus.UNKNOWN ||
requestData.status === MediaRequestStatus.DECLINED ? (
{requestData.status === MediaRequestStatus.DECLINED
@@ -247,7 +248,8 @@ const RequestItem: React.FC = ({