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.

@@ -7,6 +7,7 @@ module Narou
7
7
  # WEB UI > 環境設定画面で表示する各項目の説明
8
8
  # ここになければ元々の説明が表示される
9
9
  SETTING_VARIABLES_WEBUI_MESSAGES = {
10
+ "convert.multi-device" => "複数の端末用に同時に変換する。deviceよりも優先される。\n端末名をカンマ区切りで入力(" + Device::DEVICES.keys.join(", ") + ")\nただのEPUBを出力したい場合はepubを指定",
10
11
  "device" => "変換、送信対象の端末(" + Device::DEVICES.keys.join(", ") + ")",
11
12
  "difftool" => "Diffで使うツールのパスを指定する\n※WEB UIでは使われません"
12
13
  }
@@ -25,6 +25,8 @@ end
25
25
  class Narou::StreamingLogger < StringIO
26
26
  include Narou::LoggerModule
27
27
 
28
+ attr_reader :push_server
29
+
28
30
  def initialize(push_server = nil)
29
31
  super()
30
32
  @push_server = push_server
@@ -34,6 +36,20 @@ class Narou::StreamingLogger < StringIO
34
36
  false
35
37
  end
36
38
 
39
+ def copy_instance
40
+ self.class.new(@push_server).tap do |obj|
41
+ obj.silent = silent
42
+ end
43
+ end
44
+
45
+ def strip_color(str)
46
+ if $disable_color
47
+ str
48
+ else
49
+ str.gsub(%r!</?span.*?>!, "")
50
+ end
51
+ end
52
+
37
53
  def push_streaming(str)
38
54
  unless @is_silent
39
55
  @push_server.send_all(echo: str) if @push_server
@@ -5,13 +5,28 @@
5
5
  container: "body",
6
6
  });
7
7
 
8
- var bookmarklet = function(d,e,u) {
8
+ var bookmarklet = function(d,e,u,o,s) {
9
+ o=d.createElement("div");
10
+ o.innerHTML="WEB UI Server: OFFLINE";
11
+ o.id="narourb-offline";
12
+ s=o.style;
13
+ s.position="fixed";
14
+ s.top=-1000;
15
+ s.left=0;
16
+ s.zIndex=9998;
17
+ s.color="white";
18
+ s.background="red";
19
+ d.body.appendChild(o);
20
+ setTimeout(function(){
21
+ s.top=0
22
+ },1000);
23
+
9
24
  u='#{request.scheme}://#{env["SERVER_NAME"]}:#{env["SERVER_PORT"]}'+
10
25
  '/js/widget.js?mode=download&t='+Date.now();
11
26
  e=d.createElement('script');
12
27
  e.charset='utf-8';
13
28
  e.src=u;
14
- d.body.appendChild(e);
29
+ d.body.appendChild(e)
15
30
  };
16
31
 
17
32
  function createBookmarkletStrings(proc) {
@@ -44,7 +59,7 @@
44
59
  #help-container.container.theme-showcase(role="main")
45
60
  %h2 ブックマークレット
46
61
  %p 小説掲載サイトを表示したまま直接ダウンロード出来るブックマークレットです。<br> |
47
- 下記のリンクをブックマークに登録して、ダウンロードしたい小説のページで実行して下さい。(WEB UI起動中に限ります)<br> |
62
+ 下記のリンクをブックマークに登録して、ダウンロードしたい小説のページで実行して下さい。(WEB UIサーバ起動中に限ります)<br> |
48
63
  ブックマークバーにドラッグ&ドロップしたり、右クリックからブックマークにいれると簡単です。 |
49
64
  %p
50
65
  %a#bookmarklet(onclick="return false")
@@ -6,9 +6,13 @@
6
6
  }
7
7
  }
8
8
 
9
+ // オフライン表記を先に消しておく
10
+ var offline = document.getElementById("narourb-offline");
11
+ offline.parentNode.removeChild(offline);
12
+
9
13
  var ALLOW_HOSTS = <%= ALLOW_HOSTS.to_s %>;
