# -*- coding: utf-8 -*- """网易云音乐下载器(标签写入基于 mutagen,纯 Python) 提供功能: - 异步下载(本地落盘) - 批量并发下载(由上层服务编排) - 基于 mutagen 的标签 + 封面写入(MP3/FLAC/M4A/MP4/OGG/Opus) 设计要点: 1. 内容嗅探交给 filetype(按魔数识别容器),不再自维护魔数表 2. 传输通道二选一:aria2c 常驻 RPC(多连接)优先,不可用时回落内置 aiohttp 流式 3. 标签写入按容器分派(ID3v2.3 / Vorbis comment / iTunes ilst),全部原子替换 4. 扩展名优先使用 API 返回的 type 字段,URL/Content-Type 兜底 5. 全链路异步:HTTP 走 core.http_client,阻塞 IO/CPU 经 asyncio.to_thread 卸载 """ # 兼容门面:实现已按职责拆分到同包各子模块,此处原样再导出。 # 用 `__all__` 声明再导出(ruff F401 与 pyright 均据此认定「有意再导出」), # 使既有调用点(music_downloader.xxx / from music_downloader import Y)零改动。 from ._concurrency import ( _FILE_LOCKS, _FILE_LOCKS_GUARD, CountingSemaphore, RefCountedFileLock, _FileLockHandle, get_file_lock, ) from ._http import ( DEFAULT_UA, DL_CHUNK_SIZE, _sniff_audio_header, ) from ._log import ( logger, ) from .cover import ( _COVER_CACHE, _COVER_CACHE_LOCK, _COVER_CACHE_MAX, _COVER_CACHE_ORDER, fetch_cover_bytes, ) from .downloader import ( MusicDownloader, ) from .models import ( API_TYPE_TO_EXT, METADATA_FORMATS, DownloadCanceled, DownloadException, DownloadResult, MusicInfo, QualityLevel, _RetryFromScratch, ) __all__ = [ 'API_TYPE_TO_EXT', 'DEFAULT_UA', 'DL_CHUNK_SIZE', 'METADATA_FORMATS', '_COVER_CACHE', '_COVER_CACHE_LOCK', '_COVER_CACHE_MAX', '_COVER_CACHE_ORDER', '_FILE_LOCKS', '_FILE_LOCKS_GUARD', 'CountingSemaphore', 'DownloadCanceled', 'DownloadException', 'DownloadResult', 'MusicDownloader', 'MusicInfo', 'QualityLevel', 'RefCountedFileLock', '_FileLockHandle', '_RetryFromScratch', '_sniff_audio_header', 'fetch_cover_bytes', 'get_file_lock', 'logger', ]