narou 3.0.5.1 → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a84d18a11f5e25f21515b13399b2811ebb84f7e7
4
- data.tar.gz: d4952dd88578f8f57598f71604f7cb2437ffb74c
3
+ metadata.gz: a1b88dda14d27df87b223b955080399ab463b85c
4
+ data.tar.gz: 775e0021c08b61a3514933bc9985a6a6e5388ce4
5
5
  SHA512:
6
- metadata.gz: 59d3a0b5b8f0b67072b16543a155d316f47d56e60aff73d1d6b5acc7aeff6dc517bc4d79db591ff5851ce18b474aba7fc235245050d5053379d6658372c2adf5
7
- data.tar.gz: 2d79326b66290aee5e1825db0fa701ad2cbd3eea91ce06868689dfe718cdfab3a0d01aba73e165c7303eddfe1b694f6d016f020b618f76e3399c0f2c7f771bc1
6
+ metadata.gz: 916f254b9ebd6929c347d91bf64e8e601695df500ae9858c68c1c1c408cbcdefb30b970c7aa7460a570de7cfc6a7605762490a69798b272424563de5c8c99ea6
7
+ data.tar.gz: d7eee8b807d27cd7ce2912495f526fc6c52c5991b94263a73d408fdbc8d4ed90688fe3794e9e2233ad2145461527299dd0061434badd5d28adebe54a77868651
@@ -2,12 +2,28 @@
2
2
  更新履歴 - ChangeLog
3
3
  ====================
4
4
 
5
+ 3.1.1 : 2017/04/05
6
+ ------------------
7
+ #### 追加機能
8
+ - `clean` コマンドを実装しました。サブタイトルの変更等により参照されなくなった
9
+ ゴミファイルを削除することが出来ます。詳細は `narou clean -h`を参照して下さい
10
+ - WEB UI からメールを送信する機能を追加しました
11
+ + Other ボタンと、個別メニューに追加されます
12
+
13
+ #### 修正内容
14
+ - Ruby 2.4 対応
15
+ - WEB UI のアバウトダイアログで、最新バージョンチェックが正しく動かなくなる場合
16
+ があったのを修正
17
+ - WEB UI から「凍結済みでも更新」が使用出来ずにエラーが出ていたのを修正
18
+
19
+
5
20
  3.0.5.1 : 2017/01/17
6
21
  --------------------
7
22
  #### 修正内容
8
23
  - 小説を管理しているフォルダのフルパスに . が含まれている場合にmailコマンドが
9
24
  エラーを出す不具合
10
25
 
26
+
11
27
  3.0.5 : 2017/01/16
12
28
  -------------------
13
29
  #### 仕様変更
@@ -27,6 +43,8 @@
27
43
  3.0.3 : 2016/12/03
28
44
  -------------------
29
45
  #### 仕様変更
46
+ - WEB UI において、Update時に今まではすべての更新処理が終わるまで小説リストに
47
+ 情報が反映されなかったのが、1つの作品毎に反映されるようになりました
30
48
  - カクヨムの小説の最新話掲載日が今までは「最終更新日」から取得していたのを、
31
49
  目次の一番新しい話の日付を割り当てるように変更
32
50
 
data/README.md CHANGED
@@ -33,144 +33,19 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
33
33
  更新履歴 - ChangeLog
34
34
  --------------------
35
35
 
36
- 3.0.5.1 : 2017/01/17
37
- --------------------
38
- #### 修正内容
39
- - 小説を管理しているフォルダのフルパスに . が含まれている場合にmailコマンドが
40
- エラーを出す不具合
41
-
42
-
43
- 3.0.5 : 2017/01/16
44
- -------------------
45
- #### 仕様変更
46
- - mail で送信するファイル名を `小説ID.拡張子` で固定するように変更しました
47
- + メールに添付するファイル名に使えない文字が使われる可能性を排除するため
48
-
49
- #### 修正内容
50
- - mail コマンドで送信できない小説がある
51
-
52
-
53
- 3.0.4 : 2016/12/22
54
- -------------------
55
- #### 修正内容
56
- - ハーメルンのR18小説がダウンロード出来ない問題
57
-
58
-
59
- 3.0.3 : 2016/12/03
60
- -------------------
61
- #### 仕様変更
62
- - カクヨムの小説の最新話掲載日が今までは「最終更新日」から取得していたのを、
63
- 目次の一番新しい話の日付を割り当てるように変更
64
-
65
- #### 修正内容
66
- - その他の小説の最新話掲載日を確認しようとするとクラッシュする場合がある問題
67
- + カクヨムの小説が含まれていると発生していた
68
-
69
-
70
- 3.0.2 : 2016/11/29
71
- -------------------
72
- #### 修正内容
73
- - narou init が正常に実行できない場合がある
74
-
75
-
76
- 3.0.1 : 2016/11/28
77
- -------------------
78
- #### 修正内容
79
- - 削除された小説を更新しようとするとクラッシュする場合がある
80
-
81
-
82
- 3.0.0 : 2016/11/25
83
- -------------------
36
+ 3.1.1 : 2017/04/05
37
+ ------------------
84
38
  #### 追加機能
