Updated PreviewCard, FetchLinkCardService, FetchOEmbedService
• Updated: - PreviewCard, FetchLinkCardService, FetchOEmbedService to work better
This commit is contained in:
parent
8f4be991a0
commit
7aa7b66374
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
class PreviewCard < ApplicationRecord
|
class PreviewCard < ApplicationRecord
|
||||||
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
|
IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze
|
||||||
LIMIT = 1.megabytes
|
LIMIT = 4.megabytes
|
||||||
|
|
||||||
self.inheritance_column = false
|
self.inheritance_column = false
|
||||||
|
|
||||||
@ -45,6 +45,10 @@ class PreviewCard < ApplicationRecord
|
|||||||
|
|
||||||
before_save :extract_dimensions, if: :link?
|
before_save :extract_dimensions, if: :link?
|
||||||
|
|
||||||
|
def missing_image?
|
||||||
|
width.present? && height.present? && image_file_name.blank?
|
||||||
|
end
|
||||||
|
|
||||||
def save_with_optional_image!
|
def save_with_optional_image!
|
||||||
save!
|
save!
|
||||||
rescue ActiveRecord::RecordInvalid
|
rescue ActiveRecord::RecordInvalid
|
||||||
|
@ -30,7 +30,7 @@ class FetchLinkCardService < BaseService
|
|||||||
RedisLock.acquire(lock_options) do |lock|
|
RedisLock.acquire(lock_options) do |lock|
|
||||||
if lock.acquired?
|
if lock.acquired?
|
||||||
@card = PreviewCard.find_by(url: @url)
|
@card = PreviewCard.find_by(url: @url)
|
||||||
process_url if @card.nil? || @card.updated_at <= 2.weeks.ago
|
process_url if @card.nil? || @card.updated_at <= 1.weeks.ago || @card.missing_image?
|
||||||
else
|
else
|
||||||
raise GabSocial::RaceConditionError
|
raise GabSocial::RaceConditionError
|
||||||
end
|
end
|
||||||
@ -47,7 +47,7 @@ class FetchLinkCardService < BaseService
|
|||||||
def process_url
|
def process_url
|
||||||
@card ||= PreviewCard.new(url: @url)
|
@card ||= PreviewCard.new(url: @url)
|
||||||
|
|
||||||
Request.new(:get, @url).perform do |res|
|
Request.new(:get, @url).add_headers('Accept' => 'text/html').perform do |res|
|
||||||
if res.code == 200 && res.mime_type == 'text/html'
|
if res.code == 200 && res.mime_type == 'text/html'
|
||||||
@html = res.body_with_limit
|
@html = res.body_with_limit
|
||||||
@html_charset = res.charset
|
@html_charset = res.charset
|
||||||
|
@ -64,7 +64,7 @@ class FetchOEmbedService
|
|||||||
def html
|
def html
|
||||||
return @html if defined?(@html)
|
return @html if defined?(@html)
|
||||||
|
|
||||||
@html = @options[:html] || Request.new(:get, @url).perform do |res|
|
@html = @options[:html] || Request.new(:get, @url).add_headers('Accept' => 'text/html').perform do |res|
|
||||||
res.code != 200 || res.mime_type != 'text/html' ? nil : res.body_with_limit
|
res.code != 200 || res.mime_type != 'text/html' ? nil : res.body_with_limit
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user