feat(file-info): detail every version, file and stream the server reports
The sheet collapsed an item to `Media.first` / `MediaSources.first` and
rendered a fixed set of rows, so split files, extra versions, per-track
properties, HDR classification and Dolby Vision were all invisible.
Model the payload the way both servers shape it — versions own parts,
parts own streams — and project every property either backend populates
onto `MediaStreamDetails`. The field set comes from sweeping both test
servers in full through the clients' own request shapes (Plex 6842
Media / 6842 Part / 39864 Stream entries, Jellyfin 6349 sources / 37763
streams / 61224 attachments), so file presence, Dolby Vision layers,
dynamic range, sample rate, spatial audio, sidecar provenance, embedded
attachments, rotation and the lyric stream type all survive. A coverage
test fails when a server key is neither carried, folded into a sibling,
nor excluded with a reason.
File Info also stopped trusting the shared `/library/metadata/{id}`
cache row: `getPlaybackExtras` writes it without `includeStreams` /
`checkFiles`, so the sheet could render with no stream table at all.
Detect that shape and refetch once under the request context captured
before the cache read, so the outgoing token and the cache namespace
stay on one profile.
Rework the layout to match: a summary chip row, then flat tonal cards
with a two-column field grid that collapses to one column on narrow
viewports, per-stream cards with flag chips, and a copyable monospace
path row. The card fill is a tonal step off the text colour rather than
the `bg` token, which is one shade from the sheet surface on OLED.
This commit is contained in:
+91
-3
@@ -381,30 +381,118 @@
|
||||
},
|
||||
"fileInfo": {
|
||||
"title": "File Info",
|
||||
"overview": "Overview",
|
||||
"video": "Video",
|
||||
"audio": "Audio",
|
||||
"subtitles": "Subtitles",
|
||||
"images": "Embedded Images",
|
||||
"dataStreams": "Data Streams",
|
||||
"lyrics": "Lyrics",
|
||||
"file": "File",
|
||||
"advanced": "Advanced",
|
||||
"attachments": "Attachments",
|
||||
"delivery": "Delivery",
|
||||
"versionCounter": "Version ${index} of ${count}",
|
||||
"fileCounter": "File ${index} of ${count}",
|
||||
"noStreams": "The server reported no streams for this file.",
|
||||
"copyPath": "Copy path",
|
||||
"pathCopied": "File path copied",
|
||||
"codec": "Codec",
|
||||
"codecTag": "Codec Tag",
|
||||
"resolution": "Resolution",
|
||||
"codedResolution": "Coded Resolution",
|
||||
"bitrate": "Bitrate",
|
||||
"frameRate": "Frame Rate",
|
||||
"rotation": "Rotation",
|
||||
"comment": "Comment",
|
||||
"audioDescription": "Audio Description",
|
||||
"headerCompression": "Header Compression",
|
||||
"sidecarFile": "Sidecar File",
|
||||
"transportTimestamp": "Transport Timestamp",
|
||||
"displayOffset": "Display Offset",
|
||||
"previewFailureCode": "Preview Failure Code",
|
||||
"previewRetries": "Preview Retries",
|
||||
"aspectRatio": "Aspect Ratio",
|
||||
"pixelAspectRatio": "Pixel Aspect Ratio",
|
||||
"profile": "Profile",
|
||||
"level": "Level",
|
||||
"bitDepth": "Bit Depth",
|
||||
"pixelFormat": "Pixel Format",
|
||||
"colorSpace": "Color Space",
|
||||
"colorRange": "Color Range",
|
||||
"colorPrimaries": "Color Primaries",
|
||||
"colorTransfer": "Color Transfer",
|
||||
"chromaSubsampling": "Chroma Subsampling",
|
||||
"chromaLocation": "Chroma Location",
|
||||
"scanType": "Scan Type",
|
||||
"interlaced": "Interlaced",
|
||||
"anamorphic": "Anamorphic",
|
||||
"referenceFrames": "Reference Frames",
|
||||
"dynamicRange": "Dynamic Range",
|
||||
"dolbyVision": "Dolby Vision",
|
||||
"dolbyVisionLevel": "Dolby Vision Level",
|
||||
"dolbyVisionVersion": "Dolby Vision Version",
|
||||
"dolbyVisionLayers": "Dolby Vision Layers",
|
||||
"baseLayerCompatibility": "Base Layer Compatibility",
|
||||
"avcBitstream": "AVC Bitstream",
|
||||
"nalLengthSize": "NAL Length Size",
|
||||
"scalingMatrix": "Custom Scaling Matrix",
|
||||
"streamIdentifier": "Stream Identifier",
|
||||
"streamIndex": "Stream Index",
|
||||
"streamId": "Stream ID",
|
||||
"language": "Language",
|
||||
"languageCode": "Language Code",
|
||||
"streamTitle": "Track Title",
|
||||
"channels": "Channels",
|
||||
"subtitles": "Subtitles",
|
||||
"sampleRate": "Sample Rate",
|
||||
"spatialAudio": "Spatial Audio",
|
||||
"textBased": "Text Based",
|
||||
"subtitleFormat": "Sidecar Format",
|
||||
"provider": "Provider",
|
||||
"matchScore": "Match Score",
|
||||
"externalDelivery": "Can Be Served Separately",
|
||||
"sidecarPath": "Sidecar Path",
|
||||
"sourceStream": "Copied From",
|
||||
"temporary": "Temporary",
|
||||
"timeBase": "Time Base",
|
||||
"overallBitrate": "Overall Bitrate",
|
||||
"path": "Path",
|
||||
"fileName": "File Name",
|
||||
"size": "Size",
|
||||
"totalSize": "Total Size",
|
||||
"container": "Container",
|
||||
"duration": "Duration",
|
||||
"previewThumbnails": "Preview Thumbnails",
|
||||
"previewIndex": "Preview Index",
|
||||
"packetLength": "Packet Length",
|
||||
"filePresent": "File Present",
|
||||
"fileReadable": "Readable by Server",
|
||||
"streamPath": "Stream Path",
|
||||
"optimizedForStreaming": "Optimized for Streaming",
|
||||
"has64bitOffsets": "64-bit Offsets"
|
||||
"has64bitOffsets": "64-bit Offsets",
|
||||
"protocol": "Protocol",
|
||||
"mediaType": "Media Type",
|
||||
"sourceKind": "Source Kind",
|
||||
"optimizedVersion": "Optimized Version",
|
||||
"optimizationTarget": "Optimization Target",
|
||||
"deletedAt": "Deleted",
|
||||
"remoteSource": "Remote Source",
|
||||
"infiniteStream": "Infinite Stream",
|
||||
"directPlay": "Direct Play",
|
||||
"directStream": "Direct Stream",
|
||||
"transcoding": "Transcoding",
|
||||
"etag": "ETag",
|
||||
"versionId": "Version ID",
|
||||
"fileId": "File ID",
|
||||
"defaultAudioTrack": "Default Audio Track",
|
||||
"defaultSubtitleTrack": "Default Subtitle Track",
|
||||
"subtitlesOff": "Off",
|
||||
"flagDefault": "Default",
|
||||
"flagForced": "Forced",
|
||||
"flagSelected": "Selected",
|
||||
"flagExternal": "External",
|
||||
"flagHearingImpaired": "Hearing impaired",
|
||||
"flagDub": "Dub",
|
||||
"flagOriginal": "Original"
|
||||
},
|
||||
"mediaMenu": {
|
||||
"markAsWatched": "Mark as Watched",
|
||||
|
||||
Reference in New Issue
Block a user