diff --git a/app/logical/downloads/rewrite_strategies/art_station.rb b/app/logical/downloads/rewrite_strategies/art_station.rb new file mode 100644 index 000000000..dc59062db --- /dev/null +++ b/app/logical/downloads/rewrite_strategies/art_station.rb @@ -0,0 +1,21 @@ +module Downloads + module RewriteStrategies + class ArtStation < Base + def rewrite(url, headers, data = {}) + # example: https://cdnb3.artstation.com/p/assets/images/images/003/716/071/large/aoi-ogata-hate-city.jpg?1476754974 + if url =~ %r!^https?://cdn\w*\.artstation\.com/p/assets/images/images/\d+/\d+/\d+/large/! + url, headers = rewrite_large_url(url, headers) + end + + return [url, headers, data] + end + + protected + def rewrite_large_url(url, headers) + # example: https://cdnb3.artstation.com/p/assets/images/images/003/716/071/original/aoi-ogata-hate-city.jpg?1476754974 + url = url.sub(%r!/large/!, "/original/") + return [url, headers] + end + end + end +end diff --git a/app/logical/downloads/rewrite_strategies/base.rb b/app/logical/downloads/rewrite_strategies/base.rb index 31e7906f0..9fd98da3c 100644 --- a/app/logical/downloads/rewrite_strategies/base.rb +++ b/app/logical/downloads/rewrite_strategies/base.rb @@ -10,7 +10,7 @@ module Downloads end def self.strategies - [Downloads::RewriteStrategies::Pixiv, Downloads::RewriteStrategies::NicoSeiga, Downloads::RewriteStrategies::Twitpic, Downloads::RewriteStrategies::DeviantArt, Downloads::RewriteStrategies::Tumblr, Downloads::RewriteStrategies::Moebooru, Downloads::RewriteStrategies::Twitter, Downloads::RewriteStrategies::Nijie] + [Downloads::RewriteStrategies::Pixiv, Downloads::RewriteStrategies::NicoSeiga, Downloads::RewriteStrategies::ArtStation, Downloads::RewriteStrategies::Twitpic, Downloads::RewriteStrategies::DeviantArt, Downloads::RewriteStrategies::Tumblr, Downloads::RewriteStrategies::Moebooru, Downloads::RewriteStrategies::Twitter, Downloads::RewriteStrategies::Nijie] end def rewrite(url, headers, data = {}) diff --git a/test/unit/downloads/art_station_test.rb b/test/unit/downloads/art_station_test.rb new file mode 100644 index 000000000..8268dfd86 --- /dev/null +++ b/test/unit/downloads/art_station_test.rb @@ -0,0 +1,18 @@ +require 'test_helper' + +module Downloads + class ArtStationTest < ActiveSupport::TestCase + context "a download for a (small) artstation image" do + setup do + @source = "https://cdnb3.artstation.com/p/assets/images/images/003/716/071/large/aoi-ogata-hate-city.jpg?1476754974" + @tempfile = Tempfile.new("danbooru-test") + @download = Downloads::File.new(@source, @tempfile.path) + @download.download! + end + + should "download the large image instead" do + assert_equal("https://cdnb3.artstation.com/p/assets/images/images/003/716/071/original/aoi-ogata-hate-city.jpg?1476754974", @download.source) + end + end + end +end