# -*- coding: utf-8 -*- """媒体相关的纯函数(文件大小/音质显示名/Cookie 串解析)——框架无关。 与 main.MusicAPIService 上的同名方法保持逐字一致的实现, 供 FastAPI 栈直接复用,避免两栈各写一份而漂移。 """ def format_file_size(size_bytes) -> str: """格式化文件大小(上游 size 可能为 null/垃圾值:容错返回"大小未知"而非 500)""" try: size = float(size_bytes or 0) except (TypeError, ValueError): return "大小未知" if size <= 0: return "0B" units = ["B", "KB", "MB", "GB", "TB"] unit_index = 0 while size >= 1024.0 and unit_index < len(units) - 1: size /= 1024.0 unit_index += 1 return f"{size:.2f}{units[unit_index]}" _QUALITY_NAMES = { 'standard': '标准音质', 'exhigh': '极高音质', 'lossless': '无损音质', 'hires': 'Hi-Res音质', 'sky': '沉浸环绕声', 'jyeffect': '高清环绕声', 'jymaster': '超清母带', 'dolby': '杜比全景声', } def quality_display_name(quality: str) -> str: return _QUALITY_NAMES.get(quality, f"未知音质({quality})") def parse_cookie_str(raw) -> dict[str, str]: """将 'k=v;k2=v2' 格式的 Cookie 字符串解析为字典""" cookies: dict[str, str] = {} if not raw: return cookies for part in str(raw).split(';'): if '=' in part: k, v = part.strip().split('=', 1) if k: cookies[k] = v return cookies