narou 1.5.11 → 1.6.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 +4 -0
- data/ChangeLog.md +619 -432
- data/Gemfile +9 -0
- data/README.md +101 -76
- data/lib/color.rb +62 -22
- data/lib/command.rb +21 -19
- data/lib/command/alias.rb +9 -9
- data/lib/command/backup.rb +11 -4
- data/lib/command/browser.rb +8 -7
- data/lib/command/convert.rb +25 -77
- data/lib/command/diff.rb +67 -36
- data/lib/command/download.rb +5 -4
- data/lib/command/flag.rb +32 -6
- data/lib/command/folder.rb +7 -5
- data/lib/command/freeze.rb +21 -11
- data/lib/command/help.rb +29 -17
- data/lib/command/init.rb +7 -7
- data/lib/command/inspect.rb +6 -5
- data/lib/command/list.rb +106 -25
- data/lib/command/mail.rb +6 -7
- data/lib/command/remove.rb +9 -7
- data/lib/command/send.rb +6 -5
- data/lib/command/setting.rb +51 -16
- data/lib/command/tag.rb +179 -0
- data/lib/command/update.rb +9 -8
- data/lib/command/version.rb +4 -4
- data/lib/commandbase.rb +79 -8
- data/lib/commandline.rb +14 -8
- data/lib/converterbase.rb +78 -28
- data/lib/database.rb +3 -3
- data/lib/device.rb +26 -13
- data/lib/device/ibooks.rb +116 -0
- data/lib/device/ibunko.rb +45 -0
- data/lib/device/kindle.rb +4 -0
- data/lib/device/kobo.rb +4 -0
- data/lib/device/library/windows.rb +12 -4
- data/lib/device/reader.rb +9 -0
- data/lib/diffviewer.rb +147 -0
- data/lib/downloader.rb +195 -80
- data/lib/extensions/jruby.rb +33 -0
- data/lib/extensions/windows.rb +8 -9
- data/lib/helper.rb +79 -37
- data/lib/illustration.rb +1 -1
- data/lib/inspector.rb +2 -2
- data/lib/inventory.rb +48 -0
- data/lib/logger.rb +28 -4
- data/lib/narou.rb +9 -7
- data/lib/narou/api.rb +7 -2
- data/lib/novelconverter.rb +46 -19
- data/lib/novelinfo.rb +13 -3
- data/lib/novelsetting.rb +17 -9
- data/lib/version.rb +1 -1
- data/narou.gemspec +106 -27
- data/narou.rb +2 -2
- data/spec/convert_spec.rb +102 -0
- data/spec/data/convert_test/auto_indent/correct_test_auto_indent.txt +18 -0
- data/spec/data/convert_test/auto_indent/test_auto_indent.txt +21 -0
- data/spec/data/convert_test/auto_join_bracket/correct_test_auto_join_bracket.txt +12 -0
- data/spec/data/convert_test/auto_join_bracket/test_auto_join_bracket.txt +16 -0
- data/spec/data/convert_test/auto_join_line/correct_test_auto_join_line.txt +36 -0
- data/spec/data/convert_test/auto_join_line/test_auto_join_line.txt +51 -0
- data/spec/data/convert_test/convert_page_break/correct_test_convert_page_break.txt +21 -0
- data/spec/data/convert_test/convert_page_break/setting.ini +5 -0
- data/spec/data/convert_test/convert_page_break/test_convert_page_break.txt +60 -0
- data/spec/data/convert_test/force_indent_special_chapter/correct_test_force_indent_special_chapter.txt +64 -0
- data/spec/data/convert_test/force_indent_special_chapter/test_force_indent_special_chapter.txt +61 -0
- data/spec/data/convert_test/horizontal_ellipsis/correct_test_horizontal_ellipsis.txt +52 -0
- data/spec/data/convert_test/horizontal_ellipsis/test_horizontal_ellipsis.txt +57 -0
- data/spec/data/convert_test/kanji_num/correct_test_kanji_num.txt +49 -0
- data/spec/data/convert_test/kanji_num/test_kanji_num.txt +56 -0
- data/spec/data/convert_test/nonokagi/correct_test_nonokagi.txt +29 -0
- data/spec/data/convert_test/nonokagi/test_nonokagi.txt +34 -0
- data/spec/data/convert_test/replace/correct_test_replace.txt +12 -0
- data/spec/data/convert_test/replace/replace.txt +7 -0
- data/spec/data/convert_test/replace/test_replace.txt +14 -0
- data/spec/data/convert_test/ruby/correct_test_ruby.txt +131 -0
- data/spec/data/convert_test/ruby/test_ruby.txt +170 -0
- data/spec/data/convert_test/ruby_youon/correct_test_ruby_youon.txt +12 -0
- data/spec/data/convert_test/ruby_youon/setting.ini +2 -0
- data/spec/data/convert_test/ruby_youon/test_ruby_youon.txt +14 -0
- data/spec/data/convert_test/sesame/correct_test_sesame.txt +40 -0
- data/spec/data/convert_test/sesame/test_sesame.txt +52 -0
- data/spec/data/convert_test/to_odd_leader/correct_test_to_odd_leader.txt +20 -0
- data/spec/data/convert_test/to_odd_leader/test_to_odd_leader.txt +21 -0
- data/spec/device_spec.rb +3 -3
- data/spec/generator/convert_spec_gen.rb +95 -0
- data/spec/html_spec.rb +9 -8
- data/spec/ini_spec.rb +31 -31
- data/spec/novelinfo_spec.rb +2 -2
- data/spec/num_to_kanji_spec.rb +2 -2
- data/template/diff.txt.erb +5 -2
- data/template/ibunko_novel.txt.erb +2 -1
- data/template/novel.txt.erb +16 -3
- data/template/setting.ini.erb +1 -1
- data/webnovel/ncode.syosetu.com.yaml +7 -7
- data/webnovel/novel18.syosetu.com.yaml +7 -7
- data/webnovel/syosetu.org.yaml +8 -11
- metadata +193 -23
- data/lib/globalsetting.rb +0 -64
- data/lib/localsetting.rb +0 -63
data/Gemfile
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
+
if RUBY_VERSION =~ /1.9/
|
4
|
+
Encoding.default_external = Encoding::UTF_8
|
5
|
+
Encoding.default_internal = Encoding::UTF_8
|
6
|
+
end
|
7
|
+
|
3
8
|
# Specify your gem's dependencies in narou.gemspec
|
4
9
|
gemspec
|
10
|
+
|
11
|
+
gem "rspec"
|
12
|
+
gem "rspec-core"
|
13
|
+
|
data/README.md
CHANGED
@@ -23,83 +23,108 @@ Narou.rb ― 「小説家になろう」「小説を読もう!」ダウンロ
|
|
23
23
|
|
24
24
|
更新履歴 - ChangeLog
|
25
25
|
--------------------
|
26
|
-
2014/07/24 : **1.5.11**
|
27
|
-
* 追加機能もしくは仕様変更
|
28
|
-
- 改稿の更新漏れ対策として、 `update.strong` オプションが追加されました
|
29
|
-
+ `narou s update.strong=true` として設定して下さい
|
30
|
-
+ 改稿日の更新は必ずダウンロードされるようになります(当日はアップデートする度にDLします)。
|
31
|
-
何度も改稿された小説では、更新のタイミングによっては改稿内容を取りこぼす可能性があるため、
|
32
|
-
このオプションを有効にすることで必ず拾えるようにします
|
33
|
-
+ ファイルのタイムスタンプをチェックするので、更新動作が多少遅くなります
|
34
|
-
- 指定の話数ごとにウェイトを入れられる `download.wait-steps` オプションが追加されました
|
35
|
-
+ `narou s download.wait-steps=10` として設定して下さい
|
36
|
-
+ 小説家になろうの場合は11話以上を指定しても10話ごとにウェイトが入ります
|
37
|
-
- `backup` コマンドを追加しました
|
38
|
-
+ 使用例: `narou backup 0` 、 `narou ba 0`
|
39
|
-
+ 小説保存フォルダ直下の backup フォルダに、バックアップ以外の全てのファイルをZIPで固めて保存します
|
40
|
-
- ダイジェスト化検出時の処理項目に「バックアップの作成」と「保存フォルダを開く」を追加しました
|
41
|
-
* Bug Fix
|
42
|
-
- まのわ(n3730bn)のプリセット変換スクリプトの挙動を調整
|
43
|
-
- 暁で一部あらすじが正常に取れていない小説があったので修正
|
44
26
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
+
|
65
|
-
|
66
|
-
+
|
67
|
-
+
|
68
|
-
|
69
|
-
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
*
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
27
|
+
### 1.6.0 : 2014/08/28
|
28
|
+
|
29
|
+
#### 追加機能
|
30
|
+
- **iBooks** での管理に対応しました
|
31
|
+
+ Mac OS X Mavericks以上が対象です
|
32
|
+
+ `narou s device=ibooks` で変更できます
|
33
|
+
+ 初回登録時はiBooksでEPUBファイルを開くので、ウィンドウが大量に開くことに
|
34
|
+
ご注意ください。次回以降はiBooksの管理フォルダを直接更新してウィンドウが
|
35
|
+
開くことはありません
|
36
|
+
- **JRuby** での実行に対応しました(Windowsでは環境変数JAVA_OPTSに
|
37
|
+
-Dfile.encoding=UTF8を設定して下さい)
|
38
|
+
- `diff` コマンドで外部ツールがなくても更新された部分の差分を表示できるように
|
39
|
+
なりました
|
40
|
+
+ `difftool` が設定されていない場合、独自の差分表示処理を行います。
|
41
|
+
小説用なので一文字単位の修正がわかりやすいように調整してあります
|
42
|
+
|
43
|
+
![diff使用時のイメージ](https://raw.github.com/wiki/whiteleaf7/narou/images/diff_cap.png)
|
44
|
+
- `tag` コマンドが追加されました
|
45
|
+
+ 小説に自由にタグを付けることができ、絞り込み等で使用出来ます
|
46
|
+
+ タグを追加: `narou tag -a akatsuki 0`
|
47
|
+
+ タグが付いた小説を表示: `narou tag akatsuki`
|
48
|
+
+ コマンドの対象小説をタグで指定: `narou update akatsuki`
|
49
|
+
+ その他詳細な説明は `narou tag -h` を参照して下さい
|
50
|
+
- `list` コマンドが拡張されます
|
51
|
+
+ `--site` オプション(短縮: -s)が追加されました。掲載小説サイト名を合わせて
|
52
|
+
表示します
|
53
|
+
+ `--author` オプション(短縮:-a)が追加されました。作者名を合わせて表示します
|
54
|
+
+ `--tag` オプション(短縮: -t)が追加されました。タグで小説を検索出来ます
|
55
|
+
* `narou l -t tagname` 、 `narou l -t "tag1 tag2"`
|
56
|
+
* `narou l -t` と引数を省略すると全ての小説をタグつきで表示
|
57
|
+
+ `--grep` オプション(短縮: -g)が追加されました。リストの中から指定された
|
58
|
+
文字列で検索します。最終的に表示される内容から検索するため、作者名やサイト
|
59
|
+
名等そのままでは表示されない要素から検索したい場合、それぞれを表示するオプ
|
60
|
+
ションも合わせて指定して下さい
|
61
|
+
* 例1: リストから作者名に“紫炎”が含まれる小説を探したい場合
|
62
|
+
- `narou list --author --grep 紫炎` 或いは `narou l -ag 紫炎`
|
63
|
+
* 例2: 小説家になろう以外の小説を表示したい場合
|
64
|
+
- `narou list --site --grep "-小説家になろう"` 或いは
|
65
|
+
`narou l -sg "-小説家になろう"` (-をつけることでNOT検索)
|
66
|
+
* 例3: ハーメルンの小説からSAOを含む小説を探す
|
67
|
+
- `narou l -sg "ハーメルン SAO"` (スペース区切りによるAND検索)
|
68
|
+
+ listコマンドの結果をパイプで他のコマンドに接続できるようになりました
|
69
|
+
* 例1: ハーメルに掲載されている小説にhamelnタグを付けたい
|
70
|
+
- `narou l -sg ハーメルン | narou t -a hameln`
|
71
|
+
* 例2: 短編を全て凍結したい
|
72
|
+
- `narou l -f ss | narou freeze --on`
|
73
|
+
* 注意点として、パイプでつないだ場合は remove コマンドは確認メッセージを
|
74
|
+
出さずに削除します
|
75
|
+
- `convert` コマンドに `--ignore-force` オプションが追加されました。
|
76
|
+
`narou s force.設定名=値` として強制上書きされる設定を一時的に無効にします
|
77
|
+
- 空改行の削除処理を制御する `enable_pack_blank_line` オプションが追加されました
|
78
|
+
+ デフォルトでは有効です。無効にするには各小説の setting.ini に
|
79
|
+
`enable_pack_blank_line=false` を追加するか、
|
80
|
+
`narou s force.enable_pack_blank_line=false` を実行して下さい
|
81
|
+
- `freeze` コマンドに強制凍結及び解除する `--on` 及び `--off` オプションが追加
|
82
|
+
されました
|
83
|
+
|
84
|
+
#### 仕様変更
|
85
|
+
- `update.strong` の挙動を、「当日分は必ずDLする」から「当日分は内容を見て更新
|
86
|
+
されているか確認する」に変更しました。またタイムスタンプを記録するようにし、
|
87
|
+
アップデート時のパフォーマンスを向上させました
|
88
|
+
- デバイス設定時に最低限必要な関連項目を設定変更するようになりました
|
89
|
+
- 空改行の間引き具合を若干弱くしました
|
90
|
+
- `list` コマンドの `--type` オプションを `--kind` (短縮:-k)に変更しました
|
91
|
+
- 差分オブジェクトの書式を `20YY.MM.DD@hh;mm;ss` から `20YY.MM.DD@hh.mm.ss` に
|
92
|
+
変更します
|
93
|
+
+ このバージョンから反映。以前のバージョンで作成された差分は旧書式のままです
|
94
|
+
- 新着のみの更新の場合差分データを作成しないように変更しました
|
95
|
+
- `backup` コマンドで作成するZIPファイルの内部ファイルパス文字エンコーディング
|
96
|
+
をOS毎に変更するようにしました
|
97
|
+
+ Windows = Windows-31J、その他OS = UTF-8
|
98
|
+
- `flag` コマンドは非推奨になり、tagコマンドに統一されます。今後完結フラグを立
|
99
|
+
てる場合、 `narou tag -a end 0` として下さい。flagコマンドは1.7.0で廃止される
|
100
|
+
予定です
|
101
|
+
+ flagデータをtagデータに移行する場合は `narou flag --convert-tag` を実行
|
102
|
+
して下さい
|
103
|
+
- 完結の情報を自動で付与するようになりました。完結を検知したら end タグを追加
|
104
|
+
します
|
105
|
+
+ 現在は小説家になろう関連サイトとハーメルンのみ自動検知します
|
106
|
+
- 選択肢を選ぶときエンターを押す必要がなくなりました
|
107
|
+
- このバージョンからセマンティックバージョニングに移行します
|
108
|
+
+ Major.Minor.Teen という形式で、特別なアップデートでMajor、追加機能を含む
|
109
|
+
アップデートでMinor、バグ修正のみのアップデートでTeenの番号を増やします
|
110
|
+
|
111
|
+
#### Bug Fix
|
112
|
+
- 小説が掲載サイトから削除されていない時(500や503)にも自動凍結していたのを修正
|
113
|
+
- iBooksで閲覧時章タイトルページのレイアウトが崩れていたのを修正
|
114
|
+
- iBooksで閲覧時Arcadiaの掲載アドレスがあるページでエラーがでていたのを修正 #47
|
115
|
+
- ハーメルンで作者名が正常に取得できない場合があったのを修正 #48
|
116
|
+
- ハーメルンで連載形式の短編が1話目しか取得できていなかったのを修正 #49
|
117
|
+
- 自動字下げの判定処理が正常に動作していなかったのを修正
|
118
|
+
- `diff` コマンドの差分表示時に更新日が挿入されない場合があったのを修正
|
119
|
+
- `diff` コマンドで小説家になろう以外の小説の差分がHTMLタグ付きのまま表示されて
|
120
|
+
いたのを修正
|
121
|
+
- 未対応のURLを入力した場合にエラーが出るようになっていたのを修正
|
122
|
+
- 小説家になろうの短編のあらすじで改行が無視されていたのを修正
|
123
|
+
- 小説家になろうの短編のあらすじで先頭に縦棒(|)が入ってしまう問題に対応 #46
|
124
|
+
- 小説家になろうの挿絵を認識出来ない場合があったのを修正
|
125
|
+
- 前書き・後書き内にある挿絵を単ページ化出来なかったのを修正 #8
|
126
|
+
- 漢数字変換で対応桁数以上を変換しようとしてクラッシュしていたのを修正
|
127
|
+
- その他ヘルプ文の訂正や無駄な処理削減等多数の細かい調整
|
103
128
|
|
104
129
|
----
|
105
130
|
|
data/lib/color.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
3
|
=begin
|
4
|
+
original source is
|
4
5
|
https://github.com/termtter/termtter/blob/master/lib/termtter/system_extensions/windows.rb
|
5
6
|
|
7
|
+
customed by whiteleaf
|
8
|
+
|
6
9
|
(The MIT License)
|
7
10
|
|
8
11
|
Copyright (c) 2008-2012 The Termtter Development Team
|
@@ -36,43 +39,80 @@ require "termcolor"
|
|
36
39
|
|
37
40
|
alias :warn :original_warn
|
38
41
|
|
39
|
-
if
|
42
|
+
if RbConfig::CONFIG["host_os"] =~ /mswin(?!ce)|mingw|bccwin/i
|
40
43
|
require_relative "extensions/windows"
|
41
44
|
|
42
45
|
$hStdOut = WinAPI.GetStdHandle(0xFFFFFFF5)
|
43
46
|
lpBuffer = ' ' * 22
|
44
47
|
WinAPI.GetConsoleScreenBufferInfo($hStdOut, lpBuffer)
|
45
48
|
$oldColor = lpBuffer.unpack('SSSSSssssSS')[4]
|
49
|
+
$default_foreground = $oldColor & 0x0f
|
50
|
+
$default_background = $oldColor & 0xf0
|
46
51
|
|
47
52
|
$colorMap = {
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
53
|
+
0 => 0x07|0x00|0x00|0x00, # black/white
|
54
|
+
1 => 0x08 , # foreground_intensity
|
55
|
+
4 => 0x8000 , # underline
|
56
|
+
7 => 0x4000 , # reverse
|
57
|
+
30 => 0x00|0x00|0x00|0x00, # black
|
58
|
+
31 => 0x04|0x00|0x00|0x00, # red/red
|
59
|
+
32 => 0x02|0x00|0x00|0x00, # green/green
|
60
|
+
33 => 0x06|0x00|0x00|0x00, # yellow/yellow
|
61
|
+
34 => 0x01|0x00|0x00|0x00, # blue/blue
|
62
|
+
35 => 0x05|0x00|0x00|0x00, # magenta/purple
|
63
|
+
36 => 0x03|0x00|0x00|0x00, # cyan/aqua
|
64
|
+
37 => 0x07|0x00|0x00|0x00, # white/gray
|
65
|
+
39 => $default_foreground, # default
|
66
|
+
40 => 0x00|0x00|0x00|0x00, # background:black
|
67
|
+
41 => 0x00|0x00|0x40|0x00, # background:red
|
68
|
+
42 => 0x00|0x00|0x20|0x00, # background:green
|
69
|
+
43 => 0x00|0x00|0x60|0x00, # background:yellow
|
70
|
+
44 => 0x00|0x00|0x10|0x00, # background:blue
|
71
|
+
45 => 0x00|0x00|0x50|0x00, # background:magenta
|
72
|
+
46 => 0x00|0x00|0x30|0x00, # background:cyan
|
73
|
+
47 => 0x00|0x00|0x70|0x00, # background:white
|
74
|
+
49 => $default_background, # default
|
66
75
|
90 => 0x07|0x00|0x00|0x00, # erase/white
|
67
76
|
}
|
68
77
|
|
69
78
|
def write_color(str, console = STDOUT)
|
79
|
+
@decoration ||= 0
|
80
|
+
@foreground ||= $default_foreground
|
81
|
+
@background ||= $default_background
|
82
|
+
@reverse ||= false
|
70
83
|
str.gsub("\xef\xbd\x9e", "\xe3\x80\x9c").split(/(\e\[\d*[a-zA-Z])/).each do |token|
|
71
84
|
case token
|
72
85
|
when /\e\[(\d+)m/
|
73
|
-
|
86
|
+
code = $1.to_i
|
87
|
+
code = code > 90 ? (code % 60) : code
|
88
|
+
case code
|
89
|
+
when 0
|
90
|
+
@decoration = 0
|
91
|
+
@foreground = $default_foreground
|
92
|
+
@background = $default_background
|
93
|
+
@reverse = false
|
94
|
+
when 1
|
95
|
+
@decoration |= $colorMap[1]
|
96
|
+
when 4
|
97
|
+
@decoration |= $colorMap[4]
|
98
|
+
when 7
|
99
|
+
@reverse = true
|
100
|
+
when 30..39
|
101
|
+
@foreground = $colorMap[code].to_i
|
102
|
+
when 40..49
|
103
|
+
@background = $colorMap[code].to_i
|
104
|
+
end
|
105
|
+
foreground = @foreground
|
106
|
+
background = @background
|
107
|
+
if @reverse
|
108
|
+
foreground <<= 4
|
109
|
+
background >>= 4
|
110
|
+
# reverse では intensity 情報も文字と背景で入れ替わるでの、
|
111
|
+
# 下位4bitと上位4bitをスワップ
|
112
|
+
@decoration = @decoration & 0xff00 | @decoration >> 4 & 0xf | (@decoration & 0xf) << 4
|
113
|
+
end
|
74
114
|
loop do
|
75
|
-
error_code = WinAPI.SetConsoleTextAttribute $hStdOut,
|
115
|
+
error_code = WinAPI.SetConsoleTextAttribute $hStdOut, @decoration | foreground | background
|
76
116
|
if error_code == 0
|
77
117
|
if WinAPI.GetLastError == 6
|
78
118
|
$hStdOut = WinAPI.GetStdHandle(0xFFFFFFF5)
|
@@ -81,7 +121,7 @@ if RUBY_PLATFORM =~ /mswin(?!ce)|mingw|bccwin/i # without cygwin
|
|
81
121
|
end
|
82
122
|
break
|
83
123
|
end
|
84
|
-
when /\e\[\d*[a-zA-Z]
|
124
|
+
when /\e\[\d*[a-zA-Z]/, ""
|
85
125
|
# do nothing
|
86
126
|
else
|
87
127
|
console.write token
|
data/lib/command.rb
CHANGED
@@ -17,26 +17,28 @@ module Command
|
|
17
17
|
COMMAND_LIST
|
18
18
|
end
|
19
19
|
|
20
|
+
# この順番がヘルプに表示される順番
|
20
21
|
COMMAND_LIST = {
|
21
|
-
"download" => Download
|
22
|
-
"update" => Update
|
23
|
-
"list" => List
|
24
|
-
"convert" => Convert
|
25
|
-
"diff" => Diff
|
26
|
-
"setting" => Setting
|
27
|
-
"alias" => Alias
|
28
|
-
"inspect"=> Inspect
|
29
|
-
"send" => Send
|
30
|
-
"folder" => Folder
|
31
|
-
"browser" => Browser
|
32
|
-
"remove" => Remove
|
33
|
-
"freeze" => Freeze
|
34
|
-
"
|
35
|
-
"
|
36
|
-
"
|
37
|
-
"
|
38
|
-
"
|
39
|
-
"
|
22
|
+
"download" => Download,
|
23
|
+
"update" => Update,
|
24
|
+
"list" => List,
|
25
|
+
"convert" => Convert,
|
26
|
+
"diff" => Diff,
|
27
|
+
"setting" => Setting,
|
28
|
+
"alias" => Alias,
|
29
|
+
"inspect"=> Inspect,
|
30
|
+
"send" => Send,
|
31
|
+
"folder" => Folder,
|
32
|
+
"browser" => Browser,
|
33
|
+
"remove" => Remove,
|
34
|
+
"freeze" => Freeze,
|
35
|
+
"tag" => Tag,
|
36
|
+
"flag" => Flag,
|
37
|
+
"mail" => Mail,
|
38
|
+
"backup" => Backup,
|
39
|
+
"help" => Help,
|
40
|
+
"version" => Version,
|
41
|
+
"init" => Init
|
40
42
|
}
|
41
43
|
|
42
44
|
# ショートカット定義
|
data/lib/command/alias.rb
CHANGED
@@ -3,10 +3,14 @@
|
|
3
3
|
# Copyright 2013 whiteleaf. All rights reserved.
|
4
4
|
#
|
5
5
|
|
6
|
-
require_relative "../
|
6
|
+
require_relative "../inventory"
|
7
7
|
|
8
8
|
module Command
|
9
9
|
class Alias < CommandBase
|
10
|
+
def self.oneline_help
|
11
|
+
"小説のIDに紐付けた別名を作成します"
|
12
|
+
end
|
13
|
+
|
10
14
|
def initialize
|
11
15
|
super("[<alias_name>=<target> ...] [options]")
|
12
16
|
@opt.separator <<-EOS
|
@@ -15,7 +19,7 @@ module Command
|
|
15
19
|
・<alias_name>にはアルファベット及び数字、アンダースコアが使用出来ます。
|
16
20
|
・<target>は他のコマンドで指定出来るものがそのまま使えますが、すでにダウンロード済みである必要があります。
|
17
21
|
|
18
|
-
|
22
|
+
Examples:
|
19
23
|
narou alias --list
|
20
24
|
narou alias musyoku=n9669bk
|
21
25
|
narou alias harem=1
|
@@ -31,7 +35,7 @@ module Command
|
|
31
35
|
end
|
32
36
|
|
33
37
|
def output_aliases_list
|
34
|
-
aliases =
|
38
|
+
aliases = Inventory.load("alias", :local)
|
35
39
|
database = Database.instance
|
36
40
|
aliases.each do |name, id|
|
37
41
|
title = database[id]["title"] rescue "(すでに削除されています)"
|
@@ -45,7 +49,7 @@ module Command
|
|
45
49
|
puts @opt.help
|
46
50
|
return
|
47
51
|
end
|
48
|
-
aliases =
|
52
|
+
aliases = Inventory.load("alias", :local)
|
49
53
|
argv.each_with_index do |arg, i|
|
50
54
|
Helper.print_horizontal_rule if i > 0
|
51
55
|
alias_name, target = arg.split("=", 2)
|
@@ -72,11 +76,7 @@ module Command
|
|
72
76
|
aliases[alias_name] = id
|
73
77
|
puts "#{alias_name} を #{title} の別名に設定しました"
|
74
78
|
end
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
def oneline_help
|
79
|
-
"小説のIDに紐付けた別名を作成します"
|
79
|
+
aliases.save
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
data/lib/command/backup.rb
CHANGED
@@ -10,7 +10,7 @@ module Command
|
|
10
10
|
class Backup < CommandBase
|
11
11
|
BACKUP_DIR_NAME = "backup"
|
12
12
|
|
13
|
-
def oneline_help
|
13
|
+
def self.oneline_help
|
14
14
|
"小説のバックアップを作成します"
|
15
15
|
end
|
16
16
|
|
@@ -22,7 +22,7 @@ module Command
|
|
22
22
|
・バックアップファイルはZIP圧縮され、小説保存フォルダ直下の#{BACKUP_DIR_NAME}フォルダに保存されます。
|
23
23
|
・バックアップ対象は、バックアップファイル以外の小説保存フォルダにあるファイル全てが対象です。
|
24
24
|
|
25
|
-
|
25
|
+
Examples:
|
26
26
|
narou backup 0
|
27
27
|
narou backup n9669bk
|
28
28
|
narou backup 0 1 musyoku
|
@@ -42,10 +42,16 @@ module Command
|
|
42
42
|
File.file?(path) && path.split("/", 2)[0] != BACKUP_DIR_NAME
|
43
43
|
}
|
44
44
|
FileUtils.mkdir(BACKUP_DIR_NAME) unless File.exists?(BACKUP_DIR_NAME)
|
45
|
-
Zip.unicode_names = true
|
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|
|
48
|
-
|
48
|
+
if Helper.os_windows?
|
49
|
+
zipped_filename = path.encode(Encoding::Windows_31J,
|
50
|
+
invalid: :replace, undef: :replace, replace: "_")
|
51
|
+
else
|
52
|
+
zipped_filename = path
|
53
|
+
end
|
54
|
+
zip.add(zipped_filename, path)
|
49
55
|
end
|
50
56
|
end
|
51
57
|
Dir.chdir(pwd)
|
@@ -58,6 +64,7 @@ module Command
|
|
58
64
|
puts @opt.help
|
59
65
|
return
|
60
66
|
end
|
67
|
+
tagname_to_ids(argv)
|
61
68
|
require "zip"
|
62
69
|
argv.each_with_index do |target, i|
|
63
70
|
Helper.print_horizontal_rule if i > 0
|