2021-09-13 20:41:05 +00:00
|
|
|
import React, { useContext } from 'react';
|
|
|
|
import { dequal } from 'dequal';
|
|
|
|
|
2022-04-01 21:52:38 +00:00
|
|
|
import { IMessageAttachments } from './interfaces';
|
2021-09-13 20:41:05 +00:00
|
|
|
import Image from './Image';
|
|
|
|
import Audio from './Audio';
|
|
|
|
import Video from './Video';
|
|
|
|
import Reply from './Reply';
|
|
|
|
import Button from '../Button';
|
|
|
|
import MessageContext from './Context';
|
2023-05-10 21:39:56 +00:00
|
|
|
import { IAttachment, TGetCustomEmoji } from '../../definitions';
|
2022-03-18 10:01:30 +00:00
|
|
|
import CollapsibleQuote from './Components/CollapsibleQuote';
|
2022-06-06 14:17:51 +00:00
|
|
|
import openLink from '../../lib/methods/helpers/openLink';
|
2023-05-10 21:39:56 +00:00
|
|
|
import Markdown from '../markdown';
|
2023-08-14 20:22:46 +00:00
|
|
|
import { getMessageFromAttachment } from './utils';
|
2022-03-30 21:55:57 +00:00
|
|
|
|
|
|
|
export type TElement = {
|
|
|
|
type: string;
|
|
|
|
msg?: string;
|
|
|
|
url?: string;
|
|
|
|
text: string;
|
|
|
|
};
|
2021-09-13 20:41:05 +00:00
|
|
|
|
2023-05-10 21:39:56 +00:00
|
|
|
const AttachedActions = ({ attachment, getCustomEmoji }: { attachment: IAttachment; getCustomEmoji: TGetCustomEmoji }) => {
|
2022-04-11 18:01:43 +00:00
|
|
|
const { onAnswerButtonPress } = useContext(MessageContext);
|
|
|
|
|
2022-03-21 20:44:06 +00:00
|
|
|
if (!attachment.actions) {
|
|
|
|
return null;
|
|
|
|
}
|
2021-09-13 20:41:05 +00:00
|
|
|
|
2022-03-30 21:55:57 +00:00
|
|
|
const attachedButtons = attachment.actions.map((element: TElement) => {
|
|
|
|
const onPress = () => {
|
|
|
|
if (element.msg) {
|
|
|
|
onAnswerButtonPress(element.msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (element.url) {
|
|
|
|
openLink(element.url);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2021-09-13 20:41:05 +00:00
|
|
|
if (element.type === 'button') {
|
2022-05-20 16:37:57 +00:00
|
|
|
return <Button onPress={onPress} title={element.text} />;
|
2021-09-13 20:41:05 +00:00
|
|
|
}
|
2022-03-30 21:55:57 +00:00
|
|
|
|
2021-09-13 20:41:05 +00:00
|
|
|
return null;
|
|
|
|
});
|
|
|
|
return (
|
|
|
|
<>
|
2023-05-10 21:39:56 +00:00
|
|
|
<Markdown msg={attachment.text} getCustomEmoji={getCustomEmoji} />
|
2021-09-13 20:41:05 +00:00
|
|
|
{attachedButtons}
|
|
|
|
</>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
2022-04-01 21:52:38 +00:00
|
|
|
const Attachments: React.FC<IMessageAttachments> = React.memo(
|
feat: add media auto-download (#5076)
* feat: media auto-download view
* media auto download view completed and saving the settings in mmkv
* audio download preference
* audio auto download when the user who sent the audio is the same logged on mobile
* creation of isAutoDownloadEnabled, evaluate hist hook, Image Full Size preload done
* minor tweak audio show play button after download
* refactor audioFile to handleMediaDownload and fixed the audio download
* desestructured params to download too
* image download and autoDownload, algo fix the formatAttachmentUrl to show the image from local
* add the possibility to cancel image download and clear local images
* refactor blur component
* video download and auto download, also keeped the behavior to download unsuportted videos to the gallery
* add the possibility to start downloading a video, then exit the room, back again to room and cancel the video previously downloading
* remove the custom hook for autoDownload
* remove blurcomponent, fix the blur style in image.tsx, minor tweak video function name
* send messageId to video
* introducing the reducer to keep the downloads in progress
* create a media download selector
* remove all the redux stuff and do the same as file upload
* video download behavior
* done for image and audio
* fix the try catch download media
* clean up
* image container uiKit
* fix lint
* change rn-fetch-blob to expo-filesystem
* add pt-br
* pass the correct message id when there is an attachment on reply
* refactor some changes requested
* fix audio and move the netInfo from autoDownloadPreference to redux
* variable isAutoDownloadEnable name and handleMediaDownload getExtension
* message/Image refactored, change the component to show the image from FastImage to Image
* refactor handleMediaDownload and deleteMedia
* minor tweak
* refactor audio
* refactor video
* fix the type on the messagesView(the view of files)
* minor tweak
* fix the name of searchMediaFIleAsync's result
* minor tweak, add the default behavior, add the OFF as label
* minor tweaks
* verify if the media auto download exists on settings view
* fix media auto download view layout and minor tweak wifi
* avoid auto download from reply
* minor tweak at comment
* tweak list.section
* change the name to netInfoState and Local_document_directory
* remove mediaType and refactor audio and image
* separate blurview
* thumbnail video and video behavior
* add Audio to i18n and minor tweak
* set the blur as always dark and add the possibility to overlay
* don't need to controle the filepath in the view
* fix the loading in image and video at begin
* save the file with a similar filename as expected
* removed the necessity of messageId or id
* minor tweak
* switch useLayoutEffect to useEffect
* avoid onpress do some edge case because of cached at video
* minor tweak
* tweak at audio comment extension
* minor tweak type userpreferences
* remove test id from mediaAutoDownloadView
* change action's name to SET_NET_INFO_STATE
* caching and deleting video's thumbnails
* remove generate thumbnail
* minor tweak in image
* update camera-roll and save the file from local url
* remove local_cache_directory and deleteThumbnail
* update blur to fix error on android
* fix blur is hiding the file description
* avoid download unsupported video
* return void when it is loading the audio
2023-08-07 14:02:30 +00:00
|
|
|
({ attachments, timeFormat, showAttachment, style, getCustomEmoji, isReply, author }: IMessageAttachments) => {
|
2023-08-14 20:22:46 +00:00
|
|
|
const { translateLanguage } = useContext(MessageContext);
|
2022-04-11 18:01:43 +00:00
|
|
|
|
2021-09-13 20:41:05 +00:00
|
|
|
if (!attachments || attachments.length === 0) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2022-04-01 21:52:38 +00:00
|
|
|
const attachmentsElements = attachments.map((file: IAttachment, index: number) => {
|
2023-08-14 20:22:46 +00:00
|
|
|
const msg = getMessageFromAttachment(file, translateLanguage);
|
2022-03-21 20:44:06 +00:00
|
|
|
if (file && file.image_url) {
|
2021-09-13 20:41:05 +00:00
|
|
|
return (
|
2022-03-21 20:44:06 +00:00
|
|
|
<Image
|
|
|
|
key={file.image_url}
|
|
|
|
file={file}
|
|
|
|
showAttachment={showAttachment}
|
|
|
|
getCustomEmoji={getCustomEmoji}
|
|
|
|
style={style}
|
|
|
|
isReply={isReply}
|
feat: add media auto-download (#5076)
* feat: media auto-download view
* media auto download view completed and saving the settings in mmkv
* audio download preference
* audio auto download when the user who sent the audio is the same logged on mobile
* creation of isAutoDownloadEnabled, evaluate hist hook, Image Full Size preload done
* minor tweak audio show play button after download
* refactor audioFile to handleMediaDownload and fixed the audio download
* desestructured params to download too
* image download and autoDownload, algo fix the formatAttachmentUrl to show the image from local
* add the possibility to cancel image download and clear local images
* refactor blur component
* video download and auto download, also keeped the behavior to download unsuportted videos to the gallery
* add the possibility to start downloading a video, then exit the room, back again to room and cancel the video previously downloading
* remove the custom hook for autoDownload
* remove blurcomponent, fix the blur style in image.tsx, minor tweak video function name
* send messageId to video
* introducing the reducer to keep the downloads in progress
* create a media download selector
* remove all the redux stuff and do the same as file upload
* video download behavior
* done for image and audio
* fix the try catch download media
* clean up
* image container uiKit
* fix lint
* change rn-fetch-blob to expo-filesystem
* add pt-br
* pass the correct message id when there is an attachment on reply
* refactor some changes requested
* fix audio and move the netInfo from autoDownloadPreference to redux
* variable isAutoDownloadEnable name and handleMediaDownload getExtension
* message/Image refactored, change the component to show the image from FastImage to Image
* refactor handleMediaDownload and deleteMedia
* minor tweak
* refactor audio
* refactor video
* fix the type on the messagesView(the view of files)
* minor tweak
* fix the name of searchMediaFIleAsync's result
* minor tweak, add the default behavior, add the OFF as label
* minor tweaks
* verify if the media auto download exists on settings view
* fix media auto download view layout and minor tweak wifi
* avoid auto download from reply
* minor tweak at comment
* tweak list.section
* change the name to netInfoState and Local_document_directory
* remove mediaType and refactor audio and image
* separate blurview
* thumbnail video and video behavior
* add Audio to i18n and minor tweak
* set the blur as always dark and add the possibility to overlay
* don't need to controle the filepath in the view
* fix the loading in image and video at begin
* save the file with a similar filename as expected
* removed the necessity of messageId or id
* minor tweak
* switch useLayoutEffect to useEffect
* avoid onpress do some edge case because of cached at video
* minor tweak
* tweak at audio comment extension
* minor tweak type userpreferences
* remove test id from mediaAutoDownloadView
* change action's name to SET_NET_INFO_STATE
* caching and deleting video's thumbnails
* remove generate thumbnail
* minor tweak in image
* update camera-roll and save the file from local url
* remove local_cache_directory and deleteThumbnail
* update blur to fix error on android
* fix blur is hiding the file description
* avoid download unsupported video
* return void when it is loading the audio
2023-08-07 14:02:30 +00:00
|
|
|
author={author}
|
2023-08-14 20:22:46 +00:00
|
|
|
msg={msg}
|
2022-03-21 20:44:06 +00:00
|
|
|
/>
|
2021-09-13 20:41:05 +00:00
|
|
|
);
|
|
|
|
}
|
2022-03-21 20:44:06 +00:00
|
|
|
|
|
|
|
if (file && file.audio_url) {
|
|
|
|
return (
|
2022-09-23 20:21:11 +00:00
|
|
|
<Audio
|
|
|
|
key={file.audio_url}
|
|
|
|
file={file}
|
|
|
|
getCustomEmoji={getCustomEmoji}
|
|
|
|
isReply={isReply}
|
|
|
|
style={style}
|
feat: add media auto-download (#5076)
* feat: media auto-download view
* media auto download view completed and saving the settings in mmkv
* audio download preference
* audio auto download when the user who sent the audio is the same logged on mobile
* creation of isAutoDownloadEnabled, evaluate hist hook, Image Full Size preload done
* minor tweak audio show play button after download
* refactor audioFile to handleMediaDownload and fixed the audio download
* desestructured params to download too
* image download and autoDownload, algo fix the formatAttachmentUrl to show the image from local
* add the possibility to cancel image download and clear local images
* refactor blur component
* video download and auto download, also keeped the behavior to download unsuportted videos to the gallery
* add the possibility to start downloading a video, then exit the room, back again to room and cancel the video previously downloading
* remove the custom hook for autoDownload
* remove blurcomponent, fix the blur style in image.tsx, minor tweak video function name
* send messageId to video
* introducing the reducer to keep the downloads in progress
* create a media download selector
* remove all the redux stuff and do the same as file upload
* video download behavior
* done for image and audio
* fix the try catch download media
* clean up
* image container uiKit
* fix lint
* change rn-fetch-blob to expo-filesystem
* add pt-br
* pass the correct message id when there is an attachment on reply
* refactor some changes requested
* fix audio and move the netInfo from autoDownloadPreference to redux
* variable isAutoDownloadEnable name and handleMediaDownload getExtension
* message/Image refactored, change the component to show the image from FastImage to Image
* refactor handleMediaDownload and deleteMedia
* minor tweak
* refactor audio
* refactor video
* fix the type on the messagesView(the view of files)
* minor tweak
* fix the name of searchMediaFIleAsync's result
* minor tweak, add the default behavior, add the OFF as label
* minor tweaks
* verify if the media auto download exists on settings view
* fix media auto download view layout and minor tweak wifi
* avoid auto download from reply
* minor tweak at comment
* tweak list.section
* change the name to netInfoState and Local_document_directory
* remove mediaType and refactor audio and image
* separate blurview
* thumbnail video and video behavior
* add Audio to i18n and minor tweak
* set the blur as always dark and add the possibility to overlay
* don't need to controle the filepath in the view
* fix the loading in image and video at begin
* save the file with a similar filename as expected
* removed the necessity of messageId or id
* minor tweak
* switch useLayoutEffect to useEffect
* avoid onpress do some edge case because of cached at video
* minor tweak
* tweak at audio comment extension
* minor tweak type userpreferences
* remove test id from mediaAutoDownloadView
* change action's name to SET_NET_INFO_STATE
* caching and deleting video's thumbnails
* remove generate thumbnail
* minor tweak in image
* update camera-roll and save the file from local url
* remove local_cache_directory and deleteThumbnail
* update blur to fix error on android
* fix blur is hiding the file description
* avoid download unsupported video
* return void when it is loading the audio
2023-08-07 14:02:30 +00:00
|
|
|
author={author}
|
2023-08-14 20:22:46 +00:00
|
|
|
msg={msg}
|
2022-09-23 20:21:11 +00:00
|
|
|
/>
|
2022-03-21 20:44:06 +00:00
|
|
|
);
|
2021-09-13 20:41:05 +00:00
|
|
|
}
|
2022-03-21 20:44:06 +00:00
|
|
|
|
2021-09-13 20:41:05 +00:00
|
|
|
if (file.video_url) {
|
|
|
|
return (
|
2022-03-21 20:44:06 +00:00
|
|
|
<Video
|
|
|
|
key={file.video_url}
|
|
|
|
file={file}
|
|
|
|
showAttachment={showAttachment}
|
|
|
|
getCustomEmoji={getCustomEmoji}
|
|
|
|
style={style}
|
|
|
|
isReply={isReply}
|
2023-08-14 20:22:46 +00:00
|
|
|
msg={msg}
|
2022-03-21 20:44:06 +00:00
|
|
|
/>
|
2021-09-13 20:41:05 +00:00
|
|
|
);
|
|
|
|
}
|
2022-03-21 20:44:06 +00:00
|
|
|
|
|
|
|
if (file && file.actions && file.actions.length > 0) {
|
2023-05-10 21:39:56 +00:00
|
|
|
return <AttachedActions attachment={file} getCustomEmoji={getCustomEmoji} />;
|
2021-09-13 20:41:05 +00:00
|
|
|
}
|
2022-03-28 15:08:18 +00:00
|
|
|
if (typeof file.collapsed === 'boolean') {
|
2022-03-18 10:01:30 +00:00
|
|
|
return (
|
|
|
|
<CollapsibleQuote key={index} index={index} attachment={file} timeFormat={timeFormat} getCustomEmoji={getCustomEmoji} />
|
|
|
|
);
|
2022-03-21 20:44:06 +00:00
|
|
|
}
|
2021-09-13 20:41:05 +00:00
|
|
|
|
2023-08-14 20:22:46 +00:00
|
|
|
return (
|
2023-11-30 15:03:03 +00:00
|
|
|
<Reply
|
|
|
|
key={index}
|
|
|
|
index={index}
|
|
|
|
attachment={file}
|
|
|
|
timeFormat={timeFormat}
|
|
|
|
getCustomEmoji={getCustomEmoji}
|
|
|
|
msg={msg}
|
|
|
|
showAttachment={showAttachment}
|
|
|
|
/>
|
2023-08-14 20:22:46 +00:00
|
|
|
);
|
2021-09-13 20:41:05 +00:00
|
|
|
});
|
2022-04-01 21:52:38 +00:00
|
|
|
return <>{attachmentsElements}</>;
|
2021-09-13 20:41:05 +00:00
|
|
|
},
|
2022-03-21 20:44:06 +00:00
|
|
|
(prevProps, nextProps) => dequal(prevProps.attachments, nextProps.attachments)
|
2021-09-13 20:41:05 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
Attachments.displayName = 'MessageAttachments';
|
|
|
|
|
|
|
|
export default Attachments;
|