From 462e1ed3240253eb096cd4c47abb0ff9f1c245ed Mon Sep 17 00:00:00 2001 From: Toks Date: Sat, 13 Jun 2015 11:26:47 -0400 Subject: [PATCH] Implement #2395 for nijie twitter and tumblr --- app/assets/javascripts/related_tag.js | 2 +- app/logical/downloads/file.rb | 12 ++++++++++ app/logical/sources/site.rb | 2 +- app/logical/sources/strategies/tumblr.rb | 28 ++++++++++++++++++++++++ app/models/upload.rb | 8 ++++--- app/views/uploads/new.html.erb | 2 +- 6 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 app/logical/sources/strategies/tumblr.rb diff --git a/app/assets/javascripts/related_tag.js b/app/assets/javascripts/related_tag.js index 32d8f7b12..e2e575ae9 100644 --- a/app/assets/javascripts/related_tag.js +++ b/app/assets/javascripts/related_tag.js @@ -254,7 +254,7 @@ Danbooru.RelatedTag.find_artist = function(e) { $("#artist-tags").html("Loading..."); var url = $("#upload_source,#post_source"); - var referer_url = $("#referer_url"); + var referer_url = $("#upload_referer_url"); $.get("/artists/finder.json", {"url": url.val(), "referer_url": referer_url.val()}).success(Danbooru.RelatedTag.process_artist); e.preventDefault(); } diff --git a/app/logical/downloads/file.rb b/app/logical/downloads/file.rb index c0d7da5d9..a4141a53b 100644 --- a/app/logical/downloads/file.rb +++ b/app/logical/downloads/file.rb @@ -57,6 +57,9 @@ module Downloads def after_download(src) src = fix_image_board_sources(src) src = fix_twitter_sources(src) + if options[:referer_url].present? + src = set_source_to_referer(src) + end src end @@ -131,5 +134,14 @@ module Downloads src end end + + def set_source_to_referer(src) + if Sources::Strategies::Nijie.url_match?(src) || Sources::Strategies::Twitter.url_match?(src) || Sources::Strategies::Tumblr.url_match?(src) + strategy = Sources::Site.new(src, :referer_url => options[:referer_url]) + strategy.referer_url + else + src + end + end end end diff --git a/app/logical/sources/site.rb b/app/logical/sources/site.rb index 04162c5c5..aa4e39b4c 100644 --- a/app/logical/sources/site.rb +++ b/app/logical/sources/site.rb @@ -10,7 +10,7 @@ module Sources :artist_commentary_desc, :to => :strategy def self.strategies - [Strategies::Pixiv, Strategies::NicoSeiga, Strategies::DeviantArt, Strategies::Nijie, Strategies::Twitter] + [Strategies::Pixiv, Strategies::NicoSeiga, Strategies::DeviantArt, Strategies::Nijie, Strategies::Twitter, Strategies::Tumblr] end def initialize(url, options = {}) diff --git a/app/logical/sources/strategies/tumblr.rb b/app/logical/sources/strategies/tumblr.rb new file mode 100644 index 000000000..818aaaf62 --- /dev/null +++ b/app/logical/sources/strategies/tumblr.rb @@ -0,0 +1,28 @@ +module Sources::Strategies + class Tumblr < Base + def self.url_match?(url) + url =~ %r{^https?://.+\.tumblr\.com/(?:\w+/)?(?:tumblr_)?(\w+_)(\d+)\..+$} || url =~ %r{^https?://[^.]+\.tumblr\.com/(?:post|image)/\d+} + end + + def referer_url + if @referer_url =~ %r{^https?://[^.]+\.tumblr\.com/post/\d+} && @url =~ %r{^https?://.+\.tumblr\.com/(?:\w+/)?(?:tumblr_)?(\w+_)(\d+)\..+$} + @referer_url + elsif @referer_url =~ %r{^https?://[^.]+\.tumblr\.com/image/\d+} && @url =~ %r{^https?://.+\.tumblr\.com/(?:\w+/)?(?:tumblr_)?(\w+_)(\d+)\..+$} + @referer_url.sub("/image/", "/post/") + else + @url + end + end + + def tags + [] + end + + def site_name + "Tumblr" + end + + def get + end + end +end diff --git a/app/models/upload.rb b/app/models/upload.rb index f69c61b25..9015ff447 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -6,7 +6,8 @@ class Upload < ActiveRecord::Base attr_accessor :file, :image_width, :image_height, :file_ext, :md5, :file_size, :as_pending, :artist_commentary_title, - :artist_commentary_desc, :include_artist_commentary + :artist_commentary_desc, :include_artist_commentary, + :referer_url belongs_to :uploader, :class_name => "User" belongs_to :post before_validation :initialize_uploader, :on => :create @@ -20,7 +21,8 @@ class Upload < ActiveRecord::Base :file_size, :as_pending, :source, :file_path, :content_type, :rating, :tag_string, :status, :backtrace, :post_id, :md5_confirmation, :parent_id, :server, :artist_commentary_title, - :artist_commentary_desc, :include_artist_commentary + :artist_commentary_desc, :include_artist_commentary, + :referer_url module ValidationMethods def uploader_is_not_limited @@ -379,7 +381,7 @@ class Upload < ActiveRecord::Base # Downloads the file to destination_path def download_from_source(destination_path) self.file_path = destination_path - download = Downloads::File.new(source, destination_path) + download = Downloads::File.new(source, destination_path, :referer_url => referer_url) download.download! ugoira_service.load(download.data) download.source diff --git a/app/views/uploads/new.html.erb b/app/views/uploads/new.html.erb index a1f9189f1..2c6148100 100644 --- a/app/views/uploads/new.html.erb +++ b/app/views/uploads/new.html.erb @@ -15,7 +15,7 @@ <%= form_for(@upload, :html => {:multipart => true, :class => "simple_form", :id => "form"}) do |f| %> <%= hidden_field_tag :normalized_url, @normalized_url %> - <%= hidden_field_tag :referer_url, @source.try(:referer_url) %> + <%= f.hidden_field :referer_url, :value => @source.try(:referer_url) %> <% if CurrentUser.is_contributor? %>