diff --git a/CHANGELOG.md b/CHANGELOG.md index 8045b68ac..c79c57927 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Experimental + ## [1.137.0] - Not released +### Changed +- Totally new design of post attachments, including larger previews and denser + gallery layout. +- Support for video attachments, asynchronous media processing and the V4 server + API. ### Fixed - File uploader now properly displays the upload progress. diff --git a/config/default.js b/config/default.js index e243ae097..93d7484f1 100644 --- a/config/default.js +++ b/config/default.js @@ -32,6 +32,9 @@ export default { 'gamma.freefeed.net', ], + // For links in texts + attachmentDomains: ['stable-media.freefeed.net'], + textFormatter: { tldList: TLDs, /** diff --git a/package.json b/package.json index 2cbb9601e..4c89a44d7 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "memoize-one": "~6.0.0", "mousetrap": "~1.6.5", "photoswipe": "~5.4.4", + "photoswipe-video-plugin": "~1.0.2", "porter-stemmer": "~0.9.1", "prop-types": "~15.8.1", "react": "~18.3.1", diff --git a/src/components/comment-edit-form.jsx b/src/components/comment-edit-form.jsx index d5fae4bcf..fd44d13f7 100644 --- a/src/components/comment-edit-form.jsx +++ b/src/components/comment-edit-form.jsx @@ -4,8 +4,10 @@ import cn from 'classnames'; import { faPaperclip } from '@fortawesome/free-solid-svg-icons'; import { useSelector } from 'react-redux'; +import { useEvent } from 'react-use-event-hook'; import { initialAsyncState } from '../redux/async-helpers'; import { doneEditingAndDeleteDraft, getDraft } from '../services/drafts'; +import { attachmentPreviewUrl } from '../services/api'; import { Throbber } from './throbber'; import { ButtonLink } from './button-link'; import { Icon } from './fontawesome-icons'; @@ -96,9 +98,23 @@ export function CommentEditForm({ }, [setInput, isAddingComment]); // Uploading files - const { isUploading, uploadFile, uploadProgressProps } = useUploader({ - onSuccess: useCallback((att) => input.current?.insertText(att.url), []), + const onUpload = useEvent((att) => { + const inProgress = att.meta?.inProgress; + const previewType = inProgress || att.mediaType === 'general' ? 'original' : att.mediaType; + const url = attachmentPreviewUrl(att.id, previewType, null, null, false); + fetch(url) + .then((r) => r.json()) + .then(({ url }) => { + if (inProgress) { + url = url.replace('.tmp', '.mp4'); + } + input.current?.insertText(url); + return null; + }) + .catch((e) => alert(`Upload error: ${e.message}`)); }); + + const { isUploading, uploadFile, uploadProgressProps } = useUploader({ onSuccess: onUpload }); const chooseFiles = useFileChooser(uploadFile, { multiple: true }); const disabled = !canSubmit || submitStatus.loading || isUploading; diff --git a/src/components/create-post.jsx b/src/components/create-post.jsx index 5f32279eb..e7598355f 100644 --- a/src/components/create-post.jsx +++ b/src/components/create-post.jsx @@ -20,7 +20,6 @@ import { Throbber } from './throbber'; import { useFileChooser } from './uploader/file-chooser'; import { useUploader } from './uploader/uploader'; import { UploadProgress } from './uploader/progress'; -import PostAttachments from './post/post-attachments'; import { useBool } from './hooks/bool'; import { useServerValue } from './hooks/server-info'; import { Selector } from './feeds-selector/selector'; @@ -29,6 +28,7 @@ import { CommaAndSeparated } from './separated'; import { usePrivacyCheck } from './feeds-selector/privacy-check'; import { PreventPageLeaving } from './prevent-page-leaving'; import { Autocomplete } from './autocomplete/autocomplete'; +import { Attachments } from './post/attachments/attachments'; const selectMaxFilesCount = (serverInfo) => serverInfo.attachments.maxCountPerPost; const selectMaxPostLength = (serverInfo) => serverInfo.maxTextLength.post; @@ -316,7 +316,7 @@ export default function CreatePost({ sendTo, isDirects }) { )} - + ); diff --git a/src/components/footer.jsx b/src/components/footer.jsx index 7465fe8bc..81ce98d62 100644 --- a/src/components/footer.jsx +++ b/src/components/footer.jsx @@ -7,7 +7,7 @@ export default function Footer({ short }) { return (