9483.js (15191B)
1 (self.webpackChunkelement_web=self.webpackChunkelement_web||[]).push([[9483],{"./node_modules/png-chunks-extract/index.js":(e,t,n)=>{var r=n("./node_modules/png-chunks-extract/node_modules/crc-32/crc32.js");e.exports=function(e){if(137!==e[0])throw new Error("Invalid .png file header");if(80!==e[1])throw new Error("Invalid .png file header");if(78!==e[2])throw new Error("Invalid .png file header");if(71!==e[3])throw new Error("Invalid .png file header");if(13!==e[4])throw new Error("Invalid .png file header: possibly caused by DOS-Unix line ending conversion?");if(10!==e[5])throw new Error("Invalid .png file header: possibly caused by DOS-Unix line ending conversion?");if(26!==e[6])throw new Error("Invalid .png file header");if(10!==e[7])throw new Error("Invalid .png file header: possibly caused by DOS-Unix line ending conversion?");var t=!1,n=[],s=8;for(;s<e.length;){o[3]=e[s++],o[2]=e[s++],o[1]=e[s++],o[0]=e[s++];var l=a[0]+4,c=new Uint8Array(l);c[0]=e[s++],c[1]=e[s++],c[2]=e[s++],c[3]=e[s++];var d=String.fromCharCode(c[0])+String.fromCharCode(c[1])+String.fromCharCode(c[2])+String.fromCharCode(c[3]);if(!n.length&&"IHDR"!==d)throw new Error("IHDR header missing");if("IEND"===d){t=!0,n.push({name:d,data:new Uint8Array(0)});break}for(var u=4;u<l;u++)c[u]=e[s++];o[3]=e[s++],o[2]=e[s++],o[1]=e[s++],o[0]=e[s++];var f=i[0];if(r.buf(c)!==f)throw new Error("CRC values for "+d+" header do not match, PNG file is likely corrupted");var p=new Uint8Array(c.buffer.slice(4));n.push({name:d,data:p})}if(!t)throw new Error(".png file ended prematurely: no IEND header was found");return n};var o=new Uint8Array(4),i=new Int32Array(o.buffer),a=new Uint32Array(o.buffer)},"./node_modules/png-chunks-extract/node_modules/crc-32/crc32.js":(e,t)=>{var n;n=function(e){e.version="0.3.0";var t=function(){for(var e=0,t=new Array(256),n=0;256!=n;++n)e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=n)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1,t[n]=e;return"undefined"!=typeof Int32Array?new Int32Array(t):t}(),n="undefined"!=typeof Buffer;function r(e){for(var n=-1,r=0,o=e.length-7;r<o;)n=(n=(n=(n=(n=(n=(n=(n=n>>>8^t[255&(n^e[r++])])>>>8^t[255&(n^e[r++])])>>>8^t[255&(n^e[r++])])>>>8^t[255&(n^e[r++])])>>>8^t[255&(n^e[r++])])>>>8^t[255&(n^e[r++])])>>>8^t[255&(n^e[r++])])>>>8^t[255&(n^e[r++])];for(;r<o+7;)n=n>>>8^t[255&(n^e[r++])];return-1^n}e.table=t,e.bstr=function(e){if(e.length>32768&&n)return r(new Buffer(e));for(var o=-1,i=e.length-1,a=0;a<i;)o=t[255&(o^e.charCodeAt(a++))]^o>>>8,o=t[255&(o^e.charCodeAt(a++))]^o>>>8;return a===i&&(o=o>>>8^t[255&(o^e.charCodeAt(a))]),-1^o},e.buf=function(e){if(e.length>1e4)return r(e);for(var n=-1,o=0,i=e.length-3;o<i;)n=(n=(n=(n=n>>>8^t[255&(n^e[o++])])>>>8^t[255&(n^e[o++])])>>>8^t[255&(n^e[o++])])>>>8^t[255&(n^e[o++])];for(;o<i+3;)n=n>>>8^t[255&(n^e[o++])];return-1^n},e.str=function(e){for(var n,r,o=-1,i=0,a=e.length;i<a;)(n=e.charCodeAt(i++))<128?o=o>>>8^t[255&(o^n)]:n<2048?o=(o=o>>>8^t[255&(o^(192|n>>6&31))])>>>8^t[255&(o^(128|63&n))]:n>=55296&&n<57344?(n=64+(1023&n),r=1023&e.charCodeAt(i++),o=(o=(o=(o=o>>>8^t[255&(o^(240|n>>8&7))])>>>8^t[255&(o^(128|n>>2&63))])>>>8^t[255&(o^(128|r>>6&15|3&n))])>>>8^t[255&(o^(128|63&r))]):o=(o=(o=o>>>8^t[255&(o^(224|n>>12&15))])>>>8^t[255&(o^(128|n>>6&63))])>>>8^t[255&(o^(128|63&n))];return-1^o}},"undefined"==typeof DO_NOT_EXPORT_CRC?n(t):n({})},"./src/ContentMessages.ts":(e,t,n)=>{"use strict";n.d(t,{Ay:()=>W,QM:()=>H});var r=n("./node_modules/@babel/runtime/helpers/esm/defineProperty.js"),o=n("./node_modules/matrix-js-sdk/src/matrix.ts"),i=n("./node_modules/matrix-encrypt-attachment/lib/browser-encrypt-attachment.js"),a=n.n(i),s=n("./node_modules/png-chunks-extract/index.js"),l=n.n(s),c=n("./node_modules/matrix-js-sdk/src/logger.ts"),d=n("./node_modules/matrix-js-sdk/src/utils.ts"),u=n("./src/dispatcher/dispatcher.ts"),f=n("./src/languageHandler.tsx"),p=n("./src/Modal.tsx"),h=n("./src/components/views/elements/Spinner.tsx"),m=n("./src/dispatcher/actions.ts");class g{constructor(e,t,n,o=0){(0,r.A)(this,"abortController",new AbortController),(0,r.A)(this,"promise",void 0),(0,r.A)(this,"uploaded",0),this.roomId=e,this.fileName=t,this.relation=n,this.fileSize=o}onProgress(e){this.uploaded=e.loaded,this.fileSize=e.total}abort(){this.abortController.abort()}get cancelled(){return this.abortController.signal.aborted}get total(){return this.fileSize}get loaded(){return this.uploaded}}var w=n("./src/settings/SettingsStore.ts"),v=n("./src/sendTimePerformanceMetrics.ts"),y=n("./src/contexts/RoomContext.ts"),_=n("./src/utils/Reply.ts"),b=n("./src/components/views/dialogs/ErrorDialog.tsx"),C=n("./node_modules/react/index.js"),A=n("./src/components/views/dialogs/BaseDialog.tsx"),F=n("./src/components/views/elements/DialogButtons.tsx"),x=n("./src/utils/FileUtils.ts");class E extends C.Component{constructor(...e){super(...e),(0,r.A)(this,"onCancelClick",()=>{this.props.onFinished(!1)}),(0,r.A)(this,"onUploadClick",()=>{this.props.onFinished(!0)})}render(){let e,t;if(1===this.props.totalFiles&&1===this.props.badFiles.length)e=(0,f._t)("upload_file|error_file_too_large",{limit:(0,x.Ov)(this.props.contentMessages.getUploadLimit()),sizeOfThisFile:(0,x.Ov)(this.props.badFiles[0].size)},{b:e=>C.createElement("strong",null,e)}),t=C.createElement(F.A,{primaryButton:(0,f._t)("action|ok"),hasCancel:!1,onPrimaryButtonClick:this.onCancelClick,focus:!0});else if(this.props.totalFiles===this.props.badFiles.length)e=(0,f._t)("upload_file|error_files_too_large",{limit:(0,x.Ov)(this.props.contentMessages.getUploadLimit())},{b:e=>C.createElement("strong",null,e)}),t=C.createElement(F.A,{primaryButton:(0,f._t)("action|ok"),hasCancel:!1,onPrimaryButtonClick:this.onCancelClick,focus:!0});else{e=(0,f._t)("upload_file|error_some_files_too_large",{limit:(0,x.Ov)(this.props.contentMessages.getUploadLimit())},{b:e=>C.createElement("strong",null,e)});const n=this.props.totalFiles-this.props.badFiles.length;t=C.createElement(F.A,{primaryButton:(0,f._t)("upload_file|upload_n_others_button",{count:n}),onPrimaryButtonClick:this.onUploadClick,hasCancel:!0,cancelButton:(0,f._t)("upload_file|cancel_all_button"),onCancel:this.onCancelClick,focus:!0})}return C.createElement(A.A,{className:"mx_UploadFailureDialog",onFinished:this.onCancelClick,title:(0,f._t)("upload_file|error_title"),contentId:"mx_Dialog_content"},C.createElement("div",{id:"mx_Dialog_content"},e,undefined),t)}}var M=n("./src/components/views/dialogs/UploadConfirmDialog.tsx"),O=n("./src/utils/image-media.ts"),P=n("./src/utils/messages.ts"),k=n("./src/utils/local-room.ts"),U=n("./src/utils/Image.ts");function j(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function D(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?j(Object(n),!0).forEach(function(t){(0,r.A)(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):j(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}const T=[0,0,22,37,0,0,22,37,1];class I extends Error{}class S extends Error{constructor(e){super(),this.cause=e}}const R=["image/avif","image/webp","image/svg+xml"];async function z(e,t,n){let r="image/png";"image/jpeg"===n.type&&(r="image/jpeg");const o=(0,U.t)(n),i=await async function(e){const t=new Image,n=URL.createObjectURL(e),r=new Promise((e,r)=>{t.onload=function(){URL.revokeObjectURL(n),e(t)},t.onerror=function(e){r(e)}});t.src=n;let o=Promise.resolve(!1);"image/png"===e.type&&(o=N(e).then(e=>{const t=new Uint8Array(e),n=l()(t);for(const e of n)if("pHYs"===e.name)return e.data.byteLength===T.length&&e.data.every((e,t)=>e===T[t]);return!1}).catch(e=>(console.error("Failed to parse PNG",e),!1)));const[i]=await Promise.all([o,r]);return{width:i?t.width>>1:t.width,height:i?t.height>>1:t.height,img:t}}(n),a=await(0,O.p)(i.img,i.width,i.height,r),s=a.info;if(void 0!==await o&&(s["org.matrix.msc4230.is_animated"]=await o),!R.includes(n.type)){const e=n.size-s.thumbnail_info.size;if(n.size<=32768||e<=65536&&e<=.1*n.size)return delete s.thumbnail_info,s}const c=await H(e,t,a.thumbnail);return s.thumbnail_url=c.url,s.thumbnail_file=c.file,s}async function L(e){const t=await function(e){return new Promise((t,n)=>{const r=document.createElement("audio");r.preload="metadata",r.muted=!0;const o=new FileReader;o.onload=function(e){var o;r.onloadedmetadata=async function(){t(r)},r.onerror=function(e){n(e)},r.src=null===(o=e.target)||void 0===o?void 0:o.result},o.onerror=function(e){n(e)},o.readAsDataURL(e)})}(e);return{duration:Math.ceil(1e3*t.duration)}}function B(e,t,n){const r={};return function(e){return new Promise((t,n)=>{const r=document.createElement("video");r.preload="metadata",r.playsInline=!0,r.muted=!0;const o=new FileReader;o.onload=function(e){var o,i;r.onloadeddata=async function(){t(r),r.pause()},r.onerror=function(e){n(e)};let a=null===(o=e.target)||void 0===o?void 0:o.result;null!==(i=a)&&void 0!==i&&i.startsWith("data:video/quicktime;")&&(a=a.replace("data:video/quicktime;","data:video/mp4;")),r.src=a,r.load(),r.play()},o.onerror=function(e){n(e)},o.readAsDataURL(e)})}(n).then(e=>(r.duration=Math.ceil(1e3*e.duration),(0,O.p)(e,e.videoWidth,e.videoHeight,"image/jpeg"))).then(n=>(Object.assign(r,n.info),H(e,t,n.thumbnail))).then(e=>(r.thumbnail_url=e.url,r.thumbnail_file=e.file,r))}function N(e){return new Promise((t,n)=>{const r=new FileReader;r.onload=function(e){var n;t(null===(n=e.target)||void 0===n?void 0:n.result)},r.onerror=function(e){n(e)},r.readAsArrayBuffer(e)})}async function H(e,t,n,r,o){var i;const s=null!=o?o:new AbortController;if(await(null===(i=e.getCrypto())||void 0===i?void 0:i.isEncryptionEnabledInRoom(t))){const t=await N(n);if(s.signal.aborted)throw new I;const o=await a().encryptAttachment(t);if(s.signal.aborted)throw new I;const i=new Blob([o.data]);let l;try{({content_uri:l}=await e.uploadContent(i,{progressHandler:r,abortController:s,includeFilename:!1,type:"application/octet-stream"}))}catch(e){if(s.signal.aborted)throw new I;throw console.error("Failed to upload file",e),new S(e)}if(s.signal.aborted)throw new I;return{file:D(D({},o.info),{},{url:l})}}{let t;try{({content_uri:t}=await e.uploadContent(n,{progressHandler:r,abortController:s}))}catch(e){if(s.signal.aborted)throw new I;throw console.error("Failed to upload file",e),new S(e)}if(s.signal.aborted)throw new I;return{url:t}}}class W{constructor(){(0,r.A)(this,"inprogress",[]),(0,r.A)(this,"mediaConfig",null)}sendStickerContentToRoom(e,t,n,r,o,i){return(0,k.Y)(t,t=>i.sendStickerMessage(t,n,e,r,o),i).catch(n=>{throw c.vF.warn(`Failed to send content with URL ${e} to room ${t}`,n),n})}getUploadLimit(){var e,t;return null!==(e=null===(t=this.mediaConfig)||void 0===t?void 0:t["m.upload.size"])&&void 0!==e?e:null}async sendContentListToRoom(e,t,n,r,o,i=y.Ae.Room){if(o.isGuest())return void u.A.dispatch({action:"require_registration"});if(!this.mediaConfig){const e=p.Ay.createDialog(h.A,void 0,"mx_Dialog_spinner");if(await Promise.race([this.ensureMediaConfigFetched(o),e.finished]),!this.mediaConfig)return;e.close()}const a=[],s=[];for(const t of e)this.isFileSizeAcceptable(t)?s.push(t):a.push(t);if(a.length>0){const{finished:t}=p.Ay.createDialog(E,{badFiles:a,totalFiles:e.length,contentMessages:this}),[n]=await t;if(!n)return}let l=!1,c=Promise.resolve();for(let e=0;e<s.length;++e){const i=s[e],a=c;if(!l){const{finished:t}=p.Ay.createDialog(M.A,{file:i,currentIndex:e,totalFiles:s.length}),[n,r]=await t;if(!n)break;r&&(l=!0)}c=(0,k.Y)(t,e=>this.sendContentToRoom(i,e,n,o,null!=r?r:void 0,a),o)}r&&u.A.dispatch({action:"reply_to_event",event:null,context:i}),u.A.dispatch({action:m.r.FocusSendMessageComposer,context:i})}getCurrentUploads(e){return this.inprogress.filter(t=>{const n=!e&&!t.relation,r=e&&t.relation&&e.rel_type===t.relation.rel_type&&e.event_id===t.relation.event_id;return(n||r)&&!t.cancelled})}cancelUpload(e){e.abort(),u.A.dispatch({action:m.r.UploadCanceled,upload:e})}async sendContentToRoom(e,t,n,r,i,a){const s=e.name||(0,f._t)("common|attachment"),l={body:s,info:{size:e.size},msgtype:o.MsgType.File};(0,P.L)(r.getSafeUserId(),l,null,i),(0,P.g)(l,n),i&&(0,_.fh)(l,i),w.A.getValue("Performance.addSendMessageTimingMetadata")&&(0,v.H)(l),e.type&&(l.info.mimetype=e.type);const h=new g(t,s,n,e.size);this.inprogress.push(h),u.A.dispatch({action:m.r.UploadStarted,upload:h});try{if(e.type.startsWith("image/")){l.msgtype=o.MsgType.Image;try{const n=await z(r,t,e);Object.assign(l.info,n)}catch(e){if(e instanceof S)throw e;c.vF.error(e),l.msgtype=o.MsgType.File}}else if(e.type.startsWith("audio/")){l.msgtype=o.MsgType.Audio;try{const t=await L(e);Object.assign(l.info,t)}catch(e){c.vF.error(e),l.msgtype=o.MsgType.File}}else if(e.type.startsWith("video/")){l.msgtype=o.MsgType.Video;try{const n=await B(r,t,e);Object.assign(l.info,n)}catch(e){c.vF.error(e),l.msgtype=o.MsgType.File}}else l.msgtype=o.MsgType.File;if(h.cancelled)throw new I;const i=await H(r,t,e,function(e){h.onProgress(e),u.A.dispatch({action:m.r.UploadProgress,upload:h})},h.abortController);if(l.file=i.file,l.url=i.url,h.cancelled)throw new I;if(a&&await a,h.cancelled)throw new I;const s=(null==n?void 0:n.rel_type)===o.THREAD_RELATION_TYPE.name?n.event_id:null,d=await r.sendMessage(t,null!=s?s:null,l);w.A.getValue("Performance.addSendMessageTimingMetadata")&&(0,v._)(r,t,d.event_id),u.A.dispatch({action:m.r.UploadFinished,upload:h}),u.A.dispatch({action:"message_sent"})}catch(e){const t=e instanceof S&&e.cause?e.cause:e;if(t instanceof o.HTTPError&&413===t.httpStatus&&(this.mediaConfig=null),!h.cancelled){let n=(0,f._t)("upload_failed_generic",{fileName:h.fileName});t instanceof o.HTTPError&&413===t.httpStatus&&(n=(0,f._t)("upload_failed_size",{fileName:h.fileName})),p.Ay.createDialog(b.A,{title:(0,f._t)("upload_failed_title"),description:n}),u.A.dispatch({action:m.r.UploadFailed,upload:h,error:e})}}finally{(0,d.Nz)(this.inprogress,e=>e.promise===h.promise)}}isFileSizeAcceptable(e){var t;return!(void 0!==(null===(t=this.mediaConfig)||void 0===t?void 0:t["m.upload.size"])&&e.size>this.mediaConfig["m.upload.size"])}ensureMediaConfigFetched(e){return null!==this.mediaConfig?Promise.resolve():(c.vF.log("[Media Config] Fetching"),e.getMediaConfig().then(e=>(c.vF.log("[Media Config] Fetched config:",e),e)).catch(()=>(c.vF.log("[Media Config] Could not fetch config, so not limiting uploads."),{})).then(e=>{this.mediaConfig=e}))}static sharedInstance(){return void 0===window.mxContentMessages&&(window.mxContentMessages=new W),window.mxContentMessages}}},"./src/sendTimePerformanceMetrics.ts":(e,t,n)=>{"use strict";function r(e){e["io.element.performance_metrics"]={sendStartTs:Date.now()}}function o(e,t,n){e.sendEvent(t,"io.element.performance_metric",{"io.element.performance_metrics":{forEventId:n,responseTs:Date.now(),kind:"send_time"}})}n.d(t,{H:()=>r,_:()=>o})}}]); 2 //# sourceMappingURL=9483.js.map