narou 1.6.4 → 1.7.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 +13 -5
- data/.gitignore +1 -0
- data/.rubocop.yml +419 -0
- data/ChangeLog.md +23 -0
- data/README.md +24 -123
- data/Rakefile +1 -1
- data/bin/narou +0 -0
- data/lib/color.rb +1 -8
- data/lib/command/backup.rb +1 -1
- data/lib/command/diff.rb +5 -5
- data/lib/command/download.rb +2 -2
- data/lib/command/freeze.rb +1 -9
- data/lib/command/init.rb +4 -4
- data/lib/command/list.rb +49 -20
- data/lib/command/mail.rb +4 -4
- data/lib/command/remove.rb +2 -3
- data/lib/command/send.rb +3 -3
- data/lib/command/tag.rb +6 -6
- data/lib/command/update.rb +2 -2
- data/lib/commandbase.rb +4 -4
- data/lib/commandline.rb +1 -1
- data/lib/converterbase.rb +27 -17
- data/lib/database.rb +1 -1
- data/lib/device.rb +1 -1
- data/lib/device/ibooks.rb +2 -2
- data/lib/device/ibunko.rb +2 -2
- data/lib/diffviewer.rb +7 -8
- data/lib/downloader.rb +22 -24
- data/lib/helper.rb +2 -2
- data/lib/illustration.rb +1 -1
- data/lib/ini.rb +0 -1
- data/lib/inspector.rb +2 -2
- data/lib/inventory.rb +1 -1
- data/lib/loadconverter.rb +1 -1
- data/lib/logger.rb +2 -14
- data/lib/mailer.rb +2 -2
- data/lib/narou.rb +5 -5
- data/lib/novelconverter.rb +4 -4
- data/lib/novelsetting.rb +1 -1
- data/lib/sitesetting.rb +1 -1
- data/lib/template.rb +2 -2
- data/lib/version.rb +2 -1
- data/narou.bat +0 -0
- data/narou.gemspec +15 -126
- data/narou.rb +1 -1
- data/preset/ncode.syosetu.com/n4259s/converter.rb +1 -1
- data/preset/ncode.syosetu.com/n8725k/converter.rb +1 -1
- data/spec/convert_spec.rb +6 -3
- data/spec/data/convert_test/auto_indent/correct_test_auto_indent.txt +3 -0
- data/spec/data/convert_test/auto_indent/test_auto_indent.txt +4 -0
- data/spec/data/convert_test/auto_join_bracket/correct_test_auto_join_bracket.txt +12 -1
- data/spec/data/convert_test/auto_join_bracket/test_auto_join_bracket.txt +12 -0
- data/spec/data/convert_test/auto_join_line/test_auto_join_line.txt +0 -0
- data/spec/data/convert_test/convert_page_break/test_convert_page_break.txt +0 -0
- data/spec/data/convert_test/english/correct_test_english.txt +26 -0
- data/spec/data/convert_test/english/test_english.txt +27 -0
- data/spec/data/convert_test/force_indent_special_chapter/test_force_indent_special_chapter.txt +0 -0
- data/spec/data/convert_test/horizontal_ellipsis/test_horizontal_ellipsis.txt +0 -0
- data/spec/data/convert_test/kanji_num/test_kanji_num.txt +0 -0
- data/spec/data/convert_test/nonokagi/test_nonokagi.txt +0 -0
- data/spec/data/convert_test/replace/correct_test_replace.txt +1 -1
- data/spec/data/convert_test/replace/replace.txt +0 -0
- data/spec/data/convert_test/replace/test_replace.txt +0 -0
- data/spec/data/convert_test/ruby/correct_test_ruby.txt +3 -1
- data/spec/data/convert_test/ruby/test_ruby.txt +3 -0
- data/spec/data/convert_test/ruby_youon/test_ruby_youon.txt +0 -0
- data/spec/data/convert_test/sesame/test_sesame.txt +0 -0
- data/spec/data/convert_test/to_odd_leader/test_to_odd_leader.txt +0 -0
- data/spec/generator/convert_spec_gen.rb +2 -3
- data/spec/spec_helper.rb +2 -2
- metadata +29 -162
- data/lib/ruby.rb +0 -152
data/README.md
CHANGED
@@ -24,147 +24,48 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
24
24
|
更新履歴 - ChangeLog
|
25
25
|
--------------------
|
26
26
|
|
27
|
-
|
28
|
-
### 1.6.4 : 2014/09/17
|
27
|
+
### 1.7.0 : 2014/09/27
|
29
28
|
|
30
29
|
#### 追加機能
|
31
|
-
- `list`
|
32
|
-
|
33
|
-
|
30
|
+
- `list` コマンドの `--filter` オプションに `frozen` 及び `nonfrozen` が追加
|
31
|
+
されました。凍結状態のフィルタリングが可能になります。また、同時に複数の値を
|
32
|
+
受け付けるようになりました
|
34
33
|
|
35
|
-
|
34
|
+
narou list -f frozen (凍結された小説のみ表示)
|
35
|
+
narou list -f nonfrozen (凍結されていない小説のみ表示)
|
36
|
+
narou list -f "ss nonfrozen" (凍結されていない短編を表示)
|
36
37
|
|
37
|
-
|
38
|
+
#### 仕様変更
|
39
|
+
- 英文判定文字に `&:;_-` を追加しました
|
40
|
+
+ 今までおかしかった例:Tuez-les tous, Dieu reconnaitra les siens)
|
41
|
+
- 8文字以上の半角アルファベットは全角に変換せずに半角のままになります
|
38
42
|
|
39
43
|
#### Bug Fix
|
40
|
-
-
|
41
|
-
- 1話も投稿されていない小説でエラーが出ていたのを修正
|
44
|
+
- 行頭が英文で始まる行がオートインデントできていなかったのを修正
|
42
45
|
|
43
|
-
|
46
|
+
#### その他
|
47
|
+
- 起動にかかる時間及び表示処理速度を向上させました(起動時間がv1.6に比べて約50%短縮)
|
44
48
|
|
45
|
-
|
49
|
+
----
|
46
50
|
|
47
|
-
|
48
|
-
- あらすじだけ変更された場合も更新とみなすようになりました
|
51
|
+
### 1.6.4 : 2014/09/17
|
49
52
|
|
50
|
-
####
|
51
|
-
- `
|
52
|
-
|
53
|
-
-
|
54
|
-
完結していた小説が連載を再開した場合、完結タグを削除するようになりました
|
55
|
-
- 話数が減っているにも関わらずダイジェスト化検知出来ない場合があったのを修正
|
53
|
+
#### 追加機能
|
54
|
+
- `list` コマンドに `--echo` オプション(短縮:-e)を追加しました。パイプやリダ
|
55
|
+
イレクトを経由してもリストをそのまま表示します。また、ANSIColorコードの削除
|
56
|
+
も同時に行うので、--no-color オプションは必要ありません
|
56
57
|
|
57
58
|
----
|
58
59
|
|
59
|
-
### 1.6.
|
60
|
+
### 1.6.3 : 2014/09/11
|
60
61
|
|
61
62
|
#### Bug Fix
|
62
|
-
-
|
63
|
-
-
|
63
|
+
- ハーメルン、Arcadiaにおいて小説が削除されている場合にエラーが出ていたのを修正
|
64
|
+
- 1話も投稿されていない小説でエラーが出ていたのを修正
|
64
65
|
|
65
66
|
----
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
#### 追加機能
|
70
|
-
- **iBooks** での管理に対応しました
|
71
|
-
+ Mac OS X Mavericks以上が対象です
|
72
|
-
+ `narou s device=ibooks` で変更できます
|
73
|
-
+ 初回登録時はiBooksでEPUBファイルを開くので、ウィンドウが大量に開くことに
|
74
|
-
ご注意ください。次回以降はiBooksの管理フォルダを直接更新してウィンドウが
|
75
|
-
開くことはありません
|
76
|
-
- **JRuby** での実行に対応しました(Windowsでは環境変数JAVA_OPTSに
|
77
|
-
-Dfile.encoding=UTF8を設定して下さい)
|
78
|
-
- `diff` コマンドで外部ツールがなくても更新された部分の差分を表示できるように
|
79
|
-
なりました
|
80
|
-
+ `difftool` が設定されていない場合、独自の差分表示処理を行います。
|
81
|
-
小説用なので一文字単位の修正がわかりやすいように調整してあります
|
82
|
-
|
83
|
-
![diff使用時のイメージ](https://raw.github.com/wiki/whiteleaf7/narou/images/diff_cap.png)
|
84
|
-
- `tag` コマンドが追加されました
|
85
|
-
+ 小説に自由にタグを付けることができ、絞り込み等で使用出来ます
|
86
|
-
+ タグを追加: `narou tag -a akatsuki 0`
|
87
|
-
+ タグが付いた小説を表示: `narou tag akatsuki`
|
88
|
-
+ コマンドの対象小説をタグで指定: `narou update akatsuki`
|
89
|
-
+ その他詳細な説明は `narou tag -h` を参照して下さい
|
90
|
-
- `list` コマンドが拡張されます
|
91
|
-
+ `--site` オプション(短縮: -s)が追加されました。掲載小説サイト名を合わせて
|
92
|
-
表示します
|
93
|
-
+ `--author` オプション(短縮:-a)が追加されました。作者名を合わせて表示します
|
94
|
-
+ `--tag` オプション(短縮: -t)が追加されました。タグで小説を検索出来ます
|
95
|
-
* `narou l -t tagname` 、 `narou l -t "tag1 tag2"`
|
96
|
-
* `narou l -t` と引数を省略すると全ての小説をタグつきで表示
|
97
|
-
+ `--grep` オプション(短縮: -g)が追加されました。リストの中から指定された
|
98
|
-
文字列で検索します。最終的に表示される内容から検索するため、作者名やサイト
|
99
|
-
名等そのままでは表示されない要素から検索したい場合、それぞれを表示するオプ
|
100
|
-
ションも合わせて指定して下さい
|
101
|
-
* 例1: リストから作者名に“紫炎”が含まれる小説を探したい場合
|
102
|
-
- `narou list --author --grep 紫炎` 或いは `narou l -ag 紫炎`
|
103
|
-
* 例2: 小説家になろう以外の小説を表示したい場合
|
104
|
-
- `narou list --site --grep "-小説家になろう"` 或いは
|
105
|
-
`narou l -sg "-小説家になろう"` (-をつけることでNOT検索)
|
106
|
-
* 例3: ハーメルンの小説からSAOを含む小説を探す
|
107
|
-
- `narou l -sg "ハーメルン SAO"` (スペース区切りによるAND検索)
|
108
|
-
+ listコマンドの結果をパイプで他のコマンドに接続できるようになりました
|
109
|
-
* 例1: ハーメルに掲載されている小説にhamelnタグを付けたい
|
110
|
-
- `narou l -sg ハーメルン | narou t -a hameln`
|
111
|
-
* 例2: 短編を全て凍結したい
|
112
|
-
- `narou l -f ss | narou freeze --on`
|
113
|
-
* 注意点として、パイプでつないだ場合は remove コマンドは確認メッセージを
|
114
|
-
出さずに削除します
|
115
|
-
- `convert` コマンドに `--ignore-force` オプションが追加されました。
|
116
|
-
`narou s force.設定名=値` として強制上書きされる設定を一時的に無効にします
|
117
|
-
- 空改行の削除処理を制御する `enable_pack_blank_line` オプションが追加されました
|
118
|
-
+ デフォルトでは有効です。無効にするには各小説の setting.ini に
|
119
|
-
`enable_pack_blank_line=false` を追加するか、
|
120
|
-
`narou s force.enable_pack_blank_line=false` を実行して下さい
|
121
|
-
- `freeze` コマンドに強制凍結及び解除する `--on` 及び `--off` オプションが追加
|
122
|
-
されました
|
123
|
-
|
124
|
-
#### 仕様変更
|
125
|
-
- `update.strong` の挙動を、「当日分は必ずDLする」から「当日分は内容を見て更新
|
126
|
-
されているか確認する」に変更しました。またタイムスタンプを記録するようにし、
|
127
|
-
アップデート時のパフォーマンスを向上させました
|
128
|
-
- デバイス設定時に最低限必要な関連項目を設定変更するようになりました
|
129
|
-
- 空改行の間引き具合を若干弱くしました
|
130
|
-
- `list` コマンドの `--type` オプションを `--kind` (短縮:-k)に変更しました
|
131
|
-
- 差分オブジェクトの書式を `20YY.MM.DD@hh;mm;ss` から `20YY.MM.DD@hh.mm.ss` に
|
132
|
-
変更します
|
133
|
-
+ このバージョンから反映。以前のバージョンで作成された差分は旧書式のままです
|
134
|
-
- 新着のみの更新の場合差分データを作成しないように変更しました
|
135
|
-
- `backup` コマンドで作成するZIPファイルの内部ファイルパス文字エンコーディング
|
136
|
-
をOS毎に変更するようにしました
|
137
|
-
+ Windows = Windows-31J、その他OS = UTF-8
|
138
|
-
- `flag` コマンドは非推奨になり、tagコマンドに統一されます。今後完結フラグを立
|
139
|
-
てる場合、 `narou tag -a end 0` として下さい。flagコマンドは1.7.0で廃止される
|
140
|
-
予定です
|
141
|
-
+ flagデータをtagデータに移行する場合は `narou flag --convert-tag` を実行
|
142
|
-
して下さい
|
143
|
-
- 完結の情報を自動で付与するようになりました。完結を検知したら end タグを追加
|
144
|
-
します
|
145
|
-
+ 現在は小説家になろう関連サイトとハーメルンのみ自動検知します
|
146
|
-
- 選択肢を選ぶときエンターを押す必要がなくなりました
|
147
|
-
- このバージョンからセマンティックバージョニングに移行します
|
148
|
-
+ Major.Minor.Teen という形式で、特別なアップデートでMajor、追加機能を含む
|
149
|
-
アップデートでMinor、バグ修正のみのアップデートでTeenの番号を増やします
|
150
|
-
|
151
|
-
#### Bug Fix
|
152
|
-
- 小説が掲載サイトから削除されていない時(500や503)にも自動凍結していたのを修正
|
153
|
-
- iBooksで閲覧時章タイトルページのレイアウトが崩れていたのを修正
|
154
|
-
- iBooksで閲覧時Arcadiaの掲載アドレスがあるページでエラーがでていたのを修正 #47
|
155
|
-
- ハーメルンで作者名が正常に取得できない場合があったのを修正 #48
|
156
|
-
- ハーメルンで連載形式の短編が1話目しか取得できていなかったのを修正 #49
|
157
|
-
- 自動字下げの判定処理が正常に動作していなかったのを修正
|
158
|
-
- `diff` コマンドの差分表示時に更新日が挿入されない場合があったのを修正
|
159
|
-
- `diff` コマンドで小説家になろう以外の小説の差分がHTMLタグ付きのまま表示されて
|
160
|
-
いたのを修正
|
161
|
-
- 未対応のURLを入力した場合にエラーが出るようになっていたのを修正
|
162
|
-
- 小説家になろうの短編のあらすじで改行が無視されていたのを修正
|
163
|
-
- 小説家になろうの短編のあらすじで先頭に縦棒(|)が入ってしまう問題に対応 #46
|
164
|
-
- 小説家になろうの挿絵を認識出来ない場合があったのを修正
|
165
|
-
- 前書き・後書き内にある挿絵を単ページ化出来なかったのを修正 #8
|
166
|
-
- 漢数字変換で対応桁数以上を変換しようとしてクラッシュしていたのを修正
|
167
|
-
- その他ヘルプ文の訂正や無駄な処理削減等多数の細かい調整
|
68
|
+
過去の更新履歴は[こちらを参照](https://github.com/whiteleaf7/narou/blob/master/ChangeLog.md)
|
168
69
|
|
169
70
|
----
|
170
71
|
|
data/Rakefile
CHANGED
data/bin/narou
CHANGED
File without changes
|
data/lib/color.rb
CHANGED
@@ -30,14 +30,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
30
30
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
31
31
|
=end
|
32
32
|
|
33
|
-
|
34
|
-
unless $debug
|
35
|
-
def warn(*a); end
|
36
|
-
end
|
37
|
-
|
38
|
-
require "termcolor"
|
39
|
-
|
40
|
-
alias :warn :original_warn
|
33
|
+
require "termcolorlight"
|
41
34
|
|
42
35
|
if RbConfig::CONFIG["host_os"] =~ /mswin(?!ce)|mingw|bccwin/i
|
43
36
|
require_relative "extensions/windows"
|
data/lib/command/backup.rb
CHANGED
@@ -41,7 +41,7 @@ module Command
|
|
41
41
|
paths = Dir.glob("**/*").keep_if { |path|
|
42
42
|
File.file?(path) && path.split("/", 2)[0] != BACKUP_DIR_NAME
|
43
43
|
}
|
44
|
-
FileUtils.mkdir(BACKUP_DIR_NAME) unless File.
|
44
|
+
FileUtils.mkdir(BACKUP_DIR_NAME) unless File.exist?(BACKUP_DIR_NAME)
|
45
45
|
Zip.unicode_names = true unless Helper.os_windows?
|
46
46
|
Zip::File.open(File.join(BACKUP_DIR_NAME, zipfilename), Zip::File::CREATE) do |zip|
|
47
47
|
paths.each do |path|
|
data/lib/command/diff.rb
CHANGED
@@ -127,7 +127,7 @@ module Command
|
|
127
127
|
def clean_diff(id)
|
128
128
|
cache_root_dir = Downloader.get_cache_root_dir(id)
|
129
129
|
print Database.instance.get_data("id", id)["title"] + " の"
|
130
|
-
unless File.
|
130
|
+
unless File.exist?(cache_root_dir)
|
131
131
|
puts "差分はひとつもありません"
|
132
132
|
return
|
133
133
|
end
|
@@ -179,7 +179,7 @@ module Command
|
|
179
179
|
cache_root_dir = Downloader.get_cache_root_dir(id)
|
180
180
|
if cache_root_dir
|
181
181
|
cache_dir = File.join(cache_root_dir, @options["view_diff_version"])
|
182
|
-
cache_dir = nil unless File.
|
182
|
+
cache_dir = nil unless File.exist?(cache_dir)
|
183
183
|
end
|
184
184
|
else
|
185
185
|
nth = @options["number"]
|
@@ -202,7 +202,7 @@ module Command
|
|
202
202
|
cache_sections = []
|
203
203
|
cache_section_list.each do |path|
|
204
204
|
match_latest_path = File.join(novel_dir, File.basename(path))
|
205
|
-
latest_novel_sections << YAML.load_file(match_latest_path) if File.
|
205
|
+
latest_novel_sections << YAML.load_file(match_latest_path) if File.exist?(match_latest_path)
|
206
206
|
cache_sections << YAML.load_file(path)
|
207
207
|
end
|
208
208
|
|
@@ -240,7 +240,7 @@ module Command
|
|
240
240
|
end
|
241
241
|
puts "差分一覧"
|
242
242
|
cache_list.each.with_index(1) do |cache_path, i|
|
243
|
-
puts
|
243
|
+
puts "<bold><yellow>#{File.basename(cache_path)} -#{i}</yellow></bold>".termcolor
|
244
244
|
cache_section_list = Dir.glob(File.join(cache_path, "*.yaml"))
|
245
245
|
if cache_section_list.length > 0
|
246
246
|
cache_section_list.map { |section_path|
|
@@ -258,7 +258,7 @@ module Command
|
|
258
258
|
Database.instance.each do |id, data|
|
259
259
|
next if Narou.novel_frozen?(id)
|
260
260
|
cache_root_dir = Downloader.get_cache_root_dir(id)
|
261
|
-
next unless File.
|
261
|
+
next unless File.exist?(cache_root_dir)
|
262
262
|
FileUtils.remove_entry_secure(cache_root_dir)
|
263
263
|
puts "#{data["title"]} の差分を削除しました"
|
264
264
|
end
|
data/lib/command/download.rb
CHANGED
@@ -59,7 +59,7 @@ module Command
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def print_prompt(targets)
|
62
|
-
print "#{targets.
|
62
|
+
print "#{targets.size}> "
|
63
63
|
end
|
64
64
|
|
65
65
|
def interactive_mode
|
@@ -92,7 +92,7 @@ module Command
|
|
92
92
|
super
|
93
93
|
if argv.empty?
|
94
94
|
targets = interactive_mode
|
95
|
-
return if targets.
|
95
|
+
return if targets.size == 0
|
96
96
|
argv += targets
|
97
97
|
end
|
98
98
|
tagname_to_ids(argv)
|
data/lib/command/freeze.rb
CHANGED
@@ -41,15 +41,7 @@ module Command
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def output_freeze_list
|
44
|
-
|
45
|
-
puts "凍結中小説一覧"
|
46
|
-
puts " ID | タイトル"
|
47
|
-
Inventory.load("freeze", :local).each do |id, _|
|
48
|
-
data = database.get_data("id", id)
|
49
|
-
if data
|
50
|
-
puts "#{id.to_s.rjust(3)} | #{data["title"]}"
|
51
|
-
end
|
52
|
-
end
|
44
|
+
List.execute!(%w(--filter frozen))
|
53
45
|
end
|
54
46
|
|
55
47
|
def execute(argv)
|
data/lib/command/init.rb
CHANGED
@@ -67,7 +67,7 @@ module Command
|
|
67
67
|
end
|
68
68
|
puts "<bold><green>AozoraEpub3の設定を行います</green></bold>".termcolor
|
69
69
|
unless @global_setting["aozoraepub3dir"]
|
70
|
-
puts
|
70
|
+
puts "<bold><red>#{"!!!WARNING!!!".center(70)}</red></bold>".termcolor
|
71
71
|
puts "AozoraEpub3の構成ファイルを書き換えます。narouコマンド用に別途新規インストールしておくことをオススメします"
|
72
72
|
end
|
73
73
|
aozora_path = ask_aozoraepub3_path
|
@@ -102,7 +102,7 @@ module Command
|
|
102
102
|
src = ["AozoraEpub3.ini", "vertical_font.css", "DMincho.ttf"]
|
103
103
|
dst = ["AozoraEpub3.ini", "template/OPS/css_custom/vertical_font.css", "template/OPS/fonts/DMincho.ttf"]
|
104
104
|
puts "(次のファイルをコピーor上書きしました)"
|
105
|
-
src.
|
105
|
+
src.size.times do |i|
|
106
106
|
src_full_path = File.join(Narou.get_preset_dir, src[i])
|
107
107
|
dst_full_path = File.join(aozora_path, dst[i])
|
108
108
|
FileUtils.install(src_full_path, dst_full_path)
|
@@ -131,8 +131,8 @@ module Command
|
|
131
131
|
when input == ""
|
132
132
|
break
|
133
133
|
end
|
134
|
-
print
|
135
|
-
|
134
|
+
print "\n<bold><green>入力されたフォルダにAozoraEpub3がありません。" \
|
135
|
+
"もう一度入力して下さい:</green></bold>\n>".termcolor
|
136
136
|
end
|
137
137
|
nil
|
138
138
|
end
|
data/lib/command/list.rb
CHANGED
@@ -11,7 +11,9 @@ module Command
|
|
11
11
|
|
12
12
|
# MEMO: 0 は昔の小説を凍結したままな場合、novel_type が設定されていないので、
|
13
13
|
# nil.to_i → 0 という互換性維持のため
|
14
|
-
NOVEL_TYPE_LABEL =
|
14
|
+
NOVEL_TYPE_LABEL = %w(連載 連載 短編)
|
15
|
+
|
16
|
+
FILTERS_TYPE = Hash[*%w(series 連載 ss 短編 frozen 凍結 nonfrozen 非凍結)]
|
15
17
|
|
16
18
|
def self.oneline_help
|
17
19
|
"現在管理している小説の一覧を表示します"
|
@@ -19,7 +21,7 @@ module Command
|
|
19
21
|
|
20
22
|
def initialize
|
21
23
|
super("[<limit>] [options]")
|
22
|
-
@opt.separator <<-EOS
|
24
|
+
@opt.separator <<-EOS
|
23
25
|
|
24
26
|
・現在管理している小説の一覧を表示します
|
25
27
|
・表示されるIDは各コマンドで指定することで小説名等を入力する手間を省けます
|
@@ -33,6 +35,7 @@ module Command
|
|
33
35
|
narou list 5 -l # 最近更新のあった5件表示
|
34
36
|
narou list 10 -rl # 古い順に10件表示
|
35
37
|
narou list -f ss # 短編小説だけ表示
|
38
|
+
narou list -f "ss frozen" # 凍結している短編だけ表示
|
36
39
|
|
37
40
|
# 小説家になろうの小説のみを表示
|
38
41
|
narou list --site --grep 小説家になろう
|
@@ -74,8 +77,9 @@ module Command
|
|
74
77
|
@options["author"] = true
|
75
78
|
}
|
76
79
|
@opt.on("-f", "--filter VAL", String,
|
77
|
-
"
|
78
|
-
|
80
|
+
"表示を絞るためのフィルター。スペース区切りで複数可\n" \
|
81
|
+
"#{' '*25}#{filter_type_help}") { |filter|
|
82
|
+
@options["filters"] = filter.downcase.split
|
79
83
|
}
|
80
84
|
@opt.on("-g", "--grep VAL", String,
|
81
85
|
"指定された文字列でリストを検索する") { |search|
|
@@ -102,6 +106,33 @@ module Command
|
|
102
106
|
true
|
103
107
|
end
|
104
108
|
|
109
|
+
def filter_type_help
|
110
|
+
FILTERS_TYPE.map { |filter, info|
|
111
|
+
"#{filter}(#{info})"
|
112
|
+
}.join(",")
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_filter(filters, novel_type, frozen)
|
116
|
+
apply_sum = filters.inject(0) do |sum, item|
|
117
|
+
apply = case item
|
118
|
+
when "series"
|
119
|
+
novel_type == 0 && novel_type == 1
|
120
|
+
when "ss"
|
121
|
+
novel_type == 2
|
122
|
+
when "frozen"
|
123
|
+
frozen
|
124
|
+
when "nonfrozen"
|
125
|
+
!frozen
|
126
|
+
else
|
127
|
+
error "不明なフィルターです(#{item})"
|
128
|
+
warn "filters = #{filter_type_help}"
|
129
|
+
exit 1
|
130
|
+
end
|
131
|
+
sum + (apply ? 1 : 0)
|
132
|
+
end
|
133
|
+
apply_sum == filters.count
|
134
|
+
end
|
135
|
+
|
105
136
|
def header
|
106
137
|
[
|
107
138
|
" ID ", " 更新日 ",
|
@@ -115,24 +146,22 @@ module Command
|
|
115
146
|
def output_list(novels)
|
116
147
|
now = Time.now
|
117
148
|
today = now.strftime("%y/%m/%d")
|
118
|
-
|
149
|
+
filters = @options["filters"] || []
|
119
150
|
selected_lines = {}
|
120
151
|
novels.each do |novel|
|
121
152
|
novel_type = novel["novel_type"].to_i
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
end
|
153
|
+
id = novel["id"]
|
154
|
+
frozen = Narou.novel_frozen?(id)
|
155
|
+
|
156
|
+
unless filters.empty?
|
157
|
+
next unless test_filter(filters, novel_type, frozen)
|
128
158
|
end
|
159
|
+
|
129
160
|
if @options["tags"]
|
130
161
|
next unless valid_tags?(novel, @options["tags"])
|
131
162
|
end
|
132
|
-
id = novel["id"]
|
133
|
-
frozen = Narou.novel_frozen?(id)
|
134
163
|
disp_id = ((frozen ? "*" : "") + id.to_s).rjust(4)
|
135
|
-
disp_id = disp_id.sub("*", "<bold><cyan>*</cyan></bold>")
|
164
|
+
disp_id = disp_id.sub("*", "<bold><cyan>*</cyan></bold>") if frozen
|
136
165
|
flags = novel["flags"] || {} # flagコマンドは1.6.0から非推奨
|
137
166
|
tags = novel["tags"] || []
|
138
167
|
flags["end"] ||= tags.include?("end")
|
@@ -162,14 +191,14 @@ module Command
|
|
162
191
|
color = Tag.get_color(tag)
|
163
192
|
"<bold><#{color}>#{tag.escape}</#{color}></bold>"
|
164
193
|
}.join(",") : nil,
|
165
|
-
].compact.join(" | ")
|
194
|
+
].compact.join(" | ")
|
166
195
|
end
|
167
196
|
if @options["grep"]
|
168
197
|
@options["grep"].each do |search_word|
|
169
|
-
selected_lines.keep_if { |
|
198
|
+
selected_lines.keep_if { |_, line|
|
170
199
|
if search_word =~ /^-(.+)/
|
171
200
|
# NOT検索
|
172
|
-
|
201
|
+
!line.include?($1)
|
173
202
|
else
|
174
203
|
line.include?(search_word)
|
175
204
|
end
|
@@ -178,12 +207,12 @@ module Command
|
|
178
207
|
end
|
179
208
|
if STDOUT.tty?
|
180
209
|
puts header
|
181
|
-
puts selected_lines.values
|
210
|
+
puts selected_lines.values.join("\n").termcolor
|
182
211
|
else
|
183
212
|
if @options["echo"]
|
184
213
|
# pipeにそのまま出力するときはansicolorコードが邪魔なので削除
|
185
214
|
puts header
|
186
|
-
puts
|
215
|
+
puts TermColorLight.strip_tag(selected_lines.values.join("\n"))
|
187
216
|
else
|
188
217
|
# pipeに接続するときはIDを渡す
|
189
218
|
puts selected_lines.keys.join(" ")
|
@@ -197,7 +226,7 @@ module Command
|
|
197
226
|
if !argv.empty? && argv.first =~ /^\d+$/
|
198
227
|
num = argv.first.to_i
|
199
228
|
else
|
200
|
-
num = database_values.
|
229
|
+
num = database_values.size
|
201
230
|
end
|
202
231
|
if @options["latest"]
|
203
232
|
database_values = Database.instance.sort_by_last_update
|