From 838d6f6eea44e1622e6f17cee8727d22087343cb Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 4 Dec 2016 00:50:58 -0600 Subject: [PATCH] Fix #2460: Uploading pixiv user's background image throws error. Fix exception when uploading these types of URLs: * http://img12.pixiv.net/profile/rapattu/119950.jpg * http://i2.pixiv.net/img130/profile/minono_aki/8733472.jpg * http://i2.pixiv.net/img20/img/a-park/novel/3607898.jpg * http://i1.pixiv.net/novel-cover-original/img/2016/11/03/20/10/58/7436075_f75af69f3eacd1656d3733c72aa959cf.jpg * http://i1.pixiv.net/background/img/2016/05/17/12/05/48/2074388_d4ac52034f7ca0af3e083d59fde7e97f.jpg Skip rewriting sources that don't have illust IDs to avoid this exception. Also fix `tags` so that it doesn't blow up when fetching source data for these types of sources. --- app/logical/downloads/rewrite_strategies/pixiv.rb | 5 ++++- app/logical/sources/site.rb | 2 +- app/logical/sources/strategies/base.rb | 4 ++++ app/logical/sources/strategies/pixiv.rb | 3 ++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/logical/downloads/rewrite_strategies/pixiv.rb b/app/logical/downloads/rewrite_strategies/pixiv.rb index 71069e42e..89d2f9ceb 100644 --- a/app/logical/downloads/rewrite_strategies/pixiv.rb +++ b/app/logical/downloads/rewrite_strategies/pixiv.rb @@ -8,9 +8,12 @@ module Downloads end def rewrite(url, headers, data = {}) - if url =~ /https?:\/\/(?:\w+\.)?pixiv\.net/ + if url =~ /\Ahttps?:\/\/(?:\w+\.)?pixiv\.net/ url, headers = rewrite_headers(url, headers) url, headers = rewrite_cdn(url, headers) + end + + if url =~ /\Ahttps?:\/\/(?:\w+\.)?pixiv\.net/ && source.illust_id_from_url url, headers = rewrite_html_pages(url, headers) url, headers = rewrite_thumbnails(url, headers) url, headers = rewrite_old_small_manga_pages(url, headers) diff --git a/app/logical/sources/site.rb b/app/logical/sources/site.rb index ed56f3003..8c76c1b95 100644 --- a/app/logical/sources/site.rb +++ b/app/logical/sources/site.rb @@ -7,7 +7,7 @@ module Sources :profile_url, :image_url, :tags, :artist_record, :unique_id, :page_count, :file_url, :ugoira_frame_data, :ugoira_content_type, :image_urls, :has_artist_commentary?, :artist_commentary_title, - :artist_commentary_desc, :rewrite_thumbnails, :to => :strategy + :artist_commentary_desc, :rewrite_thumbnails, :illust_id_from_url, :to => :strategy def self.strategies [Strategies::PixivWhitecube, Strategies::Pixiv, Strategies::NicoSeiga, Strategies::DeviantArt, Strategies::Nijie, Strategies::Twitter, Strategies::Tumblr] diff --git a/app/logical/sources/strategies/base.rb b/app/logical/sources/strategies/base.rb index 54a95a5cd..9140026dd 100644 --- a/app/logical/sources/strategies/base.rb +++ b/app/logical/sources/strategies/base.rb @@ -74,6 +74,10 @@ module Sources [image_url] end + def tags + @tags || [] + end + # Should be set to a url for sites that prevent hotlinking, or left nil for sites that don't. def fake_referer nil diff --git a/app/logical/sources/strategies/pixiv.rb b/app/logical/sources/strategies/pixiv.rb index 502de8764..eb98a80c6 100644 --- a/app/logical/sources/strategies/pixiv.rb +++ b/app/logical/sources/strategies/pixiv.rb @@ -65,7 +65,8 @@ module Sources end def get - @illust_id = illust_id_from_url! + return unless illust_id_from_url + @illust_id = illust_id_from_url @metadata = get_metadata_from_papi(@illust_id) page = agent.get(URI.parse(normalized_url))