narou 3.2.5.1 → 3.3.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 -5
- data/.haml-lint.yml +7 -0
- data/.rubocop.yml +23 -5
- data/.scss-lint.yml +9 -0
- data/ChangeLog.md +86 -0
- data/Gemfile.lock +35 -35
- data/README.md +80 -64
- data/lib/backtracer.rb +2 -2
- data/lib/color.rb +5 -1
- data/lib/command.rb +7 -2
- data/lib/command/alias.rb +3 -5
- data/lib/command/backup.rb +3 -5
- data/lib/command/browser.rb +3 -5
- data/lib/command/clean.rb +5 -1
- data/lib/command/console.rb +33 -0
- data/lib/command/convert.rb +143 -117
- data/lib/command/csv.rb +2 -1
- data/lib/command/diff.rb +20 -18
- data/lib/command/download.rb +25 -14
- data/lib/command/folder.rb +3 -5
- data/lib/command/freeze.rb +3 -5
- data/lib/command/help.rb +20 -18
- data/lib/command/init.rb +4 -3
- data/lib/command/inspect.rb +2 -1
- data/lib/command/list.rb +10 -8
- data/lib/command/list/novel_decorator.rb +2 -1
- data/lib/command/log.rb +100 -0
- data/lib/command/log/tail.rb +76 -0
- data/lib/command/mail.rb +20 -17
- data/lib/command/remove.rb +7 -6
- data/lib/command/send.rb +23 -20
- data/lib/command/setting.rb +74 -40
- data/lib/command/tag.rb +16 -15
- data/lib/command/trace.rb +2 -2
- data/lib/command/update.rb +78 -128
- data/lib/command/update/general_lastup_updater.rb +3 -2
- data/lib/command/update/hotentry_manager.rb +2 -1
- data/lib/command/update/interval.rb +2 -1
- data/lib/command/version.rb +2 -1
- data/lib/command/web.rb +17 -3
- data/lib/commandbase.rb +34 -7
- data/lib/commandline.rb +54 -35
- data/lib/converterbase.rb +21 -15
- data/lib/database.rb +3 -2
- data/lib/device.rb +5 -4
- data/lib/device/epub.rb +2 -1
- data/lib/device/ibooks.rb +2 -1
- data/lib/device/ibunko.rb +2 -1
- data/lib/device/kindle.rb +2 -1
- data/lib/device/kobo.rb +2 -1
- data/lib/device/library/cygwin.rb +2 -1
- data/lib/device/library/linux.rb +2 -1
- data/lib/device/library/mac.rb +2 -1
- data/lib/device/library/windows.rb +2 -1
- data/lib/device/library/windows/eject.rb +2 -1
- data/lib/device/reader.rb +2 -1
- data/lib/diffviewer.rb +8 -11
- data/lib/downloader.rb +159 -151
- data/lib/eventable.rb +2 -1
- data/lib/extension.rb +16 -14
- data/lib/extensions/jruby.rb +2 -1
- data/lib/extensions/monkey_patches.rb +7 -0
- data/lib/extensions/monkey_patches/pathname.rb +22 -0
- data/lib/extensions/windows.rb +2 -1
- data/lib/extensions/windows_write_color.rb +2 -1
- data/lib/helper.rb +35 -20
- data/lib/html.rb +2 -1
- data/lib/illustration.rb +2 -1
- data/lib/ini.rb +2 -1
- data/lib/input.rb +2 -1
- data/lib/inspector.rb +3 -2
- data/lib/inventory.rb +3 -3
- data/lib/mailer.rb +3 -2
- data/lib/mixin/all.rb +8 -0
- data/lib/mixin/locker.rb +40 -0
- data/lib/mixin/output_error.rb +28 -0
- data/lib/narou.rb +69 -51
- data/lib/narou/api.rb +2 -4
- data/lib/narou_logger.rb +236 -108
- data/lib/novelconverter.rb +77 -69
- data/lib/novelinfo.rb +4 -2
- data/lib/novelsetting.rb +15 -12
- data/lib/progressbar.rb +13 -9
- data/lib/sitesetting.rb +39 -18
- data/lib/template.rb +5 -4
- data/lib/version.rb +3 -2
- data/lib/web/all.rb +2 -1
- data/lib/web/appserver.rb +83 -65
- data/lib/web/helper4web.rb +10 -5
- data/lib/web/progressbar4web.rb +8 -4
- data/lib/web/public/resources/default-style.css +2 -3
- data/lib/web/public/resources/narou.library.js +86 -60
- data/lib/web/public/resources/narou.queue.js +24 -30
- data/lib/web/public/resources/narou.ui.js +22 -3
- data/lib/web/public/theme/Cerulean/style.css +5 -5
- data/lib/web/public/theme/Darkly/style.css +5 -5
- data/lib/web/public/theme/Readable/style.css +5 -5
- data/lib/web/public/theme/Slate/style.css +2 -3
- data/lib/web/public/theme/Superhero/style.css +2 -3
- data/lib/web/public/theme/United/style.css +5 -5
- data/lib/web/pushserver.rb +10 -7
- data/lib/web/server_helpers.rb +16 -1
- data/lib/web/settingmessages.rb +10 -7
- data/lib/web/streaminginput.rb +2 -1
- data/lib/web/streaminglogger.rb +45 -32
- data/lib/web/views/_about.haml +6 -3
- data/lib/web/views/_header.haml +2 -3
- data/lib/web/views/_move_to_top.haml +2 -0
- data/lib/web/views/_queue.haml +7 -0
- data/lib/web/views/bookmarklet/insert_button.js.erb +1 -1
- data/lib/web/views/index.haml +30 -27
- data/lib/web/views/layout.haml +2 -0
- data/lib/web/views/novels/setting.haml +3 -4
- data/lib/web/views/settings.haml +22 -8
- data/lib/web/views/style.scss +54 -3
- data/lib/web/views/widget/download.haml +9 -3
- data/lib/web/views/widget/drag_and_drop.haml +10 -4
- data/lib/web/web_worker.rb +132 -0
- data/lib/worker.rb +142 -0
- data/narou.gemspec +80 -45
- data/narou.rb +6 -4
- data/template/novel.txt.erb +1 -0
- data/webnovel/kakuyomu.jp.yaml +9 -13
- data/webnovel/ncode.syosetu.com.yaml +3 -1
- data/webnovel/novel18.syosetu.com.yaml +8 -1
- data/webnovel/syosetu.org.yaml +3 -1
- data/webnovel/www.akatsuki-novels.com.yaml +4 -2
- data/webnovel/www.mai-net.net.yaml +3 -1
- metadata +109 -48
- data/lib/web/worker.rb +0 -126
data/lib/command/tag.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright 2013 whiteleaf. All rights reserved.
|
4
5
|
#
|
@@ -57,10 +58,10 @@ module Command
|
|
57
58
|
@options["tags"] = tags.split.tap { |array|
|
58
59
|
array.each do |tag|
|
59
60
|
if tag =~ BAN_CHAR
|
60
|
-
error "#{tag} に使用禁止記号が含まれています"
|
61
|
+
stream_io.error "#{tag} に使用禁止記号が含まれています"
|
61
62
|
exit Narou::EXIT_ERROR_CODE
|
62
63
|
elsif BAN_WORD.include?(tag)
|
63
|
-
error "#{tag} は使用禁止ワードです"
|
64
|
+
stream_io.error "#{tag} は使用禁止ワードです"
|
64
65
|
exit Narou::EXIT_ERROR_CODE
|
65
66
|
end
|
66
67
|
end
|
@@ -75,7 +76,7 @@ module Command
|
|
75
76
|
"#{' '*25}COL=#{get_color_list}") { |color|
|
76
77
|
color.downcase!
|
77
78
|
unless COLORS.include?(color)
|
78
|
-
error "#{color}という色は存在しません。色指定は無視されます"
|
79
|
+
stream_io.error "#{color}という色は存在しません。色指定は無視されます"
|
79
80
|
color = nil
|
80
81
|
end
|
81
82
|
@options["color"] = color
|
@@ -126,11 +127,11 @@ module Command
|
|
126
127
|
return
|
127
128
|
end
|
128
129
|
if color_changed
|
129
|
-
puts "タグの色を変更しました"
|
130
|
+
stream_io.puts "タグの色を変更しました"
|
130
131
|
display_taglist
|
131
132
|
return
|
132
133
|
else
|
133
|
-
error "対象の小説を指定して下さい"
|
134
|
+
stream_io.error "対象の小説を指定して下さい"
|
134
135
|
exit Narou::EXIT_ERROR_CODE
|
135
136
|
end
|
136
137
|
else
|
@@ -145,8 +146,8 @@ module Command
|
|
145
146
|
def display_taglist
|
146
147
|
database = Database.instance
|
147
148
|
tag_list = Tag.get_tag_list
|
148
|
-
puts "タグ一覧"
|
149
|
-
puts tag_list.map { |tag, count|
|
149
|
+
stream_io.puts "タグ一覧"
|
150
|
+
stream_io.puts tag_list.map { |tag, count|
|
150
151
|
color = Tag.get_color(tag)
|
151
152
|
"<bold><#{color}>#{TermColorLight.escape(tag)}(#{count})</#{color}></bold>"
|
152
153
|
}.join(" ").termcolor
|
@@ -173,7 +174,7 @@ module Command
|
|
173
174
|
argv.each do |target|
|
174
175
|
data = Downloader.get_data_by_target(target)
|
175
176
|
unless data
|
176
|
-
error "#{target} は存在しません"
|
177
|
+
stream_io.error "#{target} は存在しません"
|
177
178
|
next
|
178
179
|
end
|
179
180
|
tags = data["tags"] || []
|
@@ -181,21 +182,21 @@ module Command
|
|
181
182
|
case @options["mode"]
|
182
183
|
when :add
|
183
184
|
tags |= @options["tags"]
|
184
|
-
puts "#{title} にタグを設定しました"
|
185
|
+
stream_io.puts "#{title} にタグを設定しました"
|
185
186
|
when :delete
|
186
187
|
tags -= @options["tags"]
|
187
|
-
puts "#{title} からタグを外しました"
|
188
|
+
stream_io.puts "#{title} からタグを外しました"
|
188
189
|
when :clear
|
189
190
|
tags.clear
|
190
|
-
puts "#{title} のタグをすべて外しました"
|
191
|
+
stream_io.puts "#{title} のタグをすべて外しました"
|
191
192
|
end
|
192
193
|
if tags.size > 0
|
193
|
-
print "現在のタグは "
|
194
|
-
print tags.map { |tagname|
|
194
|
+
stream_io.print "現在のタグは "
|
195
|
+
stream_io.print tags.map { |tagname|
|
195
196
|
color = Tag.get_color(tagname)
|
196
197
|
"<bold><#{color}>#{TermColorLight.escape(tagname)}</#{color}></bold>"
|
197
198
|
}.join(" ").termcolor
|
198
|
-
puts " です"
|
199
|
+
stream_io.puts " です"
|
199
200
|
end
|
200
201
|
database[data["id"]]["tags"] = tags
|
201
202
|
end
|
data/lib/command/trace.rb
CHANGED
data/lib/command/update.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright 2013 whiteleaf. All rights reserved.
|
4
5
|
#
|
@@ -19,10 +20,6 @@ module Command
|
|
19
20
|
extend Memoist
|
20
21
|
include Narou::Eventable
|
21
22
|
|
22
|
-
LOG_DIR_NAME = "log"
|
23
|
-
LOG_NUM_LIMIT = 30 # ログの保存する上限数
|
24
|
-
LOG_FILENAME_FORMAT = "update_log_%s.txt"
|
25
|
-
|
26
23
|
HOTENTRY_DIR_NAME = "hotentry"
|
27
24
|
HOTENTRY_TEMPLATE_NAME = "hotentry.txt"
|
28
25
|
HOTENTRY_TITLE_PATTERN = "hotentry %y/%m/%d %H:%M"
|
@@ -62,16 +59,9 @@ module Command
|
|
62
59
|
@opt.on("-n", "--no-convert", "変換をせずアップデートのみ実行する") {
|
63
60
|
@options["no-convert"] = true
|
64
61
|
}
|
65
|
-
@opt.on("-a", "--convert-only-new-arrival", "
|
62
|
+
@opt.on("-a", "--convert-only-new-arrival", "新着がある場合のみ変換を実行する") {
|
66
63
|
@options["convert-only-new-arrival"] = true
|
67
64
|
}
|
68
|
-
@opt.on("-l", "--log [N]", "最新からN番目のログを表示する(デフォ1)") { |n|
|
69
|
-
n = n.to_i
|
70
|
-
n -= 1 if n > 0
|
71
|
-
@options["log"] = n
|
72
|
-
view_log
|
73
|
-
exit 0
|
74
|
-
}
|
75
65
|
@opt.on("--gl [OPT]", <<-EOS) { |option|
|
76
66
|
データベースに最新話掲載日を反映させる
|
77
67
|
| OPT | 概要
|
@@ -164,129 +154,84 @@ module Command
|
|
164
154
|
interval = Interval.new(@options["interval"])
|
165
155
|
|
166
156
|
begin
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
end
|
157
|
+
sort_by_key(sort_key, update_target_list).each_with_index do |target, i|
|
158
|
+
display_message = nil
|
159
|
+
data = Downloader.get_data_by_target(target)
|
160
|
+
if !data
|
161
|
+
display_message = "<bold><red>[ERROR]</red></bold> #{target} は管理小説の中に存在しません".termcolor
|
162
|
+
elsif Narou.novel_frozen?(target) && !@options["force"]
|
163
|
+
next if argv.empty?
|
164
|
+
display_message = "ID:#{data["id"]} #{data["title"]} は凍結中です"
|
165
|
+
end
|
166
|
+
Helper.print_horizontal_rule if i > 0
|
167
|
+
if display_message
|
168
|
+
puts display_message
|
169
|
+
mistook_count += 1
|
170
|
+
next
|
171
|
+
end
|
172
|
+
interval.wait
|
173
|
+
downloader = Downloader.new(target)
|
174
|
+
hotentry_manager.connect(downloader)
|
175
|
+
|
176
|
+
delete_modified_tag = -> do
|
177
|
+
tags = data["tags"] || []
|
178
|
+
data["tags"] = tags - [Narou::MODIFIED_TAG] if tags.include?(Narou::MODIFIED_TAG)
|
179
|
+
data["last_check_date"] = Time.now
|
180
|
+
end
|
192
181
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
end
|
203
|
-
when :failed
|
204
|
-
puts "ID:#{data["id"]} #{data["title"]} の更新は失敗しました"
|
205
|
-
mistook_count += 1
|
182
|
+
result = downloader.start_download
|
183
|
+
case result.status
|
184
|
+
when :ok
|
185
|
+
delete_modified_tag.call
|
186
|
+
trigger(:success, data)
|
187
|
+
puts "#{data["title"]} の更新チェックが完了しました"
|
188
|
+
if @options["no-convert"] ||
|
189
|
+
(@options["convert-only-new-arrival"] && !result.new_arrivals)
|
190
|
+
interval.force_wait
|
206
191
|
next
|
207
|
-
when :canceled
|
208
|
-
puts "ID:#{data["id"]} #{data["title"]} の更新はキャンセルされました"
|
209
|
-
mistook_count += 1
|
210
|
-
next
|
211
|
-
when :none
|
212
|
-
delete_modified_tag.call
|
213
|
-
puts "#{data["title"]} に更新はありません"
|
214
|
-
next unless data["_convert_failure"]
|
215
|
-
end
|
216
|
-
|
217
|
-
if data["_convert_failure"]
|
218
|
-
puts "<yellow>前回変換できなかったので再変換します</yellow>".termcolor
|
219
|
-
end
|
220
|
-
convert_argv = [target]
|
221
|
-
convert_argv << "--no-open" if @options["no-open"]
|
222
|
-
convert_status = Convert.execute!(convert_argv)
|
223
|
-
if convert_status > 0
|
224
|
-
# 変換が失敗したか、中断された
|
225
|
-
data["_convert_failure"] = true
|
226
|
-
# 中断された場合には残りのアップデートも中止する
|
227
|
-
raise Interrupt if convert_status == Narou::EXIT_INTERRUPT
|
228
|
-
else
|
229
|
-
# 変換に成功した
|
230
|
-
data.delete("_convert_failure")
|
231
192
|
end
|
193
|
+
when :failed
|
194
|
+
puts "ID:#{data["id"]} #{data["title"]} の更新は失敗しました"
|
195
|
+
mistook_count += 1
|
196
|
+
next
|
197
|
+
when :canceled
|
198
|
+
puts "ID:#{data["id"]} #{data["title"]} の更新はキャンセルされました"
|
199
|
+
mistook_count += 1
|
200
|
+
next
|
201
|
+
when :none
|
202
|
+
delete_modified_tag.call
|
203
|
+
puts "#{data["title"]} に更新はありません"
|
204
|
+
next unless data["_convert_failure"]
|
232
205
|
end
|
233
206
|
|
234
|
-
|
207
|
+
if data["_convert_failure"]
|
208
|
+
puts "<yellow>前回変換できなかったので再変換します</yellow>".termcolor
|
209
|
+
end
|
210
|
+
convert_argv = [target]
|
211
|
+
convert_argv << "--no-open" if @options["no-open"]
|
212
|
+
convert_status = Convert.execute!(convert_argv)
|
213
|
+
if convert_status > 0
|
214
|
+
# 変換が失敗したか、中断された
|
215
|
+
data["_convert_failure"] = true
|
216
|
+
# 中断された場合には残りのアップデートも中止する
|
217
|
+
raise Interrupt if convert_status == Narou::EXIT_INTERRUPT
|
218
|
+
else
|
219
|
+
# 変換に成功した
|
220
|
+
data.delete("_convert_failure")
|
221
|
+
end
|
235
222
|
end
|
236
223
|
ensure
|
237
|
-
save_log(update_log)
|
238
224
|
Database.instance.save_database
|
225
|
+
process_hotentry(hotentry_manager.hotentries)
|
239
226
|
end
|
240
227
|
|
241
228
|
exit mistook_count if mistook_count > 0
|
242
229
|
rescue Interrupt
|
243
230
|
puts "アップデートを中断しました"
|
231
|
+
Narou::Worker.cancel if Narou.concurrency_enabled?
|
244
232
|
exit Narou::EXIT_INTERRUPT
|
245
233
|
end
|
246
234
|
|
247
|
-
def get_log_paths
|
248
|
-
Dir.glob(File.join(log_dirname, LOG_FILENAME_FORMAT % "*")).sort.reverse
|
249
|
-
end
|
250
|
-
|
251
|
-
def view_log
|
252
|
-
list = get_log_paths
|
253
|
-
n = @options["log"]
|
254
|
-
if list[n]
|
255
|
-
puts File.read(list[n], encoding: Encoding::UTF_8)
|
256
|
-
else
|
257
|
-
error "#{n+1}番目のログはありません"
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
def save_log(log)
|
262
|
-
return unless @options["logging"]
|
263
|
-
create_log_dir
|
264
|
-
now = Time.now
|
265
|
-
logname = File.join(log_dirname, LOG_FILENAME_FORMAT % now.strftime("%Y%m%d_%H%M%S"))
|
266
|
-
File.open(logname, "w:UTF-8") do |fp|
|
267
|
-
fp.puts "--- ログ出力日時 #{now.strftime("%Y/%m/%d %H:%M:%S")} ---"
|
268
|
-
fp.puts log
|
269
|
-
end
|
270
|
-
remove_old_log
|
271
|
-
end
|
272
|
-
|
273
|
-
def log_dirname
|
274
|
-
@@__log_dirname ||= File.join(Narou.get_root_dir, LOG_DIR_NAME)
|
275
|
-
end
|
276
|
-
|
277
|
-
def create_log_dir
|
278
|
-
logdir = log_dirname
|
279
|
-
return if File.directory?(logdir)
|
280
|
-
FileUtils.mkdir_p(logdir)
|
281
|
-
end
|
282
|
-
|
283
|
-
def remove_old_log
|
284
|
-
list = get_log_paths
|
285
|
-
(list[LOG_NUM_LIMIT..-1] || []).each do |path|
|
286
|
-
File.delete(path)
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
235
|
def update_general_lastup(option = nil)
|
291
236
|
puts "最新話掲載日を確認しています..."
|
292
237
|
|
@@ -336,8 +281,11 @@ module Command
|
|
336
281
|
hotentry.each do |id, subtitles|
|
337
282
|
setting = NovelSetting.load(id, ignore_force, ignore_default)
|
338
283
|
setting.enable_illust = false # 挿絵はパス解決が煩雑なので強制無効
|
339
|
-
novel_converter = NovelConverter.new(
|
340
|
-
|
284
|
+
novel_converter = NovelConverter.new(
|
285
|
+
setting, output_filename,
|
286
|
+
display_inspector, Update.hotentry_dirname,
|
287
|
+
stream_io: stream_io
|
288
|
+
)
|
341
289
|
last_num = 0
|
342
290
|
novel_converter.on(:"convert_main.loop") do |i|
|
343
291
|
progressbar.output(total_progress + i)
|
@@ -367,10 +315,12 @@ module Command
|
|
367
315
|
File.write(txt_output_path, hotentry_text)
|
368
316
|
# テキストを書籍データに変換
|
369
317
|
relay_proc = -> {
|
370
|
-
NovelConverter.convert_txt_to_ebook_file(
|
318
|
+
NovelConverter.convert_txt_to_ebook_file(
|
319
|
+
txt_output_path,
|
371
320
|
use_dakuten_font: use_dakuten_font,
|
372
|
-
device: device
|
373
|
-
|
321
|
+
device: device,
|
322
|
+
stream_io: stream_io
|
323
|
+
)
|
374
324
|
}
|
375
325
|
if device
|
376
326
|
cmd_convert.extend(device.get_hook_module)
|
@@ -390,11 +340,11 @@ module Command
|
|
390
340
|
end
|
391
341
|
|
392
342
|
def copy_hotentry(ebook_path, cmd_convert)
|
393
|
-
cmd_convert.copy_to_converted_file(ebook_path)
|
343
|
+
cmd_convert.copy_to_converted_file(ebook_path, io: stream_io)
|
394
344
|
end
|
395
345
|
|
396
346
|
def send_hotentry(ebook_path, cmd_convert)
|
397
|
-
cmd_convert.send_file_to_device(ebook_path)
|
347
|
+
cmd_convert.send_file_to_device(ebook_path, io: stream_io)
|
398
348
|
end
|
399
349
|
|
400
350
|
def mail_hotentry
|
@@ -404,7 +354,7 @@ module Command
|
|
404
354
|
end
|
405
355
|
|
406
356
|
def self.hotentry_dirname
|
407
|
-
@@__hotentry_dirname ||= File.join(Narou.
|
357
|
+
@@__hotentry_dirname ||= File.join(Narou.root_dir, HOTENTRY_DIR_NAME)
|
408
358
|
end
|
409
359
|
|
410
360
|
def self.get_newest_hotentry_file_path(device)
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright 2013 whiteleaf. All rights reserved.
|
4
5
|
#
|
@@ -68,7 +69,7 @@ module Command
|
|
68
69
|
"general_lastup" => downloader.get_general_lastup,
|
69
70
|
"length" => downloader.novel_length
|
70
71
|
}
|
71
|
-
rescue OpenURI::HTTPError, Errno::ECONNRESET
|
72
|
+
rescue OpenURI::HTTPError, Errno::ECONNRESET, Errno::ETIMEDOUT, Net::OpenTimeout
|
72
73
|
next
|
73
74
|
end
|
74
75
|
data = @database[id]
|
data/lib/command/version.rb
CHANGED
data/lib/command/web.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright 2013 whiteleaf. All rights reserved.
|
4
5
|
#
|
@@ -89,6 +90,7 @@ module Command
|
|
89
90
|
argv << "--no-color" if $disable_color
|
90
91
|
argv << "--boot"
|
91
92
|
argv_copy = argv.dup
|
93
|
+
kill_threads
|
92
94
|
begin
|
93
95
|
loop do
|
94
96
|
if $development
|
@@ -103,11 +105,15 @@ module Command
|
|
103
105
|
rescue Interrupt => e
|
104
106
|
# 中断されてコンソールへの入力が可能になってから、WEBrick が終了するまで
|
105
107
|
# タイムラグがあって表示がごちゃまぜになるので、終わるのを少し待つ
|
106
|
-
sleep
|
108
|
+
sleep 1
|
107
109
|
end
|
108
110
|
end
|
109
111
|
end
|
110
112
|
|
113
|
+
def kill_threads
|
114
|
+
Narou::Worker.stop
|
115
|
+
end
|
116
|
+
|
111
117
|
def boot
|
112
118
|
require_relative "../web/all"
|
113
119
|
confirm_of_first
|
@@ -126,11 +132,19 @@ module Command
|
|
126
132
|
send_rebooted_event_when_connection_recover(push_server)
|
127
133
|
|
128
134
|
$stdout = Narou::StreamingLogger.new(push_server)
|
135
|
+
$stdout2 = if Inventory.load["concurrency"]
|
136
|
+
Narou::StreamingLogger.new(push_server, $stdout2, target_console: "stdout2")
|
137
|
+
else
|
138
|
+
$stdout
|
139
|
+
end
|
129
140
|
ProgressBar.push_server = push_server
|
141
|
+
Narou::Worker.push_server = push_server
|
130
142
|
Narou::AppServer.push_server = push_server
|
131
|
-
Narou::
|
143
|
+
Narou::WebWorker.run
|
132
144
|
Narou::AppServer.run!
|
133
145
|
push_server.quit
|
146
|
+
Narou::WebWorker.stop
|
147
|
+
Narou::Worker.stop
|
134
148
|
if Narou::AppServer.request_reboot?
|
135
149
|
exit Narou::EXIT_REQUEST_REBOOT
|
136
150
|
end
|