class Mrmanga::Downloader
Public Class Methods
new(manga, settings)
click to toggle source
# File lib/mrmanga/downloader.rb, line 8 def initialize(manga, settings) @manga = manga @settings = settings @name = @manga.info[:info][:name] if File.directory?(@name) should_continue = agree("Folder '#{@name}' already exists, continue?") { |q| q.default = 'yes' } return unless should_continue end end
Public Instance Methods
download_volume(volume)
click to toggle source
# File lib/mrmanga/downloader.rb, line 22 def download_volume(volume) if @settings[:volumes] != 'all' unless @settings[:volumes].include?(volume.to_s) puts "Skipping Vol. #{volume}" return false end end puts "Downloading volume #{volume}" prefix = "#{@name}/vol#{volume}" parser = Mrmanga::Parser.new FileUtils.mkdir_p(prefix) downloaded = {} @manga.volumes[volume].each do |volch| pages = parser.get_chapter_pages(@manga, volch[0], volch[1]) progress = ProgressBar.create(title: "Downloading vol.#{volch[0]} ch.#{volch[1]}", total: pages.count) Parallel.each_with_index(pages, in_threads: @settings[:threads]) do |page, index| progress.increment timeout_retries = 0 begin temp = Down.download(page[:link], open_timeout: 20, read_timeout: 20, 'Referer' => @manga.info[:info][:site]) rescue Down::TimeoutError retry if timeout_retries += 1 < 15 puts 'TimeoutError after many retries, debug info:' puts page[:link] puts @manga.info[:info] puts volch.inspect puts "Page number: #{index + 1}" puts @settings raise rescue puts 'Debug info:' puts page[:link] puts @manga.info[:info] puts volch.inspect puts "Page number: #{index + 1}" puts @settings raise end temp.close # Windows needs this ext = File.extname(temp.path) new_path = File.join(prefix, "#{volch[0]} - #{volch[1]} - #{index + 1}#{ext}") FileUtils.mv temp.path, new_path page[:file] = new_path end downloaded[volch[1]] = pages progress.finish end { volume: volume, pages: downloaded } end