diff --git a/app/controllers/admin/custom_emojis_controller.rb b/app/controllers/admin/custom_emojis_controller.rb index 37032e6ba4..00d069cdfb 100644 --- a/app/controllers/admin/custom_emojis_controller.rb +++ b/app/controllers/admin/custom_emojis_controller.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'fastimage' - module Admin class CustomEmojisController < BaseController def index @@ -20,11 +18,7 @@ module Admin def create authorize :custom_emoji, :create? - image_size = FastImage.size(params[:custom_emoji][:image]) - @custom_emoji = CustomEmoji.new(resource_params) - @custom_emoji.image_width = image_size[0] - @custom_emoji.image_height = image_size[1] if @custom_emoji.save log_action :create, @custom_emoji diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index 653b1da031..1a6be65eef 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -141,6 +141,8 @@ class StatusActionBar extends ImmutablePureComponent { } }; + handleEmojiPickInnerButton = () => {}; + handleReblogClick = e => { const { signedIn } = this.context.identity; @@ -371,7 +373,7 @@ class StatusActionBar extends ImmutablePureComponent { ); const emojiPickerButton = ( - + ); return ( diff --git a/app/javascript/mastodon/features/status/components/action_bar.jsx b/app/javascript/mastodon/features/status/components/action_bar.jsx index e0f4cee26f..7ae8dc97a3 100644 --- a/app/javascript/mastodon/features/status/components/action_bar.jsx +++ b/app/javascript/mastodon/features/status/components/action_bar.jsx @@ -186,6 +186,8 @@ class ActionBar extends React.PureComponent { this.props.onEmojiReact(this.props.status, data); }; + handleEmojiPickInnerButton = () => {}; + render () { const { status, relationship, intl } = this.props; const { signedIn, permissions } = this.context.identity; @@ -268,7 +270,7 @@ class ActionBar extends React.PureComponent { ); const emojiPickerButton = ( - + ); let replyIcon; diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index f4b872d7c5..ff93d01654 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -56,6 +56,8 @@ class CustomEmoji < ApplicationRecord after_commit :remove_entity_cache + after_post_process :set_size + def local? domain.nil? end @@ -99,4 +101,15 @@ class CustomEmoji < ApplicationRecord def downcase_domain self.domain = domain.downcase unless domain.nil? end + + def set_size + image.queued_for_write.each do |style, file| + if style == :original + image_size = FastImage.size(file.path) + self.image_width = image_size[0] + self.image_height = image_size[1] + return + end + end + end end diff --git a/app/services/concerns/account_limitable.rb b/app/services/concerns/account_limitable.rb index 9788eda91e..7e14997f6b 100644 --- a/app/services/concerns/account_limitable.rb +++ b/app/services/concerns/account_limitable.rb @@ -24,7 +24,7 @@ module AccountLimitable end def scope_status_mentioned(status) - status.active_mentions.where.joins(:account).merge(Account.local).select('account_id AS id').reorder(nil) + status.active_mentions.joins(:account).merge(Account.local).select('account_id AS id').reorder(nil) end # TODO: not work diff --git a/app/services/update_status_expiration_service.rb b/app/services/update_status_expiration_service.rb index 02ea106dbf..4f60a12fbb 100644 --- a/app/services/update_status_expiration_service.rb +++ b/app/services/update_status_expiration_service.rb @@ -13,8 +13,13 @@ class UpdateStatusExpirationService < BaseService expiration_num = expiration[1].to_f expiration_option = expiration[2] base_time = status.created_at || Time.now.utc + due = expiration_option == 'd' ? expiration_num.days : + expiration_option == 'h' ? expiration_num.hours : + expiration_option == 's' ? expiration_num.seconds : expiration_num.minutes - expired_at = base_time + (expiration_option == 'd' ? expiration_num.days : expiration_option == 'h' ? expiration_num.hours : expiration_option == 's' ? expiration_num.seconds : expiration_num.minutes) - ScheduledExpirationStatus.create!(account: status.account, status: status, scheduled_at: expired_at) + expired_at = base_time + due + expired_status = ScheduledExpirationStatus.create!(account: status.account, status: status, scheduled_at: expired_at) + + RemoveExpiredStatusWorker.perform_at(expired_at, expired_status.id) if due < PostStatusService::MIN_SCHEDULE_OFFSET end end diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb index fdcb0c450b..f538ca95b6 100644 --- a/lib/sanitize_ext/sanitize_config.rb +++ b/lib/sanitize_ext/sanitize_config.rb @@ -54,11 +54,14 @@ class Sanitize return unless env[:node_name] == 'a' current_node = env[:node] - href = current_node['href'] + href = current_node['href'] || '' text = current_node.text cls = current_node['class'] || '' - scheme = if current_node['href'] =~ Sanitize::REGEX_PROTOCOL + dot_pos = text.index('.') + return unless dot_pos.present? && dot_pos > 0 && dot_pos < text.size - 1 + + scheme = if href =~ Sanitize::REGEX_PROTOCOL Regexp.last_match(1).downcase else :relative