lib/zold/commands/fetch.rb in zold-0.9.10 vs lib/zold/commands/fetch.rb in zold-0.9.11

- old
+ new

@@ -62,52 +62,30 @@ end end def fetch(id, cps, opts) total = 0 - @remotes.all.each do |r| - done = fetch_one(id, r, cps, opts) - if done - total += 1 - else - @remotes.error(r[:host], r[:port]) - end + @remotes.iterate(@log) do |r| + fetch_one(id, r, cps, opts) + total += 1 end @log.debug("#{total} copies of #{id} fetched, there are #{cps.all.count} available locally") end def fetch_one(id, r, cps, opts) - address = "#{r[:host]}:#{r[:port]}".downcase - if opts['ignore-node'].include?(address) - @log.info("#{address} ignored because of --ignore-node") + if opts['ignore-node'].include?(r.to_s) + @log.info("#{r} ignored because of --ignore-node") return false end - uri = URI("#{r[:home]}wallet/#{id}") - res = Http.new(uri).get - if res.code == '404' - @log.info("#{address} wallet #{id} #{Rainbow('not found').red}") - return false - end - unless res.code == '200' - @log.error("#{address} #{Rainbow(res.code).red}/#{res.message} at #{uri}") - return false - end + res = r.http("/wallet/#{id}").get + raise "Wallet #{id} not found" if res.code == '404' + raise "#{res.code} \"#{res.message}\"" unless res.code == '200' json = JSON.parse(res.body) score = Score.parse_json(json['score']) - unless score.valid? - @log.error("#{address}: invalid score: #{score}") - return false - end - if score.expired? - @log.error("#{address}: score expired: #{score}") - return false - end - if score.strength < Score::STRENGTH && !opts['ignore-score-weakness'] - @log.error("#{address} score is too weak (#{score.strength}<#{Score::STRENGTH}): #{score}") - return false - end + raise "Invalid score #{score}" unless score.valid? + raise "Score expired #{score}" if score.expired? + raise "Score is too weak #{score.strength}" if score.strength < Score::STRENGTH && !opts['ignore-score-weakness'] cps.add(json['body'], score.host, score.port, score.value) - @log.info("#{address} #{json['body'].length}b/#{Rainbow(score.value).green} (#{json['version']})") - true + @log.info("#{r} #{json['body'].length}b/#{Rainbow(score.value).green} (#{json['version']})") end end end