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|