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