From 2d557c6f2875765b30a8056b2057e43f24a33773 Mon Sep 17 00:00:00 2001 From: Essem Date: Tue, 28 Nov 2023 23:33:17 -0600 Subject: [PATCH 1/2] Allow posting media alongside polls --- app/javascript/flavours/glitch/actions/compose.js | 6 ------ .../features/compose/containers/poll_button_container.js | 3 +-- .../features/compose/containers/upload_button_container.js | 3 +-- app/services/post_status_service.rb | 2 +- app/services/update_status_service.rb | 2 +- 5 files changed, 4 insertions(+), 12 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/compose.js b/app/javascript/flavours/glitch/actions/compose.js index 0e2b2f110cf977..06350ca7d0e83a 100644 --- a/app/javascript/flavours/glitch/actions/compose.js +++ b/app/javascript/flavours/glitch/actions/compose.js @@ -88,7 +88,6 @@ export const COMPOSE_FOCUS = 'COMPOSE_FOCUS'; const messages = defineMessages({ uploadErrorLimit: { id: 'upload_error.limit', defaultMessage: 'File upload limit exceeded.' }, - uploadErrorPoll: { id: 'upload_error.poll', defaultMessage: 'File upload not allowed with polls.' }, uploadQuote: { id: 'upload_error.quote', defaultMessage: 'File upload not allowed with quotes.' }, open: { id: 'compose.published.open', defaultMessage: 'Open' }, published: { id: 'compose.published.body', defaultMessage: 'Post published.' }, @@ -375,11 +374,6 @@ export function uploadCompose(files) { return; } - if (getState().getIn(['compose', 'poll'])) { - dispatch(showAlert({ message: messages.uploadErrorPoll })); - return; - } - dispatch(uploadComposeRequest()); for (const [i, file] of Array.from(files).entries()) { diff --git a/app/javascript/flavours/glitch/features/compose/containers/poll_button_container.js b/app/javascript/flavours/glitch/features/compose/containers/poll_button_container.js index e8fa9798c569d1..3fb39c21007c5d 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/poll_button_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/poll_button_container.js @@ -4,8 +4,7 @@ import { addPoll, removePoll } from '../../../actions/compose'; import PollButton from '../components/poll_button'; const mapStateToProps = state => { - const readyAttachmentsSize = state.compose.get('media_attachments').size ?? 0; - const hasAttachments = readyAttachmentsSize > 0 || !!state.compose.get('is_uploading'); + const hasAttachments = !!state.compose.get('is_uploading'); const hasQuote = !!state.compose.get('quoted_status_id'); return ({ diff --git a/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js b/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js index 8ce36fd19c6f86..20c48b69f79011 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js @@ -5,7 +5,6 @@ import { openModal } from '../../../actions/modal'; import UploadButton from '../components/upload_button'; const mapStateToProps = state => { - const isPoll = state.getIn(['compose', 'poll']) !== null; const isUploading = state.getIn(['compose', 'is_uploading']); const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0; const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0; @@ -15,7 +14,7 @@ const mapStateToProps = state => { const hasQuote = !!state.compose.get('quoted_status_id'); return { - disabled: isPoll || isUploading || isOverLimit || hasVideoOrAudio || hasQuote, + disabled: isUploading || isOverLimit || hasVideoOrAudio || hasQuote, resetFileKey: state.getIn(['compose', 'resetFileKey']), }; }; diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index 12bb8a083da5a4..a23babfeb6c28d 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -181,7 +181,7 @@ def validate_media! return end - raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > Status::MEDIA_ATTACHMENTS_LIMIT || @options[:poll].present? + raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > Status::MEDIA_ATTACHMENTS_LIMIT @media = @account.media_attachments.where(status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i)) diff --git a/app/services/update_status_service.rb b/app/services/update_status_service.rb index 1ebabf5fbe71eb..b39ab5bf0954e0 100644 --- a/app/services/update_status_service.rb +++ b/app/services/update_status_service.rb @@ -70,7 +70,7 @@ def update_media_attachments! def validate_media! return [] if @options[:media_ids].blank? || !@options[:media_ids].is_a?(Enumerable) - raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > Status::MEDIA_ATTACHMENTS_LIMIT || @options[:poll].present? + raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if @options[:media_ids].size > Status::MEDIA_ATTACHMENTS_LIMIT media_attachments = @status.account.media_attachments.where(status_id: [nil, @status.id]).where(scheduled_status_id: nil).where(id: @options[:media_ids].take(Status::MEDIA_ATTACHMENTS_LIMIT).map(&:to_i)).to_a From 2f295889238cfc39dacc22652887c5be19d17839 Mon Sep 17 00:00:00 2001 From: Essem Date: Sat, 6 Jan 2024 23:28:58 -0600 Subject: [PATCH 2/2] Expose poll media support in instance api endpoint --- app/serializers/rest/instance_serializer.rb | 1 + app/serializers/rest/v1/instance_serializer.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 796c6c0574327e..992e535b78614d 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -91,6 +91,7 @@ def configuration }, polls: { + allow_media: true, max_options: PollOptionsValidator::MAX_OPTIONS, max_characters_per_option: PollOptionsValidator::MAX_OPTION_CHARS, min_expiration: PollExpirationValidator::MIN_EXPIRATION, diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 420f1926cfa275..a797b68cf1a2f0 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -84,6 +84,7 @@ def configuration }, polls: { + allow_media: true, max_options: PollOptionsValidator::MAX_OPTIONS, max_characters_per_option: PollOptionsValidator::MAX_OPTION_CHARS, min_expiration: PollExpirationValidator::MIN_EXPIRATION,