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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 043c638f9816fde957c543af9f9807cf741c17a1
4
- data.tar.gz: 869b3cbdfbb91f27354813661f3951320fd410f0
3
+ metadata.gz: a78f1a8587ee3566156fe0a9a13e0285c01846d1
4
+ data.tar.gz: 80dfcf3a22388315a59e2ad5f4c6f084b7c84919
5
5
  SHA512:
6
- metadata.gz: 85b167f112a0a557e8fe89459aa7712730322b2c3c4454ea1274987435d0b0b8f101704cdd9928218f091400b4904eac96db60f64e8a8895a71c26e8a220f97d
7
- data.tar.gz: 2e4a35d78b0c44606a7f9deaacdc3b449b515478498c7f90f8dcd87651e59b5b478f21feb7322ebc3a8fa9a18a7becc59b373c38d5ae07632bbe67e3ef996d96
6
+ metadata.gz: 05adefce83f872ce97d8ee8ec91b6f49ccc60c8cb0e1b4f27d6dc54d8bc9c39a44c61a16fe8ac18467c3c10b70bed9c18c9220332d754185c241b401850582cb
7
+ data.tar.gz: 54ade18b6f51d5e8bb9e01afcf3970c35ed81c6a20fba5f05e9e57e09416d16e30da0b832b459db978f187aba1c361d67e60c68c61863ac4ebcde2691747d4ec
data/.gitignore CHANGED
@@ -22,6 +22,8 @@ debug
22
22
  trash/
23
23
  .ruby-version
24
24
  .sass-cache/
25
+ log/
26
+ misc/
25
27
 
26
28
  \#*\#
27
29
 
@@ -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
  ----
@@ -34,7 +34,6 @@ module Command
34
34
  "freeze" => Freeze,
35
35
  "tag" => Tag,
36
36
  "web" => Web,
37
- "flag" => Flag,
38
37
  "mail" => Mail,
39
38
  "backup" => Backup,
40
39
  "help" => Help,
@@ -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.copy_to を設定すれば変換したEPUB/MOBIを指定のフォルダに自動でコピー出来ます。
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
- @device = Narou.get_device
127
- self.extend(@device.get_hook_module) if @device
128
- hook_call(:change_settings)
129
- convert_novels(argv)
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>&gt;&gt; #{@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.copy_to で指定されたディレクトリに書籍データをコピーする
309
+ # convert.copy-to で指定されたディレクトリに書籍データをコピーする
270
310
  #
271
311
  def copy_to_converted_file(src_path)
272
- copy_to_dir = @options["copy_to"]
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)
@@ -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
- (flags["end"] ? " <bold><black>(完結)</black></bold>" : "") +
187
- (flags["404"] ? " <bold><black>(削除)</black></bold>" : ""),
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|
@@ -14,14 +14,14 @@ module Command
14
14
  end
15
15
 
16
16
  def initialize
17
- super("<device> [<target1> ...] [options]")
17
+ super("[<device>] [<target> ...] [options]")
18
18
  @opt.separator <<-EOS
19
19
 
20
- ・<target>で指定した小説の電子書籍データ(#{Device::DEVICES.map{|_,d| d::EBOOK_FILE_EXT}.join(", ")})を<device>で指定した端末に送信します。
21
- <device>には現在 #{Device::DEVICES.keys.join(", ")} が指定出来ます。
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
@@ -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.copy_to=C:/dropbox/mobi
41
- narou s convert.copy_to="C:\\Documents and Settings\\user\\epub"
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.copy_to" => [:directory, "変換したらこのフォルダにコピーする\n" +
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
 
@@ -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
- update_target_list.each_with_index do |target, i|
56
- display_message = nil
57
- data = Downloader.get_data_by_target(target)
58
- if !data
59
- display_message = "<bold><red>[ERROR]</red></bold> #{target} は管理小説の中に存在しません".termcolor
60
- elsif Narou.novel_frozen?(target)
61
- if argv.length > 0
62
- display_message = "ID:#{data["id"]} #{data["title"]} は凍結中です"
63
- else
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
- end
67
- Helper.print_horizontal_rule if i > 0
68
- if display_message
69
- puts display_message
70
- mistook_count += 1
71
- next
72
- end
73
- result = Downloader.start(target)
74
- case result.status
75
- when :ok
76
- unless @options["no-convert"] ||
77
- (@options["convert-only-new-arrival"] && !result.new_arrivals)
78
- convert_argv = [target]
79
- convert_argv << "--no-open" if no_open
80
- Convert.execute!(convert_argv)
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