Add embed_url to preview cards (#5775)
This commit is contained in:
		
				
					committed by
					
						 Eugen Rochko
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						parent
						
							432761f375
						
					
				
				
					commit
					c083816c24
				
			| @@ -101,7 +101,7 @@ export default class Card extends React.PureComponent { | ||||
|         onClick={this.handlePhotoClick} | ||||
|         role='button' | ||||
|         tabIndex='0' | ||||
|         src={card.get('url')} | ||||
|         src={card.get('embed_url')} | ||||
|         alt={card.get('title')} | ||||
|         width={card.get('width')} | ||||
|         height={card.get('height')} | ||||
|   | ||||
| @@ -21,6 +21,7 @@ | ||||
| #  height             :integer          default(0), not null | ||||
| #  created_at         :datetime         not null | ||||
| #  updated_at         :datetime         not null | ||||
| #  embed_url          :string           default(""), not null | ||||
| # | ||||
|  | ||||
| class PreviewCard < ApplicationRecord | ||||
|   | ||||
| @@ -6,7 +6,7 @@ class REST::PreviewCardSerializer < ActiveModel::Serializer | ||||
|   attributes :url, :title, :description, :type, | ||||
|              :author_name, :author_url, :provider_name, | ||||
|              :provider_url, :html, :width, :height, | ||||
|              :image | ||||
|              :image, :embed_url | ||||
|  | ||||
|   def image | ||||
|     object.image? ? full_asset_url(object.image.url(:original)) : nil | ||||
|   | ||||
| @@ -74,9 +74,6 @@ class FetchLinkCardService < BaseService | ||||
|  | ||||
|     return false unless response.respond_to?(:type) | ||||
|  | ||||
|     # The photo will change the URL. So, to avoid duplication of URLs, PreviewCard needs to be checked again. | ||||
|     @card = PreviewCard.find_by(url: response.url) || @card if response.type == 'photo' | ||||
|  | ||||
|     @card.type          = response.type | ||||
|     @card.title         = response.respond_to?(:title)         ? response.title         : '' | ||||
|     @card.author_name   = response.respond_to?(:author_name)   ? response.author_name   : '' | ||||
| @@ -90,9 +87,9 @@ class FetchLinkCardService < BaseService | ||||
|     when 'link' | ||||
|       @card.image = URI.parse(response.thumbnail_url) if response.respond_to?(:thumbnail_url) | ||||
|     when 'photo' | ||||
|       @card.url    = response.url | ||||
|       @card.width  = response.width.presence  || 0 | ||||
|       @card.height = response.height.presence || 0 | ||||
|       @card.embed_url = response.url | ||||
|       @card.width     = response.width.presence  || 0 | ||||
|       @card.height    = response.height.presence || 0 | ||||
|     when 'video' | ||||
|       @card.width  = response.width.presence  || 0 | ||||
|       @card.height = response.height.presence || 0 | ||||
|   | ||||
							
								
								
									
										18
									
								
								db/migrate/20171130000000_add_embed_url_to_preview_cards.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								db/migrate/20171130000000_add_embed_url_to_preview_cards.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| require Rails.root.join('lib', 'mastodon', 'migration_helpers') | ||||
|  | ||||
| class AddEmbedUrlToPreviewCards < ActiveRecord::Migration[5.1] | ||||
|   include Mastodon::MigrationHelpers | ||||
|  | ||||
|   disable_ddl_transaction! | ||||
|  | ||||
|   def up | ||||
|     safety_assured do | ||||
|       add_column_with_default :preview_cards, :embed_url, :string, default: '', allow_null: false | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def down | ||||
|     execute "UPDATE preview_cards SET url=embed_url WHERE embed_url!=''" | ||||
|     remove_column :preview_cards, :embed_url | ||||
|   end | ||||
| end | ||||
| @@ -10,7 +10,7 @@ | ||||
| # | ||||
| # It's strongly recommended that you check this file into your version control system. | ||||
|  | ||||
| ActiveRecord::Schema.define(version: 20171129172043) do | ||||
| ActiveRecord::Schema.define(version: 20171130000000) do | ||||
|  | ||||
|   # These are extensions that must be enabled in order to support this database | ||||
|   enable_extension "plpgsql" | ||||
| @@ -325,6 +325,7 @@ ActiveRecord::Schema.define(version: 20171129172043) do | ||||
|     t.integer "height", default: 0, null: false | ||||
|     t.datetime "created_at", null: false | ||||
|     t.datetime "updated_at", null: false | ||||
|     t.string "embed_url", default: "", null: false | ||||
|     t.index ["url"], name: "index_preview_cards_on_url", unique: true | ||||
|   end | ||||
|  | ||||
|   | ||||
| @@ -326,5 +326,17 @@ namespace :mastodon do | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     desc 'Migrate photo preview cards made before 2.1' | ||||
|     task migrate_photo_preview_cards: :environment do | ||||
|       status_ids = Status.joins(:preview_cards) | ||||
|                          .where(preview_cards: { embed_url: '', type: :photo }) | ||||
|                          .reorder(nil) | ||||
|                          .group(:id) | ||||
|                          .pluck(:id) | ||||
|  | ||||
|       PreviewCard.where(embed_url: '', type: :photo).delete_all | ||||
|       LinkCrawlWorker.push_bulk status_ids | ||||
|     end | ||||
|   end | ||||
| end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user