forked from cybrespace/mastodon
		
	Add embed_url to preview cards (#5775)
This commit is contained in:
		
							parent
							
								
									432761f375
								
							
						
					
					
						commit
						c083816c24
					
				
					 7 changed files with 38 additions and 9 deletions
				
			
		| 
						 | 
					@ -101,7 +101,7 @@ export default class Card extends React.PureComponent {
 | 
				
			||||||
        onClick={this.handlePhotoClick}
 | 
					        onClick={this.handlePhotoClick}
 | 
				
			||||||
        role='button'
 | 
					        role='button'
 | 
				
			||||||
        tabIndex='0'
 | 
					        tabIndex='0'
 | 
				
			||||||
        src={card.get('url')}
 | 
					        src={card.get('embed_url')}
 | 
				
			||||||
        alt={card.get('title')}
 | 
					        alt={card.get('title')}
 | 
				
			||||||
        width={card.get('width')}
 | 
					        width={card.get('width')}
 | 
				
			||||||
        height={card.get('height')}
 | 
					        height={card.get('height')}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,6 +21,7 @@
 | 
				
			||||||
#  height             :integer          default(0), not null
 | 
					#  height             :integer          default(0), not null
 | 
				
			||||||
#  created_at         :datetime         not null
 | 
					#  created_at         :datetime         not null
 | 
				
			||||||
#  updated_at         :datetime         not null
 | 
					#  updated_at         :datetime         not null
 | 
				
			||||||
 | 
					#  embed_url          :string           default(""), not null
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PreviewCard < ApplicationRecord
 | 
					class PreviewCard < ApplicationRecord
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,7 @@ class REST::PreviewCardSerializer < ActiveModel::Serializer
 | 
				
			||||||
  attributes :url, :title, :description, :type,
 | 
					  attributes :url, :title, :description, :type,
 | 
				
			||||||
             :author_name, :author_url, :provider_name,
 | 
					             :author_name, :author_url, :provider_name,
 | 
				
			||||||
             :provider_url, :html, :width, :height,
 | 
					             :provider_url, :html, :width, :height,
 | 
				
			||||||
             :image
 | 
					             :image, :embed_url
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def image
 | 
					  def image
 | 
				
			||||||
    object.image? ? full_asset_url(object.image.url(:original)) : nil
 | 
					    object.image? ? full_asset_url(object.image.url(:original)) : nil
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,9 +74,6 @@ class FetchLinkCardService < BaseService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return false unless response.respond_to?(:type)
 | 
					    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.type          = response.type
 | 
				
			||||||
    @card.title         = response.respond_to?(:title)         ? response.title         : ''
 | 
					    @card.title         = response.respond_to?(:title)         ? response.title         : ''
 | 
				
			||||||
    @card.author_name   = response.respond_to?(:author_name)   ? response.author_name   : ''
 | 
					    @card.author_name   = response.respond_to?(:author_name)   ? response.author_name   : ''
 | 
				
			||||||
| 
						 | 
					@ -90,9 +87,9 @@ class FetchLinkCardService < BaseService
 | 
				
			||||||
    when 'link'
 | 
					    when 'link'
 | 
				
			||||||
      @card.image = URI.parse(response.thumbnail_url) if response.respond_to?(:thumbnail_url)
 | 
					      @card.image = URI.parse(response.thumbnail_url) if response.respond_to?(:thumbnail_url)
 | 
				
			||||||
    when 'photo'
 | 
					    when 'photo'
 | 
				
			||||||
      @card.url    = response.url
 | 
					      @card.embed_url = response.url
 | 
				
			||||||
      @card.width  = response.width.presence  || 0
 | 
					      @card.width     = response.width.presence  || 0
 | 
				
			||||||
      @card.height = response.height.presence || 0
 | 
					      @card.height    = response.height.presence || 0
 | 
				
			||||||
    when 'video'
 | 
					    when 'video'
 | 
				
			||||||
      @card.width  = response.width.presence  || 0
 | 
					      @card.width  = response.width.presence  || 0
 | 
				
			||||||
      @card.height = response.height.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.
 | 
					# 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
 | 
					  # These are extensions that must be enabled in order to support this database
 | 
				
			||||||
  enable_extension "plpgsql"
 | 
					  enable_extension "plpgsql"
 | 
				
			||||||
| 
						 | 
					@ -325,6 +325,7 @@ ActiveRecord::Schema.define(version: 20171129172043) do
 | 
				
			||||||
    t.integer "height", default: 0, null: false
 | 
					    t.integer "height", default: 0, null: false
 | 
				
			||||||
    t.datetime "created_at", null: false
 | 
					    t.datetime "created_at", null: false
 | 
				
			||||||
    t.datetime "updated_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
 | 
					    t.index ["url"], name: "index_preview_cards_on_url", unique: true
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -326,5 +326,17 @@ namespace :mastodon do
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      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
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue