// 冒烟测试:用流水线下载一首歌并打印过程事件 // npm run smoke -- <歌曲ID或链接> [音质] [album|flat] // MUSIC_DIR=/tmp/x npm run smoke -- 287398 lossless import { importQQCookieFile } from '../src/accounts.ts'; import { config } from '../src/config.ts'; import { downloadTrack } from '../src/core/pipeline.ts'; import { getProvider, resolveLink } from '../src/core/providers/index.ts'; import { isQualityKey } from '../src/core/quality.ts'; importQQCookieFile(); const [input, quality = config.defaults.quality, layout = config.defaults.layout] = process.argv.slice(2); const ref = input ? await resolveLink(input) : null; if (!ref || ref.kind !== 'track' || !isQualityKey(quality)) { console.error('用法: npm run smoke -- <歌曲ID或链接> [standard|high|lossless|hires|master|spatial|effect] [album|flat]'); process.exit(1); } const mb = (n: number) => (n / 1048576).toFixed(1); const result = await downloadTrack( getProvider(ref.source), ref.id, { ...config.defaults, quality, layout: layout === 'flat' ? 'flat' : 'album' }, { musicDir: config.musicDir, reporter: { stage: (stage, msg) => console.log(`▸ [${stage}] ${msg}`), progress: (p) => process.stdout.write(`\r ${mb(p.received)}/${mb(p.total)} MB ${(p.speed / 1024).toFixed(0)} KB/s `), log: (level, msg) => console.log(`${process.stdout.isTTY ? '\n' : ''} ${level === 'warn' ? '⚠' : '·'} ${msg}`), }, }, ); console.log('\n✔', JSON.stringify(result, null, 2));