lib/command/update.rb in narou-2.6.1 vs lib/command/update.rb in narou-2.7.0
- old
+ new
@@ -112,16 +112,16 @@
def execute(argv)
super
mistook_count = 0
update_target_list = argv.dup
- no_open = false
+ @options["no-open"] = false
if update_target_list.empty?
Database.instance.each_key do |id|
update_target_list << id
end
- no_open = true
+ @options["no-open"] = true
end
tagname_to_ids(update_target_list)
sort_key = @options["sort-by"]
if sort_key
@@ -132,11 +132,11 @@
exit Narou::EXIT_ERROR_CODE
end
end
flush_cache # memoist のキャッシュ削除
- inv = Inventory.load("local_setting", :local)
+ inv = Inventory.load("local_setting")
@options["hotentry"] = inv["hotentry"]
@options["hotentry.auto-mail"] = inv["hotentry.auto-mail"]
hotentry = {}
update_log = $stdout.capture(quiet: false) do
@@ -168,35 +168,54 @@
end
result = downloader.start_download
case result.status
when :ok
- unless @options["no-convert"] ||
- (@options["convert-only-new-arrival"] && !result.new_arrivals)
- convert_argv = [target]
- convert_argv << "--no-open" if no_open
- Convert.execute!(convert_argv)
+ if @options["no-convert"] ||
+ (@options["convert-only-new-arrival"] && !result.new_arrivals)
+ next
end
when :failed
puts "ID:#{data["id"]} #{data["title"]} の更新は失敗しました"
mistook_count += 1
+ next
when :canceled
puts "ID:#{data["id"]} #{data["title"]} の更新はキャンセルされました"
mistook_count += 1
+ next
when :none
puts "#{data["title"]} に更新はありません"
+ next unless data["_convert_failure"]
end
+
+ if data["_convert_failure"]
+ puts "<yellow>前回変換できなかったので再変換します</yellow>".termcolor
+ end
+ convert_argv = [target]
+ convert_argv << "--no-open" if @options["no-open"]
+ convert_status = Convert.execute!(convert_argv)
+ if convert_status > 0
+ # 変換が失敗したか、中断された
+ data["_convert_failure"] = true
+ # 中断された場合には残りのアップデートも中止する
+ raise Interrupt if convert_status == Narou::EXIT_INTERRUPT
+ else
+ # 変換に成功した
+ data.delete("_convert_failure")
+ end
end
+
+ process_hotentry(hotentry)
end
- process_hotentry(hotentry)
- save_log(update_log)
-
exit mistook_count if mistook_count > 0
rescue Interrupt
puts "アップデートを中断しました"
- exit Narou::EXIT_ERROR_CODE
+ exit Narou::EXIT_INTERRUPT
+ ensure
+ save_log(update_log)
+ Database.instance.save_database
end
def get_log_paths
Dir.glob(File.join(log_dirname, LOG_FILENAME_FORMAT % "*")).sort.reverse
end
@@ -239,10 +258,11 @@
File.delete(path)
end
end
def update_general_lastup(through_frozen_novel: true)
+ completed = false
database = Database.instance
puts "最新話掲載日を更新しています..."
progressbar = ProgressBar.new(database.get_object.size - 1)
database.each.with_index do |(id, data), i|
progressbar.output(i)
@@ -263,22 +283,24 @@
"general_lastup" => info["general_lastup"]
}
else
# 小説情報ページがない場合は目次から取得する
begin
- dates = get_latest_dates(setting)
+ dates = get_latest_dates(id)
rescue OpenURI::HTTPError, Errno::ECONNRESET => e
setting.clear
next
end
end
database[id].merge!(dates)
setting.clear
end
database.save_database
- progressbar.clear
- puts "更新が完了しました"
+ completed = true
+ ensure
+ progressbar.clear if progressbar
+ puts "更新が完了しました" if completed
end
# オンラインの目次からgeneral_lastupを取得する
# ただし、toc.yaml に最新話が存在し、かつsubdateが設定されていたらそれを使う
def get_latest_dates(target)
@@ -320,26 +342,31 @@
subtitles_size = hotentry.inject(0) { |sum, (_, subtitles)| subtitles.size + sum }
progressbar = ProgressBar.new(subtitles_size)
total_progress = 0
- hotentry.each do |id, subtitles|
- setting = NovelSetting.load(id, ignore_force, ignore_default)
- novel_converter = NovelConverter.new(setting, output_filename, display_inspector)
- last_num = 0
- novel_converter.on(:"convert_main.loop") do |i|
- progressbar.output(total_progress + i)
- last_num = i
- end
- converted_text_array << {
- setting: setting,
- text: novel_converter.convert_main_for_novel(subtitles, true)
- }
- use_dakuten_font |= novel_converter.use_dakuten_font
+ begin
+ hotentry.each do |id, subtitles|
+ setting = NovelSetting.load(id, ignore_force, ignore_default)
+ setting.enable_illust = false # 挿絵はパス解決が煩雑なので強制無効
+ novel_converter = NovelConverter.new(setting, output_filename,
+ display_inspector, Update.hotentry_dirname)
+ last_num = 0
+ novel_converter.on(:"convert_main.loop") do |i|
+ progressbar.output(total_progress + i)
+ last_num = i
+ end
+ converted_text_array << {
+ setting: setting,
+ text: novel_converter.convert_main_for_novel(subtitles, true)
+ }
+ use_dakuten_font |= novel_converter.use_dakuten_font
- total_progress += last_num + 1
+ total_progress += last_num + 1
+ end
+ ensure
+ progressbar.clear
end
- progressbar.clear
puts "縦書用の変換が終了しました"
device = Narou.get_device
now = Time.now
# テキストの生成