diff --git a/packages/app/package.json b/packages/app/package.json
index 59a8817d..f44fc609 100755
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -66,6 +66,7 @@
"localforage": "^1.10.0",
"luxon": "^3.0.4",
"match-sorter": "^6.3.1",
+ "mime": "^3.0.0",
"moment": "2.29.4",
"moment-timezone": "^0.5.37",
"mpegts.js": "^1.6.10",
diff --git a/packages/app/src/components/PostCard/components/attachments/index.jsx b/packages/app/src/components/PostCard/components/attachments/index.jsx
index 3faa708e..e119ac0f 100755
--- a/packages/app/src/components/PostCard/components/attachments/index.jsx
+++ b/packages/app/src/components/PostCard/components/attachments/index.jsx
@@ -3,121 +3,112 @@ import { Skeleton } from "antd"
import { Carousel } from "react-responsive-carousel"
import { ImageViewer } from "components"
import Plyr from "plyr-react"
+import mimetypes from "mime"
import ContentFailed from "../contentFailed"
-const mediaTypes = {
- "jpg": "image",
- "jpeg": "image",
- "png": "image",
- "gif": "image",
- "mp4": "video",
- "webm": "video",
- "ogv": "video",
- "mov": "video",
- "avi": "video",
- "mkv": "video",
- "ogg": "audio",
- "mp3": "audio",
- "wav": "audio",
- "flac": "audio",
- "aac": "audio",
- "m4a": "audio",
-}
-
import "react-responsive-carousel/lib/styles/carousel.min.css"
import "plyr-react/dist/plyr.css"
import "./index.less"
const Attachment = React.memo((props) => {
- const { url, id } = props.attachment
-
const [loaded, setLoaded] = React.useState(false)
- const [mediaType, setMediaType] = React.useState(null)
const [mimeType, setMimeType] = React.useState(null)
- const onDoubleClickAttachment = (e) => {
- if (mediaType.split("/")[0] === "image") {
- e.preventDefault()
- e.stopPropagation()
-
- app.controls.openFullImageViewer(url)
- }
- }
-
- const getMediaType = async () => {
- let extension = null
-
- // get media type by parsing the url
- const mediaTypeExt = /\.([a-zA-Z0-9]+)$/.exec(url)
-
- if (mediaTypeExt) {
- extension = mediaTypeExt[1]
- } else {
- // try to get media by creating requesting the url
- const response = await fetch(url, {
- method: "HEAD",
- })
-
- extension = response.headers.get("content-type").split("/")[1]
- }
-
- extension = extension.toLowerCase()
-
- const mediaType = mediaTypes[extension]
- const mimeType = `${mediaType}/${extension}`
-
- setMediaType(mediaType)
- setMimeType(mimeType)
-
- setLoaded(true)
- }
-
- const renderMedia = () => {
- switch (mediaType.split("/")[0]) {
- case "image": {
- return