2 lines
8.1 KiB
JavaScript
2 lines
8.1 KiB
JavaScript
"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[8621],{78621:(e,a,t)=>{t.d(a,{S:()=>p});var s=t(4017),r=t(56185),i=t(17833),n=t(47675),c=t(68191),d=t(63324);const o=i("music-metadata:id3v2:frame-parser"),l="latin1";function h(e){return"RX"===e?"Remix":"CR"===e?"Cover":e.match(/^\d*$/)?c.jR[Number.parseInt(e)]:void 0}class g{constructor(e,a){this.major=e,this.warningCollector=a}readData(e,a,t){if(0===e.length)return void this.warningCollector.addWarning(`id3v2.${this.major} header has empty tag type=${a}`);const{encoding:i,bom:c}=n.YF.get(e,0),d=e.length;let u=0,p=[];const f=g.getNullTerminatorLength(i);let T;switch(o(`Parsing tag type=${a}, encoding=${i}, bom=${c}`),"TXXX"!==a&&"T"===a[0]?"T*":a){case"T*":case"GRP1":case"IPLS":case"MVIN":case"MVNM":case"PCS":case"PCST":{let t;try{t=r.sc(e.slice(1),i).replace(/\x00+$/,"")}catch(e){if(e instanceof Error){this.warningCollector.addWarning(`id3v2.${this.major} type=${a} header has invalid string value: ${e.message}`);break}throw e}switch(a){case"TMCL":case"TIPL":case"IPLS":p=g.functionList(this.splitValue(a,t));break;case"TRK":case"TRCK":case"TPOS":p=t;break;case"TCOM":case"TEXT":case"TOLY":case"TOPE":case"TPE1":case"TSRC":p=this.splitValue(a,t);break;case"TCO":case"TCON":p=this.splitValue(a,t).map((e=>function(e){const a=[];let t,s="";for(const r of e)if("string"==typeof t)if("("===r&&""===t)s+="(",t=void 0;else if(")"===r){""!==s&&(a.push(s),s="");const e=h(t);e&&a.push(e),t=void 0}else t+=r;else"("===r?t="":s+=r;return s&&(0===a.length&&s.match(/^\d*$/)&&(s=h(s)),s&&a.push(s)),a}(e))).reduce(((e,a)=>e.concat(a)),[]);break;case"PCS":case"PCST":p=this.major>=4?this.splitValue(a,t):[t],p=Array.isArray(p)&&""===p[0]?1:0;break;default:p=this.major>=4?this.splitValue(a,t):[t]}break}case"TXXX":{const t=g.readIdentifierAndData(e,u+1,d,i);p={description:t.id,text:this.splitValue(a,r.sc(t.data,i).replace(/\x00+$/,""))};break}case"PIC":case"APIC":if(t){const a={};switch(u+=1,this.major){case 2:a.format=r.sc(e.slice(u,u+3),"latin1"),u+=3;break;case 3:case 4:T=r.sX(e,u,d,l),a.format=r.sc(e.slice(u,T),l),u=T+1;break;default:throw function(e){throw new m(`Unexpected majorVer: ${e}`)}(this.major)}a.format=g.fixPictureMimeType(a.format),a.type=n.n5[e[u]],u+=1,T=r.sX(e,u,d,i),a.description=r.sc(e.slice(u,T),i),u=T+f,a.data=e.slice(u,d),p=a}break;case"CNT":case"PCNT":p=s.UINT32_BE.get(e,0);break;case"SYLT":{const a=n.aY.get(e,0);u+=n.aY.len;const t={descriptor:"",language:a.language,contentType:a.contentType,timeStampFormat:a.timeStampFormat,syncText:[]};let r=!1;for(;u<d;){const i=g.readNullTerminatedString(e.subarray(u),a.encoding);if(u+=i.len,r){const a=s.UINT32_BE.get(e,u);u+=s.UINT32_BE.len,t.syncText.push({text:i.text,timestamp:a})}else t.descriptor=i.text,r=!0}p=t;break}case"ULT":case"USLT":case"COM":case"COMM":{const a=n.Jp.get(e,u);u+=n.Jp.len;const t=g.readNullTerminatedString(e.subarray(u),a.encoding);u+=t.len;const s=g.readNullTerminatedString(e.subarray(u),a.encoding);p={language:a.language,descriptor:t.text,text:s.text};break}case"UFID":{const a=g.readIdentifierAndData(e,u,d,l);p={owner_identifier:a.id,identifier:a.data};break}case"PRIV":{const a=g.readIdentifierAndData(e,u,d,l);p={owner_identifier:a.id,data:a.data};break}case"POPM":{T=r.sX(e,u,d,l);const a=r.sc(e.slice(u,T),l);u=T+1;const t=d-u;p={email:a,rating:s.UINT8.get(e,u),counter:t>=5?s.UINT32_BE.get(e,u+1):void 0};break}case"GEOB":{T=r.sX(e,u+1,d,i);const a=r.sc(e.slice(u+1,T),l);u=T+1,T=r.sX(e,u,d,i);const t=r.sc(e.slice(u,T),l);u=T+1,T=r.sX(e,u,d,i);const s=r.sc(e.slice(u,T),l);u=T+1,p={type:a,filename:t,description:s,data:e.slice(u,d)};break}case"WCOM":case"WCOP":case"WOAF":case"WOAR":case"WOAS":case"WORS":case"WPAY":case"WPUB":T=r.sX(e,u+1,d,i),p=r.sc(e.slice(u,T),l);break;case"WXXX":{T=r.sX(e,u+1,d,i);const a=r.sc(e.slice(u+1,T),i);u=T+("utf-16le"===i?2:1),p={description:a,url:r.sc(e.slice(u,d),l)};break}case"WFD":case"WFED":p=r.sc(e.slice(u+1,r.sX(e,u+1,d,i)),i);break;case"MCDI":p=e.slice(0,d);break;default:o(`Warning: unsupported id3v2-tag-type: ${a}`)}return p}static readNullTerminatedString(e,a){let t=a.bom?2:0;const s=r.sX(e,t,e.length,a.encoding),i=e.slice(t,s);return t="utf-16le"===a.encoding?s+2:s+1,{text:r.sc(i,a.encoding),len:t}}static fixPictureMimeType(e){switch(e=e.toLocaleLowerCase()){case"jpg":return"image/jpeg";case"png":return"image/png"}return e}static functionList(e){const a={};for(let t=0;t+1<e.length;t+=2){const s=e[t+1].split(",");a[e[t]]=a[e[t]]?a[e[t]].concat(s):s}return a}splitValue(e,a){let t;return this.major<4?(t=a.split(/\x00/g),t.length>1?this.warningCollector.addWarning(`ID3v2.${this.major} ${e} uses non standard null-separator.`):t=a.split(/\//g)):t=a.split(/\x00/g),g.trimArray(t)}static trimArray(e){return e.map((e=>e.replace(/\x00+$/,"").trim()))}static readIdentifierAndData(e,a,t,s){const i=r.sX(e,a,t,s),n=r.sc(e.slice(a,i),s);return a=i+g.getNullTerminatorLength(s),{id:n,data:e.slice(a,t)}}static getNullTerminatorLength(e){return"utf-16le"===e?2:1}}class m extends((0,d.fO)("id3v2")){}const u=new TextDecoder("ascii");class p{constructor(){this.tokenizer=void 0,this.id3Header=void 0,this.metadata=void 0,this.headerType=void 0,this.options=void 0}static removeUnsyncBytes(e){let a=0,t=0;for(;a<e.length-1;)a!==t&&(e[t]=e[a]),a+=255===e[a]&&0===e[a+1]?2:1,t++;return a<e.length&&(e[t++]=e[a]),e.slice(0,t)}static getFrameHeaderLength(e){switch(e){case 2:return 6;case 3:case 4:return 10;default:throw f(e)}}static readFrameFlags(e){return{status:{tag_alter_preservation:r.mh(e,0,6),file_alter_preservation:r.mh(e,0,5),read_only:r.mh(e,0,4)},format:{grouping_identity:r.mh(e,1,7),compression:r.mh(e,1,3),encryption:r.mh(e,1,2),unsynchronisation:r.mh(e,1,1),data_length_indicator:r.mh(e,1,0)}}}static readFrameData(e,a,t,s,r){const i=new g(t,r);switch(t){case 2:return i.readData(e,a.id,s);case 3:case 4:return a.flags?.format.unsynchronisation&&(e=p.removeUnsyncBytes(e)),a.flags?.format.data_length_indicator&&(e=e.slice(4,e.length)),i.readData(e,a.id,s);default:throw f(t)}}static makeDescriptionTagName(e,a){return e+(a?`:${a}`:"")}async parse(e,a,t){this.tokenizer=a,this.metadata=e,this.options=t;const s=await this.tokenizer.readToken(n.yW);if("ID3"!==s.fileIdentifier)throw new m("expected ID3-header file-identifier 'ID3' was not found");return this.id3Header=s,this.headerType=`ID3v2.${s.version.major}`,s.flags.isExtendedHeader?this.parseExtendedHeader():this.parseId3Data(s.size)}async parseExtendedHeader(){const e=await this.tokenizer.readToken(n.nl),a=e.size-n.nl.len;return a>0?this.parseExtendedHeaderData(a,e.size):this.parseId3Data(this.id3Header.size-e.size)}async parseExtendedHeaderData(e,a){return await this.tokenizer.ignore(e),this.parseId3Data(this.id3Header.size-a)}async parseId3Data(e){const a=await this.tokenizer.readToken(new s.Uint8ArrayType(e));for(const e of this.parseMetadata(a))"TXXX"===e.id?e.value&&await this.handleTag(e,e.value.text,(()=>e.value.description)):await(Array.isArray(e.value)?Promise.all(e.value.map((a=>this.addTag(e.id,a)))):this.addTag(e.id,e.value))}async handleTag(e,a,t,s=e=>e){await Promise.all(a.map((a=>this.addTag(p.makeDescriptionTagName(e.id,t(a)),s(a)))))}async addTag(e,a){await this.metadata.addTag(this.headerType,e,a)}parseMetadata(e){let a=0;const t=[];for(;a!==e.length;){const s=p.getFrameHeaderLength(this.id3Header.version.major);if(a+s>e.length){this.metadata.addWarning("Illegal ID3v2 tag length");break}const r=e.slice(a,a+s);a+=s;const i=this.readFrameHeader(r,this.id3Header.version.major),n=e.slice(a,a+i.length);a+=i.length;const c=p.readFrameData(n,i,this.id3Header.version.major,!this.options.skipCovers,this.metadata);c&&t.push({id:i.id,value:c})}return t}readFrameHeader(e,a){let t;switch(a){case 2:t={id:u.decode(e.slice(0,3)),length:s.UINT24_BE.get(e,3)},t.id.match(/[A-Z0-9]{3}/g)||this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${t.id}`);break;case 3:case 4:t={id:u.decode(e.slice(0,4)),length:(4===a?n.St:s.UINT32_BE).get(e,4),flags:p.readFrameFlags(e.slice(8,10))},t.id.match(/[A-Z0-9]{4}/g)||this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${t.id}`);break;default:throw f(a)}return t}}function f(e){throw new m(`Unexpected majorVer: ${e}`)}}}]);
|
|
//# sourceMappingURL=8621.4a8a6d1799a1886ff271.js.map
|