lib/command/diff.rb in narou-3.2.5.1 vs lib/command/diff.rb in narou-3.3.0

- old
+ new

@@ -1,6 +1,7 @@ -# -*- coding: utf-8 -*- +# frozen_string_literal: true + # # Copyright 2013 whiteleaf. All rights reserved. # require "yaml" @@ -76,21 +77,22 @@ end }.flatten! end def execute(argv) + disable_logging short_number_option_parse(argv) super @options["number"] ||= 1 if argv.empty? latest = Database.instance.sort_by("last_update").first return unless latest id = latest["id"] @novel_data = latest else target = argv.shift - @novel_data = Downloader.get_data_by_target(target) + @novel_data = Downloader.get_data_by_target(target) || {} id = @novel_data["id"] end unless id error "#{target} は存在しません" return @@ -132,25 +134,25 @@ Helper.date_string_to_time("#{ymd} #{hms.tr(".", ":")}") end def clean_diff(id) cache_root_dir = Downloader.get_cache_root_dir(id) - print @novel_data["title"] + " の" + stream_io.print @novel_data["title"] + " の" unless File.exist?(cache_root_dir) - puts "差分はひとつもありません" + stream_io.puts "差分はひとつもありません" return end FileUtils.remove_entry_secure(cache_root_dir) - puts "差分を削除しました" + stream_io.puts "差分を削除しました" end def exec_difftool(id) temp_paths = create_temp_files(id) or return diff_cmd = create_difftool_command_string(*temp_paths.map { |temp| path = temp.path if Helper.os_windows? - path.encode!(Encoding::Windows_31J) + path = path.encode(Encoding::Windows_31J) end %!"#{path}"! }) begin res = Helper::AsyncCommand.exec(diff_cmd) @@ -158,11 +160,11 @@ error e.message exit Narou::EXIT_ERROR_CODE ensure temp_paths.map(&:delete) end - puts res[0] unless res[0].empty? + stream_io.puts res[0] unless res[0].empty? error res[1] unless res[1].empty? end def create_difftool_command_string(temp_old_path, temp_new_path) diff_arg = Inventory.load("global_setting", :global)["difftool.arg"] @@ -193,18 +195,18 @@ nth = @options["number"] list = get_sorted_cache_list(id) cache_dir = list ? list[nth - 1] : nil end unless cache_dir - puts "#{@novel_data["title"]} の差分データがありません" + stream_io.puts "#{@novel_data["title"]} の差分データがありません" return nil end cache_section_list = Dir.glob("#{cache_dir}/*.yaml").sort_by { |path| File.basename(path, ".yaml").split(" ", 2)[0].to_i } if cache_section_list.length == 0 - puts "#{@novel_data["title"]} は最新話のみのアップデートのようです" + stream_io.puts "#{@novel_data["title"]} は最新話のみのアップデートのようです" return nil end novel_dir = Downloader.get_novel_section_save_dir(Downloader.get_novel_data_dir_by_target(id)) latest_novel_sections = [] cache_sections = [] @@ -271,44 +273,44 @@ list end def display_diff_list(id) list = get_diff_list(id) - print "#{list[:title]} の" + stream_io.print "#{list[:title]} の" if list[:list].empty? - puts "差分はひとつもありません" + stream_io.puts "差分はひとつもありません" return end - puts "差分一覧" + stream_io.puts "差分一覧" list[:list].each do |data| - puts "<bold><yellow>#{data[:version_string]} -#{data[:number]}</yellow></bold>".termcolor + stream_io.puts "<bold><yellow>#{data[:version_string]} -#{data[:number]}</yellow></bold>".termcolor data[:objects].each do |object| - puts " 第#{object[:index]}部分 #{object[:subtitle]}" + stream_io.puts " 第#{object[:index]}部分 #{object[:subtitle]}" end if data[:objects].empty? - puts " (最新話のみのアップデート)" + stream_io.puts " (最新話のみのアップデート)" end end end def clean_all_diff Database.instance.each do |id, data| next if Narou.novel_frozen?(id) cache_root_dir = Downloader.get_cache_root_dir(id) next unless File.exist?(cache_root_dir) FileUtils.remove_entry_secure(cache_root_dir) - puts "#{data["title"]} の差分を削除しました" + stream_io.puts "#{data["title"]} の差分を削除しました" end end # # diff-lcs を使って自力で差分表示 # def display_diff_on_oneself(id) require_relative "../diffviewer" temp_paths = create_temp_files(id) or return - puts "#{@novel_data["title"]} の差分を表示します" - DiffViewer.new(*temp_paths).view + stream_io.puts "#{@novel_data["title"]} の差分を表示します" + stream_io.puts DiffViewer.new(*temp_paths).result ensure temp_paths.map(&:delete) if temp_paths end end end