85
- - update コマンドに --ignore-all オプションを追加しました
86
- + 更新対象小説を指定しない場合の全件アップデート処理を無効にします
87
- + `narou l | narou u --ignore-all` のように PIPE で繋いだ時、処理件数が偶然
88
- 0件になった場合に意図せず全件更新にならない為に使用します
89
- - コマンド使用時に `^tag:NAME` でタグの除外指定が出来るようになりました。
90
- 先に実装された WEB UI での除外検索は `-tag:NAME` ですが、コマンドラインでは
91
- -tag とするとオプションと誤認識されてしまう問題があり、^ に変更しました。
92
- + これに合わせて、WEB UI でも ^tag: を使えるようになります(従来の -tag も
93
- 使えます)
94
- - WEB UI 関連
95
- - Update ボタンに「タグを指定して更新」を追加しました
96
- - Update ボタンの「最新話更新日を確認」を刷新しました。なろうAPIを使用して
97
- 一括で更新されたかを確認することが出来るようになります
98
- + コマンドライン版の `narou update --gl` も同様の機能に変わっています。
99
- 詳細は narou u -h を参照
100
- + > “実際に小説のデータが修正されてからなろうAPIに反映されるまで平均5分
101
- 程度(最大2時間)の誤差があります。”
102
-
103
- ([公式サイト](http://dev.syosetu.com/man/api/)から引用)
104
- + ダイアログ内の各チェックリストの項目を独立させたものが、「な」「他」
105
- 「(更新アイコン)」ボタンに独立させてあります。詳細はマウスホーバーの説明
106
- を参照
107
- + 最新話掲載日を確認した結果、新着がありそうな小説には「最新話掲載日」の
108
- 日付の左上あたりに目印が表示されます
109
- - 小説リストに「話数」を追加しました
110
- - 小説リストに「更新チェック日」を追加しました
111
- - Linux でも Eject ボタンに対応しました
112
- + デスクトップにログインした状態での udisks-daemon または udisksd による
113
- 自動マウントにのみ対応しています
114
- + 使用中のデスクトップの外部で `narou web` を動かしている場合(例えばOS
115
- 起動時に自動起動させた場合やログインし直した場合)、権限の問題により
116
- Eject が効かない場合があります
117
- - 設定に `normalize-filename` を追加しました。ファイル名をNFCで正規化します。
118
- Dropbox 使用時などに合成文字列関係で問題がある場合などに使用して下さい。
119
- 正規化後のファイル名が以前の物と変わった場合、別ファイルと認識されるので理解
120
- の上で有効にして下さい
121
- - 調査ログ保存時にエラー・警告・INFOの個数を表示するようにしました。
122
- (`convert.inspect` が false の場合)
123
- - setting.ini の title_date_format に、小説のタグを埋め込める書式 $ntag を追加
124
- しました。小説にタグがついている場合、全てのタグをカンマ区切りで埋め込めます
125
-
126
- #### 仕様変更
127
- - WEB UI の小説リストの初期表示状態を項目数増加に伴い整理しました
128
- + 初期ソートを「最新話掲載日」に変更
129
- + 種別、DL、更新チェック日、話数は初期状態では非表示
130
- + 項目追加に伴い表示のカスタマイズがリセットされるので再設定をお願いします
131
- - 現在ユーザーフォルダに保存されている .narousetting フォルダ(グローバル設定用)
132
- を .narou フォルダと同じ場所に移動/コピーした場合、そちらを優先して読みに
133
- 行くようになりました
134
- + 全てのデータが一つのフォルダにまとめることが出来るようになるので、別PCへの
135
- データ移行がしやすくなります
136
- + また、現在はサーバー設定がグローバル設定で保存されているため、小説フォルダ
137
- を分けても WEB UI サーバのアドレスが同じになってしまっていましたが、別々の
138
- アドレス/ポートにすることが可能になります
139
- - 複数のタグを同時に指定した場合、同じ小説が複数回対象になっていたのを一度のみ
140
- 対象になるように変更しました
141
- + 例) A と B というタグをもつ小説があったとして、`narou u A B` で二度更新され
142
- てしまっていたのが、一度のみ更新されるようになる
143
- - send --without-freeze オプションを指定時、対象小説を指定した場合でも凍結時は
144
- 送信されなくなりました。(send.without-freeze を設定していても同じ)
145
- + WEB UI ではこれまでと同様に一括時のみ凍結済みは送信されず、個別指定時は凍結
146
- 済みでも送信出来ます
147
- - send --without-freeze オプションの短縮形として -w を設定しました
148
- - send で送信時、対象小説を指定した/しないに関わらずタイムスタンプを必ず比較
149
- して新しければ送信するように変更しました
150
- + 必ず送信したい場合は --force オプションを指定して下さい
151
- - 栞のバックアップ・レストア時にタイムスタンプを見て新しい場合のみコピーする
152
- ように変更しました
39
+ - `clean` コマンドを実装しました。サブタイトルの変更等により参照されなくなった
40
+ ゴミファイルを削除することが出来ます。詳細は `narou clean -h`を参照して下さい
41
+ - WEB UI からメールを送信する機能を追加しました
42
+ + Other ボタンと、個別メニューに追加されます
153
43
 
154
44
  #### 修正内容
155
- - カクヨムの情報が一部取得出来なくなっていた
156
- - mail コマンド送信時に添付ファイルに @ が付いている場合、全角の@に置換する様
157
- にしました
158
- - WEB UI でタグ検索時にフィルター末尾に自動で半角空白を挿入するようにしました
159
- - list コマンドで検索やタグによる絞り込みと<limit>の指定による表示個数を制限
160
- を併用した場合に、<limit>で指定した分のみしか絞り込み対象になっていなかった
161
- - list --filter series を指定時に一つも連載小説が表示されていなかった
162
- - Linux 環境で send コマンドが送信出来ない場合があった #119
163
- - 小説IDが一桁の場合に、download.use-subdirectory で作られるサブフォルダに半角
164
- スペースが含まれてしまっていた
165
- - WEB UI のフィルターのおいて、本来表示されない内部データにまでマッチングして
166
- しまう不具合
167
- - update.logging オプションが有効な場合に、アップデートをしない時でもログを
168
- 保存してしまう場合がある不具合
169
- - その他動作の安定性を向上などの細かい修正
170
-
171
- ----
172
-
173
- 過去の更新履歴は[こちらを参照](https://github.com/whiteleaf7/narou/blob/master/ChangeLog.md)
45
+ - Ruby 2.4 対応
46
+ - WEB UI のアバウトダイアログで、最新バージョンチェックが正しく動かなくなる場合
47
+ があったのを修正
48
+ - WEB UI から「凍結済みでも更新」が使用出来ずにエラーが出ていたのを修正
174
49
 
175
50
  ----
176
51
 
@@ -37,6 +37,7 @@ module Command
37
37
  "mail" => Mail,
38
38
  "backup" => Backup,
39
39
  "csv" => Csv,
40
+ "clean" => Clean,
40
41
  "help" => Help,
41
42
  "version" => Version,
42
43
  "init" => Init
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require "fileutils"
4
+ require_relative "../downloader"
5
+ require_relative "../database"
6
+ require_relative "../inventory"
7
+
8
+ module Command
9
+ class Clean < CommandBase
10
+ def self.oneline_help
11
+ "ゴミファイルを削除します"
12
+ end
13
+
14
+ def initialize
15
+ super("[<target> ...] [options]")
16
+ @opt.separator <<-EOS
17
+
18
+ ・サブタイトルの変更等により参照されなくなったゴミファイルを削除します。
19
+ ・対象小説を指定しなかった場合は直前に変換した小説について検査します。
20
+
21
+ Examples:
22
+ narou clean # 直前に変換した小説について検査
23
+ narou clean 6
24
+ narou clean 6 -f # 実際に削除
25
+ narou clean --all # 全小説について検査
26
+ narou clean -af # 全小説について検査して、実際に削除
27
+ Options:
28
+ EOS
29
+
30
+ @opt.on("-f", "--force", "指定した小説のゴミファイルを実際に削除する") {
31
+ @options["force"] = true
32
+ }
33
+ @opt.on("-n", "--dry-run", "指定した小説のゴミファイルを表示する") {
34
+ @options["force"] = false
35
+ }
36
+ @opt.on("-a", "--all", "全小説を検査する") {
37
+ @options["all"] = true
38
+ }
39
+ end
40
+
41
+ def execute(argv)
42
+ super
43
+ if @options["all"]
44
+ clean_all_directories(@options["force"])
45
+ return
46
+ end
47
+ if argv.empty?
48
+ latest_id = Inventory.load("latest_convert")["id"]
49
+ if latest_id
50
+ dir = Downloader.get_novel_data_dir_by_target(latest_id)
51
+ clean_directory(dir, @options["force"])
52
+ end
53
+ return
54
+ end
55
+ tagname_to_ids(argv)
56
+ argv.each do |target|
57
+ dir = Downloader.get_novel_data_dir_by_target(target)
58
+ if dir
59
+ clean_directory(dir, @options["force"])
60
+ else
61
+ error "#{target} は存在しません"
62
+ end
63
+ end
64
+ end
65
+
66
+ def clean_all_directories(is_remove)
67
+ Database.instance.each_key do |id|
68
+ next if Narou.novel_frozen?(id)
69
+ dir = Downloader.get_novel_data_dir_by_target(id)
70
+ clean_directory(dir, is_remove)
71
+ end
72
+ end
73
+
74
+ def clean_directory(dir, is_remove)
75
+ return unless File.directory?(dir)
76
+ return unless File.exist?(File.join(dir, Downloader::TOC_FILE_NAME))
77
+ orphans = find_orphans(dir)
78
+ orphans.each do |path|
79
+ puts path
80
+ FileUtils.remove_entry_secure(path) if is_remove
81
+ end
82
+ end
83
+
84
+ def find_orphans(dir)
85
+ orphans = []
86
+ toc = Downloader.get_toc_data(dir)
87
+ items = toc["subtitles"].map { |item| "#{item['index']} #{item['file_subtitle']}" }
88
+ Dir.glob(File.join(dir, Downloader::RAW_DATA_DIR_NAME, "*.txt")).each do |path|
89
+ orphans.push(path) unless items.include?(File.basename(path, ".*"))
90
+ end
91
+ Dir.glob(File.join(dir, Downloader::SECTION_SAVE_DIR_NAME, "*.yaml")).each do |path|
92
+ orphans.push(path) unless items.include?(File.basename(path, ".*"))
93
+ end
94
+ orphans
95
+ end
96
+ end
97
+ end
@@ -9,12 +9,15 @@ require_relative "../database"
9
9
  require_relative "../downloader"
10
10
  require_relative "../template"
11
11
  require_relative "../novelconverter"
12
+ require_relative "../eventable"
12
13
  require_relative "update/interval"
13
14
  require_relative "update/general_lastup_updater"
15
+ require_relative "update/hotentry_manager"
14
16
 
15
17
  module Command
16
18
  class Update < CommandBase
17
19
  extend Memoist
20
+ include Narou::Eventable
18
21
 
19
22
  LOG_DIR_NAME = "log"
20
23
  LOG_NUM_LIMIT = 30 # ログの保存する上限数
@@ -132,6 +135,16 @@ module Command
132
135
  Narou::UPDATE_SORT_KEYS.keys.include?(key)
133
136
  end
134
137
 
138
+ def sort_key
139
+ key = @options["sort-by"]
140
+ return nil unless key
141
+ key.downcase!
142
+ return key if valid_sort_key?(key)
143
+ error "#{key} は正しいキーではありません。次の中から選択して下さい\n " \
144
+ "#{Narou.update_sort_key_summaries(17)}"
145
+ exit Narou::EXIT_ERROR_CODE
146
+ end
147
+
135
148
  # rubocop:disable Metrics/BlockLength
136
149
  def execute(argv)
137
150
  super
@@ -145,22 +158,9 @@ module Command
145
158
  end
146
159
  tagname_to_ids(update_target_list)
147
160
 
148
- sort_key = @options["sort-by"]
149
- if sort_key
150
- sort_key.downcase!
151
- unless valid_sort_key?(sort_key)
152
- error "#{sort_key} は正しいキーではありません。次の中から選択して下さい\n " \
153
- "#{Narou.update_sort_key_summaries(17)}"
154
- exit Narou::EXIT_ERROR_CODE
155
- end
156
- end
157
161
  flush_cache # memoist のキャッシュ削除
158
162
 
159
- inv = Inventory.load("local_setting")
160
- @options["hotentry"] = inv["hotentry"]
161
- @options["hotentry.auto-mail"] = inv["hotentry.auto-mail"]
162
- hotentry = {}
163
-
163
+ hotentry_manager = HotentryManager.new
164
164
  interval = Interval.new(@options["interval"])
165
165
 
166
166
  begin
@@ -182,13 +182,7 @@ module Command
182
182
  end
183
183
  interval.wait
184
184
  downloader = Downloader.new(target)
185
-
186
- if @options["hotentry"]
187
- downloader.on(:newarrival) do |hash|
188
- entry = hotentry[hash[:id]] ||= []
189
- entry << hash[:subtitle_info]
190
- end
191
- end
185
+ hotentry_manager.connect(downloader)
192
186
 
193
187
  delete_modified_tag = -> do
194
188
  tags = data["tags"] || []
@@ -200,6 +194,7 @@ module Command
200
194
  case result.status
201
195
  when :ok
202
196
  delete_modified_tag.call
197
+ trigger(:success, data)
203
198
  if @options["no-convert"] ||
204
199
  (@options["convert-only-new-arrival"] && !result.new_arrivals)
205
200
  interval.force_wait
@@ -236,7 +231,7 @@ module Command
236
231
  end
237
232
  end
238
233
 
239
- process_hotentry(hotentry)
234
+ process_hotentry(hotentry_manager.hotentries)
240
235
  end
241
236
  ensure
242
237
  save_log(update_log)
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright 2013 whiteleaf. All rights reserved.
4
+ #
5
+
6
+ class HotentryManager
7
+ attr_reader :hotentries
8
+
9
+ def initialize
10
+ inv = Inventory.load("local_setting")
11
+ self.enable = inv["hotentry"]
12
+ self.auto_mail = inv["hotentry.auto-mail"]
13
+ self.hotentries = {}
14
+ end
15
+
16
+ def connect(downloader)
17
+ return unless enable?
18
+ downloader.on(:newarrival, &method(:store_entry))
19
+ end
20
+
21
+ def enable?
22
+ enable
23
+ end
24
+
25
+ def auto_mail?
26
+ auto_mail
27
+ end
28
+
29
+ private
30
+
31
+ attr_accessor :enable, :auto_mail
32
+ attr_writer :hotentries
33
+
34
+ def store_entry(hash)
35
+ entry = hotentries[hash[:id]] ||= []
36
+ entry << hash[:subtitle_info]
37
+ end
38
+ end
@@ -100,17 +100,21 @@ module Command
100
100
  end
101
101
 
102
102
  #
103
- # 普通にコマンドを実行するけど、exit(2) を補足してexitstatus を返す
104
- # 正常終了なら0
103
+ # コマンドを実行するが、アプリケーションは終了させない
104
+ # (SystemExit を補足し、終了コードを返り値とする)
105
105
  #
106
- def self.execute!(argv)
107
- self.new.execute(argv)
106
+ def execute!(argv)
107
+ execute(argv)
108
108
  rescue SystemExit => e
109
109
  e.status
110
110
  else
111
111
  0
112
112
  end
113
113
 
114
+ def self.execute!(argv)
115
+ self.new.execute!(argv)
116
+ end
117
+
114
118
  def self.oneline_help
115
119
  ""
116
120
  end
@@ -92,7 +92,7 @@ class Downloader
92
92
  when /^n\d+[a-z]+$/i
93
93
  target.downcase!
94
94
  :ncode
95
- when /^\d+$/, Fixnum
95
+ when /^\d+$/, Integer
96
96
  :id
97
97
  else
98
98
  :other
@@ -247,8 +247,9 @@ module Helper
247
247
  result
248
248
  end
249
249
 
250
+ INTEGER_CLASS = RUBY_VERSION >= "2.4.0" ? Integer : Fixnum
250
251
  TYPE_OF_VALUE = {
251
- TrueClass => :boolean, FalseClass => :boolean, Fixnum => :integer,
252
+ TrueClass => :boolean, FalseClass => :boolean, INTEGER_CLASS => :integer,
252
253
  Float => :float, String => :string
253
254
  }
254
255
 
@@ -35,7 +35,7 @@ module Narou
35
35
  @@is_web = false
36
36
 
37
37
  def last_commit_year
38
- 2016
38
+ 2017
39
39
  end
40
40
 
41
41
  def get_root_dir
@@ -294,7 +294,7 @@ module Narou
294
294
  #
295
295
  def latest_version
296
296
  response = `gem search ^narou$`.split("\n")
297
- if response.last =~ /\Anarou \((.+?)\)\z/
297
+ if response.last =~ /\Anarou \(([0-9.]+).*?\)\z/
298
298
  $1
299
299
  end
300
300
  end
@@ -63,11 +63,8 @@ class SiteSetting
63
63
  def replace_group_values(key, option_values = {})
64
64
  dest = option_values[key] || @match_values[key] || @yaml_setting[key]
65
65
  return dest if is_container?(dest)
66
- begin
67
- result = dest.dup
68
- rescue TypeError
69
- return dest
70
- end
66
+ return dest unless dest.respond_to?(:gsub!)
67
+ result = dest.dup
71
68
  values = @yaml_setting.merge(@match_values).merge(option_values)
72
69
  result.gsub!(/\\\\k<(.+?)>/) do |match|
73
70
  value = values[$1]
@@ -3,4 +3,4 @@
3
3
  # Copyright 2013 whiteleaf. All rights reserved.
4
4
  #
5
5
 
6
- Version = "3.0.5.1"
6
+ Version = "3.1.1"
@@ -575,6 +575,13 @@ class Narou::AppServer < Sinatra::Base
575
575
  end
576
576
  end
577
577
 
578
+ post "/api/mail" do
579
+ ids = select_valid_novel_ids(params["ids"]) || []
580
+ Narou::Worker.push do
581
+ CommandLine.run!(["mail", ids])
582
+ end
583
+ end
584
+
578
585
  post "/api/update" do
579
586
  ids = select_valid_novel_ids(params["ids"]) || []
580
587
  opt_arguments = []
@@ -582,7 +589,11 @@ class Narou::AppServer < Sinatra::Base
582
589
  opt_arguments << "--force"
583
590
  end
584
591
  Narou::Worker.push do
585
- CommandLine.run!(["update", ids, opt_arguments])
592
+ cmd = Command::Update.new
593
+ cmd.on(:success) do
594
+ @@push_server.send_all(:"table.reload")
595
+ end
596
+ cmd.execute!([ids, opt_arguments].flatten)
586
597
  @@push_server.send_all(:"table.reload")
587
598
  end
588
599
  end
@@ -598,7 +609,11 @@ class Narou::AppServer < Sinatra::Base
598
609
  end
599
610
  pass if tag_params.empty?
600
611
  Narou::Worker.push do
601
- CommandLine.run!(["update", tag_params])
612
+ cmd = Command::Update.new
613
+ cmd.on(:success) do
614
+ @@push_server.send_all(:"table.reload")
615
+ end
616
+ cmd.execute!(tag_params)
602
617
  @@push_server.send_all(:"table.reload")
603
618
  end
604
619
  end
@@ -933,4 +948,3 @@ class Narou::AppServer < Sinatra::Base
933
948
  haml :"widget/notepad", layout: nil
934
949
  end
935
950
  end
936
-
@@ -350,7 +350,8 @@ var Narou = (function() {
350
350
 
351
351
  _default_commands: [
352
352
  "setting", "diff", "edit_tag", "freeze_toggle", "update",
353
- "send", "remove", "convert", "inspect", "folder", "backup"
353
+ "send", "remove", "convert", "inspect", "folder", "backup",
354
+ "mail"
354
355
  ],
355
356
 
356
357
  items: [
@@ -368,6 +369,7 @@ var Narou = (function() {
368
369
  { label: "保存フォルダを開く", command: "folder" },
369
370
  { label: "バックアップを作成", command: "backup" },
370
371
  { label: "再ダウンロード", command: "download_force" },
372
+ { label: "メールで送信", command: "mail" },
371
373
  ],
372
374
 
373
375
  events: {
@@ -444,6 +446,12 @@ var Narou = (function() {
444
446
  this.action.downloadForce(this.target_id);
445
447
  }.bind(this));
446
448
  },
449
+
450
+ mail: function() {
451
+ this.openConsoleDialog(function() {
452
+ this.action.mail(this.target_id);
453
+ }.bind(this));
454
+ },
447
455
  },
448
456
 
449
457
  initializeMenuEvents: function() {
@@ -553,6 +561,11 @@ var Narou = (function() {
553
561
  $.post("/api/download_force", { "ids": ids });
554
562
  },
555
563
 
564
+ mail: function() {
565
+ var ids = this._getSelectedIds(arguments);
566
+ $.post("/api/mail", { "ids": ids });
567
+ },
568
+
556
569
  update: function() {
557
570
  var ids = this._getSelectedIds(arguments);
558
571
  $.post("/api/update", { "ids": ids });
@@ -1802,4 +1815,3 @@ var Narou = (function() {
1802
1815
 
1803
1816
  return Narou;
1804
1817
  })();
1805
-
@@ -1366,6 +1366,15 @@ $(document).ready(function() {
1366
1366
  action.settingBurn();
1367
1367
  });
1368
1368
 
1369
+ /*
1370
+ * ボタン
1371
+ * Other > 選択した小説をメールで送信
1372
+ */
1373
+ $(".button-mail").on("click", function(e) {
1374
+ e.preventDefault();
1375
+ action.mail();
1376
+ });
1377
+
1369
1378
  /*
1370
1379
  * ボタン
1371
1380
  * Eject
@@ -1508,4 +1517,3 @@ $(document).ready(function() {
1508
1517
  });
1509
1518
 
1510
1519
  });
1511
-
@@ -5,7 +5,8 @@
5
5
  function checkVersionIsUpdated(latest, current) {
6
6
  var latestNumbers = latest.split(".");
7
7
  var currentNumbers = current.split(".");
8
- for (var i = 0; i < 3; i++) {
8
+ var maxVersionLength = Math.max(latestNumbers.length, currentNumbers.length);
9
+ for (var i = 0; i < maxVersionLength; i++) {
9
10
  var leftNum = latestNumbers[i] | 0;
10
11
  var rightNum = currentNumbers[i] | 0;
11
12
  if (leftNum !== rightNum) {
@@ -274,6 +274,8 @@
274
274
  %a.button-backup(href="#") 選択した小説のバックアップを作成
275
275
  %li
276
276
  %a.button-setting-burn(href="#") 選択した小説の設定の未設定項目に共通設定を焼付ける
277
+ %li
278
+ %a.button-mail(href="#") 選択した小説をメールで送信
277
279
  .btn-group.eject-group.hide
278
280
  %button.button-eject.btn.btn-default(type="button" data-toggle="tooltip" title="端末を取り出す")
279
281
  Eject
@@ -343,4 +345,3 @@
343
345
  %a#select-color-menu-white(href="#")
344
346
  %big
345
347
  %span.label.label-white.label-fixed-width White
346
-
@@ -32,139 +32,19 @@ Gem::Specification.new do |gem|
32
32
  install_message = <<-EOS
33
33
  #{"*" * 60}
34
34
 
35
- 3.0.5 : 2017/01/16
36
- -------------------
37
- #### 仕様変更
38
- - mail で送信するファイル名を `小説ID.拡張子` で固定するように変更しました
39
- + メールに添付するファイル名に使えない文字が使われる可能性を排除するため
40
-
41
- #### 修正内容
42
- - mail コマンドで送信できない小説がある
43
-
44
- 3.0.5.1 : 2017/01/17
45
- --------------------
46
- #### 修正内容
47
- - 小説を管理しているフォルダのフルパスに . が含まれている場合にmailコマンドが
48
- エラーを出す不具合
49
-
50
-
51
- 3.0.4 : 2016/12/22
52
- -------------------
53
- #### 修正内容
54
- - ハーメルンのR18小説がダウンロード出来ない問題
55
-
56
-
57
- 3.0.3 : 2016/12/03
58
- -------------------
59
- #### 仕様変更
60
- - カクヨムの小説の最新話掲載日が今までは「最終更新日」から取得していたのを、
61
- 目次の一番新しい話の日付を割り当てるように変更
62
-
63
- #### 修正内容
64
- - その他の小説の最新話掲載日を確認しようとするとクラッシュする場合がある問題
65
- + カクヨムの小説が含まれていると発生していた
66
-
67
-
68
- 3.0.2 : 2016/11/29
69
- -------------------
70
- #### 修正内容
71
- - narou init が正常に実行できない場合がある
72
-
73
-
74
- 3.0.1 : 2016/11/28
75
- -------------------
76
- #### 修正内容
77
- - 削除された小説を更新しようとするとクラッシュする場合がある
78
-
79
-
80
- 3.0.0 : 2016/11/25
81
- -------------------
35
+ 3.1.1 : 2017/04/05
36
+ ------------------
82
37
  #### 追加機能
83
- - update コマンドに --ignore-all オプションを追加しました
84
- + 更新対象小説を指定しない場合の全件アップデート処理を無効にします
85
- + `narou l | narou u --ignore-all` のように PIPE で繋いだ時、処理件数が偶然
86
- 0件になった場合に意図せず全件更新にならない為に使用します
87
- - コマンド使用時に `^tag:NAME` でタグの除外指定が出来るようになりました。
88
- 先に実装された WEB UI での除外検索は `-tag:NAME` ですが、コマンドラインでは
89
- -tag とするとオプションと誤認識されてしまう問題があり、^ に変更しました。
90
- + これに合わせて、WEB UI でも ^tag: を使えるようになります(従来の -tag も
91
- 使えます)
92
- - WEB UI 関連
93
- - Update ボタンに「タグを指定して更新」を追加しました
94
- - Update ボタンの「最新話更新日を確認」を刷新しました。なろうAPIを使用して
95
- 一括で更新されたかを確認することが出来るようになります
96
- + コマンドライン版の `narou update --gl` も同様の機能に変わっています。
97
- 詳細は narou u -h を参照
98
- + > “実際に小説のデータが修正されてからなろうAPIに反映されるまで平均5分
99
- 程度(最大2時間)の誤差があります。”
100
-
101
- ([公式サイト](http://dev.syosetu.com/man/api/)から引用)
102
- + ダイアログ内の各チェックリストの項目を独立させたものが、「な」「他」
103
- 「(更新アイコン)」ボタンに独立させてあります。詳細はマウスホーバーの説明
104
- を参照
105
- + 最新話掲載日を確認した結果、新着がありそうな小説には「最新話掲載日」の
106
- 日付の左上あたりに目印が表示されます
107
- - 小説リストに「話数」を追加しました
108
- - 小説リストに「更新チェック日」を追加しました
109
- - Linux でも Eject ボタンに対応しました
110
- + デスクトップにログインした状態での udisks-daemon または udisksd による
111
- 自動マウントにのみ対応しています
112
- + 使用中のデスクトップの外部で `narou web` を動かしている場合(例えばOS
113
- 起動時に自動起動させた場合やログインし直した場合)、権限の問題により
114
- Eject が効かない場合があります
115
- - 設定に `normalize-filename` を追加しました。ファイル名をNFCで正規化します。
116
- Dropbox 使用時などに合成文字列関係で問題がある場合などに使用して下さい。
117
- 正規化後のファイル名が以前の物と変わった場合、別ファイルと認識されるので理解
118
- の上で有効にして下さい
119
- - 調査ログ保存時にエラー・警告・INFOの個数を表示するようにしました。
120
- (`convert.inspect` が false の場合)
121
- - setting.ini の title_date_format に、小説のタグを埋め込める書式 $ntag を追加
122
- しました。小説にタグがついている場合、全てのタグをカンマ区切りで埋め込めます
123
-
124
- #### 仕様変更
125
- - WEB UI の小説リストの初期表示状態を項目数増加に伴い整理しました
126
- + 初期ソートを「最新話掲載日」に変更
127
- + 種別、DL、更新チェック日、話数は初期状態では非表示
128
- + 項目追加に伴い表示のカスタマイズがリセットされるので再設定をお願いします
129
- - 現在ユーザーフォルダに保存されている .narousetting フォルダ(グローバル設定用)
130
- を .narou フォルダと同じ場所に移動/コピーした場合、そちらを優先して読みに
131
- 行くようになりました
132
- + 全てのデータが一つのフォルダにまとめることが出来るようになるので、別PCへの
133
- データ移行がしやすくなります
134
- + また、現在はサーバー設定がグローバル設定で保存されているため、小説フォルダ
135
- を分けても WEB UI サーバのアドレスが同じになってしまっていましたが、別々の
136
- アドレス/ポートにすることが可能になります
137
- - 複数のタグを同時に指定した場合、同じ小説が複数回対象になっていたのを一度のみ
138
- 対象になるように変更しました
139
- + 例) A と B というタグをもつ小説があったとして、`narou u A B` で二度更新され
140
- てしまっていたのが、一度のみ更新されるようになる
141
- - send --without-freeze オプションを指定時、対象小説を指定した場合でも凍結時は
142
- 送信されなくなりました。(send.without-freeze を設定していても同じ)
143
- + WEB UI ではこれまでと同様に一括時のみ凍結済みは送信されず、個別指定時は凍結
144
- 済みでも送信出来ます
145
- - send --without-freeze オプションの短縮形として -w を設定しました
146
- - send で送信時、対象小説を指定した/しないに関わらずタイムスタンプを必ず比較
147
- して新しければ送信するように変更しました
148
- + 必ず送信したい場合は --force オプションを指定して下さい
149
- - 栞のバックアップ・レストア時にタイムスタンプを見て新しい場合のみコピーする
150
- ように変更しました
38
+ - `clean` コマンドを実装しました。サブタイトルの変更等により参照されなくなった
39
+ ゴミファイルを削除することが出来ます。詳細は `narou clean -h`を参照して下さい
40
+ - WEB UI からメールを送信する機能を追加しました
41
+ + Other ボタンと、個別メニューに追加されます
151
42
 
152
43
  #### 修正内容
153
- - カクヨムの情報が一部取得出来なくなっていた
154
- - mail コマンド送信時に添付ファイルに @ が付いている場合、全角の@に置換する様
155
- にしました
156
- - WEB UI でタグ検索時にフィルター末尾に自動で半角空白を挿入するようにしました
157
- - list コマンドで検索やタグによる絞り込みと<limit>の指定による表示個数を制限
158
- を併用した場合に、<limit>で指定した分のみしか絞り込み対象になっていなかった
159
- - list --filter series を指定時に一つも連載小説が表示されていなかった
160
- - Linux 環境で send コマンドが送信出来ない場合があった #119
161
- - 小説IDが一桁の場合に、download.use-subdirectory で作られるサブフォルダに半角
162
- スペースが含まれてしまっていた
163
- - WEB UI のフィルターのおいて、本来表示されない内部データにまでマッチングして
164
- しまう不具合
165
- - update.logging オプションが有効な場合に、アップデートをしない時でもログを
166
- 保存してしまう場合がある不具合
167
- - その他動作の安定性を向上などの細かい修正
44
+ - Ruby 2.4 対応
45
+ - WEB UI のアバウトダイアログで、最新バージョンチェックが正しく動かなくなる場合
46
+ があったのを修正
47
+ - WEB UI から「凍結済みでも更新」が使用出来ずにエラーが出ていたのを修正
168
48
 
169
49
  #{"*" * 60}
170
50
  EOS
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: 3.0.5.1
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - whiteleaf7
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-17 00:00:00.000000000 Z
11
+ date: 2017-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: termcolorlight
@@ -292,6 +292,7 @@ files:
292
292
  - lib/command/alias.rb
293
293
  - lib/command/backup.rb
294
294
  - lib/command/browser.rb
295
+ - lib/command/clean.rb
295
296
  - lib/command/convert.rb
296
297
  - lib/command/csv.rb
297
298
  - lib/command/diff.rb
@@ -310,6 +311,7 @@ files:
310
311
  - lib/command/tag.rb
311
312
  - lib/command/update.rb
312
313
  - lib/command/update/general_lastup_updater.rb
314
+ - lib/command/update/hotentry_manager.rb
313
315
  - lib/command/update/interval.rb
314
316
  - lib/command/version.rb
315
317
  - lib/command/web.rb
@@ -450,7 +452,6 @@ files:
450
452
  - preset/ncode.syosetu.com/n3730bn/converter.rb
451
453
  - preset/ncode.syosetu.com/n4259s/converter.rb
452
454
  - preset/ncode.syosetu.com/n4259s/setting.ini
453
- - preset/ncode.syosetu.com/n5115cq/converter.rb
454
455
  - preset/ncode.syosetu.com/n5530cf/converter.rb
455
456
  - preset/ncode.syosetu.com/n7594ct/converter.rb
456
457
  - preset/ncode.syosetu.com/n7975cr/setting.ini
@@ -485,139 +486,19 @@ metadata: {}
485
486
  post_install_message: |
486
487
  ************************************************************
487
488
 
488
- 3.0.5 : 2017/01/16
489
- -------------------
490
- #### 仕様変更
491
- - mail で送信するファイル名を `小説ID.拡張子` で固定するように変更しました
492
- + メールに添付するファイル名に使えない文字が使われる可能性を排除するため
493
-
494
- #### 修正内容
495
- - mail コマンドで送信できない小説がある
496
-
497
- 3.0.5.1 : 2017/01/17
498
- --------------------
499
- #### 修正内容
500
- - 小説を管理しているフォルダのフルパスに . が含まれている場合にmailコマンドが
501
- エラーを出す不具合
502
-
503
-
504
- 3.0.4 : 2016/12/22
505
- -------------------
506
- #### 修正内容
507
- - ハーメルンのR18小説がダウンロード出来ない問題
508
-
509
-
510
- 3.0.3 : 2016/12/03
511
- -------------------
512
- #### 仕様変更
513
- - カクヨムの小説の最新話掲載日が今までは「最終更新日」から取得していたのを、
514
- 目次の一番新しい話の日付を割り当てるように変更
515
-
516
- #### 修正内容
517
- - その他の小説の最新話掲載日を確認しようとするとクラッシュする場合がある問題
518
- + カクヨムの小説が含まれていると発生していた
519
-
520
-
521
- 3.0.2 : 2016/11/29
522
- -------------------
523
- #### 修正内容
524
- - narou init が正常に実行できない場合がある
525
-
526
-
527
- 3.0.1 : 2016/11/28
528
- -------------------
529
- #### 修正内容
530
- - 削除された小説を更新しようとするとクラッシュする場合がある
531
-
532
-
533
- 3.0.0 : 2016/11/25
534
- -------------------
489
+ 3.1.1 : 2017/04/05
490
+ ------------------
535
491
  #### 追加機能
536
- - update コマンドに --ignore-all オプションを追加しました
537
- + 更新対象小説を指定しない場合の全件アップデート処理を無効にします
538
- + `narou l | narou u --ignore-all` のように PIPE で繋いだ時、処理件数が偶然
539
- 0件になった場合に意図せず全件更新にならない為に使用します
540
- - コマンド使用時に `^tag:NAME` でタグの除外指定が出来るようになりました。
541
- 先に実装された WEB UI での除外検索は `-tag:NAME` ですが、コマンドラインでは
542
- -tag とするとオプションと誤認識されてしまう問題があり、^ に変更しました。
543
- + これに合わせて、WEB UI でも ^tag: を使えるようになります(従来の -tag も
544
- 使えます)
545
- - WEB UI 関連
546
- - Update ボタンに「タグを指定して更新」を追加しました
547
- - Update ボタンの「最新話更新日を確認」を刷新しました。なろうAPIを使用して
548
- 一括で更新されたかを確認することが出来るようになります
549
- + コマンドライン版の `narou update --gl` も同様の機能に変わっています。
550
- 詳細は narou u -h を参照
551
- + > “実際に小説のデータが修正されてからなろうAPIに反映されるまで平均5分
552
- 程度(最大2時間)の誤差があります。”
553
-
554
- ([公式サイト](http://dev.syosetu.com/man/api/)から引用)
555
- + ダイアログ内の各チェックリストの項目を独立させたものが、「な」「他」
556
- 「(更新アイコン)」ボタンに独立させてあります。詳細はマウスホーバーの説明
557
- を参照
558
- + 最新話掲載日を確認した結果、新着がありそうな小説には「最新話掲載日」の
559
- 日付の左上あたりに目印が表示されます
560
- - 小説リストに「話数」を追加しました
561
- - 小説リストに「更新チェック日」を追加しました
562
- - Linux でも Eject ボタンに対応しました
563
- + デスクトップにログインした状態での udisks-daemon または udisksd による
564
- 自動マウントにのみ対応しています
565
- + 使用中のデスクトップの外部で `narou web` を動かしている場合(例えばOS
566
- 起動時に自動起動させた場合やログインし直した場合)、権限の問題により
567
- Eject が効かない場合があります
568
- - 設定に `normalize-filename` を追加しました。ファイル名をNFCで正規化します。
569
- Dropbox 使用時などに合成文字列関係で問題がある場合などに使用して下さい。
570
- 正規化後のファイル名が以前の物と変わった場合、別ファイルと認識されるので理解
571
- の上で有効にして下さい
572
- - 調査ログ保存時にエラー・警告・INFOの個数を表示するようにしました。
573
- (`convert.inspect` が false の場合)
574
- - setting.ini の title_date_format に、小説のタグを埋め込める書式 $ntag を追加
575
- しました。小説にタグがついている場合、全てのタグをカンマ区切りで埋め込めます
576
-
577
- #### 仕様変更
578
- - WEB UI の小説リストの初期表示状態を項目数増加に伴い整理しました
579
- + 初期ソートを「最新話掲載日」に変更
580
- + 種別、DL、更新チェック日、話数は初期状態では非表示
581
- + 項目追加に伴い表示のカスタマイズがリセットされるので再設定をお願いします
582
- - 現在ユーザーフォルダに保存されている .narousetting フォルダ(グローバル設定用)
583
- を .narou フォルダと同じ場所に移動/コピーした場合、そちらを優先して読みに
584
- 行くようになりました
585
- + 全てのデータが一つのフォルダにまとめることが出来るようになるので、別PCへの
586
- データ移行がしやすくなります
587
- + また、現在はサーバー設定がグローバル設定で保存されているため、小説フォルダ
588
- を分けても WEB UI サーバのアドレスが同じになってしまっていましたが、別々の
589
- アドレス/ポートにすることが可能になります
590
- - 複数のタグを同時に指定した場合、同じ小説が複数回対象になっていたのを一度のみ
591
- 対象になるように変更しました
592
- + 例) A と B というタグをもつ小説があったとして、`narou u A B` で二度更新され
593
- てしまっていたのが、一度のみ更新されるようになる
594
- - send --without-freeze オプションを指定時、対象小説を指定した場合でも凍結時は
595
- 送信されなくなりました。(send.without-freeze を設定していても同じ)
596
- + WEB UI ではこれまでと同様に一括時のみ凍結済みは送信されず、個別指定時は凍結
597
- 済みでも送信出来ます
598
- - send --without-freeze オプションの短縮形として -w を設定しました
599
- - send で送信時、対象小説を指定した/しないに関わらずタイムスタンプを必ず比較
600
- して新しければ送信するように変更しました
601
- + 必ず送信したい場合は --force オプションを指定して下さい
602
- - 栞のバックアップ・レストア時にタイムスタンプを見て新しい場合のみコピーする
603
- ように変更しました
492
+ - `clean` コマンドを実装しました。サブタイトルの変更等により参照されなくなった
493
+ ゴミファイルを削除することが出来ます。詳細は `narou clean -h`を参照して下さい
494
+ - WEB UI からメールを送信する機能を追加しました
495
+ + Other ボタンと、個別メニューに追加されます
604
496
 
605
497
  #### 修正内容
606
- - カクヨムの情報が一部取得出来なくなっていた
607
- - mail コマンド送信時に添付ファイルに @ が付いている場合、全角の@に置換する様
608
- にしました
609
- - WEB UI でタグ検索時にフィルター末尾に自動で半角空白を挿入するようにしました
610
- - list コマンドで検索やタグによる絞り込みと<limit>の指定による表示個数を制限
611
- を併用した場合に、<limit>で指定した分のみしか絞り込み対象になっていなかった
612
- - list --filter series を指定時に一つも連載小説が表示されていなかった
613
- - Linux 環境で send コマンドが送信出来ない場合があった #119
614
- - 小説IDが一桁の場合に、download.use-subdirectory で作られるサブフォルダに半角
615
- スペースが含まれてしまっていた
616
- - WEB UI のフィルターのおいて、本来表示されない内部データにまでマッチングして
617
- しまう不具合
618
- - update.logging オプションが有効な場合に、アップデートをしない時でもログを
619
- 保存してしまう場合がある不具合
620
- - その他動作の安定性を向上などの細かい修正
498
+ - Ruby 2.4 対応
499
+ - WEB UI のアバウトダイアログで、最新バージョンチェックが正しく動かなくなる場合
500
+ があったのを修正
501
+ - WEB UI から「凍結済みでも更新」が使用出来ずにエラーが出ていたのを修正
621
502
 
622
503
  ************************************************************
623
504
  rdoc_options: []
@@ -635,7 +516,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
635
516
  version: '0'
636
517
  requirements: []
637
518
  rubyforge_project:
638
- rubygems_version: 2.5.1
519
+ rubygems_version: 2.6.8
639
520
  signing_key:
640
521
  specification_version: 4
641
522
  summary: Narou.rb ― 小説家になろうダウンローダ&縦書用整形スクリプト
@@ -1,30 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- #
4
- # 対象小説情報
5
- # タイトル: 最果てのパラディン
6
- # 作者: 柳野かなた
7
- # URL: http://ncode.syosetu.com/n5115cq/
8
- #
9
- # 詳細については http://bit.ly/1vTEH04 を参照して下さい
10
- #
11
- converter "n5115cq 最果てのパラディン" do
12
- # 各種変換処理がされる「前」の生データに対しての変換処理を記述
13
- def before(io, text_type)
14
- super
15
- if text_type == "body"
16
- io.string.gsub!("|《命ず》、《ネー・》", "|《命ず》《ネー・》、")
17
- io.string.gsub!(/[||]《([^《》]+)》《((?:\p{Hiragana}|\p{Katakana}|[・ー])+)》/) do |match|
18
- @inspector.info("ルビを調整\n" + match)
19
- "|≪#{$1}≫《#{$2}》"
20
- end
21
- end
22
- io
23
- end
24
-
25
- # 各種変換処理がされた「後」のデータに対しての変換処理を記述
26
- def after(io, text_type)
27
- super
28
- io
29
- end
30
- end