mirror of
https://github.com/discourse/discourse.git
synced 2025-02-16 18:24:52 -06:00
DEV: Allow plugins to request topic thumbnail sizes (#9828)
In plugin.rb, you can register new sizes like
```
register_topic_thumbnail_size [512, 512]
```
For more information about thumbnails see 03818e642a
This commit is contained in:
parent
f2574736a2
commit
725e38f9d7
@ -33,11 +33,11 @@ class Topic < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.thumbnail_sizes
|
def self.thumbnail_sizes
|
||||||
[ self.share_thumbnail_size ]
|
[ self.share_thumbnail_size ] + DiscoursePluginRegistry.topic_thumbnail_sizes
|
||||||
end
|
end
|
||||||
|
|
||||||
def thumbnail_job_redis_key(extra_sizes)
|
def thumbnail_job_redis_key(sizes)
|
||||||
"generate_topic_thumbnail_enqueue_#{id}_#{extra_sizes.inspect}"
|
"generate_topic_thumbnail_enqueue_#{id}_#{sizes.inspect}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def filtered_topic_thumbnails(extra_sizes: [])
|
def filtered_topic_thumbnails(extra_sizes: [])
|
||||||
@ -79,7 +79,7 @@ class Topic < ActiveRecord::Base
|
|||||||
if SiteSetting.create_thumbnails &&
|
if SiteSetting.create_thumbnails &&
|
||||||
enqueue_if_missing &&
|
enqueue_if_missing &&
|
||||||
records.length < thumbnail_sizes.length &&
|
records.length < thumbnail_sizes.length &&
|
||||||
Discourse.redis.set(thumbnail_job_redis_key(extra_sizes), 1, nx: true, ex: 1.minute)
|
Discourse.redis.set(thumbnail_job_redis_key(thumbnail_sizes), 1, nx: true, ex: 1.minute)
|
||||||
|
|
||||||
Jobs.enqueue(:generate_topic_thumbnails, { topic_id: id, extra_sizes: extra_sizes })
|
Jobs.enqueue(:generate_topic_thumbnails, { topic_id: id, extra_sizes: extra_sizes })
|
||||||
end
|
end
|
||||||
|
@ -75,6 +75,8 @@ class DiscoursePluginRegistry
|
|||||||
|
|
||||||
define_filtered_register :editable_group_custom_fields
|
define_filtered_register :editable_group_custom_fields
|
||||||
|
|
||||||
|
define_filtered_register :topic_thumbnail_sizes
|
||||||
|
|
||||||
def self.register_auth_provider(auth_provider)
|
def self.register_auth_provider(auth_provider)
|
||||||
self.auth_providers << auth_provider
|
self.auth_providers << auth_provider
|
||||||
end
|
end
|
||||||
|
@ -165,6 +165,16 @@ class Plugin::Instance
|
|||||||
DiscoursePluginRegistry.register_editable_group_custom_field(field, self)
|
DiscoursePluginRegistry.register_editable_group_custom_field(field, self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Request a new size for topic thumbnails
|
||||||
|
# Will respect plugin enabled setting is enabled
|
||||||
|
# Size should be an array with two elements [max_width, max_height]
|
||||||
|
def register_topic_thumbnail_size(size)
|
||||||
|
if !(size.kind_of?(Array) && size.length == 2)
|
||||||
|
raise ArgumentError.new("Topic thumbnail dimension is not valid")
|
||||||
|
end
|
||||||
|
DiscoursePluginRegistry.register_topic_thumbnail_size(size, self)
|
||||||
|
end
|
||||||
|
|
||||||
def custom_avatar_column(column)
|
def custom_avatar_column(column)
|
||||||
reloadable_patch do |plugin|
|
reloadable_patch do |plugin|
|
||||||
AvatarLookup.lookup_columns << column
|
AvatarLookup.lookup_columns << column
|
||||||
|
@ -84,5 +84,38 @@ describe "Topic Thumbnails" do
|
|||||||
expect(thumbnails.length).to eq(5)
|
expect(thumbnails.length).to eq(5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with a plugin" do
|
||||||
|
before do
|
||||||
|
plugin = Plugin::Instance.new
|
||||||
|
plugin.register_topic_thumbnail_size [512, 512]
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
DiscoursePluginRegistry.reset!
|
||||||
|
end
|
||||||
|
|
||||||
|
it "includes the theme specified resolutions" do
|
||||||
|
topic_json = nil
|
||||||
|
|
||||||
|
expect do
|
||||||
|
topic_json = get_topic
|
||||||
|
end.to change { Jobs::GenerateTopicThumbnails.jobs.size }.by(1)
|
||||||
|
|
||||||
|
# Run the job
|
||||||
|
args = Jobs::GenerateTopicThumbnails.jobs.last["args"].first
|
||||||
|
Jobs::GenerateTopicThumbnails.new.execute(args.with_indifferent_access)
|
||||||
|
|
||||||
|
# Request again
|
||||||
|
expect do
|
||||||
|
topic_json = get_topic
|
||||||
|
end.to change { Jobs::GenerateTopicThumbnails.jobs.size }.by(0)
|
||||||
|
|
||||||
|
thumbnails = topic_json["thumbnails"]
|
||||||
|
|
||||||
|
# Original + Optimized + 1 plugin request
|
||||||
|
expect(thumbnails.length).to eq(3)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user