From 58294bcc3153f7076b0a1cdb314fe3348f71c6d5 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 8 Apr 2023 09:21:56 +0900 Subject: [PATCH 1/6] Fix emoji reaction too many error --- .../api/v1/statuses/emoji_reactions_controller.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/controllers/api/v1/statuses/emoji_reactions_controller.rb b/app/controllers/api/v1/statuses/emoji_reactions_controller.rb index 1b56033bc4..34bd4c8986 100644 --- a/app/controllers/api/v1/statuses/emoji_reactions_controller.rb +++ b/app/controllers/api/v1/statuses/emoji_reactions_controller.rb @@ -41,11 +41,7 @@ class Api::V1::Statuses::EmojiReactionsController < Api::BaseController def create_private(emoji) count = EmojiReaction.where(account: current_account, status: @status).count - - if count >= EmojiReaction::EMOJI_REACTION_PER_ACCOUNT_LIMIT - bad_request - return - end + raise Mastodon::ValidationError, I18n.t('reactions.errors.limit_reached') if count >= EmojiReaction::EMOJI_REACTION_PER_ACCOUNT_LIMIT EmojiReactService.new.call(current_account, @status, emoji) render json: @status, serializer: REST::StatusSerializer From bfabffcf173929675f43b400a43030af111e85e0 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 8 Apr 2023 09:22:03 +0900 Subject: [PATCH 2/6] Remove console_log --- app/javascript/mastodon/actions/emoji_reactions.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/javascript/mastodon/actions/emoji_reactions.js b/app/javascript/mastodon/actions/emoji_reactions.js index a58e53d2fe..191d8dda8d 100644 --- a/app/javascript/mastodon/actions/emoji_reactions.js +++ b/app/javascript/mastodon/actions/emoji_reactions.js @@ -18,7 +18,6 @@ export function fetchEmojiReactedStatuses() { dispatch(fetchEmojiReactedStatusesRequest()); api(getState).get('/api/v1/emoji_reactions').then(response => { - console.dir(response.data) const next = getLinks(response).refs.find(link => link.rel === 'next'); dispatch(importFetchedStatuses(response.data)); dispatch(fetchEmojiReactedStatusesSuccess(response.data, next ? next.uri : null)); From 51e8eddbb495deacf9857be35916f767dd2f163e Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 8 Apr 2023 09:34:47 +0900 Subject: [PATCH 3/6] Add searchability warning --- .../features/compose/containers/warning_container.jsx | 9 +++++++-- app/javascript/mastodon/locales/en.json | 1 + app/javascript/mastodon/locales/ja.json | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/compose/containers/warning_container.jsx b/app/javascript/mastodon/features/compose/containers/warning_container.jsx index 3c6ed483d0..1d30f361a0 100644 --- a/app/javascript/mastodon/features/compose/containers/warning_container.jsx +++ b/app/javascript/mastodon/features/compose/containers/warning_container.jsx @@ -32,11 +32,12 @@ const APPROX_HASHTAG_RE = buildHashtagRE(); const mapStateToProps = state => ({ needsLockWarning: state.getIn(['compose', 'privacy']) === 'private' && !state.getIn(['accounts', me, 'locked']), - hashtagWarning: state.getIn(['compose', 'privacy']) !== 'public' && APPROX_HASHTAG_RE.test(state.getIn(['compose', 'text'])), + hashtagWarning: ['public', 'public_unlisted'].indexOf(state.getIn(['compose', 'privacy'])) < 0 && APPROX_HASHTAG_RE.test(state.getIn(['compose', 'text'])), directMessageWarning: state.getIn(['compose', 'privacy']) === 'direct', + searchabilityWarning: state.getIn(['compose', 'searchability']) === 'direct', }); -const WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning }) => { +const WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning, searchabilityWarning }) => { if (needsLockWarning) { return }} />} />; } @@ -55,6 +56,10 @@ const WarningWrapper = ({ needsLockWarning, hashtagWarning, directMessageWarning return ; } + if (searchabilityWarning) { + return } />; + } + return null; }; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index c7fccb1ee2..da4a3e92d2 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -132,6 +132,7 @@ "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", "compose_form.lock_disclaimer.lock": "locked", "compose_form.placeholder": "What's on your mind?", + "compose_form.searchability_warning": "Self only searchability is not available other mastodon servers. Others can search your post.", "compose_form.poll.add_option": "Add a choice", "compose_form.poll.duration": "Poll duration", "compose_form.poll.option_placeholder": "Choice {number}", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index edea587f5e..71090f4620 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -132,6 +132,7 @@ "compose_form.lock_disclaimer": "あなたのアカウントは{locked}になっていません。誰でもあなたをフォローすることができ、フォロワー限定の投稿を見ることができます。", "compose_form.lock_disclaimer.lock": "承認制", "compose_form.placeholder": "今なにしてる?", + "compose_form.searchability_warning": "検索許可「自分のみ」はkmyblue内の検索でのみ有効です。他のサーバーでは「リアクションした人のみ」と同等に扱われます", "compose_form.poll.add_option": "追加", "compose_form.poll.duration": "アンケート期間", "compose_form.poll.option_placeholder": "項目 {number}", From 0b9151859de3c778008bb9fadb2938d881a41bf5 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 8 Apr 2023 09:35:23 +0900 Subject: [PATCH 4/6] Separate media_attachments property --- .../mastodon/actions/importer/normalizer.js | 12 ++++++++---- app/models/status.rb | 8 ++++++++ app/serializers/rest/status_serializer.rb | 3 ++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index 6e81d4b49a..4a69a29c9f 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -66,8 +66,12 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.filtered = status.filtered.map(normalizeFilterResult); } - if (status.emoji_reactions && normalOldStatus && normalOldStatus.get('emoji_reactions')) { - normalStatus.emoji_reactions = normalizeEmojiReactions(normalOldStatus.get('emoji_reactions').toArray()); + if (status.emoji_reactions) { + normalStatus.emoji_reactions = normalizeEmojiReactions(status.emoji_reactions); + } + + if (status.media_attachments_ex) { + normalStatus.media_attachments = status.media_attachments.concat(status.media_attachments_ex); } // Only calculate these values when status first encountered and @@ -104,8 +108,8 @@ export function normalizeEmojiReactions(emoji_reactions) { const myAccountId = me; let converted = []; for (let emoji_reaction of emoji_reactions) { - let obj = emoji_reaction.toObject(); - obj.me = obj.account_ids.toArray().some((id) => id === myAccountId); + let obj = emoji_reaction; + obj.me = obj.account_ids.some((id) => id === myAccountId); converted.push(obj); } return converted; diff --git a/app/models/status.rb b/app/models/status.rb index 06c7cd5e46..b67c0b529e 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -293,6 +293,14 @@ class Status < ApplicationRecord end end + def ordered_media_attachments_original_mastodon + ordered_media_attachments.take(4) + end + + def ordered_media_attachments_extra + ordered_media_attachments.drop(4).take(4) + end + def replies_count status_stat&.replies_count || 0 end diff --git a/app/serializers/rest/status_serializer.rb b/app/serializers/rest/status_serializer.rb index e86e07387b..bd7b279d68 100644 --- a/app/serializers/rest/status_serializer.rb +++ b/app/serializers/rest/status_serializer.rb @@ -22,7 +22,8 @@ class REST::StatusSerializer < ActiveModel::Serializer belongs_to :application, if: :show_application? belongs_to :account, serializer: REST::AccountSerializer - has_many :ordered_media_attachments, key: :media_attachments, serializer: REST::MediaAttachmentSerializer + has_many :ordered_media_attachments_original_mastodon, key: :media_attachments, serializer: REST::MediaAttachmentSerializer + has_many :ordered_media_attachments_extra, key: :media_attachments_ex, serializer: REST::MediaAttachmentSerializer has_many :ordered_mentions, key: :mentions has_many :tags has_many :emojis, serializer: REST::CustomEmojiSerializer From 82fc54d8a07f4a4a86af56210814176f83331fa5 Mon Sep 17 00:00:00 2001 From: KMY Date: Sat, 8 Apr 2023 09:35:35 +0900 Subject: [PATCH 5/6] Remove console_log --- app/javascript/mastodon/components/media_gallery.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index 85f0f669d9..cf5c60aa1b 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -358,7 +358,6 @@ class MediaGallery extends React.PureComponent { } const maxSize = displayMediaExpand ? 8 : 4; - console.log(displayMediaExpand) const size = media.take(maxSize).size; const uncached = media.every(attachment => attachment.get('type') === 'unknown'); From 55f59b4343c593b3f847419da2aee6857c06699b Mon Sep 17 00:00:00 2001 From: KMY Date: Sun, 9 Apr 2023 09:21:10 +0900 Subject: [PATCH 6/6] Fix status visibility_ex error --- app/javascript/mastodon/actions/importer/normalizer.js | 4 ++++ app/javascript/mastodon/components/status.jsx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index 4a69a29c9f..69d6bf03da 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -74,6 +74,10 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.media_attachments = status.media_attachments.concat(status.media_attachments_ex); } + if (!status.visibility_ex) { + normalStatus.visibility_ex = status.visibility; + } + // Only calculate these values when status first encountered and // when the underlying values change. Otherwise keep the ones // already in the reducer diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 7f387d29dc..d29ee0dc99 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -512,7 +512,7 @@ class Status extends ImmutablePureComponent { 'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) }, }; - const visibilityIcon = visibilityIconInfo[status.get('visibility_ex')]; + const visibilityIcon = visibilityIconInfo[status.get('visibility_ex')] || visibilityIconInfo[status.get('visibility')]; let emojiReactionsBar = null; if (!this.props.withoutEmojiReactions && status.get('emoji_reactions')) {