10
14
  var guard = true;
11
- if (typeof ALLOW_HOSTS.typeOf === "function") {
15
+ if (typeof ALLOW_HOSTS.indexOf === "function") {
12
16
  guard = ALLOW_HOSTS.indexOf(location.hostname) === -1;
13
17
  }
14
18
  else {
@@ -45,6 +45,51 @@ Gem::Specification.new do |gem|
45
45
  - `mail` コマンドで送信時にエラーが出る場合がある問題に対応
46
46
 
47
47
 
48
+ 2.1.0 : 2015/01/19
49
+ ------------------
50
+ #### 追加機能
51
+ - `convert.multi-device` オプションが追加されました
52
+ + `convert` コマンド使用時に複数のフォーマットへ同時に変換することが出来ます
53
+ + `narou s convert.multi-device=kindle,kobo,reader` のようにカンマ区切りで
54
+ 設定します。この設定を有効にした場合、変換時に `device` 設定は無視されます
55
+ + `send` コマンド時には通常通り `device` の設定が使用されます
56
+ + 普通のEPUBが出力したい場合、端末名として `epub` を指定して下さい
57
+ - `update.logging` オプションが追加されました
58
+ + `update` コマンド使用時にログを保存するようになります
59
+ + `narou s update.logging=true` で設定出来ます
60
+ + ログはテキストファイルとして `log/` フォルダに保存されます(最新30件まで)。
61
+ また、 `narou u --log N` コマンドでも確認出来ます(N=1以上の整数)。
62
+ Nを省略した場合は最新のログが表示されます。短縮する場合は `narou u -l N`
63
+ - `send.backup-bookmark` オプションが追加されました
64
+ + `send` コマンド使用時に端末の栞データを自動でバックアップします(KindlePW系
65
+ 専用。他の端末も栞データの仕様が分かれば対応可能)
66
+ + `narou s send.backup-bookmark=true` で設定出来ます
67
+ + 一括送信時(`narou send` とだけコマンドを打った時)のみバックアップします
68
+ + 上記設定をせずに手動でバックアップする場合は `narou send --backup-bookmark`
69
+ もしくは `narou send -b` で行います
70
+ + バックアップした栞データを復元(端末にコピー)するには
71
+ `narou send --restore-bookmark` もしくは `narou send -r` で行います
72
+ - 変換設定に行頭字下げを強制的に行う `enable_force_indent` を追加しました
73
+ + enable_auto_indent は作者の意図的な字下げ無しを考慮して、全体的に字下げが
74
+ 行われていない時にのみ字下げをするのに対して、今回のオプションは強制的に
75
+ 字下げを行います。作者の字下げ忘れが多い場合に有効です
76
+ - WEB UI用ブックマークレットを実行した時にサーバがオフラインかどうか分かるよう
77
+ になりました。ヘルプ画面からブックマークレットを更新して下さい
78
+
79
+ #### 仕様変更
80
+ - `convert.copy_to` を `convert.copy-to` へ変更しました(表記ゆれの統一の為)
81
+ + copy_to も後方互換維持のため残されますが、今後は非推奨になります
82
+ - `flag` コマンドが削除されました
83
+
84
+ #### Bug Fix
85
+ - WEB UI: リロードしても変換中のプログレスバーが表示されるように修正 #57
86
+
87
+ #### その他
88
+ - 将来的に対応バージョンを上げる予定なので、古いRuby(2.1.0未満)を使用している
89
+ 場合にお知らせを表示するようになりました。当面は1.9.3でも動くままですが、いま
90
+ のうちにRuby2.1.0以上へのアップグレードをお願いします
91
+
92
+
48
93
  narou コマンドのインストール or アップデートが完了しました。
49
94
  詳しい説明は `narou help' コマンドをご覧下さい。
50
95
 
@@ -70,5 +115,6 @@ narou コマンドのインストール or アップデートが完了しまし
70
115
  gem.add_runtime_dependency 'sinatra-contrib', '~> 1.4', '>= 1.4.2'
71
116
  gem.add_runtime_dependency 'sass', '~> 3.4', '>= 3.4.4'
72
117
  gem.add_runtime_dependency 'haml', '~> 4.0', '>= 4.0.5'
118
+ gem.add_runtime_dependency 'memoist', '~> 0.11.0'
73
119
  end
74
120
 
data/narou.rb CHANGED
@@ -17,10 +17,11 @@ if ARGV.delete("--time")
17
17
  end
18
18
 
19
19
  require_relative "lib/inventory"
20
+ global = Inventory.load("global_setting", :global)
20
21
  $display_backtrace = ARGV.delete("--backtrace")
21
22
  $display_backtrace ||= $debug
22
23
  $disable_color = ARGV.delete("--no-color")
23
- $disable_color ||= Inventory.load("global_setting", :global)["no-color"]
24
+ $disable_color ||= global["no-color"]
24
25
 
25
26
  require_relative "lib/logger"
26
27
  require_relative "lib/version"
@@ -28,6 +29,14 @@ require_relative "lib/commandline"
28
29
 
29
30
  rescue_level = $debug ? Exception : StandardError
30
31
 
32
+ if !global["dismiss-notice"] && RUBY_VERSION < "2.1.0"
33
+ puts <<-EOS.termcolor
34
+ <cyan><bold>[Notice]
35
+ ご使用のRubyのバージョンが#{RUBY_VERSION}と古いままです。近い将来Ruby2.1.0以上を必須とする予定なので準備をお願いします
36
+ このお知らせを消すには narou s dismiss-notice=true を実行して下さい</bold></cyan>
37
+ EOS
38
+ end
39
+
31
40
  begin
32
41
  CommandLine.run(ARGV.map { |v| v.dup })
33
42
  rescue SystemExit => e
@@ -46,7 +46,41 @@ describe Narou::Logger do
46
46
 
47
47
  context "with ansicolor NON strip option" do
48
48
  it do
49
- expect($stdout.capture(false) { puts "\e[31mhello\e[0m" }).to eq "\e[31mhello\e[0m\n"
49
+ expect($stdout.capture(ansicolor_strip: false) { puts "\e[31mhello\e[0m" }).to eq "\e[31mhello\e[0m\n"
50
+ end
51
+ end
52
+
53
+ context "インスタンスを作成してキャプチャ" do
54
+ it do
55
+ logger = Narou::Logger.new
56
+ expect(logger.capture { print "world" }).to eq "world"
57
+ end
58
+ end
59
+
60
+ context "quiet=falseでもsilenceで囲めば出力されないか" do
61
+ it do
62
+ $stdout.silence do
63
+ expect($stdout.capture(quiet: false) { print "hello world" }).to eq "hello world"
64
+ end
65
+ end
66
+ end
67
+
68
+ context "多段 capture" do
69
+ it do
70
+ expect($stdout.capture {
71
+ print "foo"
72
+ expect($stdout.capture { print "bar" }).to eq "bar"
73
+ }).to eq "foo"
74
+ end
75
+ end
76
+
77
+ context "現在の状態を取得" do
78
+ it "キャプチャ中でなければ偽" do
79
+ expect($stdout.capturing).to eq false
80
+ end
81
+
82
+ it "キャプチャ中なら真" do
83
+ $stdout.capture { expect($stdout.capturing).to eq true }
50
84
  end
51
85
  end
52
86
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: narou
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - whiteleaf7
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-15 00:00:00.000000000 Z
11
+ date: 2015-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: termcolorlight
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: 4.0.5
181
+ - !ruby/object:Gem::Dependency
182
+ name: memoist
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 0.11.0
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 0.11.0
181
195
  description: "小説家になろうで公開されている小説の管理、及び電子書籍データへの変換を支援します。縦書用に特化されており、横書き用に特化されたWEB小説を違和感なく縦書で読むことが出来るようになります。"
182
196
  email:
183
197
  - 2nd.leaf@gmail.com
@@ -204,7 +218,6 @@ files:
204
218
  - lib/command/convert.rb
205
219
  - lib/command/diff.rb
206
220
  - lib/command/download.rb
207
- - lib/command/flag.rb
208
221
  - lib/command/folder.rb
209
222
  - lib/command/freeze.rb
210
223
  - lib/command/help.rb
@@ -224,6 +237,7 @@ files:
224
237
  - lib/converterbase.rb
225
238
  - lib/database.rb
226
239
  - lib/device.rb
240
+ - lib/device/epub.rb
227
241
  - lib/device/ibooks.rb
228
242
  - lib/device/ibunko.rb
229
243
  - lib/device/kindle.rb
@@ -407,6 +421,51 @@ post_install_message: |
407
421
  - `mail` コマンドで送信時にエラーが出る場合がある問題に対応
408
422
 
409
423
 
424
+ 2.1.0 : 2015/01/19
425
+ ------------------
426
+ #### 追加機能
427
+ - `convert.multi-device` オプションが追加されました
428
+ + `convert` コマンド使用時に複数のフォーマットへ同時に変換することが出来ます
429
+ + `narou s convert.multi-device=kindle,kobo,reader` のようにカンマ区切りで
430
+ 設定します。この設定を有効にした場合、変換時に `device` 設定は無視されます
431
+ + `send` コマンド時には通常通り `device` の設定が使用されます
432
+ + 普通のEPUBが出力したい場合、端末名として `epub` を指定して下さい
433
+ - `update.logging` オプションが追加されました
434
+ + `update` コマンド使用時にログを保存するようになります
435
+ + `narou s update.logging=true` で設定出来ます
436
+ + ログはテキストファイルとして `log/` フォルダに保存されます(最新30件まで)。
437
+ また、 `narou u --log N` コマンドでも確認出来ます(N=1以上の整数)。
438
+ Nを省略した場合は最新のログが表示されます。短縮する場合は `narou u -l N`
439
+ - `send.backup-bookmark` オプションが追加されました
440
+ + `send` コマンド使用時に端末の栞データを自動でバックアップします(KindlePW系
441
+ 専用。他の端末も栞データの仕様が分かれば対応可能)
442
+ + `narou s send.backup-bookmark=true` で設定出来ます
443
+ + 一括送信時(`narou send` とだけコマンドを打った時)のみバックアップします
444
+ + 上記設定をせずに手動でバックアップする場合は `narou send --backup-bookmark`
445
+ もしくは `narou send -b` で行います
446
+ + バックアップした栞データを復元(端末にコピー)するには
447
+ `narou send --restore-bookmark` もしくは `narou send -r` で行います
448
+ - 変換設定に行頭字下げを強制的に行う `enable_force_indent` を追加しました
449
+ + enable_auto_indent は作者の意図的な字下げ無しを考慮して、全体的に字下げが
450
+ 行われていない時にのみ字下げをするのに対して、今回のオプションは強制的に
451
+ 字下げを行います。作者の字下げ忘れが多い場合に有効です
452
+ - WEB UI用ブックマークレットを実行した時にサーバがオフラインかどうか分かるよう
453
+ になりました。ヘルプ画面からブックマークレットを更新して下さい
454
+
455
+ #### 仕様変更
456
+ - `convert.copy_to` を `convert.copy-to` へ変更しました(表記ゆれの統一の為)
457
+ + copy_to も後方互換維持のため残されますが、今後は非推奨になります
458
+ - `flag` コマンドが削除されました
459
+
460
+ #### Bug Fix
461
+ - WEB UI: リロードしても変換中のプログレスバーが表示されるように修正 #57
462
+
463
+ #### その他
464
+ - 将来的に対応バージョンを上げる予定なので、古いRuby(2.1.0未満)を使用している
465
+ 場合にお知らせを表示するようになりました。当面は1.9.3でも動くままですが、いま
466
+ のうちにRuby2.1.0以上へのアップグレードをお願いします
467
+
468
+
410
469
  narou コマンドのインストール or アップデートが完了しました。
411
470
  詳しい説明は `narou help' コマンドをご覧下さい。
412
471
 
@@ -1,109 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright 2013 whiteleaf. All rights reserved.
4
- #
5
-
6
- require_relative "../database"
7
- require_relative "../downloader"
8
- require_relative "../inventory"
9
-
10
- module Command
11
- class Flag < CommandBase
12
- ATTRIBUTES = %w(end delete)
13
-
14
- def self.oneline_help
15
- "小説の各種フラグを設定します"
16
- end
17
-
18
- def initialize
19
- super("<attribute> <target> [<target2> ...]")
20
- @opt.separator <<-EOS.termcolor
21
-
22
- <bold><red>非推奨のコマンドです。tagコマンドを使用して下さい
23
- flagコマンドはv.1.7.0で廃止予定です
24
-
25
- flagデータをtagデータに移行するには、
26
- narou flag --convert-tag
27
- を実行して下さい</red></bold>
28
-
29
- ・指定した小説に各種フラグを設定します
30
- ・再実行で解除
31
- ・--on, --off オプションを付けることで強制設定可能
32
- ・現在指定可能なフラグ
33
- end : 小説が完結状態
34
- delete: 削除された状態
35
-
36
- Examples:
37
- narou flag end 100 # ID:100の小説を完結状態にする
38
- narou flag end --on 100 # 現在の状態に関わらず完結状態にする
39
-
40
- Options:
41
- EOS
42
- @opt.on("--on", "強制的にフラグを立てる") {
43
- @options["on"] = true
44
- }
45
- @opt.on("--off", "強制的にフラグをはずす") {
46
- @options["off"] = true
47
- }
48
- @opt.on("--convert-tag", "flagデータをtagデータに移行します") {
49
- modify = false
50
- database = Database.instance
51
- database.each do |id, data|
52
- if data["flags"]
53
- tags = data["flags"].keys
54
- tags << "404" if tags.delete("delete")
55
- unless tags.empty?
56
- Tag.execute!([id, "--add", tags.join(" "), "--color", "white"])
57
- end
58
- puts "-" * 70
59
- data.delete("flags")
60
- modify = true
61
- end
62
- end
63
- if modify
64
- database.save_database
65
- puts "移行が完了しました"
66
- end
67
- exit 0
68
- }
69
- end
70
-
71
- def execute(argv)
72
- super
73
- if argv.empty?
74
- puts @opt.help
75
- return
76
- end
77
- attribute = (argv.shift || "").downcase
78
- unless ATTRIBUTES.include?(attribute)
79
- error "有効なフラグを指定して下さい\n指定可能なフラグ:#{ATTRIBUTES.join(', ')}"
80
- exit Narou::EXIT_ERROR_CODE
81
- end
82
- if argv.length < 1
83
- error "対象小説を指定して下さい"
84
- exit Narou::EXIT_ERROR_CODE
85
- end
86
- database = Database.instance
87
- argv.each do |target|
88
- data = Downloader.get_data_by_target(target)
89
- unless data
90
- error "#{target} は存在しません"
91
- next
92
- end
93
- flags = data["flags"] || {}
94
- flag = !flags[attribute]
95
- flag = true if @options["on"]
96
- flag = false if @options["off"]
97
- flags[attribute] = flag
98
- if flag
99
- puts "#{data['title']} の #{attribute} フラグを立てました"
100
- else
101
- flags.delete(attribute)
102
- puts "#{data['title']} から #{attribute} フラグをはずしました"
103
- end
104
- database[data["id"]]["flags"] = flags
105
- end
106
- database.save_database
107
- end
108
- end
109
- end