diff --git a/src/app/molecules/media/Media.jsx b/src/app/molecules/media/Media.jsx index 6bbdcfb..6fc3851 100644 --- a/src/app/molecules/media/Media.jsx +++ b/src/app/molecules/media/Media.jsx @@ -137,11 +137,12 @@ function File({ } File.defaultProps = { file: null, + type: '', }; File.propTypes = { name: PropTypes.string.isRequired, link: PropTypes.string.isRequired, - type: PropTypes.string.isRequired, + type: PropTypes.string, file: PropTypes.shape({}), }; @@ -176,6 +177,7 @@ Image.defaultProps = { file: null, width: null, height: null, + type: '', }; Image.propTypes = { name: PropTypes.string.isRequired, @@ -183,7 +185,7 @@ Image.propTypes = { height: PropTypes.number, link: PropTypes.string.isRequired, file: PropTypes.shape({}), - type: PropTypes.string.isRequired, + type: PropTypes.string, }; function Audio({ @@ -220,11 +222,12 @@ function Audio({ } Audio.defaultProps = { file: null, + type: '', }; Audio.propTypes = { name: PropTypes.string.isRequired, link: PropTypes.string.isRequired, - type: PropTypes.string.isRequired, + type: PropTypes.string, file: PropTypes.shape({}), }; @@ -287,6 +290,7 @@ Video.defaultProps = { height: null, file: null, thumbnail: null, + type: '', thumbnailType: null, thumbnailFile: null, }; @@ -297,7 +301,7 @@ Video.propTypes = { width: PropTypes.number, height: PropTypes.number, file: PropTypes.shape({}), - type: PropTypes.string.isRequired, + type: PropTypes.string, thumbnailFile: PropTypes.shape({}), thumbnailType: PropTypes.string, }; diff --git a/src/app/organisms/channel/ChannelViewContent.jsx b/src/app/organisms/channel/ChannelViewContent.jsx index e4eceb6..ad0586c 100644 --- a/src/app/organisms/channel/ChannelViewContent.jsx +++ b/src/app/organisms/channel/ChannelViewContent.jsx @@ -61,10 +61,15 @@ function isMedia(mE) { function genMediaContent(mE) { const mx = initMatrix.matrixClient; const mContent = mE.getContent(); - let mediaMXC = mContent.url; - let thumbnailMXC = mContent?.info?.thumbnail_url; + if (!mContent || !mContent.body) return Malformed event; + + let mediaMXC = mContent?.url; const isEncryptedFile = typeof mediaMXC === 'undefined'; - if (isEncryptedFile) mediaMXC = mContent.file.url; + if (isEncryptedFile) mediaMXC = mContent?.file?.url; + + let thumbnailMXC = mContent?.info?.thumbnail_url; + + if (typeof mediaMXC === 'undefined' || mediaMXC === '') return Malformed event; switch (mE.getContent()?.msgtype) { case 'm.file': @@ -72,19 +77,19 @@ function genMediaContent(mE) { ); case 'm.image': return ( ); case 'm.audio': @@ -92,8 +97,8 @@ function genMediaContent(mE) { ); case 'm.video': @@ -105,16 +110,16 @@ function genMediaContent(mE) { name={mContent.body} link={mx.mxcUrlToHttp(mediaMXC)} thumbnail={thumbnailMXC === null ? null : mx.mxcUrlToHttp(thumbnailMXC)} - thumbnailFile={isEncryptedFile ? mContent.info.thumbnail_file : null} - thumbnailType={mContent.info.thumbnail_info?.mimetype || null} - width={mContent.info.w || null} - height={mContent.info.h || null} + thumbnailFile={isEncryptedFile ? mContent.info?.thumbnail_file : null} + thumbnailType={mContent.info?.thumbnail_info?.mimetype || null} + width={typeof mContent.info?.w === 'number' ? mContent.info?.w : null} + height={typeof mContent.info?.h === 'number' ? mContent.info?.h : null} file={isEncryptedFile ? mContent.file : null} - type={mContent.info.mimetype} + type={mContent.info?.mimetype} /> ); default: - return 'Unable to attach media file!'; + return Malformed event; } }