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