mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 03:06:38 +08:00
优化
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
import { mediaVersionLabel } from './mediaVersion.ts'
|
||||
import type { Media } from '../types/index.ts'
|
||||
|
||||
function check(name: string, condition: boolean) {
|
||||
if (!condition) throw new Error(`mediaVersion: ${name}`)
|
||||
}
|
||||
|
||||
function media(partial: Partial<Media>): Media {
|
||||
return {
|
||||
id: 'm1',
|
||||
title: 'SIVR-270',
|
||||
path: '',
|
||||
height: 0,
|
||||
width: 0,
|
||||
size_bytes: 0,
|
||||
...partial,
|
||||
} as Media
|
||||
}
|
||||
|
||||
const partLabel = mediaVersionLabel(media({
|
||||
path: '/media/云下载/sivr-270/sivr-270-1.strm',
|
||||
size_bytes: 157,
|
||||
strm_url: '/api/strm/play/cloud115/video.mp4?pickcode=a',
|
||||
}))
|
||||
check('indistinct strm falls back to filename', partLabel.includes('sivr-270-1'))
|
||||
check('indistinct strm is not generic MP4 only', partLabel.toUpperCase() !== 'MP4')
|
||||
|
||||
const richLabel = mediaVersionLabel(media({
|
||||
path: '/strm/竞女01.mkv.strm',
|
||||
height: 1080,
|
||||
size_bytes: 1024 * 1024 * 1200,
|
||||
strm_url: '/api/strm/play/cloud115/video.mkv?pickcode=a',
|
||||
}))
|
||||
check('rich metadata keeps resolution label', richLabel.includes('1080p'))
|
||||
check('rich metadata keeps container', richLabel.toUpperCase().includes('MKV'))
|
||||
|
||||
const dottedPart = mediaVersionLabel(media({
|
||||
path: '/media/云下载/ipvr00192pl/fbzip.com@ipvr00192.part2.strm',
|
||||
size_bytes: 157,
|
||||
strm_url: '/api/strm/play/cloud115/video.mp4?pickcode=b',
|
||||
}))
|
||||
check('part2 filename fallback keeps part token', dottedPart.includes('part2'))
|
||||
|
||||
console.log('mediaVersion.test.ts: ok')
|
||||
@@ -107,6 +107,15 @@ function cleanFallbackFilename(raw: string): string {
|
||||
return name
|
||||
}
|
||||
|
||||
function isIndistinctVersionLabel(parts: string[]): boolean {
|
||||
if (parts.length === 0) return true
|
||||
return parts.every((part) => {
|
||||
const upper = part.toUpperCase()
|
||||
if (upper === '云端直链' || upper === 'STRM') return true
|
||||
return VIDEO_EXTENSIONS.has(part.toLowerCase())
|
||||
})
|
||||
}
|
||||
|
||||
/** 版本切换展示名:分辨率 · 容器 · 编码 · 体积 / 规格 / 来源标签。 */
|
||||
export function mediaVersionLabel(media: Media): string {
|
||||
const isStrm = isStrmMedia(media)
|
||||
@@ -153,11 +162,11 @@ export function mediaVersionLabel(media: Media): string {
|
||||
parts.push('云端直链')
|
||||
}
|
||||
|
||||
if (parts.length > 0) {
|
||||
// 只有容器 /「云端直链」时无法区分多分片,回退文件名(sivr-270-1 / …part1)
|
||||
if (parts.length > 0 && !isIndistinctVersionLabel(parts)) {
|
||||
return parts.join(' · ')
|
||||
}
|
||||
|
||||
// 兜底:使用清理后的文件名
|
||||
const cleaned = cleanFallbackFilename(media.path || '')
|
||||
return cleaned || media.title || media.id
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user