narou 2.0.2 → 2.1.0
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 +2 -0
- data/ChangeLog.md +45 -1
- data/README.md +45 -7
- data/lib/command.rb +0 -1
- data/lib/command/convert.rb +49 -7
- data/lib/command/list.rb +2 -5
- data/lib/command/send.rb +49 -6
- data/lib/command/setting.rb +9 -4
- data/lib/command/update.rb +89 -32
- data/lib/converterbase.rb +2 -1
- data/lib/device.rb +16 -2
- data/lib/device/epub.rb +20 -0
- data/lib/device/ibooks.rb +0 -4
- data/lib/device/kindle.rb +20 -0
- data/lib/device/reader.rb +3 -8
- data/lib/helper.rb +19 -0
- data/lib/logger.rb +21 -4
- data/lib/narou.rb +29 -25
- data/lib/novelconverter.rb +1 -3
- data/lib/novelsetting.rb +6 -0
- data/lib/version.rb +1 -1
- data/lib/web/appserver.rb +1 -1
- data/lib/web/helper4web.rb +11 -1
- data/lib/web/public/resources/narou.library.js +15 -8
- data/lib/web/settingmessages.rb +1 -0
- data/lib/web/streaminglogger.rb +16 -0
- data/lib/web/views/help.haml +18 -3
- data/lib/web/views/js/widget.erb +5 -1
- data/narou.gemspec +46 -0
- data/narou.rb +10 -1
- data/spec/logger_spec.rb +35 -1
- metadata +62 -3
- data/lib/command/flag.rb +0 -109
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a78f1a8587ee3566156fe0a9a13e0285c01846d1
|
4
|
+
data.tar.gz: 80dfcf3a22388315a59e2ad5f4c6f084b7c84919
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05adefce83f872ce97d8ee8ec91b6f49ccc60c8cb0e1b4f27d6dc54d8bc9c39a44c61a16fe8ac18467c3c10b70bed9c18c9220332d754185c241b401850582cb
|
7
|
+
data.tar.gz: 54ade18b6f51d5e8bb9e01afcf3970c35ed81c6a20fba5f05e9e57e09416d16e30da0b832b459db978f187aba1c361d67e60c68c61863ac4ebcde2691747d4ec
|
data/.gitignore
CHANGED
data/ChangeLog.md
CHANGED
@@ -2,6 +2,51 @@
|
|
2
2
|
更新履歴 - ChangeLog
|
3
3
|
====================
|
4
4
|
|
5
|
+
2.1.0 : 2015/01/19
|
6
|
+
------------------
|
7
|
+
#### 追加機能
|
8
|
+
- `convert.multi-device` オプションが追加されました
|
9
|
+
+ `convert` コマンド使用時に複数のフォーマットへ同時に変換することが出来ます
|
10
|
+
+ `narou s convert.multi-device=kindle,kobo,reader` のようにカンマ区切りで
|
11
|
+
設定します。この設定を有効にした場合、変換時に `device` 設定は無視されます
|
12
|
+
+ `send` コマンド時には通常通り `device` の設定が使用されます
|
13
|
+
+ 普通のEPUBが出力したい場合、端末名として `epub` を指定して下さい
|
14
|
+
- `update.logging` オプションが追加されました
|
15
|
+
+ `update` コマンド使用時にログを保存するようになります
|
16
|
+
+ `narou s update.logging=true` で設定出来ます
|
17
|
+
+ ログはテキストファイルとして `log/` フォルダに保存されます(最新30件まで)。
|
18
|
+
また、 `narou u --log N` コマンドでも確認出来ます(N=1以上の整数)。
|
19
|
+
Nを省略した場合は最新のログが表示されます。短縮する場合は `narou u -l N`
|
20
|
+
- `send.backup-bookmark` オプションが追加されました
|
21
|
+
+ `send` コマンド使用時に端末の栞データを自動でバックアップします(KindlePW系
|
22
|
+
専用。他の端末も栞データの仕様が分かれば対応可能)
|
23
|
+
+ `narou s send.backup-bookmark=true` で設定出来ます
|
24
|
+
+ 一括送信時(`narou send` とだけコマンドを打った時)のみバックアップします
|
25
|
+
+ 上記設定をせずに手動でバックアップする場合は `narou send --backup-bookmark`
|
26
|
+
もしくは `narou send -b` で行います
|
27
|
+
+ バックアップした栞データを復元(端末にコピー)するには
|
28
|
+
`narou send --restore-bookmark` もしくは `narou send -r` で行います
|
29
|
+
- 変換設定に行頭字下げを強制的に行う `enable_force_indent` を追加しました
|
30
|
+
+ enable_auto_indent は作者の意図的な字下げ無しを考慮して、全体的に字下げが
|
31
|
+
行われていない時にのみ字下げをするのに対して、今回のオプションは強制的に
|
32
|
+
字下げを行います。作者の字下げ忘れが多い場合に有効です
|
33
|
+
- WEB UI用ブックマークレットを実行した時にサーバがオフラインかどうか分かるよう
|
34
|
+
になりました。ヘルプ画面からブックマークレットを更新して下さい
|
35
|
+
|
36
|
+
#### 仕様変更
|
37
|
+
- `convert.copy_to` を `convert.copy-to` へ変更しました(表記ゆれの統一の為)
|
38
|
+
+ copy_to も後方互換維持のため残されますが、今後は非推奨になります
|
39
|
+
- `flag` コマンドが削除されました
|
40
|
+
|
41
|
+
#### Bug Fix
|
42
|
+
- WEB UI: リロードしても変換中のプログレスバーが表示されるように修正 #57
|
43
|
+
|
44
|
+
#### その他
|
45
|
+
- 将来的に対応バージョンを上げる予定なので、古いRuby(2.1.0未満)を使用している
|
46
|
+
場合にお知らせを表示するようになりました。当面は1.9.3でも動くままですが、いま
|
47
|
+
のうちにRuby2.1.0以上へのアップグレードをお願いします
|
48
|
+
|
49
|
+
|
5
50
|
2.0.2 : 2015/01/16
|
6
51
|
------------------
|
7
52
|
#### 仕様変更
|
@@ -65,7 +110,6 @@
|
|
65
110
|
------------------
|
66
111
|
#### Bug Fix
|
67
112
|
- 暁の18禁小説がダウンロードできなかったのを修正
|
68
|
-
>>>>>>> 1.8
|
69
113
|
|
70
114
|
|
71
115
|
1.7.0 : 2014/09/27
|
data/README.md
CHANGED
@@ -26,6 +26,51 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
26
26
|
更新履歴 - ChangeLog
|
27
27
|
--------------------
|
28
28
|
|
29
|
+
### 2.1.0 : 2015/01/19
|
30
|
+
|
31
|
+
#### 追加機能
|
32
|
+
- `convert.multi-device` オプションが追加されました
|
33
|
+
+ `convert` コマンド使用時に複数のフォーマットへ同時に変換することが出来ます
|
34
|
+
+ `narou s convert.multi-device=kindle,kobo,reader` のようにカンマ区切りで
|
35
|
+
設定します。この設定を有効にした場合、変換時に `device` 設定は無視されます
|
36
|
+
+ `send` コマンド時には通常通り `device` の設定が使用されます
|
37
|
+
+ 普通のEPUBが出力したい場合、端末名として `epub` を指定して下さい
|
38
|
+
- `update.logging` オプションが追加されました
|
39
|
+
+ `update` コマンド使用時にログを保存するようになります
|
40
|
+
+ `narou s update.logging=true` で設定出来ます
|
41
|
+
+ ログはテキストファイルとして `log/` フォルダに保存されます(最新30件まで)。
|
42
|
+
また、 `narou u --log N` コマンドでも確認出来ます(N=1以上の整数)。
|
43
|
+
Nを省略した場合は最新のログが表示されます。短縮する場合は `narou u -l N`
|
44
|
+
- `send.backup-bookmark` オプションが追加されました
|
45
|
+
+ `send` コマンド使用時に端末の栞データを自動でバックアップします(KindlePW系
|
46
|
+
専用。他の端末も栞データの仕様が分かれば対応可能)
|
47
|
+
+ `narou s send.backup-bookmark=true` で設定出来ます
|
48
|
+
+ 一括送信時(`narou send` とだけコマンドを打った時)のみバックアップします
|
49
|
+
+ 上記設定をせずに手動でバックアップする場合は `narou send --backup-bookmark`
|
50
|
+
もしくは `narou send -b` で行います
|
51
|
+
+ バックアップした栞データを復元(端末にコピー)するには
|
52
|
+
`narou send --restore-bookmark` もしくは `narou send -r` で行います
|
53
|
+
- 変換設定に行頭字下げを強制的に行う `enable_force_indent` を追加しました
|
54
|
+
+ enable_auto_indent は作者の意図的な字下げ無しを考慮して、全体的に字下げが
|
55
|
+
行われていない時にのみ字下げをするのに対して、今回のオプションは強制的に
|
56
|
+
字下げを行います。作者の字下げ忘れが多い場合に有効です
|
57
|
+
- WEB UI用ブックマークレットを実行した時にサーバがオフラインかどうか分かるよう
|
58
|
+
になりました。ヘルプ画面からブックマークレットを更新して下さい
|
59
|
+
|
60
|
+
#### 仕様変更
|
61
|
+
- `convert.copy_to` を `convert.copy-to` へ変更しました(表記ゆれの統一の為)
|
62
|
+
+ copy_to も後方互換維持のため残されますが、今後は非推奨になります
|
63
|
+
- `flag` コマンドが削除されました
|
64
|
+
|
65
|
+
#### Bug Fix
|
66
|
+
- WEB UI: リロードしても変換中のプログレスバーが表示されるように修正 #57
|
67
|
+
|
68
|
+
#### その他
|
69
|
+
- 将来的に対応バージョンを上げる予定なので、古いRuby(2.1.0未満)を使用している
|
70
|
+
場合にお知らせを表示するようになりました。当面は1.9.3でも動くままですが、いま
|
71
|
+
のうちにRuby2.1.0以上へのアップグレードをお願いします
|
72
|
+
|
73
|
+
|
29
74
|
### 2.0.2 : 2015/01/16
|
30
75
|
|
31
76
|
#### 仕様変更
|
@@ -80,13 +125,6 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
80
125
|
|
81
126
|
----
|
82
127
|
|
83
|
-
### 1.7.2 : 2014/11/26
|
84
|
-
|
85
|
-
#### Bug Fix
|
86
|
-
- デバイスの容量不足で送信に失敗した小説が、再度送信されない問題を修正
|
87
|
-
|
88
|
-
----
|
89
|
-
|
90
128
|
過去の更新履歴は[こちらを参照](https://github.com/whiteleaf7/narou/blob/master/ChangeLog.md)
|
91
129
|
|
92
130
|
----
|
data/lib/command.rb
CHANGED
data/lib/command/convert.rb
CHANGED
@@ -97,7 +97,7 @@ module Command
|
|
97
97
|
|
98
98
|
Configuration:
|
99
99
|
--no-epub, --no-mobi, --no-strip, --no-open , --inspect は narou setting コマンドで恒常的な設定にすることが可能です。
|
100
|
-
convert.
|
100
|
+
convert.copy-to を設定すれば変換したEPUB/MOBIを指定のフォルダに自動でコピー出来ます。
|
101
101
|
device で設定した端末が接続されていた場合、対応するデータを自動送信します。
|
102
102
|
詳しくは narou setting --help を参照して下さい。
|
103
103
|
EOS
|
@@ -123,10 +123,50 @@ module Command
|
|
123
123
|
return
|
124
124
|
end
|
125
125
|
end
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
126
|
+
|
127
|
+
@multi_device = @options["multi-device"]
|
128
|
+
device_names = if @multi_device
|
129
|
+
@multi_device.split(",").map(&:strip).map(&:downcase).select { |name|
|
130
|
+
Device.exists?(name).tap { |this|
|
131
|
+
unless this
|
132
|
+
error "[convert.multi-device] #{name} は有効な端末名ではありません"
|
133
|
+
end
|
134
|
+
}
|
135
|
+
}
|
136
|
+
else
|
137
|
+
[nil] # nil で device 設定が読まれる
|
138
|
+
end
|
139
|
+
# kindle用のmobiを作る過程でepubが作成され、上書きされてしまうので、最初に作るようにする
|
140
|
+
kindle = device_names.delete("kindle")
|
141
|
+
device_names.unshift(kindle) if kindle
|
142
|
+
|
143
|
+
if @multi_device && device_names.empty?
|
144
|
+
error "有効な端末名がひとつもありませんでした"
|
145
|
+
exit Narou::EXIT_ERROR_CODE
|
146
|
+
end
|
147
|
+
|
148
|
+
device_names.each do |name|
|
149
|
+
@device = Narou.get_device(name)
|
150
|
+
if name
|
151
|
+
puts "<bold><magenta>>> #{@device.display_name}用に変換します</magenta></bold>".termcolor
|
152
|
+
end
|
153
|
+
self.extend(@device.get_hook_module) if @device
|
154
|
+
hook_call(:change_settings)
|
155
|
+
convert_novels(argv)
|
156
|
+
end
|
157
|
+
|
158
|
+
# device の設定に戻す
|
159
|
+
if @multi_device
|
160
|
+
device = Narou.get_device
|
161
|
+
force_change_settings_function(device.get_relative_variables) if device
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def change_settings
|
166
|
+
return unless @device
|
167
|
+
if @multi_device
|
168
|
+
force_change_settings_function(@device.get_relative_variables)
|
169
|
+
end
|
130
170
|
end
|
131
171
|
|
132
172
|
def convert_novels(argv)
|
@@ -266,10 +306,12 @@ module Command
|
|
266
306
|
end
|
267
307
|
|
268
308
|
#
|
269
|
-
# convert.
|
309
|
+
# convert.copy-to で指定されたディレクトリに書籍データをコピーする
|
270
310
|
#
|
271
311
|
def copy_to_converted_file(src_path)
|
272
|
-
|
312
|
+
# 2.1.0 から convert.copy_to から convert.copy-to へ名称が変更された
|
313
|
+
# (互換性維持のための処理)
|
314
|
+
copy_to_dir = @options["copy-to"] || @options["copy_to"]
|
273
315
|
return nil unless copy_to_dir
|
274
316
|
if File.directory?(copy_to_dir)
|
275
317
|
FileUtils.copy(src_path, copy_to_dir)
|
data/lib/command/list.rb
CHANGED
@@ -162,10 +162,7 @@ module Command
|
|
162
162
|
end
|
163
163
|
disp_id = ((frozen ? "*" : "") + id.to_s).rjust(4)
|
164
164
|
disp_id = disp_id.sub("*", "<bold><cyan>*</cyan></bold>") if frozen
|
165
|
-
flags = novel["flags"] || {} # flagコマンドは1.6.0から非推奨
|
166
165
|
tags = novel["tags"] || []
|
167
|
-
flags["end"] ||= tags.include?("end")
|
168
|
-
flags["404"] ||= tags.include?("404")
|
169
166
|
selected_lines[id] = [
|
170
167
|
disp_id,
|
171
168
|
novel["last_update"].strftime("%y/%m/%d").tap { |s|
|
@@ -183,8 +180,8 @@ module Command
|
|
183
180
|
novel["title"].escape + (!@options["kind"] && novel_type == 2 ?
|
184
181
|
" <bold><black>(#{NOVEL_TYPE_LABEL[novel_type]})</black></bold>" :
|
185
182
|
"") +
|
186
|
-
(
|
187
|
-
(
|
183
|
+
(tags.include?("end") ? " <bold><black>(完結)</black></bold>" : "") +
|
184
|
+
(tags.include?("404") ? " <bold><black>(削除)</black></bold>" : ""),
|
188
185
|
@options["url"] ? novel["toc_url"].escape : nil,
|
189
186
|
@options["tags"] || @options["all-tags"] ?
|
190
187
|
tags.empty? ? nil : tags.map{ |tag|
|
data/lib/command/send.rb
CHANGED
@@ -14,14 +14,14 @@ module Command
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def initialize
|
17
|
-
super("<device> [<
|
17
|
+
super("[<device>] [<target> ...] [options]")
|
18
18
|
@opt.separator <<-EOS
|
19
19
|
|
20
|
-
・<target
|
21
|
-
|
22
|
-
・narou setting device=<device>としておけば、<device
|
23
|
-
また、convertコマンドで変換時に(端末がPCに接続されていれば)
|
24
|
-
・<target
|
20
|
+
・<target>で指定した小説の電子書籍データを<device>で指定した端末に送信します
|
21
|
+
・<device>には現在 #{Device::DEVICES.keys.join(", ")} が指定出来ます
|
22
|
+
・narou setting device=<device>としておけば、<device>の入力を省略できます
|
23
|
+
また、convertコマンドで変換時に(端末がPCに接続されていれば)自動でデータを送信するようになります
|
24
|
+
・<target>を省略した場合、管理している小説全てのファイルのタイムスタンプを端末のものと比べて新しければ送信します
|
25
25
|
|
26
26
|
Examples:
|
27
27
|
narou send kindle 6
|
@@ -41,6 +41,12 @@ module Command
|
|
41
41
|
@opt.on("--without-freeze", "一括送信時に凍結された小説は対象外にする") {
|
42
42
|
@options["without-freeze"] = true
|
43
43
|
}
|
44
|
+
@opt.on("-b", "--backup-bookmark", "端末の栞データを手動でバックアップする(KindlePW系用)") {
|
45
|
+
@options["command-backup-bookmark"] = true
|
46
|
+
}
|
47
|
+
@opt.on("-r", "--restore-bookmark", "栞データのバックアップを端末にコピーする(KindlePW系用)") {
|
48
|
+
@options["command-restore-bookmark"] = true
|
49
|
+
}
|
44
50
|
end
|
45
51
|
|
46
52
|
def get_device(argv)
|
@@ -77,6 +83,16 @@ module Command
|
|
77
83
|
titles[id] = data["title"]
|
78
84
|
end
|
79
85
|
end
|
86
|
+
|
87
|
+
case
|
88
|
+
when @options["command-backup-bookmark"]
|
89
|
+
process_backup_bookmark(device)
|
90
|
+
exit
|
91
|
+
when @options["command-restore-bookmark"]
|
92
|
+
process_restore_bookmark(device)
|
93
|
+
exit
|
94
|
+
end
|
95
|
+
|
80
96
|
tagname_to_ids(argv)
|
81
97
|
argv.each do |target|
|
82
98
|
ebook_path = Narou.get_ebook_file_path(target, device.ebook_file_ext)
|
@@ -115,9 +131,36 @@ module Command
|
|
115
131
|
exit Narou::EXIT_ERROR_CODE # next しても次も失敗すると分かりきっているためここで終了する
|
116
132
|
end
|
117
133
|
end
|
134
|
+
if send_all && @options["backup-bookmark"]
|
135
|
+
process_backup_bookmark(device)
|
136
|
+
end
|
118
137
|
rescue Device::SendFailure, Interrupt
|
119
138
|
puts "送信を中断しました"
|
120
139
|
exit Narou::EXIT_ERROR_CODE
|
121
140
|
end
|
141
|
+
|
142
|
+
def process_backup_bookmark(device)
|
143
|
+
device.extend(device.get_hook_module)
|
144
|
+
unless device.respond_to?(:backup_bookmark)
|
145
|
+
error "ご利用の端末での栞データのバックアップは対応していません"
|
146
|
+
return
|
147
|
+
end
|
148
|
+
if device.backup_bookmark > 0
|
149
|
+
puts "端末の栞データをバックアップしました"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def process_restore_bookmark(device)
|
154
|
+
device.extend(device.get_hook_module)
|
155
|
+
unless device.respond_to?(:restore_bookmark)
|
156
|
+
error "ご利用の端末での栞データのバックアップは対応していません"
|
157
|
+
return
|
158
|
+
end
|
159
|
+
if device.restore_bookmark > 0
|
160
|
+
puts "栞データを端末にコピーしました"
|
161
|
+
else
|
162
|
+
puts "栞データが無いようです"
|
163
|
+
end
|
164
|
+
end
|
122
165
|
end
|
123
166
|
end
|
data/lib/command/setting.rb
CHANGED
@@ -37,8 +37,8 @@ module Command
|
|
37
37
|
narou setting --list
|
38
38
|
narou setting convert.no-open=true
|
39
39
|
narou setting convert.no-epub= # 右辺に何も書かないとその設定を削除できる
|
40
|
-
narou setting convert.
|
41
|
-
narou s convert.
|
40
|
+
narou setting convert.copy-to=C:/dropbox/mobi
|
41
|
+
narou s convert.copy-to="C:\\Documents and Settings\\user\\epub"
|
42
42
|
|
43
43
|
Options:
|
44
44
|
EOS
|
@@ -209,16 +209,20 @@ module Command
|
|
209
209
|
" " * 6 + "※注意:KDP用のMOBIはstripしないでください"],
|
210
210
|
"convert.no-zip" => [:boolean, "i文庫用のzipファイル作成を無効にするか"],
|
211
211
|
"convert.no-open" => [:boolean, "変換時に保存フォルダを開かないようにするか"],
|
212
|
-
"convert.
|
212
|
+
"convert.copy-to" => [:directory, "変換したらこのフォルダにコピーする\n" +
|
213
213
|
" " * 6 + "※注意:存在しないフォルダだとエラーになる"],
|
214
|
+
"convert.copy_to" => [:directory, "copy-toの昔の書き方(非推奨)", INVISIBLE],
|
214
215
|
"convert.inspect" => [:boolean, "常に変換時に調査結果を表示するか"],
|
216
|
+
"convert.multi-device" => [:string, "複数の端末用に同時に変換する。deviceよりも優先される。端末名をカンマ区切りで入力。ただのEPUBを出力したい場合はepubを指定"],
|
215
217
|
"download.interval" => [:float, "各話DL時に指定した秒数待機する。デフォルト0"],
|
216
218
|
"download.wait-steps" => [:integer, "この値で指定した話数ごとにウェイトを入れる\n" +
|
217
219
|
" " * 6 + "※注意:11以上を設定してもなろうの場合は10話ごとにウェイトが入ります"],
|
218
220
|
"download.use-subdirectory" => [:boolean, "小説を一定数ごとにサブフォルダへ分けて保存するか\n" +
|
219
221
|
" " * 6 + "※注意:小説を大量に同一フォルダに保存するとパフォーマンスが劣化する回避策"],
|
220
|
-
"send.without-freeze" => [:boolean, "
|
222
|
+
"send.without-freeze" => [:boolean, "一括送信時に凍結された小説は対象外に"],
|
223
|
+
"send.backup-bookmark" => [:boolean, "一括送信時に栞データを自動でバックアップするか(KindlePW系用)"],
|
221
224
|
"update.strong" => [:boolean, "更新漏れが無い様に改稿日の分は必ずDLするか"],
|
225
|
+
"update.logging" => [:boolean, "更新時のログを保存するかどうか"],
|
222
226
|
"device" => [:string, "変換、送信対象の端末(sendの--help参照)"],
|
223
227
|
"multiple-delimiter" => [:string, "--multiple指定時の区切り文字"],
|
224
228
|
},
|
@@ -230,6 +234,7 @@ module Command
|
|
230
234
|
"server-port" => [:integer, "WEBサーバ起動時のポート"],
|
231
235
|
"server-bind" => [:string, "WEBサーバのホスト制限(未設定時:起動PCのIP)", INVISIBLE],
|
232
236
|
"over18" => [:boolean, "18歳以上かどうか", INVISIBLE],
|
237
|
+
"dismiss-notice" => [:boolean, "お知らせを消すかどうか", INVISIBLE],
|
233
238
|
}
|
234
239
|
}
|
235
240
|
|
data/lib/command/update.rb
CHANGED
@@ -8,6 +8,10 @@ require_relative "../downloader"
|
|
8
8
|
|
9
9
|
module Command
|
10
10
|
class Update < CommandBase
|
11
|
+
LOG_DIR_NAME = "log"
|
12
|
+
LOG_NUM_LIMIT = 30 # ログの保存する上限数
|
13
|
+
LOG_FILENAME_FORMAT = "update_log_%s.txt"
|
14
|
+
|
11
15
|
def self.oneline_help
|
12
16
|
"小説を更新します"
|
13
17
|
end
|
@@ -38,6 +42,13 @@ module Command
|
|
38
42
|
@opt.on("-a", "--convert-only-new-arrival", "新着のみ変換を実行する") {
|
39
43
|
@options["convert-only-new-arrival"] = true
|
40
44
|
}
|
45
|
+
@opt.on("-l", "--log [N]", "最新からN番目のログを表示する(デフォ1)") { |n|
|
46
|
+
n = n.to_i
|
47
|
+
n -= 1 if n > 0
|
48
|
+
@options["log"] = n
|
49
|
+
view_log
|
50
|
+
exit 0
|
51
|
+
}
|
41
52
|
end
|
42
53
|
|
43
54
|
def execute(argv)
|
@@ -52,47 +63,93 @@ module Command
|
|
52
63
|
no_open = true
|
53
64
|
end
|
54
65
|
tagname_to_ids(update_target_list)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
66
|
+
update_log = $stdout.capture(quiet: false) do
|
67
|
+
update_target_list.each_with_index do |target, i|
|
68
|
+
display_message = nil
|
69
|
+
data = Downloader.get_data_by_target(target)
|
70
|
+
if !data
|
71
|
+
display_message = "<bold><red>[ERROR]</red></bold> #{target} は管理小説の中に存在しません".termcolor
|
72
|
+
elsif Narou.novel_frozen?(target)
|
73
|
+
if argv.length > 0
|
74
|
+
display_message = "ID:#{data["id"]} #{data["title"]} は凍結中です"
|
75
|
+
else
|
76
|
+
next
|
77
|
+
end
|
78
|
+
end
|
79
|
+
Helper.print_horizontal_rule if i > 0
|
80
|
+
if display_message
|
81
|
+
puts display_message
|
82
|
+
mistook_count += 1
|
64
83
|
next
|
65
84
|
end
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
85
|
+
result = Downloader.start(target)
|
86
|
+
case result.status
|
87
|
+
when :ok
|
88
|
+
unless @options["no-convert"] ||
|
89
|
+
(@options["convert-only-new-arrival"] && !result.new_arrivals)
|
90
|
+
convert_argv = [target]
|
91
|
+
convert_argv << "--no-open" if no_open
|
92
|
+
Convert.execute!(convert_argv)
|
93
|
+
end
|
94
|
+
when :failed
|
95
|
+
puts "ID:#{data["id"]} #{data["title"]} の更新は失敗しました"
|
96
|
+
mistook_count += 1
|
97
|
+
when :canceled
|
98
|
+
puts "ID:#{data["id"]} #{data["title"]} の更新はキャンセルされました"
|
99
|
+
mistook_count += 1
|
100
|
+
when :none
|
101
|
+
puts "#{data["title"]} に更新はありません"
|
81
102
|
end
|
82
|
-
when :failed
|
83
|
-
puts "ID:#{data["id"]} #{data["title"]} の更新は失敗しました"
|
84
|
-
mistook_count += 1
|
85
|
-
when :canceled
|
86
|
-
puts "ID:#{data["id"]} #{data["title"]} の更新はキャンセルされました"
|
87
|
-
mistook_count += 1
|
88
|
-
when :none
|
89
|
-
puts "#{data["title"]} に更新はありません"
|
90
103
|
end
|
91
104
|
end
|
105
|
+
save_log(update_log)
|
92
106
|
exit mistook_count if mistook_count > 0
|
93
107
|
rescue Interrupt
|
94
108
|
puts "アップデートを中断しました"
|
95
109
|
exit Narou::EXIT_ERROR_CODE
|
96
110
|
end
|
111
|
+
|
112
|
+
def get_log_paths
|
113
|
+
Dir.glob(File.join(log_dirname, LOG_FILENAME_FORMAT % "*")).sort.reverse
|
114
|
+
end
|
115
|
+
|
116
|
+
def view_log
|
117
|
+
list = get_log_paths
|
118
|
+
n = @options["log"]
|
119
|
+
if list[n]
|
120
|
+
puts File.read(list[n])
|
121
|
+
else
|
122
|
+
error "#{n+1}番目のログはありません"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def save_log(log)
|
127
|
+
return unless @options["logging"]
|
128
|
+
create_log_dir
|
129
|
+
now = Time.now
|
130
|
+
logname = File.join(log_dirname, LOG_FILENAME_FORMAT % now.strftime("%Y%m%d_%H%M%S"))
|
131
|
+
File.open(logname, "w") do |fp|
|
132
|
+
fp.puts "--- ログ出力日時 #{now.strftime("%Y/%m/%d %H:%M:%S")} ---"
|
133
|
+
fp.puts log
|
134
|
+
end
|
135
|
+
remove_old_log
|
136
|
+
end
|
137
|
+
|
138
|
+
def log_dirname
|
139
|
+
@@__log_dirname ||= File.join(Narou.get_root_dir, LOG_DIR_NAME)
|
140
|
+
end
|
141
|
+
|
142
|
+
def create_log_dir
|
143
|
+
logdir = log_dirname
|
144
|
+
return if File.directory?(logdir)
|
145
|
+
FileUtils.mkdir_p(logdir)
|
146
|
+
end
|
147
|
+
|
148
|
+
def remove_old_log
|
149
|
+
list = get_log_paths
|
150
|
+
(list[LOG_NUM_LIMIT..-1] || []).each do |path|
|
151
|
+
File.delete(path)
|
152
|
+
end
|
153
|
+
end
|
97
154
|
end
|
98
155
|
end
|