diff --git a/app/logical/sources/strategies/base.rb b/app/logical/sources/strategies/base.rb index a321c6458..24a3b5fe0 100644 --- a/app/logical/sources/strategies/base.rb +++ b/app/logical/sources/strategies/base.rb @@ -43,8 +43,14 @@ module Sources @referer_url = referer_url end + def urls + [url, referer_url].select(&:present?) + end + def site_name - raise NotImplementedError + Addressable::URI.heuristic_parse(url).host + rescue Addressable::URI::InvalidURIError => e + nil end # Whatever url is, this method should return the direct links diff --git a/app/logical/sources/strategies/moebooru.rb b/app/logical/sources/strategies/moebooru.rb index 630199a3a..a6b49aba4 100644 --- a/app/logical/sources/strategies/moebooru.rb +++ b/app/logical/sources/strategies/moebooru.rb @@ -1,24 +1,28 @@ module Sources module Strategies class Moebooru < Base - DOMAINS = /(?:[^.]+\.)?yande\.re|konachan\.com/ + BASE_URL = %r!\Ahttps?://(?:[^.]+\.)?(?yande\.re|konachan\.com)!i def self.match?(*urls) - urls.compact.any? { |x| x.match?(DOMAINS) } + urls.compact.any? { |x| x.match?(BASE_URL) } end def site_name - URI.parse(url).host + urls.map { |url| url[BASE_URL, :domain] }.compact.first end def image_url - if url =~ %r{\A(https?://(?:#{DOMAINS}))/jpeg/([a-f0-9]+(?:/.*)?)\.jpg\Z} - return $1 + "/image/" + $2 + ".png" + if url =~ %r{\A(?#{BASE_URL})/jpeg/(?\h+(?:/.*)?)\.jpg\Z} + return $~[:base] + "/image/" + $~[:md5] + ".png" end return url end + def image_urls + [image_url] + end + def page_url return url end diff --git a/app/logical/sources/strategies/null.rb b/app/logical/sources/strategies/null.rb index 3be9a4035..2e3116771 100644 --- a/app/logical/sources/strategies/null.rb +++ b/app/logical/sources/strategies/null.rb @@ -29,12 +29,6 @@ module Sources url end - def site_name - URI.parse(url).hostname || "N/A" - rescue - "N/A" - end - def unique_id url end diff --git a/test/unit/sources/moebooru_test.rb b/test/unit/sources/moebooru_test.rb index f978295c0..0f3087cea 100644 --- a/test/unit/sources/moebooru_test.rb +++ b/test/unit/sources/moebooru_test.rb @@ -2,12 +2,23 @@ require "test_helper" module Sources class MoebooruTest < ActiveSupport::TestCase - context "downloading a 'https://yande.re/jpeg/:hash/:file.jpg' jpeg sample url" do - should "download the original file" do - @source = "https://yande.re/jpeg/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.jpg" - @rewrite = "https://yande.re/image/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.png" - assert_rewritten(@rewrite, @source) - assert_downloaded(1_050_117, @source) + context "Yande.re:" do + context "A 'https://yande.re/jpeg/:hash/:file.jpg' jpeg sample url" do + should "download the original file" do + @source = "https://yande.re/jpeg/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.jpg" + @rewrite = "https://yande.re/image/2c6876ac2317fce617e3c5f1a642123b/yande.re%20292092%20hatsune_miku%20tid%20vocaloid.png" + assert_rewritten(@rewrite, @source) + assert_downloaded(1_050_117, @source) + end + end + + context "A 'https://files.yande.re/sample/:hash/:file.jpg' sample url" do + should "work" do + @site = Sources::Strategies.find("https://files.yande.re/sample/7ecfdead705d7b956b26b1d37b98d089/yande.re%20482880%20sample%20bayashiko%20journey_to_the_west%20sun_wukong.jpg") + + assert_equal("yande.re", @site.site_name) + assert_nothing_raised { @site.to_h } + end end end end