This commit is contained in:
Tianwei Dong 2025-11-25 15:03:37 +00:00 committed by GitHub
commit 550554efed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 8 additions and 3 deletions

View File

@ -9,12 +9,13 @@ const mapStateToProps = state => {
const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0; const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0;
const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0; const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0;
const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize; const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize;
const allowMixMedia = state.getIn(['server', 'server', 'configuration', 'media_attachments', 'allow_mix_media'], false);
const isOverLimit = attachmentsSize > state.getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments'])-1; const isOverLimit = attachmentsSize > state.getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments'])-1;
const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type'))); const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')));
const hasQuote = !!state.compose.get('quoted_status_id'); const hasQuote = !!state.compose.get('quoted_status_id');
return { return {
disabled: isPoll || isUploading || isOverLimit || hasVideoOrAudio || hasQuote, disabled: isPoll || isUploading || isOverLimit || (!allowMixMedia && hasVideoOrAudio) || hasQuote,
resetFileKey: state.getIn(['compose', 'resetFileKey']), resetFileKey: state.getIn(['compose', 'resetFileKey']),
}; };
}; };

View File

@ -40,6 +40,8 @@ class MediaAttachment < ApplicationRecord
MAX_DESCRIPTION_LENGTH = 1_500 MAX_DESCRIPTION_LENGTH = 1_500
ALLOW_MIX_MEDIA = false
IMAGE_LIMIT = 16.megabytes IMAGE_LIMIT = 16.megabytes
VIDEO_LIMIT = 99.megabytes VIDEO_LIMIT = 99.megabytes

View File

@ -87,6 +87,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
video_frame_rate_limit: MediaAttachment::MAX_VIDEO_FRAME_RATE, video_frame_rate_limit: MediaAttachment::MAX_VIDEO_FRAME_RATE,
video_matrix_limit: MediaAttachment::MAX_VIDEO_MATRIX_LIMIT, video_matrix_limit: MediaAttachment::MAX_VIDEO_MATRIX_LIMIT,
video_size_limit: MediaAttachment::VIDEO_LIMIT, video_size_limit: MediaAttachment::VIDEO_LIMIT,
allow_mix_media: MediaAttachment::ALLOW_MIX_MEDIA,
}, },
polls: { polls: {

View File

@ -67,6 +67,7 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer
video_size_limit: MediaAttachment::VIDEO_LIMIT, video_size_limit: MediaAttachment::VIDEO_LIMIT,
video_frame_rate_limit: MediaAttachment::MAX_VIDEO_FRAME_RATE, video_frame_rate_limit: MediaAttachment::MAX_VIDEO_FRAME_RATE,
video_matrix_limit: MediaAttachment::MAX_VIDEO_MATRIX_LIMIT, video_matrix_limit: MediaAttachment::MAX_VIDEO_MATRIX_LIMIT,
allow_mix_media: MediaAttachment::ALLOW_MIX_MEDIA,
}, },
polls: { polls: {

View File

@ -172,7 +172,7 @@ class PostStatusService < BaseService
not_found_ids = @options[:media_ids].map(&:to_i) - @media.map(&:id) not_found_ids = @options[:media_ids].map(&:to_i) - @media.map(&:id)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any? raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any?
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:audio_or_video?) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if !MediaAttachment::ALLOW_MIX_MEDIA && @media.size > 1 && @media.find(&:audio_or_video?)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_ready') if @media.any?(&:not_processed?) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_ready') if @media.any?(&:not_processed?)
end end

View File

@ -76,7 +76,7 @@ class UpdateStatusService < BaseService
not_found_ids = @options[:media_ids].map(&:to_i) - media_attachments.map(&:id) not_found_ids = @options[:media_ids].map(&:to_i) - media_attachments.map(&:id)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any? raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_found', ids: not_found_ids.join(', ')) if not_found_ids.any?
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if media_attachments.size > 1 && media_attachments.find(&:audio_or_video?) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if !MediaAttachment::ALLOW_MIX_MEDIA && media_attachments.size > 1 && media_attachments.find(&:audio_or_video?)
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_ready') if media_attachments.any?(&:not_processed?) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.not_ready') if media_attachments.any?(&:not_processed?)
media_attachments media_attachments