mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
1 line
1.5 KiB
JavaScript
1 line
1.5 KiB
JavaScript
(()=>{return(e,t)=>{class n{constructor(e={}){this.config=e;this.entries=[]}download(e,t){const i=document.createElement("a");const s=URL.createObjectURL(t);if(n.lastPackageUrl){URL.revokeObjectURL(n.lastPackageUrl)}n.lastPackageUrl=s;i.setAttribute("href",s);i.setAttribute("download",e);document.body.appendChild(i);i.click();i.remove()}add(e,t){if(t===null||t===undefined){return}this.entries.push({name:e,data:t})}async preEmit(){const e=this.entries.filter(e=>[".flv",".mp4",".m4s"].some(t=>e.name.endsWith(t)));if(this.config.ffmpeg!==undefined&&e.length>=2){if(this.config.ffmpeg==="文件列表"||this.config.ffmpeg==="文件列表+脚本"){this.entries.push({name:"ffmpeg-files.txt",data:e.map(e=>`file '${e.name}'`).join("\n")})}if(this.config.ffmpeg==="文件列表+脚本"){const e=`ffmpeg -f concat -i ffmpeg-files.txt -c copy ""`;this.entries.push({name:"ffmpeg.bat",data:e},{name:"ffmpeg.sh",data:e.replace(/"/g,"'")})}}}async blob(){await this.preEmit();if(this.entries.length===0){return null}if(this.entries.length===1){const e=this.entries[0].data;return typeof e==="string"?new Blob([e]):e}const e=new JSZip;this.entries.forEach(({name:t,data:n})=>{e.file(t,n)});return await e.generateAsync({type:"blob"})}async emit(e){if(this.entries.length===0){return}if(!e||this.entries.length===1){e=this.entries[0].name}const t=await this.blob();if(!t){return}return this.download(e,t)}static async single(e,t,i={}){const s=new n(i);s.add(e,t);return await s.emit()}}n.lastPackageUrl="";return{export:{DownloadVideoPackage:n}}}})(); |