fixes #194
This commit is contained in:
@@ -31,25 +31,27 @@ module Downloads
|
|||||||
fix_image_board_sources
|
fix_image_board_sources
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
URI.parse(source)
|
||||||
|
end
|
||||||
|
|
||||||
def http_get_streaming(options = {})
|
def http_get_streaming(options = {})
|
||||||
max_size = options[:max_size] || Danbooru.config.max_file_size
|
max_size = options[:max_size] || Danbooru.config.max_file_size
|
||||||
max_size = nil if max_size == 0 # unlimited
|
max_size = nil if max_size == 0 # unlimited
|
||||||
limit = 4
|
limit = 4
|
||||||
|
|
||||||
while true
|
while true
|
||||||
url = URI.parse(source)
|
|
||||||
|
|
||||||
unless url.is_a?(URI::HTTP)
|
unless url.is_a?(URI::HTTP)
|
||||||
raise Error.new("URL must be HTTP")
|
raise Error.new("URL must be HTTP")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"User-Agent" => "#{Danbooru.config.safe_app_name}/#{Danbooru.config.version}"
|
||||||
|
}
|
||||||
|
@source, headers = before_download(source, headers)
|
||||||
|
|
||||||
Net::HTTP.start(url.host, url.port) do |http|
|
Net::HTTP.start(url.host, url.port) do |http|
|
||||||
http.read_timeout = 10
|
http.read_timeout = 10
|
||||||
headers = {
|
|
||||||
"User-Agent" => "#{Danbooru.config.safe_app_name}/#{Danbooru.config.version}"
|
|
||||||
}
|
|
||||||
@source, headers = before_download(@source, headers)
|
|
||||||
url = URI.parse(source)
|
|
||||||
http.request_get(url.request_uri, headers) do |res|
|
http.request_get(url.request_uri, headers) do |res|
|
||||||
case res
|
case res
|
||||||
when Net::HTTPSuccess then
|
when Net::HTTPSuccess then
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ module Downloads
|
|||||||
def rewrite(url, headers)
|
def rewrite(url, headers)
|
||||||
if url =~ /https?:\/\/(?:\w+\.)?pixiv\.net/
|
if url =~ /https?:\/\/(?:\w+\.)?pixiv\.net/
|
||||||
url, headers = rewrite_headers(url, headers)
|
url, headers = rewrite_headers(url, headers)
|
||||||
|
url, headers = rewrite_html_pages(url, headers)
|
||||||
url, headers = rewrite_small_images(url, headers)
|
url, headers = rewrite_small_images(url, headers)
|
||||||
url, headers = rewrite_small_manga_pages(url, headers)
|
url, headers = rewrite_small_manga_pages(url, headers)
|
||||||
end
|
end
|
||||||
@@ -17,6 +18,18 @@ module Downloads
|
|||||||
return [url, headers]
|
return [url, headers]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def rewrite_html_pages(url, headers)
|
||||||
|
# example: http://www.pixiv.net/member_illust.php?mode=big&illust_id=23828655
|
||||||
|
|
||||||
|
if url =~ %r!illust_id=\d+!
|
||||||
|
source = ::Sources::Strategies::Pixiv.new(url)
|
||||||
|
source.get
|
||||||
|
return [source.image_url, headers]
|
||||||
|
else
|
||||||
|
return [url, headers]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def rewrite_small_images(url, headers)
|
def rewrite_small_images(url, headers)
|
||||||
if url =~ %r!(/img/.+?/.+?)_m.+$!
|
if url =~ %r!(/img/.+?/.+?)_m.+$!
|
||||||
match = $1
|
match = $1
|
||||||
|
|||||||
@@ -15,6 +15,20 @@ module Downloads
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "a download for a html page" do
|
||||||
|
setup do
|
||||||
|
@source = "http://www.pixiv.net/member_illust.php?mode=big&illust_id=23828655"
|
||||||
|
@source = "http://www.pixiv.net/member_illust.php?mode=big&illust_id=4348318"
|
||||||
|
@tempfile = Tempfile.new("danbooru-test")
|
||||||
|
@download = Downloads::File.new(@source, @tempfile.path)
|
||||||
|
@download.download!
|
||||||
|
end
|
||||||
|
|
||||||
|
should "work" do
|
||||||
|
assert_equal(185778, ::File.size(@tempfile.path))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "a download for a small image" do
|
context "a download for a small image" do
|
||||||
setup do
|
setup do
|
||||||
@source = "http://img02.pixiv.net/img/wanwandoh/4348318_m.jpg"
|
@source = "http://img02.pixiv.net/img/wanwandoh/4348318_m.jpg"
|
||||||
|
|||||||
Reference in New Issue
Block a user