2 lines
10 KiB
JavaScript
2 lines
10 KiB
JavaScript
"use strict";(self.webpackChunkmontana_messenger=self.webpackChunkmontana_messenger||[]).push([[8019],{80400(e,a,t){t.d(a,{S:()=>v});var r=t(4017),s=t(17833),n=t(56185),i=t(47675),c=t(68191),o=t(63324);const d=(e,a)=>{const t=r.UINT32_BE.get(e,a+8),s=r.UINT32_BE.get(e,a+12);return{startTime:r.UINT32_BE.get(e,a),endTime:r.UINT32_BE.get(e,a+4),startOffset:4294967295===t?void 0:t,endOffset:4294967295===s?void 0:s}};var l=t(12971);function u(e){switch(e){case 2:return 6;case 3:case 4:return 10;default:throw g(e)}}function h(e,a,t){switch(a){case 2:return function(e,a,t){const s={id:(0,l.c)(e.subarray(0,3),"ascii"),length:r.UINT24_BE.get(e,3)};return s.id.match(/^[A-Z0-9]{3}$/)||t.addWarning(`Invalid ID3v2.${a} frame-header-ID: ${s.id}`),s}(e,a,t);case 3:case 4:return function(e,a,t){const s={id:(0,l.c)(e.subarray(0,4),"ascii"),length:(4===a?i.St:r.UINT32_BE).get(e,4),flags:(c=e.subarray(8,10),{status:{tag_alter_preservation:n.mh(c,0,6),file_alter_preservation:n.mh(c,0,5),read_only:n.mh(c,0,4)},format:{grouping_identity:n.mh(c,1,7),compression:n.mh(c,1,3),encryption:n.mh(c,1,2),unsynchronisation:n.mh(c,1,1),data_length_indicator:n.mh(c,1,0)}})};var c;return s.id.match(/^[A-Z0-9]{4}$/)||t.addWarning(`Invalid ID3v2.${a} frame-header-ID: ${s.id}`),s}(e,a,t);default:throw g(a)}}function g(e){throw new b(`Unexpected majorVer: ${e}`)}const m=s("music-metadata:id3v2:frame-parser"),p="latin1",f={encoding:p,bom:!1};function y(e){return"RX"===e?"Remix":"CR"===e?"Cover":e.match(/^\d*$/)?c.jR[Number.parseInt(e,10)]:void 0}class T{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:s,bom:c}=i.YF.get(e,0),o=e.length;let l=0,g=[];const v=T.getNullTerminatorLength(s);let I;switch(m(`Parsing tag type=${a}, encoding=${s}, bom=${c}`),"TXXX"!==a&&"T"===a[0]?"T*":a){case"T*":case"GRP1":case"GP1":case"IPLS":case"MVIN":case"MVNM":case"PCS":case"PCST":{let t;try{t=T.trimNullPadding(n.sc(e.subarray(1),s))}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":g=T.functionList(this.splitValue(a,t));break;case"TRK":case"TRCK":case"TPOS":case"TIT1":case"TIT2":case"TIT3":g=t;break;case"TCOM":case"TEXT":case"TOLY":case"TOPE":case"TPE1":case"TSRC":g=this.splitValue(a,t);break;case"TCO":case"TCON":g=this.splitValue(a,t).map(e=>function(e){const a=[];let t,r="";for(const s of e)if("string"==typeof t)if("("===s&&""===t)r+="(",t=void 0;else if(")"===s){""!==r&&(a.push(r),r="");const e=y(t);e&&a.push(e),t=void 0}else t+=s;else"("===s?t="":r+=s;return r&&(0===a.length&&r.match(/^\d*$/)&&(r=y(r)),r&&a.push(r)),a}(e)).reduce((e,a)=>e.concat(a),[]);break;case"PCS":case"PCST":g=this.major>=4?this.splitValue(a,t):[t],g=Array.isArray(g)&&""===g[0]?1:0;break;default:g=this.major>=4?this.splitValue(a,t):[t]}break}case"TXXX":{const t=T.readIdentifierAndData(e.subarray(1),s);g={description:t.id,text:this.splitValue(a,n.sc(t.data,s).replace(/\x00+$/,""))};break}case"PIC":case"APIC":if(t){const a={};switch(e=e.subarray(1),this.major){case 2:a.format=n.sc(e.subarray(0,3),"latin1"),e=e.subarray(3);break;case 3:case 4:I=n.sX(e,p),a.format=n.sc(e.subarray(0,I),p),e=e.subarray(I+1);break;default:throw function(e){throw new b(`Unexpected majorVer: ${e}`)}(this.major)}a.format=T.fixPictureMimeType(a.format),a.type=i.n5[e[0]],e=e.subarray(1),I=n.sX(e,s),a.description=n.sc(e.subarray(0,I),s),e=e.subarray(I+v),a.data=e,g=a}break;case"CNT":case"PCNT":g=(0,n.ku)(e);break;case"SYLT":{const a=i.aY.get(e,0);e=e.subarray(i.aY.len);const t={descriptor:"",language:a.language,contentType:a.contentType,timeStampFormat:a.timeStampFormat,syncText:[]};let s=!1;for(;e.length>0;){const n=T.readNullTerminatedString(e,a.encoding);if(e=e.subarray(n.len),s){const a=r.UINT32_BE.get(e,0);e=e.subarray(r.UINT32_BE.len),t.syncText.push({text:n.text,timestamp:a})}else t.descriptor=n.text,s=!0}g=t;break}case"ULT":case"USLT":case"COM":case"COMM":{const a=i.Jp.get(e,l);l+=i.Jp.len;const t=T.readNullTerminatedString(e.subarray(l),a.encoding);l+=t.len;const r=T.readNullTerminatedString(e.subarray(l),a.encoding);g={language:a.language,descriptor:t.text,text:r.text};break}case"UFID":{const a=T.readIdentifierAndData(e,p);g={owner_identifier:a.id,identifier:a.data};break}case"PRIV":{const a=T.readIdentifierAndData(e,p);g={owner_identifier:a.id,data:a.data};break}case"POPM":{e=e.subarray(l);const t=T.readNullTerminatedString(e,f),s=t.text;if(0===(e=e.subarray(t.len)).length){this.warningCollector.addWarning(`id3v2.${this.major} type=${a} POPM frame missing rating byte`),g={email:s,rating:0,counter:void 0};break}const i=r.UINT8.get(e,0),c=e.subarray(r.UINT8.len);g={email:s,rating:i,counter:c.length>0?(0,n.ku)(c):void 0};break}case"GEOB":{const a=i.YF.get(e,0);e=e.subarray(1);const t=T.readNullTerminatedString(e,f),r=t.text;e=e.subarray(t.len);const s=T.readNullTerminatedString(e,a),n=s.text;e=e.subarray(s.len);const c=T.readNullTerminatedString(e,a);g={type:r,filename:n,description:c.text,data:e=e.subarray(c.len)};break}case"WCOM":case"WCOP":case"WOAF":case"WOAR":case"WOAS":case"WORS":case"WPAY":case"WPUB":g=T.readNullTerminatedString(e,f).text;break;case"WXXX":{const a=i.YF.get(e,0);e=e.subarray(1);const t=T.readNullTerminatedString(e,a),r=t.text;e=e.subarray(t.len),g={description:r,url:T.trimNullPadding(n.sc(e,p))};break}case"WFD":case"WFED":{const a=i.YF.get(e,0);e=e.subarray(1),g=T.readNullTerminatedString(e,a).text;break}case"MCDI":g=e.subarray(0,o);break;case"CHAP":{m("Reading CHAP"),I=n.sX(e,p);const a={label:n.sc(e.subarray(0,I),p),info:d(e,I+1),frames:new Map};for(l+=I+1+16;l<o;){const r=h(e.subarray(l),this.major,this.warningCollector);l+=u(this.major);const s=this.readData(e.subarray(l,l+r.length),r.id,t);l+=r.length,a.frames.set(r.id,s)}g=a;break}case"CTOC":{m("Reading CTOC");const a=n.sX(e,p),r=n.sc(e.subarray(0,a),p);l=a+1;const s=e[l++],i=!!(2&s),c=!!(1&s),d=e[l++],f=[];for(let a=0;a<d&&l<o;a++){const a=n.sX(e.subarray(l),p),t=n.sc(e.subarray(l,l+a),p);f.push(t),l+=a+1}const y={label:r,flags:{topLevel:i,ordered:c},childElementIds:f,frames:new Map};for(;l<o;){const a=h(e.subarray(l),this.major,this.warningCollector);l+=u(this.major);const r=this.readData(e.subarray(l,l+a.length),a.id,t);l+=a.length,y.frames.set(a.id,r)}g=y;break}default:m(`Warning: unsupported id3v2-tag-type: ${a}`)}return g}static readNullTerminatedString(e,a){const t=a.bom?2:0,r=e.length,s=e.subarray(t),i=n.sX(s,a.encoding);if(i>=s.length)return{text:n.sc(s,a.encoding),len:r};const c=s.subarray(0,i);return{text:n.sc(c,a.encoding),len:t+i+T.getNullTerminatorLength(a.encoding)}}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 r=e[t+1].split(",");a[e[t]]=a[e[t]]?a[e[t]].concat(r):r}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),T.trimArray(t)}static trimArray(e){return e.map(e=>T.trimNullPadding(e).trim())}static trimNullPadding(e){let a=e.length;for(;a>0&&0===e.charCodeAt(a-1);)a--;return a===e.length?e:e.slice(0,a)}static readIdentifierAndData(e,a){const t=T.readNullTerminatedString(e,{encoding:a,bom:!1});return{id:t.text,data:e.subarray(t.len)}}static getNullTerminatorLength(e){return e.startsWith("utf-16")?2:1}}class b extends((0,o.fO)("id3v2")){}class v{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.subarray(0,t)}static readFrameData(e,a,t,r,s){const n=new T(t,s);switch(t){case 2:return n.readData(e,a.id,r);case 3:case 4:return a.flags?.format.unsynchronisation&&(e=v.removeUnsyncBytes(e)),a.flags?.format.data_length_indicator&&(e=e.subarray(4,e.length)),n.readData(e,a.id,r);default:throw function(e){throw new b(`Unexpected majorVer: ${e}`)}(t)}}static makeDescriptionTagName(e,a){return e+(a?`:${a}`:"")}async parse(e,a,t){this.tokenizer=a,this.metadata=e,this.options=t;const r=await this.tokenizer.readToken(i.yW);if("ID3"!==r.fileIdentifier)throw new b("expected ID3-header file-identifier 'ID3' was not found");this.id3Header=r,this.headerType=`ID3v2.${r.version.major}`,await(r.flags.isExtendedHeader?this.parseExtendedHeader():this.parseId3Data(r.size));const s=v.mapId3v2Chapters(this.metadata.native[this.headerType]);this.metadata.setFormat("chapters",s)}async parseExtendedHeader(){const e=await this.tokenizer.readToken(i.nl),a=e.size-i.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 r.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,r=e=>e){await Promise.all(a.map(a=>this.addTag(v.makeDescriptionTagName(e.id,t(a)),r(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 r=u(this.id3Header.version.major);if(a+r>e.length){this.metadata.addWarning("Illegal ID3v2 tag length");break}const s=e.subarray(a,a+r);a+=r;const n=h(s,this.id3Header.version.major,this.metadata),i=e.subarray(a,a+n.length);a+=n.length;const c=v.readFrameData(i,n,this.id3Header.version.major,!this.options.skipCovers,this.metadata);c&&t.push({id:n.id,value:c})}return t}static mapId3v2Chapters(e){if(!e)return;const a=e.filter(e=>"CHAP"===e.id);if(!a?.length)return;const t=e.filter(e=>"CTOC"===e.id),r=t?.find(e=>e.value.flags?.topLevel),s=new Map;for(const e of a)s.set(e.value.label,e.value);const n=r?.value.childElementIds,i=[],c=n??[...s.keys()];for(const e of c){const a=s.get(e);if(!a)continue;const t=a.frames,r=t.get("TIT2");r&&i.push({id:e,title:r,url:t.get("WXXX"),start:a.info.startTime/1e3,end:a.info.endTime/1e3,image:t.get("APIC")})}return n||i.sort((e,a)=>e.start-a.start),i.length?i:void 0}}}}]);
|
|
//# sourceMappingURL=8019.e83e13265492fbbd375b.js.map
|