lib/command/setting.rb in narou-1.5.11 vs lib/command/setting.rb in narou-1.6.0

- old
+ new

@@ -1,16 +1,16 @@ # -*- coding: utf-8 -*- # +# Copyright 2013 whiteleaf. All rights reserved. # -require_relative "../localsetting" -require_relative "../globalsetting" +require_relative "../inventory" require_relative "../novelsetting" module Command class Setting < CommandBase - def oneline_help + def self.oneline_help "各コマンドの設定を変更します" end class InvalidVariableType < StandardError def initialize(type) @@ -30,10 +30,11 @@ super("[<name>=<value> ...] [options]") @opt.separator <<-EOS ・各コマンドの設定の変更が出来ます。 ・Global な設定はユーザープロファイルに保存され、すべての narou コマンドで使われます。 + ・下の一覧は一部です。すべてを確認するには -a オプションを付けて確認して下さい。 Local Variable List: <name> <value> 説明 EOS @opt.separator(get_variable_list_strings(:local)) @@ -41,18 +42,18 @@ @opt.separator("\n Global Variable List:") @opt.separator(get_variable_list_strings(:global)) @opt.separator <<-EOS - Example: + Examples: narou setting --list narou setting convert.no-open=true narou setting convert.no-epub= # 右辺に何も書かないとその設定を削除できる narou setting convert.copy_to=C:/dropbox/mobi narou s convert.copy_to="C:\\Documents and Settings\\user\\epub" - Optioins: + Options: EOS @opt.on("-l", "--list", "現在の設定値を確認する") { output_setting_list exit 0 } @@ -142,12 +143,12 @@ result end def output_setting_list settings = { - local: LocalSetting.get["local_setting"], - global: GlobalSetting.get["global_setting"] + local: Inventory.load("local_setting", :local), + global: Inventory.load("global_setting", :global) } settings.each do |scope, scoped_settings| puts "[#{scope.capitalize} Variables]" scoped_settings.each do |name, value| if value =~ / / @@ -163,13 +164,15 @@ if argv.empty? puts @opt.help return end settings = { - local: LocalSetting.get["local_setting"], - global: GlobalSetting.get["global_setting"] + local: Inventory.load("local_setting", :local), + global: Inventory.load("global_setting", :global) } + device = Narou.get_device + self.extend(device.get_hook_module) if device argv.each do |arg| name, value = arg.split("=", 2).map(&:strip) if name == "" error "書式が間違っています。変数名=値 のように書いて下さい" next @@ -182,27 +185,59 @@ if value.nil? error "書式が間違っています。#{name}=値 のように書いて下さい" next end if value == "" - settings[scope].delete(name) - puts "#{name} の設定を削除しました" + hook_call(:modify_settings, settings[scope], name, nil) next end begin scope, casted_value = casting_variable(name, value) rescue InvalidVariableName, InvalidVariableType => e error e.message next end - settings[scope][name] = casted_value - puts "#{name} を #{casted_value} に設定しました" + hook_call(:modify_settings, settings[scope], name, casted_value) end - LocalSetting.get.save_settings("local_setting") - GlobalSetting.get.save_settings("global_setting") + settings[:local].save + settings[:global].save end + def modify_settings(scoped_settings, name, value) + if value.nil? + scoped_settings.delete(name) + puts "#{name} の設定を削除しました" + else + scoped_settings[name] = value + puts "#{name} を #{value} に設定しました" + end + if name == "device" && value + modify_settings_when_device_changed(scoped_settings) + end + end + + def modify_settings_when_device_changed(settings) + device = Device.create(settings["device"]) + message = StringIO.new + device.get_relative_variables.each do |name, value| + if value.nil? + settings.delete(name) + message.puts " <bold><red>← #{name} が削除されました</red></bold>".termcolor + elsif settings[name].nil? || settings[name] != value + settings[name] = value + message.puts " <bold><green>→ #{name} が #{value} に変更されました</green></bold>".termcolor + end + end + if message.length > 0 + puts "端末を#{device.display_name}に指定したことで、以下の関連設定が変更されました" + puts message.string + end + rescue Device::UnknownDevice => e + error e.message + puts "設定できるのは #{Device::DEVICES.keys.join(", ")} です" + end + def get_variable_list_strings(scope) result = "" SETTING_VARIABLES[scope].each do |name, info| if @options["all"] || info[2] != INVISIBLE type_description = self.class.variable_type_to_description(info[0]) @@ -249,10 +284,10 @@ }, global: { "aozoraepub3dir" => [:directory, "AozoraEpub3のあるフォルダを指定", INVISIBLE], "difftool" => [:string, "Diffで使うツールのパスを指定する"], "difftool.arg" => [:string, "difftoolで使う引数を設定(オプション)"], - "no-color" => [:boolean, "表示内容に色を付けない"], + "no-color" => [:boolean, "カラー表示を無効にする"], "over18" => [:boolean, "", INVISIBLE], } } NovelSetting::DEFAULT_SETTINGS.each do |default|