narou 2.4.2 → 2.5.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of narou might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/ChangeLog.md +56 -0
- data/README.md +56 -29
- data/lib/command/convert.rb +39 -7
- data/lib/command/diff.rb +42 -11
- data/lib/command/inspect.rb +1 -1
- data/lib/command/setting.rb +150 -45
- data/lib/command/tag.rb +8 -8
- data/lib/command/update.rb +57 -1
- data/lib/commandbase.rb +3 -0
- data/lib/converterbase.rb +17 -9
- data/lib/database.rb +4 -0
- data/lib/device/epub.rb +1 -1
- data/lib/device/ibooks.rb +1 -1
- data/lib/device/ibunko.rb +13 -6
- data/lib/device/kindle.rb +1 -1
- data/lib/device/kobo.rb +1 -1
- data/lib/device/reader.rb +1 -1
- data/lib/downloader.rb +10 -5
- data/lib/helper.rb +114 -3
- data/lib/ini.rb +3 -1
- data/lib/inventory.rb +3 -1
- data/lib/loadconverter.rb +1 -11
- data/lib/mailer.rb +1 -0
- data/lib/narou.rb +56 -5
- data/lib/novelconverter.rb +7 -5
- data/lib/novelsetting.rb +116 -63
- data/lib/template.rb +4 -4
- data/lib/version.rb +1 -1
- data/lib/web/appserver.rb +40 -9
- data/lib/web/public/resources/narou.library.js +35 -3
- data/lib/web/public/resources/narou.ui.js +16 -1
- data/lib/web/pushserver.rb +1 -0
- data/lib/web/settingmessages.rb +6 -3
- data/lib/web/views/diff_list.haml +11 -0
- data/lib/web/views/edit_replace_txt.haml +59 -0
- data/lib/web/views/help.haml +2 -2
- data/lib/web/views/index.haml +6 -4
- data/lib/web/views/layout.haml +11 -2
- data/lib/web/views/novels/setting.haml +51 -66
- data/lib/web/views/settings.haml +52 -15
- data/lib/web/views/style.scss +44 -2
- data/lib/web/views/widget.haml +6 -8
- data/narou.gemspec +45 -6
- data/spec/convert_spec.rb +1 -1
- data/spec/converterbase_spec.rb +25 -1
- data/spec/generator/convert_spec_gen.rb +1 -1
- data/spec/helper_spec.rb +8 -0
- data/spec/novelsetting_spec.rb +1 -1
- data/template/novel.txt.erb +1 -1
- data/template/setting.ini.erb +15 -3
- metadata +49 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a651bfba9ad9201bcc4ece2ebd19151387ebff02
|
4
|
+
data.tar.gz: fb010f28c7e2004fdb172362fed8dce5324f55c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ba0050ce866782f3c76d2e9dbf6aa3e6145abc2ad09175d899815e15b9be5f115582ca9a09e5762161e1492b9903d2253e4ef45cfcb062bac301b9252bff71f
|
7
|
+
data.tar.gz: 55a7ef3d3ed87d31057365eb64f91497ecc6578996fb09abce7796eb5c25d3945e5c162b5f7294e9fcad5cf0621e54c6f1816a9aa0d9fab17052ebd5598e8c22
|
data/.gitignore
CHANGED
data/ChangeLog.md
CHANGED
@@ -2,6 +2,62 @@
|
|
2
2
|
更新履歴 - ChangeLog
|
3
3
|
====================
|
4
4
|
|
5
|
+
2.5.1 : 2015/07/10
|
6
|
+
------------------
|
7
|
+
#### Bug Fix
|
8
|
+
- WEB UI において個別変換設定ページに移動するとエラーがでる問題を修正
|
9
|
+
- `inspect` コマンドを使用するとエラーがでる問題を修正
|
10
|
+
|
11
|
+
|
12
|
+
2.5.0 : 2015/07/10
|
13
|
+
------------------
|
14
|
+
#### 追加機能
|
15
|
+
- WEB UI の個別メニューから「差分を表示」を選択した際に、過去の差分を選択出来る
|
16
|
+
ようにしました
|
17
|
+
- WEB UI の個別メニューに「タグを編集」を追加しました
|
18
|
+
- 変換設定の各項目の共通設定を変更できる default.* 系設定を追加しました
|
19
|
+
+ この共通設定は setting.ini で未設定の項目がある場合に適用されます。また、
|
20
|
+
force.* が設定されていた場合は setting.ini、共通設定ともに無視されます
|
21
|
+
+ 例えば `enable_illust` の共通設定を変更したい場合、
|
22
|
+
`narou s default.enable_illust=false` とすることで変更出来ます
|
23
|
+
(WEB UIからは環境設定のページで隠しオプションを表示)
|
24
|
+
- `convert` コマンドに `--ignore-default` オプションを追加しました。変換時の
|
25
|
+
default.* 系設定を無視します
|
26
|
+
- `convert.copy-to-grouping` オプションを追加しました
|
27
|
+
+ copy-to で指定したフォルダの中に更に device もしくは convert.multi-device
|
28
|
+
で指定した端末毎に振り分けるように出来ます
|
29
|
+
+ 有効にするには `narou s convert.copy-to-grouping=true` を実行して下さい
|
30
|
+
- 全小説を対象にした replace.txt による置換に対応しました
|
31
|
+
+ narou init を使用したフォルダに replace.txt を設置すると認識します。
|
32
|
+
WEB UI においては環境設定にて設定できます
|
33
|
+
- `update` コマンドにアップデートの順番を変更する `--sort-by` オプションが追加
|
34
|
+
されました(短縮 `-s`)
|
35
|
+
+ `narou u --sort-by general_update` のように直接コマンドのオプションとして
|
36
|
+
指定するか、 `narou s update.sort-by=general_update` と設定として保存して
|
37
|
+
下さい
|
38
|
+
+ 指定出来るのは id, last_update(更新日), title(タイトル), author(作者名),
|
39
|
+
new_arrivals_date(新着日), general_lastup(最新話掲載日) です
|
40
|
+
- WEB UI の設定画面において一部項目をセレクトボックスで選択出来るようにしました
|
41
|
+
|
42
|
+
#### 仕様変更
|
43
|
+
- default.* 系設定追加に伴い、新規DL時の setting.ini の全ての項目がコメント
|
44
|
+
アウトされた状態で生成されます。また、WEB UI の個別変換設定画面にて、各項目に
|
45
|
+
「未設定」が追加されます
|
46
|
+
- `setting` コマンド(WEB UIにおける環境設定)の項目の順序・表示を変更しました
|
47
|
+
- `setting` コマンドの一部項目で適切な値が入力されなかった場合にエラーが出る
|
48
|
+
ようになりました
|
49
|
+
- WEB UI の個別メニュー内項目の並び順を変更しました
|
50
|
+
- WEB UI サーバ起動中にコマンドラインで更新した場合でもサーバを再起動せずに変更
|
51
|
+
が反映されるようになりました
|
52
|
+
|
53
|
+
#### Bug Fix
|
54
|
+
- `enable_insert_word_separator` を有効時に `[` が正常に禁則処理されない問題を
|
55
|
+
修正
|
56
|
+
- i文庫形式に変換する際に `enable_illust` の設定が無視されていたのを修正
|
57
|
+
- WEB UI サーバ起動中に converter.rb を編集しても反映されなかったのを修正
|
58
|
+
- 文章中のリンクが正しく飛べない場合があったのを修正
|
59
|
+
|
60
|
+
|
5
61
|
2.4.2 : 2015/06/07
|
6
62
|
------------------
|
7
63
|
#### Bug Fix
|
data/README.md
CHANGED
@@ -27,6 +27,62 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
27
27
|
--------------------
|
28
28
|
|
29
29
|
|
30
|
+
2.5.1 : 2015/07/10
|
31
|
+
------------------
|
32
|
+
#### Bug Fix
|
33
|
+
- WEB UI において個別変換設定ページに移動するとエラーがでる問題を修正
|
34
|
+
- `inspect` コマンドを使用するとエラーがでる問題を修正
|
35
|
+
|
36
|
+
|
37
|
+
2.5.0 : 2015/07/10
|
38
|
+
------------------
|
39
|
+
#### 追加機能
|
40
|
+
- WEB UI の個別メニューから「差分を表示」を選択した際に、過去の差分を選択出来る
|
41
|
+
ようにしました
|
42
|
+
- WEB UI の個別メニューに「タグを編集」を追加しました
|
43
|
+
- 変換設定の各項目の共通設定を変更できる default.* 系設定を追加しました
|
44
|
+
+ この共通設定は setting.ini で未設定の項目がある場合に適用されます。また、
|
45
|
+
force.* が設定されていた場合は setting.ini、共通設定ともに無視されます
|
46
|
+
+ 例えば `enable_illust` の共通設定を変更したい場合、
|
47
|
+
`narou s default.enable_illust=false` とすることで変更出来ます
|
48
|
+
(WEB UIからは環境設定のページで隠しオプションを表示)
|
49
|
+
- `convert` コマンドに `--ignore-default` オプションを追加しました。変換時の
|
50
|
+
default.* 系設定を無視します
|
51
|
+
- `convert.copy-to-grouping` オプションを追加しました
|
52
|
+
+ copy-to で指定したフォルダの中に更に device もしくは convert.multi-device
|
53
|
+
で指定した端末毎に振り分けるように出来ます
|
54
|
+
+ 有効にするには `narou s convert.copy-to-grouping=true` を実行して下さい
|
55
|
+
- 全小説を対象にした replace.txt による置換に対応しました
|
56
|
+
+ narou init を使用したフォルダに replace.txt を設置すると認識します。
|
57
|
+
WEB UI においては環境設定にて設定できます
|
58
|
+
- `update` コマンドにアップデートの順番を変更する `--sort-by` オプションが追加
|
59
|
+
されました(短縮 `-s`)
|
60
|
+
+ `narou u --sort-by general_update` のように直接コマンドのオプションとして
|
61
|
+
指定するか、 `narou s update.sort-by=general_update` と設定として保存して
|
62
|
+
下さい
|
63
|
+
+ 指定出来るのは id, last_update(更新日), title(タイトル), author(作者名),
|
64
|
+
new_arrivals_date(新着日), general_lastup(最新話掲載日) です
|
65
|
+
- WEB UI の設定画面において一部項目をセレクトボックスで選択出来るようにしました
|
66
|
+
|
67
|
+
#### 仕様変更
|
68
|
+
- default.* 系設定追加に伴い、新規DL時の setting.ini の全ての項目がコメント
|
69
|
+
アウトされた状態で生成されます。また、WEB UI の個別変換設定画面にて、各項目に
|
70
|
+
「未設定」が追加されます
|
71
|
+
- `setting` コマンド(WEB UIにおける環境設定)の項目の順序・表示を変更しました
|
72
|
+
- `setting` コマンドの一部項目で適切な値が入力されなかった場合にエラーが出る
|
73
|
+
ようになりました
|
74
|
+
- WEB UI の個別メニュー内項目の並び順を変更しました
|
75
|
+
- WEB UI サーバ起動中にコマンドラインで更新した場合でもサーバを再起動せずに変更
|
76
|
+
が反映されるようになりました
|
77
|
+
|
78
|
+
#### Bug Fix
|
79
|
+
- `enable_insert_word_separator` を有効時に `[` が正常に禁則処理されない問題を
|
80
|
+
修正
|
81
|
+
- i文庫形式に変換する際に `enable_illust` の設定が無視されていたのを修正
|
82
|
+
- WEB UI サーバ起動中に converter.rb を編集しても反映されなかったのを修正
|
83
|
+
- 文章中のリンクが正しく飛べない場合があったのを修正
|
84
|
+
|
85
|
+
|
30
86
|
2.4.2 : 2015/06/07
|
31
87
|
------------------
|
32
88
|
#### Bug Fix
|
@@ -57,35 +113,6 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
57
113
|
- 連続したミュートが正しく変換できていなかったのを修正
|
58
114
|
|
59
115
|
|
60
|
-
2.4.0 : 2015/05/16
|
61
|
-
------------------
|
62
|
-
#### 追加機能
|
63
|
-
- WEB UI に保存フォルダを開くためのボタンを表示する項目「保存先」を追加しました
|
64
|
-
- WEB UI に項目「最新話掲載日」を追加しました
|
65
|
-
+ 「小説家になろう」と「ハーメルン」のみ対応しています(updateした小説から
|
66
|
-
反映されていきます)。更新が無いと反映されないため、手動で反映させたい場合
|
67
|
-
はWEB UI サーバを落とした状態で `narou u --gl` コマンドを使用して下さい。
|
68
|
-
(基本的に一度実行するだけで十分です)
|
69
|
-
|
70
|
-
#### 仕様変更
|
71
|
-
- 小説リストの「新着」及び「更新」の表示基準を調整しました
|
72
|
-
- replace.txt による置換を行うタイミングを変更しました
|
73
|
-
+ 今までは (before→本体処理→after)*話数分→置換 という処理順だったものが、
|
74
|
-
(before→本体処理→after→置換)*話数分 という処理順になりました
|
75
|
-
|
76
|
-
#### Bug Fix
|
77
|
-
- `enable_insert_word_separator` を有効にした場合に発生する以下の不具合を修正
|
78
|
-
+ 開きカッコの禁則処理が Kindle で処理されなくなる
|
79
|
-
+ replace.txt による置換が正常に行われない場合がある
|
80
|
-
+ URLが含まれている文章の単語分割が正常に行われない
|
81
|
-
- あらすじだけ更新された場合にデータベースが更新されていなかった不具合を修正
|
82
|
-
- 小説サイトのサーバーがダウンしている時にエラーがでる問題を修正
|
83
|
-
- WEB UI の小説リストにおいて、更新・新着の表示期間が過ぎているにも関わらず、
|
84
|
-
アップデート等をした際に消えない不具合を修正
|
85
|
-
- ハーメルンで非公開になっている小説をアップデートするとエラーになる不具合
|
86
|
-
を修正
|
87
|
-
|
88
|
-
|
89
116
|
|
90
117
|
----
|
91
118
|
|
data/lib/command/convert.rb
CHANGED
@@ -90,6 +90,9 @@ module Command
|
|
90
90
|
@opt.on("-v", "--verbose", "AozoraEpub3, kindlegen の標準出力を全て表示する") {
|
91
91
|
@options["verbose"] = true
|
92
92
|
}
|
93
|
+
@opt.on("--ignore-default", "settingコマンドのdefault系設定を無視する") {
|
94
|
+
@options["ignore-default"] = true
|
95
|
+
}
|
93
96
|
@opt.on("--ignore-force", "settingコマンドのforce系設定を無視する") {
|
94
97
|
@options["ignore-force"] = true
|
95
98
|
}
|
@@ -172,6 +175,9 @@ module Command
|
|
172
175
|
def convert_novels(argv)
|
173
176
|
tagname_to_ids(argv)
|
174
177
|
argv.each.with_index(1) do |target, i|
|
178
|
+
@target = target
|
179
|
+
@novel_data = nil
|
180
|
+
|
175
181
|
Helper.print_horizontal_rule if i > 1
|
176
182
|
if @basename
|
177
183
|
@basename << " (#{i})" if argv.length > 1
|
@@ -191,6 +197,7 @@ module Command
|
|
191
197
|
output_filename: @output_filename,
|
192
198
|
display_inspector: @options["inspect"],
|
193
199
|
ignore_force: @options["ignore-force"],
|
200
|
+
ignore_default: @options["ignore-default"],
|
194
201
|
})
|
195
202
|
@novel_data = Downloader.get_data_by_target(target)
|
196
203
|
end
|
@@ -247,6 +254,7 @@ module Command
|
|
247
254
|
output_filename: @output_filename,
|
248
255
|
display_inspector: @options["inspect"],
|
249
256
|
ignore_force: @options["ignore-force"],
|
257
|
+
ignore_default: @options["ignore-default"],
|
250
258
|
})
|
251
259
|
rescue ArgumentError => e
|
252
260
|
if e.message =~ /invalid byte sequence in UTF-8/
|
@@ -305,21 +313,45 @@ module Command
|
|
305
313
|
return mobi_path
|
306
314
|
end
|
307
315
|
|
316
|
+
class NoSuchDirectory < StandardError; end
|
317
|
+
|
308
318
|
#
|
309
319
|
# convert.copy-to で指定されたディレクトリに書籍データをコピーする
|
310
320
|
#
|
311
321
|
def copy_to_converted_file(src_path)
|
322
|
+
copy_to_dir = get_copy_to_directory
|
323
|
+
return nil unless copy_to_dir
|
324
|
+
FileUtils.copy(src_path, copy_to_dir)
|
325
|
+
return File.join(copy_to_dir, File.basename(src_path))
|
326
|
+
rescue NoSuchDirectory => e
|
327
|
+
error "#{e.message} はフォルダではないかすでに削除されています。コピー出来ませんでした"
|
328
|
+
nil
|
329
|
+
end
|
330
|
+
|
331
|
+
#
|
332
|
+
# 書籍ファイルのコピー先を取得
|
333
|
+
#
|
334
|
+
# copy-to が設定されていなければ nil を返す。
|
335
|
+
# 存在しないディレクトリだった場合は例外を投げる
|
336
|
+
#
|
337
|
+
def get_copy_to_directory
|
312
338
|
# 2.1.0 から convert.copy_to から convert.copy-to へ名称が変更された
|
313
|
-
# (
|
339
|
+
# (互換性維持のため、copy_to も使えるようにはしておく)
|
314
340
|
copy_to_dir = @options["copy-to"] || @options["copy_to"]
|
315
341
|
return nil unless copy_to_dir
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
return
|
342
|
+
unless File.directory?(copy_to_dir)
|
343
|
+
raise NoSuchDirectory, copy_to_dir
|
344
|
+
end
|
345
|
+
# deviceごとにフォルダ振り分けの処理
|
346
|
+
if !@options["copy-to-grouping"] || !@device
|
347
|
+
return copy_to_dir
|
348
|
+
end
|
349
|
+
copy_to_dir_with_device = File.join(copy_to_dir, @device.display_name)
|
350
|
+
unless File.directory?(copy_to_dir_with_device)
|
351
|
+
FileUtils.mkdir(copy_to_dir_with_device)
|
322
352
|
end
|
353
|
+
copy_to_dir_with_device
|
323
354
|
end
|
355
|
+
private :get_copy_to_directory
|
324
356
|
end
|
325
357
|
end
|
data/lib/command/diff.rb
CHANGED
@@ -125,6 +125,11 @@ module Command
|
|
125
125
|
str !~ /^\d{4}\.\d{2}\.\d{2}@\d{2}[;.]\d{2}[;.]\d{2}$/
|
126
126
|
end
|
127
127
|
|
128
|
+
def version_string_to_time(string)
|
129
|
+
ymd, hms = string.split("@")
|
130
|
+
Helper.date_string_to_time("#{ymd} #{hms.tr(".", ":")}")
|
131
|
+
end
|
132
|
+
|
128
133
|
def clean_diff(id)
|
129
134
|
cache_root_dir = Downloader.get_cache_root_dir(id)
|
130
135
|
print Database.instance.get_data("id", id)["title"] + " の"
|
@@ -227,29 +232,55 @@ module Command
|
|
227
232
|
end
|
228
233
|
end
|
229
234
|
temp = Tempfile.open([temp_prefix, ".txt"])
|
230
|
-
temp.write(Template.get("diff.txt", binding))
|
235
|
+
temp.write(Template.get("diff.txt", binding, 1.0))
|
231
236
|
temp.close
|
232
237
|
temp
|
233
238
|
end
|
234
239
|
|
235
|
-
def
|
240
|
+
def get_diff_list(id)
|
241
|
+
list = {
|
242
|
+
id: id,
|
243
|
+
title: Database.instance.get_data("id", id)["title"],
|
244
|
+
list: []
|
245
|
+
}
|
236
246
|
cache_list = get_sorted_cache_list(id)
|
237
|
-
|
238
|
-
if cache_list.empty?
|
239
|
-
puts "差分はひとつもありません"
|
240
|
-
return
|
241
|
-
end
|
242
|
-
puts "差分一覧"
|
247
|
+
return list if cache_list.empty?
|
243
248
|
cache_list.each.with_index(1) do |cache_path, i|
|
244
|
-
|
249
|
+
objects = []
|
250
|
+
version_string = File.basename(cache_path)
|
251
|
+
data = {
|
252
|
+
number: i,
|
253
|
+
version_string: version_string,
|
254
|
+
time: version_string_to_time(version_string),
|
255
|
+
objects: objects
|
256
|
+
}
|
257
|
+
list[:list].push(data)
|
245
258
|
cache_section_list = Dir.glob(File.join(cache_path, "*.yaml"))
|
246
259
|
if cache_section_list.length > 0
|
247
260
|
cache_section_list.map { |section_path|
|
248
261
|
File.basename(section_path, ".yaml").split(" ", 2)
|
249
262
|
}.sort_by { |v| v[0].to_i }.each { |index, subtitle|
|
250
|
-
|
263
|
+
objects.push({ index: index, subtitle: subtitle })
|
251
264
|
}
|
252
|
-
|
265
|
+
end
|
266
|
+
end
|
267
|
+
list
|
268
|
+
end
|
269
|
+
|
270
|
+
def display_diff_list(id)
|
271
|
+
list = get_diff_list(id)
|
272
|
+
print "#{list[:title]} の"
|
273
|
+
if list[:list].empty?
|
274
|
+
puts "差分はひとつもありません"
|
275
|
+
return
|
276
|
+
end
|
277
|
+
puts "差分一覧"
|
278
|
+
list[:list].each do |data|
|
279
|
+
puts "<bold><yellow>#{data[:version_string]} -#{data[:number]}</yellow></bold>".termcolor
|
280
|
+
data[:objects].each do |object|
|
281
|
+
puts " 第#{object[:index]}部分 #{object[:subtitle]}"
|
282
|
+
end
|
283
|
+
if data[:objects].empty?
|
253
284
|
puts " (最新話のみのアップデート)"
|
254
285
|
end
|
255
286
|
end
|
data/lib/command/inspect.rb
CHANGED
@@ -53,7 +53,7 @@ module Command
|
|
53
53
|
|
54
54
|
def display_log(title)
|
55
55
|
puts "(#{title} の小説状態調査状況ログ)"
|
56
|
-
novel_setting = NovelSetting.load(title, false)
|
56
|
+
novel_setting = NovelSetting.load(title, false, false)
|
57
57
|
puts Inspector.read_messages(novel_setting) || "調査ログがまだ無いようです"
|
58
58
|
end
|
59
59
|
end
|
data/lib/command/setting.rb
CHANGED
@@ -11,6 +11,8 @@ module Command
|
|
11
11
|
class Setting < CommandBase
|
12
12
|
include Narou::Eventable
|
13
13
|
|
14
|
+
class InvalidSelectValue < StandardError; end
|
15
|
+
|
14
16
|
def self.oneline_help
|
15
17
|
"各コマンドの設定を変更します"
|
16
18
|
end
|
@@ -22,6 +24,8 @@ module Command
|
|
22
24
|
・各コマンドの設定の変更が出来ます。
|
23
25
|
・Global な設定はユーザープロファイルに保存され、すべての narou コマンドで使われます
|
24
26
|
・下の一覧は一部です。すべてを確認するには -a オプションを付けて確認して下さい
|
27
|
+
・default. で始まる設定は、setting.ini で未設定時の項目の挙動を指定することが出来ます
|
28
|
+
・force. で始まる設定は、setting.ini や default.* 等の指定を全て無視して項目の挙動を強制出来ます
|
25
29
|
|
26
30
|
Local Variable List:
|
27
31
|
<name> <value> 説明
|
@@ -71,7 +75,25 @@ module Command
|
|
71
75
|
unless scope
|
72
76
|
raise Helper::InvalidVariableName, "#{name} は不明な名前です"
|
73
77
|
end
|
74
|
-
|
78
|
+
variable_definition = SETTING_VARIABLES[scope][name]
|
79
|
+
case variable_definition[:type]
|
80
|
+
when :select
|
81
|
+
select_values = variable_definition[:select_keys]
|
82
|
+
unless select_values.include?(value)
|
83
|
+
raise InvalidSelectValue, "不明な値です。#{select_values.join(", ")} の中から指定して下さい"
|
84
|
+
end
|
85
|
+
casted_value = value
|
86
|
+
when :multiple
|
87
|
+
select_values = variable_definition[:select_keys]
|
88
|
+
value.split(",").each do |input_value|
|
89
|
+
unless select_values.include?(input_value)
|
90
|
+
raise InvalidSelectValue, "不明な値です。#{select_values.join(", ")} の中から指定して下さい"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
casted_value = value
|
94
|
+
else
|
95
|
+
casted_value = Helper.string_cast_to_type(value, variable_definition[:type])
|
96
|
+
end
|
75
97
|
[scope, casted_value]
|
76
98
|
end
|
77
99
|
|
@@ -152,7 +174,7 @@ module Command
|
|
152
174
|
end
|
153
175
|
begin
|
154
176
|
scope, casted_value = casting_variable(name, value)
|
155
|
-
rescue Helper::InvalidVariableName, Helper::InvalidVariableType => e
|
177
|
+
rescue Helper::InvalidVariableName, Helper::InvalidVariableType, InvalidSelectValue => e
|
156
178
|
output_error(e.message, name)
|
157
179
|
next
|
158
180
|
end
|
@@ -199,9 +221,9 @@ module Command
|
|
199
221
|
def get_variable_list_strings(scope)
|
200
222
|
result = ""
|
201
223
|
SETTING_VARIABLES[scope].each do |name, info|
|
202
|
-
if @options["all"] || info[
|
203
|
-
type_description = Helper.variable_type_to_description(info[
|
204
|
-
result << " <bold><green>#{name.ljust(18)}</green></bold> #{type_description} #{info[
|
224
|
+
if @options["all"] || !info[:invisible]
|
225
|
+
type_description = Helper.variable_type_to_description(info[:type])
|
226
|
+
result << " <bold><green>#{name.ljust(18)}</green></bold> #{type_description} #{info[:help]}\n".termcolor
|
205
227
|
end
|
206
228
|
end
|
207
229
|
result
|
@@ -219,57 +241,140 @@ module Command
|
|
219
241
|
SETTING_VARIABLES
|
220
242
|
end
|
221
243
|
|
222
|
-
INVISIBLE = true
|
223
|
-
|
224
244
|
SETTING_VARIABLES = {
|
225
245
|
local: {
|
226
|
-
# 変数名 =>
|
227
|
-
|
228
|
-
|
229
|
-
"
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
"
|
236
|
-
|
237
|
-
|
238
|
-
"
|
239
|
-
|
240
|
-
|
241
|
-
"
|
242
|
-
|
243
|
-
|
244
|
-
"
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
246
|
+
# 変数名 => { type: 受け付ける型, help: 説明[, invisible: 不可視化フラグ,
|
247
|
+
# select_keys: 選択肢型の時のキー(配列),
|
248
|
+
# select_summaries: 選択肢型の時のキーの概要(配列)] }
|
249
|
+
"device" => {
|
250
|
+
type: :select,
|
251
|
+
help: "変換、送信対象の端末(sendの--help参照)",
|
252
|
+
select_keys: Device::DEVICES.keys,
|
253
|
+
select_summaries: Device::DEVICES.values.map { |d| d::DISPLAY_NAME }
|
254
|
+
},
|
255
|
+
"update.strong" => {
|
256
|
+
type: :boolean, help: "更新漏れが無い様に改稿日の分は必ずDLするか"
|
257
|
+
},
|
258
|
+
"update.logging" => {
|
259
|
+
type: :boolean, help: "更新時のログを保存するかどうか"
|
260
|
+
},
|
261
|
+
"update.convert-only-new-arrival" => {
|
262
|
+
type: :boolean, help: "更新時に新着のみ変換を実行するかどうか"
|
263
|
+
},
|
264
|
+
"update.sort-by" => {
|
265
|
+
type: :select,
|
266
|
+
help: "アップデートを指定した項目順で行う\n#{Narou.update_sort_key_summaries(40)}",
|
267
|
+
select_keys: Narou::UPDATE_SORT_KEYS.keys,
|
268
|
+
select_summaries: Narou::UPDATE_SORT_KEYS.values
|
269
|
+
},
|
270
|
+
"convert.copy-to" => {
|
271
|
+
type: :directory,
|
272
|
+
help: "変換したらこのフォルダにコピーする\n" \
|
273
|
+
" ※注意:存在しないフォルダだとエラーになる"
|
274
|
+
},
|
275
|
+
"convert.copy-to-grouping" => {
|
276
|
+
type: :boolean, help: "copy-toで指定したフォルダの中で更にdevice毎にフォルダを振り分ける"
|
277
|
+
},
|
278
|
+
"convert.copy_to" => {
|
279
|
+
type: :directory, help: "copy-toの昔の書き方(非推奨)", invisible: true
|
280
|
+
},
|
281
|
+
"convert.no-epub" => {
|
282
|
+
type: :boolean, help: "EPUB変換を無効にするか", invisible: true
|
283
|
+
},
|
284
|
+
"convert.no-mobi" => {
|
285
|
+
type: :boolean, help: "MOBI変換を無効にするか", invisible: true
|
286
|
+
},
|
287
|
+
"convert.no-strip" => {
|
288
|
+
type: :boolean,
|
289
|
+
help: "MOBIのstripを無効にするか\n" \
|
290
|
+
" ※注意:KDP用のMOBIはstripしないでください",
|
291
|
+
invisible: true
|
292
|
+
},
|
293
|
+
"convert.no-zip" => {
|
294
|
+
type: :boolean, help: "i文庫用のzipファイル作成を無効にするか", invisible: true
|
295
|
+
},
|
296
|
+
"convert.no-open" => {
|
297
|
+
type: :boolean, help: "変換時に保存フォルダを開かないようにするか"
|
298
|
+
},
|
299
|
+
"convert.inspect" => {
|
300
|
+
type: :boolean, help: "常に変換時に調査結果を表示するか"
|
301
|
+
},
|
302
|
+
"convert.multi-device" => {
|
303
|
+
type: :multiple,
|
304
|
+
help: "複数の端末用に同時に変換する。deviceよりも優先される。" \
|
305
|
+
"端末名をカンマ区切りで入力。ただのEPUBを出力したい場合はepubを指定",
|
306
|
+
select_keys: Device::DEVICES.keys,
|
307
|
+
select_summaries: Device::DEVICES.values.map { |d| d::DISPLAY_NAME }
|
308
|
+
},
|
309
|
+
"download.interval" => {
|
310
|
+
type: :float, help: "各話DL時に指定した秒数待機する。デフォルト0"
|
311
|
+
},
|
312
|
+
"download.wait-steps" => {
|
313
|
+
type: :integer,
|
314
|
+
help: "この値で指定した話数ごとにウェイトを入れる\n" \
|
315
|
+
" ※注意:11以上を設定してもなろうの場合は10話ごとにウェイトが入ります"
|
316
|
+
},
|
317
|
+
"download.use-subdirectory" => {
|
318
|
+
type: :boolean,
|
319
|
+
help: "小説を一定数ごとにサブフォルダへ分けて保存するか\n" \
|
320
|
+
" ※注意:小説を大量に同一フォルダに保存するとパフォーマンスが劣化する回避策"
|
321
|
+
},
|
322
|
+
"send.without-freeze" => {
|
323
|
+
type: :boolean, help: "一括送信時に凍結された小説は対象外に"
|
324
|
+
},
|
325
|
+
"send.backup-bookmark" => {
|
326
|
+
type: :boolean, help: "一括送信時に栞データを自動でバックアップするか(KindlePW系用)"
|
327
|
+
},
|
328
|
+
"multiple-delimiter" => {
|
329
|
+
type: :string, help: "--multiple指定時の区切り文字"
|
330
|
+
},
|
250
331
|
},
|
251
332
|
global: {
|
252
|
-
"aozoraepub3dir" =>
|
253
|
-
|
254
|
-
|
255
|
-
"
|
256
|
-
|
257
|
-
|
258
|
-
"
|
259
|
-
|
333
|
+
"aozoraepub3dir" => {
|
334
|
+
type: :directory, help: "AozoraEpub3のあるフォルダを指定", invisible: true
|
335
|
+
},
|
336
|
+
"difftool" => {
|
337
|
+
type: :string, help: "Diffで使うツールのパスを指定する"
|
338
|
+
},
|
339
|
+
"difftool.arg" => {
|
340
|
+
type: :string, help: "difftoolで使う引数を設定(オプション)"
|
341
|
+
},
|
342
|
+
"no-color" => {
|
343
|
+
type: :boolean, help: "カラー表示を無効にするか"
|
344
|
+
},
|
345
|
+
"server-port" => {
|
346
|
+
type: :integer, help: "WEBサーバ起動時のポート"
|
347
|
+
},
|
348
|
+
"server-bind" => {
|
349
|
+
type: :string, help: "WEBサーバのホスト制限(未設定時:起動PCのIP)", invisible: true
|
350
|
+
},
|
351
|
+
"over18" => {
|
352
|
+
type: :boolean, help: "18歳以上かどうか", invisible: true
|
353
|
+
},
|
354
|
+
"dismiss-notice" => {
|
355
|
+
type: :boolean, help: "お知らせを消すかどうか", invisible: true
|
356
|
+
},
|
260
357
|
}
|
261
358
|
}
|
262
359
|
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
360
|
+
%w(default force).each do |kind|
|
361
|
+
NovelSetting::ORIGINAL_SETTINGS.each do |default|
|
362
|
+
value = {
|
363
|
+
type: default[:type],
|
364
|
+
help: "\n " + default[:help],
|
365
|
+
invisible: true,
|
366
|
+
select_keys: default[:select_keys],
|
367
|
+
select_summaries: default[:select_summaries]
|
368
|
+
}
|
369
|
+
SETTING_VARIABLES[:local]["#{kind}." + default[:name]] = value
|
370
|
+
end
|
267
371
|
end
|
268
372
|
|
269
373
|
Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), "*.rb"))) do |path|
|
270
374
|
cmd_name = File.basename(path, ".rb")
|
271
|
-
SETTING_VARIABLES[:local]["default_args." + cmd_name] =
|
272
|
-
|
375
|
+
SETTING_VARIABLES[:local]["default_args." + cmd_name] = {
|
376
|
+
type: :string, help: "#{cmd_name} コマンドのデフォルトオプション", invisible: true
|
377
|
+
}
|
273
378
|
end
|
274
379
|
|
275
380
|
SETTING_VARIABLES.freeze
|