Skip to content
Snippets Groups Projects
Unverified Commit 1db42a10 authored by Yuki1536's avatar Yuki1536
Browse files

Test: x2m x3m decrypt

parent 47b7273d
No related branches found
No related tags found
No related merge requests found
...@@ -9,96 +9,101 @@ import { Decrypt as KwmDecrypt } from '@/decrypt/kwm'; ...@@ -9,96 +9,101 @@ import { Decrypt as KwmDecrypt } from '@/decrypt/kwm';
import { Decrypt as RawDecrypt } from '@/decrypt/raw'; import { Decrypt as RawDecrypt } from '@/decrypt/raw';
import { Decrypt as TmDecrypt } from '@/decrypt/tm'; import { Decrypt as TmDecrypt } from '@/decrypt/tm';
import { Decrypt as JooxDecrypt } from '@/decrypt/joox'; import { Decrypt as JooxDecrypt } from '@/decrypt/joox';
import { Decrypt as XimalayaDecrypt } from './ximalaya';
import { DecryptResult, FileInfo } from '@/decrypt/entity'; import { DecryptResult, FileInfo } from '@/decrypt/entity';
import { SplitFilename } from '@/decrypt/utils'; import { SplitFilename } from '@/decrypt/utils';
import { storage } from '@/utils/storage'; import { storage } from '@/utils/storage';
import InMemoryStorage from '@/utils/storage/InMemoryStorage'; import InMemoryStorage from '@/utils/storage/InMemoryStorage';
export async function Decrypt(file: FileInfo, config: Record<string, any>): Promise<DecryptResult> { export async function Decrypt(file: FileInfo, config: Record<string, any>): Promise<DecryptResult> {
// Worker thread will fallback to in-memory storage. // Worker thread will fallback to in-memory storage.
if (storage instanceof InMemoryStorage) { if (storage instanceof InMemoryStorage) {
await storage.setAll(config); await storage.setAll(config);
} }
const raw = SplitFilename(file.name); const raw = SplitFilename(file.name);
let rt_data: DecryptResult; let rt_data: DecryptResult;
switch (raw.ext) { switch (raw.ext) {
case 'mg3d': // Migu Wav case 'mg3d': // Migu Wav
rt_data = await Mg3dDecrypt(file.raw, raw.name); rt_data = await Mg3dDecrypt(file.raw, raw.name);
break; break;
case 'ncm': // Netease Mp3/Flac case 'ncm': // Netease Mp3/Flac
rt_data = await NcmDecrypt(file.raw, raw.name, raw.ext); rt_data = await NcmDecrypt(file.raw, raw.name, raw.ext);
break; break;
case 'uc': // Netease Cache case 'uc': // Netease Cache
rt_data = await NcmCacheDecrypt(file.raw, raw.name, raw.ext); rt_data = await NcmCacheDecrypt(file.raw, raw.name, raw.ext);
break; break;
case 'kwm': // Kuwo Mp3/Flac case 'kwm': // Kuwo Mp3/Flac
rt_data = await KwmDecrypt(file.raw, raw.name, raw.ext); rt_data = await KwmDecrypt(file.raw, raw.name, raw.ext);
break; break;
case 'xm': // Xiami Wav/M4a/Mp3/Flac case 'xm': // Xiami Wav/M4a/Mp3/Flac
case 'wav': // Xiami/Raw Wav case 'wav': // Xiami/Raw Wav
case 'mp3': // Xiami/Raw Mp3 case 'mp3': // Xiami/Raw Mp3
case 'flac': // Xiami/Raw Flac case 'flac': // Xiami/Raw Flac
case 'm4a': // Xiami/Raw M4a case 'm4a': // Xiami/Raw M4a
rt_data = await XmDecrypt(file.raw, raw.name, raw.ext); rt_data = await XmDecrypt(file.raw, raw.name, raw.ext);
break; break;
case 'ogg': // Raw Ogg case 'ogg': // Raw Ogg
rt_data = await RawDecrypt(file.raw, raw.name, raw.ext); rt_data = await RawDecrypt(file.raw, raw.name, raw.ext);
break; break;
case 'tm0': // QQ Music IOS Mp3 case 'tm0': // QQ Music IOS Mp3
case 'tm3': // QQ Music IOS Mp3 case 'tm3': // QQ Music IOS Mp3
rt_data = await RawDecrypt(file.raw, raw.name, 'mp3'); rt_data = await RawDecrypt(file.raw, raw.name, 'mp3');
break; break;
case 'qmc3': //QQ Music Android Mp3 case 'qmc3': //QQ Music Android Mp3
case 'qmc2': //QQ Music Android Ogg case 'qmc2': //QQ Music Android Ogg
case 'qmc0': //QQ Music Android Mp3 case 'qmc0': //QQ Music Android Mp3
case 'qmcflac': //QQ Music Android Flac case 'qmcflac': //QQ Music Android Flac
case 'qmcogg': //QQ Music Android Ogg case 'qmcogg': //QQ Music Android Ogg
case 'tkm': //QQ Music Accompaniment M4a case 'tkm': //QQ Music Accompaniment M4a
// Moo Music // Moo Music
case 'bkcmp3': case 'bkcmp3':
case 'bkcm4a': case 'bkcm4a':
case 'bkcflac': case 'bkcflac':
case 'bkcwav': case 'bkcwav':
case 'bkcape': case 'bkcape':
case 'bkcogg': case 'bkcogg':
case 'bkcwma': case 'bkcwma':
// QQ Music v2 // QQ Music v2
case 'mggl': //QQ Music Mac case 'mggl': //QQ Music Mac
case 'mflac': //QQ Music New Flac case 'mflac': //QQ Music New Flac
case 'mflac0': //QQ Music New Flac case 'mflac0': //QQ Music New Flac
case 'mgg': //QQ Music New Ogg case 'mgg': //QQ Music New Ogg
case 'mgg1': //QQ Music New Ogg case 'mgg1': //QQ Music New Ogg
case 'mgg0': case 'mgg0':
case 'mmp4': // QMC MP4 Container w/ E-AC-3 JOC case 'mmp4': // QMC MP4 Container w/ E-AC-3 JOC
case '666c6163': //QQ Music Weiyun Flac case '666c6163': //QQ Music Weiyun Flac
case '6d7033': //QQ Music Weiyun Mp3 case '6d7033': //QQ Music Weiyun Mp3
case '6f6767': //QQ Music Weiyun Ogg case '6f6767': //QQ Music Weiyun Ogg
case '6d3461': //QQ Music Weiyun M4a case '6d3461': //QQ Music Weiyun M4a
case '776176': //QQ Music Weiyun Wav case '776176': //QQ Music Weiyun Wav
rt_data = await QmcDecrypt(file.raw, raw.name, raw.ext); rt_data = await QmcDecrypt(file.raw, raw.name, raw.ext);
break; break;
case 'tm2': // QQ Music IOS M4a case 'tm2': // QQ Music IOS M4a
case 'tm6': // QQ Music IOS M4a case 'tm6': // QQ Music IOS M4a
rt_data = await TmDecrypt(file.raw, raw.name); rt_data = await TmDecrypt(file.raw, raw.name);
break; break;
case 'cache': //QQ Music Cache case 'cache': //QQ Music Cache
rt_data = await QmcCacheDecrypt(file.raw, raw.name, raw.ext); rt_data = await QmcCacheDecrypt(file.raw, raw.name, raw.ext);
break; break;
case 'vpr': case 'vpr':
case 'kgm': case 'kgm':
case 'kgma': case 'kgma':
rt_data = await KgmDecrypt(file.raw, raw.name, raw.ext); rt_data = await KgmDecrypt(file.raw, raw.name, raw.ext);
break; break;
case 'ofl_en': case 'ofl_en':
rt_data = await JooxDecrypt(file.raw, raw.name, raw.ext); rt_data = await JooxDecrypt(file.raw, raw.name, raw.ext);
break; break;
default: case 'x2m':
throw '不支持此文件格式'; case 'x3m':
} rt_data = await XimalayaDecrypt(file.raw, raw.name, raw.ext);
break;
default:
throw '不支持此文件格式';
}
if (!rt_data.rawExt) rt_data.rawExt = raw.ext; if (!rt_data.rawExt) rt_data.rawExt = raw.ext;
if (!rt_data.rawFilename) rt_data.rawFilename = raw.name; if (!rt_data.rawFilename) rt_data.rawFilename = raw.name;
console.log(rt_data); console.log(rt_data);
return rt_data; return rt_data;
} }
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment