lib/command/update.rb in narou-2.4.0 vs lib/command/update.rb in narou-2.4.1

- old
+ new

@@ -154,31 +154,57 @@ (list[LOG_NUM_LIMIT..-1] || []).each do |path| File.delete(path) end end - def update_general_lastup + def update_general_lastup(through_frozen_novel: true) database = Database.instance - progressbar = ProgressBar.new(database.get_object.size - 1) puts "最新話掲載日を更新しています..." + progressbar = ProgressBar.new(database.get_object.size - 1) database.each.with_index do |(id, data), i| progressbar.output(i) + if through_frozen_novel + next if Narou.novel_frozen?(id) + end setting = Downloader.get_sitesetting_by_target(id) begin info = NovelInfo.load(setting) rescue OpenURI::HTTPError, Errno::ECONNRESET => e + setting.clear next end - next unless info - next unless info["title"] - data = { - "general_firstup" => info["general_firstup"], - "novelupdated_at" => info["novelupdated_at"], - "general_lastup" => info["general_lastup"] - } - database[id].merge!(data) + if info + dates = { + "general_firstup" => info["general_firstup"], + "novelupdated_at" => info["novelupdated_at"], + "general_lastup" => info["general_lastup"] + } + else + # 小説情報ページがない場合は目次から取得する + begin + dates = get_latest_dates(setting) + rescue OpenURI::HTTPError, Errno::ECONNRESET => e + setting.clear + next + end + end + database[id].merge!(dates) + setting.clear end database.save_database - puts "\n更新が完了しました" + progressbar.clear + puts "更新が完了しました" + end + + # オンラインの目次からgeneral_lastupを取得する + # ただし、toc.yaml に最新話が存在し、かつsubdateが設定されていたらそれを使う + def get_latest_dates(setting) + downloader = Downloader.new(setting) + old_toc = downloader.load_toc_file + latest_toc = downloader.get_latest_table_of_contents(old_toc, through_error: true) + { + "novelupdated_at" => downloader.get_novelupdated_at, + "general_lastup" => downloader.get_general_lastup + } end end end