Repository navigation
Expand file tree
/
Copy pathappDownloadManager-DYg2TLLU.js
More file actions
3 lines (3 loc) · 5.88 KB
/
Copy pathappDownloadManager-DYg2TLLU.js
File metadata and controls
3 lines (3 loc) · 5.88 KB
1
2
3
//# allFunctionsCalledOnLoad
import{n as e}from"./rolldown-runtime-BJUb_-bc.js";import{c as t,p as n}from"./userAgent-DC86zy_h.js";import{n as r,r as i}from"./cancellablePromise-CCgNT6Fl.js";import{t as a}from"./apiManagerProxy-BsT2jiCe.js";import{N as o,P as s,t as c}from"./objectUrlUtils-DVl-EMJc.js";import{n as l}from"./rootScope-Bvsn3YYP.js";import{n as u,r as d}from"./superMessagePort-VtmrhZy1.js";import{t as f}from"./createDownloadAnchor-kda53v4X.js";import{n as p}from"./bindManagersToAccount-JVm7nXNI.js";import{a as m,c as h,i as g,r as _,s as v,u as y}from"./mimeTypeMap-DE4Miodi.js";var b=e({AppDownloadManager:()=>C,default:()=>w}),x=64,S=33554432,C=class{constructor(){this.downloads={},this.resolved=new Map,this.resolvedBytes=0,this.progress={},this.progressAliases={}}construct(e){this.managers=e,l.addEventListener(`account_switched`,()=>{for(let e in this.downloads){let t=this.downloads[e];Object.values(t).some(e=>!e.isFulfilled&&!e.isRejected)&&(delete this.downloads[e],delete this.progress[e])}}),l.addEventListener(`download_progress`,e=>{for(let t of[e.fileName,this.progressAliases[e.fileName]]){let n=t&&this.downloads[t];n?.main?.notifyAll&&(this.progress[t]=e,n.main.notifyAll(e))}})}getNewDeferred(e,t){let n=r(),a=this.downloads[e];if(a){let e=a.main;[`cancel`,`addNotifyListener`,`notify`,`notifyAll`].forEach(t=>{e[t]&&(n[t]=e[t].bind(e))})}else{a=this.downloads[e]={main:n};let r=async()=>{let t=p(this.managers);if(await this.confirmBeforeCancelingPollUpload(e))return;let r=u(`DOWNLOAD_CANCELED`);t.apiFileManager.cancelDownload(e),n.reject(r),n.cancel=i};n.cancel=()=>{r()};let o=()=>this.downloads[e]===a;n.catch(()=>{o()&&this.clearDownload(e,t)}).finally(()=>{o()&&delete this.progress[e]})}return t===`disc`&&n.catch(i).finally(()=>{this.downloads[e]===a&&this.clearDownload(e,t)}),a[t]=n}async confirmBeforeCancelingPollUpload(e){let t=await this.managers.appPollsManager.getRandomIdByUploadingFileName(e);return!t||!this.showPollCancelConfirmation?!1:(this.showPollCancelConfirmation(t),!0)}getNewDeferredForUpload(e,t){let n=this.getNewDeferred(e),r=this.downloads[e];return t.then(n.resolve.bind(n),n.reject.bind(n)),n.catch(i).finally(()=>{this.downloads[e]===r&&this.clearDownload(e)}),n}resolvedKey(e,t){return t+`:`+e}trackResolved(e,t,n,r){if(this.downloads[e]?.[t]!==n)return;let i=this.resolvedKey(e,t),a=r instanceof Blob?r.size:0;for(this.forgetResolved(i),this.resolved.set(i,{fileName:e,type:t,size:a}),this.resolvedBytes+=a;this.resolved.size>x||this.resolvedBytes>S;){let e=this.resolved.keys().next();if(e.done||e.value===i)break;let t=this.resolved.get(e.value);this.forgetResolved(e.value),this.clearDownload(t.fileName,t.type)}}forgetResolved(e){let t=this.resolved.get(e);t&&(this.resolvedBytes-=t.size,this.resolved.delete(e))}clearDownload(e,t){let n=this.downloads[e];if(!n)return;t&&this.forgetResolved(this.resolvedKey(e,t)),delete n[t];let r=Object.keys(n).length;if(!r||n.main&&r===1){delete this.downloads[e];for(let t in n)this.forgetResolved(this.resolvedKey(e,t))}}getUpload(e){let t=this.getDownload(e);return t||(t=this.getNewDeferred(e),this.managers.appMessagesManager.getUploadPromise(e).then(t.resolve.bind(t),t.reject.bind(t)),t)}d(e,t,n){let r=this.getDownload(e,n);if(r)return r;if(r=this.getNewDeferred(e,n),t().then(r.resolve.bind(r),r.reject.bind(r)),r.then(t=>this.trackResolved(e,n,r,t),i),n===`url`){let e=r;e.then(t=>{e.resolvedObjectURL=t},i)}return r}download(e){if(e.location.file_reference)throw Error(`download document with file_reference is not supported, use downloadMedia instead`);let t=m(e);return this.d(t,()=>this.managers.apiFileManager.download(e),`blob`)}downloadMedia(e,t=`blob`,n){let{fileName:r}=g(e);if(t===`url`){let n=this.getDownload(r,t)?.resolvedObjectURL;c(n)&&a.getCacheContext(e.media,e.thumb?.type).url!==n&&this.clearDownload(r,t)}return this.d(r,()=>{let{apiFileManager:a}=p(this.managers),o;return o=t===`url`?a.downloadMediaURL:t===`void`?a.downloadMediaVoid:a.downloadMedia,n?n.then(()=>o(e),()=>{delete e.downloadId;let{fileName:t}=g(e);this.progressAliases[t]=r;let n=o(e);return n.catch(i).finally(()=>{this.progressAliases[t]===r&&delete this.progressAliases[t]}),n}):o(e)},t)}downloadMediaURL(e){return this.downloadMedia(e,`url`)}downloadMediaVoid(e){return this.downloadMedia(e,`void`)}upload(e,t,n){return t||(t=y(e)),n||(n=this.managers.apiFileManager.upload({file:e,fileName:t})),this.getNewDeferredForUpload(t,n)}getDownload(e,t){let n=this.downloads[e],r=n&&n[t];if(r){let n=this.resolvedKey(e,t),r=this.resolved.get(n);r&&(this.resolved.delete(n),this.resolved.set(n,r))}return r}downloadToDisc(e,n){let c=e.media,l=c._===`document`,u=o(c);!l&&!u&&!e.thumb&&(e.thumb=c.sizes.slice().pop());let p=!t&&!!a.serviceMessagePort,m=()=>{if(e.fileName)return e.fileName;let t=l?h(c):v(c,e.thumb),n=e.media.file_name;if(n)return n;let r=s(t.location),i=_[t.mimeType];return i&&(r+=`.`+i),r},g,y,b;if(p){let t=``+(Math.random()*2147483647|0);if(g=`d/${t}`,e.downloadId=t,y=a.pingServiceWorkerWithIframe(),!n){let{iframe:e,onSuccess:n,onError:i}=this.createDownloadIframe(g);b=e,y=y.then(()=>{let e=r(),i=t=>{clearTimeout(s),a.serviceMessagePort.removeEventListener(`downloadRequestReceived`,o),t?e.resolve():e.reject()},o=e=>{e===t&&i(!0)};a.serviceMessagePort.addEventListener(`downloadRequestReceived`,o);let s=window.setTimeout(()=>{i(!1)},1500);return n(),e},e=>{throw i(),e})}}let x=this.downloadMedia(e,`disc`,y);if(n)return x;let S,C=!1,w=()=>{C||(C=!0,S=b,d(x.listeners,w))};return x.addNotifyListener(w),x.then(e=>{if(!e)return;let t=URL.createObjectURL(e);f(t,m(),()=>{URL.revokeObjectURL(t)})}).catch(i).finally(()=>{C||w(),setTimeout(()=>{S?.remove()},1e3)}),x}createDownloadIframe(e){let t=document.createElement(`iframe`);return t.hidden=!0,{iframe:t,onSuccess:()=>{t.src=e,document.body.append(t)},onError:()=>{console.error(`falling back to normal download`)}}}},w=new C;n&&(n.appDownloadManager=w);export{b as n,w as t};
//# sourceMappingURL=appDownloadManager-DYg2TLLU.js.map