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 # テキストの生成