narou 2.9.5 → 3.0.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.

Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -0
  3. data/.reek +34 -0
  4. data/.rspec +1 -0
  5. data/.rubocop.yml +9 -1
  6. data/ChangeLog.md +90 -0
  7. data/Gemfile +4 -0
  8. data/README.md +85 -8
  9. data/lib/command/convert.rb +1 -1
  10. data/lib/command/list.rb +59 -73
  11. data/lib/command/list/novel_decorator.rb +107 -0
  12. data/lib/command/send.rb +23 -13
  13. data/lib/command/setting.rb +5 -1
  14. data/lib/command/update.rb +104 -138
  15. data/lib/command/update/general_lastup_updater.rb +105 -0
  16. data/lib/command/update/interval.rb +29 -0
  17. data/lib/command/web.rb +1 -1
  18. data/lib/commandbase.rb +24 -17
  19. data/lib/converterbase.rb +10 -5
  20. data/lib/database.rb +16 -5
  21. data/lib/device.rb +5 -1
  22. data/lib/device/library/linux.rb +68 -8
  23. data/lib/downloader.rb +24 -23
  24. data/lib/extension.rb +16 -3
  25. data/lib/helper.rb +26 -3
  26. data/lib/html.rb +1 -1
  27. data/lib/inspector.rb +9 -0
  28. data/lib/inventory.rb +20 -6
  29. data/lib/logger.rb +8 -2
  30. data/lib/mailer.rb +2 -1
  31. data/lib/narou.rb +28 -18
  32. data/lib/narou/api.rb +62 -31
  33. data/lib/novelconverter.rb +8 -1
  34. data/lib/novelinfo.rb +8 -7
  35. data/lib/novelsetting.rb +1 -0
  36. data/lib/progressbar.rb +6 -2
  37. data/lib/sitesetting.rb +2 -1
  38. data/lib/version.rb +1 -1
  39. data/lib/web/appserver.rb +72 -9
  40. data/lib/web/public/resources/narou.library.js +130 -13
  41. data/lib/web/public/resources/narou.ui.js +96 -9
  42. data/lib/web/settingmessages.rb +2 -1
  43. data/lib/web/views/_about.haml +15 -2
  44. data/lib/web/views/index.haml +12 -3
  45. data/lib/web/views/layout.haml +2 -1
  46. data/lib/web/views/style.scss +12 -0
  47. data/narou.gemspec +88 -11
  48. data/narou.rb +7 -1
  49. data/preset/mail_setting.yaml +40 -6
  50. data/webnovel/kakuyomu.jp.yaml +8 -8
  51. metadata +95 -139
  52. data/spec/README.txt +0 -4
  53. data/spec/convert_spec.rb +0 -119
  54. data/spec/converterbase_spec.rb +0 -298
  55. data/spec/data/convert_test/auto_indent/correct_test_auto_indent.txt +0 -28
  56. data/spec/data/convert_test/auto_indent/test_auto_indent.txt +0 -32
  57. data/spec/data/convert_test/auto_join_bracket/correct_test_auto_join_bracket.txt +0 -24
  58. data/spec/data/convert_test/auto_join_bracket/test_auto_join_bracket.txt +0 -28
  59. data/spec/data/convert_test/auto_join_line/correct_test_auto_join_line.txt +0 -43
  60. data/spec/data/convert_test/auto_join_line/test_auto_join_line.txt +0 -59
  61. data/spec/data/convert_test/convert_page_break/correct_test_convert_page_break.txt +0 -22
  62. data/spec/data/convert_test/convert_page_break/setting.ini +0 -5
  63. data/spec/data/convert_test/convert_page_break/test_convert_page_break.txt +0 -60
  64. data/spec/data/convert_test/double_dash_to_image/correct_test_double_dash_to_image.txt +0 -14
  65. data/spec/data/convert_test/double_dash_to_image/setting.ini +0 -1
  66. data/spec/data/convert_test/double_dash_to_image/test_double_dash_to_image.txt +0 -12
  67. data/spec/data/convert_test/english/correct_test_english.txt +0 -27
  68. data/spec/data/convert_test/english/test_english.txt +0 -27
  69. data/spec/data/convert_test/force_indent_special_chapter/correct_test_force_indent_special_chapter.txt +0 -64
  70. data/spec/data/convert_test/force_indent_special_chapter/test_force_indent_special_chapter.txt +0 -61
  71. data/spec/data/convert_test/horizontal_ellipsis/correct_test_horizontal_ellipsis.txt +0 -53
  72. data/spec/data/convert_test/horizontal_ellipsis/test_horizontal_ellipsis.txt +0 -57
  73. data/spec/data/convert_test/insert_separator/correct_test_insert_separator.txt +0 -13
  74. data/spec/data/convert_test/insert_separator/setting.ini +0 -3
  75. data/spec/data/convert_test/insert_separator/test_insert_separator.txt +0 -12
  76. data/spec/data/convert_test/insert_separator_and_replace_txt/correct_test_insert_separator_and_replace_txt.txt +0 -12
  77. data/spec/data/convert_test/insert_separator_and_replace_txt/setting.ini +0 -3
  78. data/spec/data/convert_test/insert_separator_and_replace_txt/test_insert_separator_and_replace_txt.txt +0 -11
  79. data/spec/data/convert_test/kanji_num/correct_test_kanji_num.txt +0 -50
  80. data/spec/data/convert_test/kanji_num/test_kanji_num.txt +0 -56
  81. data/spec/data/convert_test/nonokagi/correct_test_nonokagi.txt +0 -30
  82. data/spec/data/convert_test/nonokagi/test_nonokagi.txt +0 -34
  83. data/spec/data/convert_test/replace/correct_test_replace.txt +0 -13
  84. data/spec/data/convert_test/replace/test_replace.txt +0 -14
  85. data/spec/data/convert_test/ruby/correct_test_ruby.txt +0 -161
  86. data/spec/data/convert_test/ruby/test_ruby.txt +0 -205
  87. data/spec/data/convert_test/ruby_youon/correct_test_ruby_youon.txt +0 -13
  88. data/spec/data/convert_test/ruby_youon/setting.ini +0 -2
  89. data/spec/data/convert_test/ruby_youon/test_ruby_youon.txt +0 -14
  90. data/spec/data/convert_test/sesame/correct_test_sesame.txt +0 -41
  91. data/spec/data/convert_test/sesame/test_sesame.txt +0 -52
  92. data/spec/data/convert_test/to_odd_leader/correct_test_to_odd_leader.txt +0 -21
  93. data/spec/data/convert_test/to_odd_leader/test_to_odd_leader.txt +0 -21
  94. data/spec/data/html_test.html +0 -5
  95. data/spec/data/html_test.txt +0 -4
  96. data/spec/data/test.ini +0 -10
  97. data/spec/device_spec.rb +0 -39
  98. data/spec/downloader_spec.rb +0 -37
  99. data/spec/eventable_spec.rb +0 -172
  100. data/spec/exit_code_spec.rb +0 -67
  101. data/spec/generator/convert_spec_gen.rb +0 -96
  102. data/spec/generator/num_to_kanji_test_gen.rb +0 -33
  103. data/spec/helper_spec.rb +0 -90
  104. data/spec/html_spec.rb +0 -83
  105. data/spec/ini_spec.rb +0 -145
  106. data/spec/input_spec.rb +0 -76
  107. data/spec/logger_spec.rb +0 -92
  108. data/spec/novelinfo_spec.rb +0 -15
  109. data/spec/novelsetting_spec.rb +0 -35
  110. data/spec/num_to_kanji_spec.rb +0 -2482
  111. data/spec/spec_helper.rb +0 -16
  112. data/spec/worker_spec.rb +0 -75
@@ -23,12 +23,14 @@ $(document).ready(function() {
23
23
  id: false, last_update: false, title: true, author: false, sitename: false,
24
24
  toc_url: false, novel_type: false, tags: false, status: false, menu: true,
25
25
  download: true, folder: false, update_button: false, general_lastup: false,
26
+ general_all_no: false, last_check_date: false,
26
27
  }
27
28
  // PC
28
29
  : {
29
30
  id: true, last_update: true, title: true, author: true, sitename: true,
30
- toc_url: true, novel_type: true, tags: true, status: true, menu: true,
31
- download: true, folder: true, update_button: true, general_lastup: true,
31
+ toc_url: true, novel_type: false, tags: true, status: true, menu: true,
32
+ download: false, folder: true, update_button: true, general_lastup: true,
33
+ general_all_no: false, last_check_date: false,
32
34
  });
33
35
 
34
36
  $.fn.dataTable.Api.register("fireChangeSelect()", function() {
@@ -95,7 +97,7 @@ $(document).ready(function() {
95
97
  stateDuration: 0, // tableの状態保存を永続化
96
98
  paginationType: "full_numbers",
97
99
  lengthMenu: [[20, 50, 100, 200, 500, -1], [20, 50, 100, 200, 500, "全"]],
98
- order: [[ 1, "desc" ]], // 最初は新着順でソートしておく
100
+ order: [[ 2, "desc" ]], // 初期状態は「最新話掲載日」でソート
99
101
  columns: [
100
102
  // ID
101
103
  { title: "ID",
@@ -136,19 +138,46 @@ $(document).ready(function() {
136
138
  orderSequence: [ "desc", "asc" ], visible: cell_visible.general_lastup,
137
139
  render: function(data, type, row) {
138
140
  if (type === "display" || type === "filter") {
139
- if (!data)
140
- return "";
141
+ if (!data) return "";
141
142
  var now = new Date;
142
143
  var date = new Date(data * 1000);
143
144
  var diff_time = (now - date) / 1000;
144
145
  var display = Narou.formatDate(date, "YYYY/MM/DD<br>hh:mm");
145
146
  var klass = "";
147
+ var outerClass = "";
146
148
  for (var i = 0;; i++) {
147
149
  var value = GENERAL_LASTUP_CLASSES[i];
148
150
  klass = value[1];
149
151
  if (value[0] === -1 || diff_time <= value[0]) break;
150
152
  }
151
- return '<div><span class="general-lastup ' + klass + '">' + display + '</span></div>';
153
+
154
+ // 更新日より最新話掲載日が新しい場合、新着が来ていると分かる表示をする
155
+ if (data > row.last_update) {
156
+ outerClass = "hint-new-arrival";
157
+ }
158
+
159
+ return '<div class="' + outerClass + '"><span class="general-lastup ' + klass + '">' + display + '</span></div>';
160
+ }
161
+ else if (type === "sort") {
162
+ return data * 10000 + (row.id | 0);
163
+ }
164
+ return data;
165
+ }
166
+ },
167
+ // 更新を確認した日時(Update時やgeneral_lastupチェック時に更新)
168
+ {
169
+ title: "更新チェ<br>ック日",
170
+ data: "last_check_date", className: "text-center",
171
+ orderSequence: [ "desc", "asc" ], visible: cell_visible.last_check_date,
172
+ render: function(data, type, row) {
173
+ if (type === "display" || type === "filter") {
174
+ if (!data)
175
+ return "";
176
+ var now = new Date;
177
+ var date = new Date(data * 1000);
178
+ var diff_time = (now - date) / 1000;
179
+ var display = Narou.formatDate(date, "YYYY/MM/DD<br>hh:mm");
180
+ return display;
152
181
  }
153
182
  else if (type === "sort") {
154
183
  return data * 10000 + (row.id | 0);
@@ -173,6 +202,18 @@ $(document).ready(function() {
173
202
  { title: "タグ",
174
203
  data: "tags", orderSequence: [ "desc", "asc" ], width: "70px",
175
204
  visible: cell_visible.tags },
205
+ // 話数
206
+ { title: "話数",
207
+ data: "general_all_no", visible: cell_visible.general_all_no,
208
+ className: "text-center", searchable: false, orderSequence: [ "desc", "asc" ],
209
+ render: function(data, type, row) {
210
+ data = data | 0;
211
+ if (type === "display") {
212
+ return data + "話";
213
+ }
214
+ return data;
215
+ }
216
+ },
176
217
  // 状態
177
218
  { title: "状態",
178
219
  data: "status", visible: cell_visible.status },
@@ -260,9 +301,15 @@ $(document).ready(function() {
260
301
  searchable: false, orderable: false,
261
302
  },
262
303
  // 凍結状態(内部データ用)
263
- { title: "凍結", data: "frozen", visible: false, system_column: true },
304
+ {
305
+ title: "凍結", data: "frozen", visible: false, system_column: true,
306
+ searchable: false,
307
+ },
264
308
  // 新着時間(内部データ用)
265
- { title: "新着時間", data: "new_arrivals_date", visible: false, system_column: true },
309
+ {
310
+ title: "新着時間", data: "new_arrivals_date", visible: false, system_column: true,
311
+ searchable: false
312
+ },
266
313
  ].map(function(hash) {
267
314
  // 検索用に name 要素を追加
268
315
  hash.name = hash.data;
@@ -1162,13 +1209,44 @@ $(document).ready(function() {
1162
1209
 
1163
1210
  /*
1164
1211
  * ボタン
1165
- * Update > 最新話掲載日を更新
1212
+ * Update > 最新話掲載日を確認
1166
1213
  */
1167
1214
  $(".button-update-general-lastup").on("click", function(e) {
1168
1215
  e.preventDefault();
1169
1216
  action.updateGeneralLastup();
1170
1217
  });
1171
1218
 
1219
+
1220
+ /*
1221
+ * ボタン
1222
+ * な
1223
+ * 最新話掲載日をなろうAPIで確認
1224
+ */
1225
+ $(".button-update-general-lastup-narou").on("click", function(e) {
1226
+ e.preventDefault();
1227
+ action.updateGeneralLastupNarou();
1228
+ });
1229
+
1230
+ /*
1231
+ * ボタン
1232
+ * 他
1233
+ * その他の小説の最新話掲載日を確認
1234
+ */
1235
+ $(".button-update-general-lastup-other").on("click", function(e) {
1236
+ e.preventDefault();
1237
+ action.updateGeneralLastupOther();
1238
+ });
1239
+
1240
+ /*
1241
+ * ボタン
1242
+ * (repeatアイコン)
1243
+ * modified タグが付いた小説を更新
1244
+ */
1245
+ $(".button-update-general-lastup-update-modified").on("click", function(e) {
1246
+ e.preventDefault();
1247
+ action.updateGeneralLastupUpdateModified();
1248
+ });
1249
+
1172
1250
  /*
1173
1251
  * ボタン
1174
1252
  * Update > 凍結済みも更新
@@ -1178,6 +1256,15 @@ $(document).ready(function() {
1178
1256
  action.updateForce();
1179
1257
  });
1180
1258
 
1259
+ /*
1260
+ * ボタン
1261
+ * Update > タグを指定して更新
1262
+ */
1263
+ $(".button-update-by-tag").on("click", function(e) {
1264
+ e.preventDefault();
1265
+ action.updateByTag();
1266
+ });
1267
+
1181
1268
  /*
1182
1269
  * ボタン
1183
1270
  * Send
@@ -18,7 +18,8 @@ module Narou
18
18
  "<b>%NEW</b> : 最新データの差分用ファイルパス\n" \
19
19
  "<b>%OLD</b> : 古い方の差分用ファイルパス",
20
20
  "no-color" => "コンソールのカラー表示を無効にする\n※要WEB UIサーバ再起動",
21
- "economy" => "容量節約に関する設定"
21
+ "economy" => "容量節約に関する設定",
22
+ "send.without-freeze" => "一括送信時に凍結された小説は対象外にする。(個別送信時は凍結済みでも送信可能)"
22
23
  }
23
24
  end
24
25
 
@@ -2,6 +2,19 @@
2
2
  +function() {
3
3
  var action = new Narou.Action;
4
4
 
5
+ function checkVersionIsUpdated(latest, current) {
6
+ var latestNumbers = latest.split(".");
7
+ var currentNumbers = current.split(".");
8
+ for (var i = 0; i < 3; i++) {
9
+ var leftNum = latestNumbers[i] | 0;
10
+ var rightNum = currentNumbers[i] | 0;
11
+ if (leftNum !== rightNum) {
12
+ return leftNum > rightNum;
13
+ }
14
+ }
15
+ return false;
16
+ }
17
+
5
18
  function getCurrentVersion() {
6
19
  var dfd = jQuery.Deferred();
7
20
  $.ajax({
@@ -111,7 +124,7 @@
111
124
  )
112
125
  .done(function(current_version, latest_version) {
113
126
  $result.children(".checking").hide();
114
- if (latest_version > current_version) {
127
+ if (checkVersionIsUpdated(latest_version, current_version)) {
115
128
  $("#latest-version").text(latest_version);
116
129
  $result.children(".need-an-update").show();
117
130
  }
@@ -150,7 +163,7 @@
150
163
  %div
151
164
  Version #{@narourb_version}
152
165
  %div
153
- Copyright 2013 whiteleaf. All rights reserved.
166
+ Copyright © 2013-#{Narou.last_commit_year} whiteleaf. All rights reserved.
154
167
  #result-of-version-checking(style="margin-top:10px")
155
168
  .checking
156
169
  %span.rotate-progress
@@ -185,7 +185,7 @@
185
185
  %button.close(type="button" data-dismiss="alert")
186
186
  %span(aria-hidden="true") &times;
187
187
  %span.sr-only Close
188
- %h2 Welcome
188
+ %h2 Welcome to Narou.rb WEB UI
189
189
  %p 最初に簡単な操作説明があるヘルプをご覧下さい。なお、このメッセージは今回のみ表示されます。
190
190
  %p(style="margin-top:20px")
191
191
  %a.btn.btn-primary(href="/help" role="button") ヘルプを見る &raquo;
@@ -218,12 +218,21 @@
218
218
  %span.caret
219
219
  %span.sr-only Toggle Dropdown
220
220
  %ul.dropdown-menu(role="menu")
221
+ %li
222
+ %a.button-update-general-lastup(href="#") 最新話掲載日を確認
223
+ %li
224
+ %a.button-update-by-tag(href="#") タグを指定して更新
221
225
  %li
222
226
  %a.button-update-view(href="#") 表示されている小説を更新
223
227
  %li
224
228
  %a.button-update-force(href="#") 凍結済みでも更新
225
- %li
226
- %a.button-update-general-lastup(href="#") 最新話掲載日を更新
229
+ .btn-group
230
+ %button.button-update-general-lastup-narou.btn.btn-success(type="button" data-toggle="tooltip" title="最新話掲載日をなろうAPIで確認")
231
+
232
+ %button.button-update-general-lastup-other.btn.btn-success(type="button" data-toggle="tooltip" title="その他の小説の最新話掲載日を確認")
233
+
234
+ %button.button-update-general-lastup-update-modified.btn.btn-success(type="button" data-toggle="tooltip" title="modifiedタグが付いた小説を更新")
235
+ %span.glyphicon.glyphicon-refresh
227
236
  .btn-group
228
237
  %button.button-send.btn.btn-warning(type="button" data-toggle="tooltip") Send
229
238
  - if Inventory.load("local_setting")["hotentry"]
@@ -6,7 +6,8 @@
6
6
  %meta{:content => "width=device-width, initial-scale=1", :name => "viewport"}/
7
7
  %meta{:content => "whiteleaf", :name => "author"}/
8
8
  %meta{:content => "none", :name => "robots"}/
9
- %title Narou.rb WEB UI #{@title ? "- #{@title}" : ""}
9
+ %title
10
+ = [@title, "Narou.rb WEB UI"].compact.join(" - ")
10
11
  %link{:href => "/favicon.ico", :rel => "shortcut icon"}/
11
12
  - if @bootstrap_theme
12
13
  %link{:href => "/theme/#{@bootstrap_theme}/bootstrap.min.css", :rel => "stylesheet"}/
@@ -301,6 +301,18 @@ table#novel-list {
301
301
  /* 上記の日付以上を過ぎている */
302
302
  .gl-other {
303
303
  }
304
+
305
+ .hint-new-arrival {
306
+ position: relative;
307
+
308
+ &:before {
309
+ position: absolute;
310
+ content: "●";
311
+ color: rgba(#e478e1, 0.6);
312
+ top: -6px;
313
+ left: -1px;
314
+ }
315
+ }
304
316
  }
305
317
 
306
318
  .context-menu-target-cover {
@@ -32,17 +32,94 @@ Gem::Specification.new do |gem|
32
32
  install_message = <<-EOS
33
33
  #{"*" * 60}
34
34
 
35
- 2.9.5 : 2016/07/01
36
- ------------------
35
+ 3.0.0 : 2016/11/25
36
+ -------------------
37
+ #### 追加機能
38
+ - update コマンドに --ignore-all オプションを追加しました
39
+ + 更新対象小説を指定しない場合の全件アップデート処理を無効にします
40
+ + `narou l | narou u --ignore-all` のように PIPE で繋いだ時、処理件数が偶然
41
+ 0件になった場合に意図せず全件更新にならない為に使用します
42
+ - コマンド使用時に `^tag:NAME` でタグの除外指定が出来るようになりました。
43
+ 先に実装された WEB UI での除外検索は `-tag:NAME` ですが、コマンドラインでは
44
+ -tag とするとオプションと誤認識されてしまう問題があり、^ に変更しました。
45
+ + これに合わせて、WEB UI でも ^tag: を使えるようになります(従来の -tag も
46
+ 使えます)
47
+ - WEB UI 関連
48
+ - Update ボタンに「タグを指定して更新」を追加しました
49
+ - Update ボタンの「最新話更新日を確認」を刷新しました。なろうAPIを使用して
50
+ 一括で更新されたかを確認することた出来るようになります
51
+ + コマンドライン版の `narou update --gl` も同様の機能に変わっています。
52
+ 詳細は narou u -h を参照
53
+ + > “実際に小説のデータが修正されてからなろうAPIに反映されるまで平均5分
54
+ 程度(最大2時間)の誤差があります。”
55
+
56
+ ([公式サイト](http://dev.syosetu.com/man/api/)から引用)
57
+ + ダイアログ内の各チェックリストの項目を独立させたものが、「な」「他」
58
+ 「(更新アイコン)」ボタンに独立させてあります。詳細はマウスホーバーの説明
59
+ を参照
60
+ + 最新話掲載日を確認した結果、新着がありそうな小説には「最新話掲載日」の
61
+ 日付の左上あたりに目印が表示されます
62
+ - 小説リストに「話数」を追加しました
63
+ - 小説リストに「更新チェック日」を追加しました
64
+ - Linux でも Eject ボタンに対応しました
65
+ + デスクトップにログインした状態での udisks-daemon または udisksd による
66
+ 自動マウントにのみ対応しています
67
+ + 使用中のデスクトップの外部で `narou web` を動かしている場合(例えばOS
68
+ 起動時に自動起動させた場合やログインし直した場合)、権限の問題により
69
+ Eject が効かない場合があります
70
+ - 設定に `normalize-filename` を追加しました。ファイル名をNFCで正規化します。
71
+ Dropbox 使用時などに合成文字列関係で問題がある場合などに使用して下さい。
72
+ 正規化後のファイル名が以前の物と変わった場合、別ファイルと認識されるので理解
73
+ の上で有効にして下さい
74
+ - 調査ログ保存時にエラー・警告・INFOの個数を表示するようにしました。
75
+ (`convert.inspect` が false の場合)
76
+ - setting.ini の title_date_format に、小説のタグを埋め込める書式 $ntag を追加
77
+ しました。小説にタグがついている場合、全てのタグをカンマ区切りで埋め込めます
78
+
37
79
  #### 仕様変更
38
- - WEB UI の Eject ボタンを押した際に、即時取り出しではなく一旦キューに積む様に
39
- 変更しました。これにより変換が終了したら取り外すということが可能になります
40
- + すぐに取り外したい場合は Eject ボタン横のドロップダウンメニューから可能です
41
- - Windows でも Eject ボタンに対応しました
80
+ - WEB UI の小説リストの初期表示状態を項目数増加に伴い整理しました
81
+ + 初期ソートを「最新話掲載日」に変更
82
+ + 種別、DL、更新チェック日、話数は初期状態では非表示
83
+ + 項目追加に伴い表示のカスタマイズがリセットされるので再設定をお願いします
84
+ - 現在ユーザーフォルダに保存されている .narousetting フォルダ(グローバル設定用)
85
+ を .narou フォルダと同じ場所に移動/コピーした場合、そちらを優先して読みに
86
+ 行くようになりました
87
+ + 全てのデータが一つのフォルダにまとめることが出来るようになるので、別PCへの
88
+ データ移行がしやすくなります
89
+ + また、現在はサーバー設定がグローバル設定で保存されているため、小説フォルダ
90
+ を分けても WEB UI サーバのアドレスが同じになってしまっていましたが、別々の
91
+ アドレス/ポートにすることが可能になります
92
+ - 複数のタグを同時に指定した場合、同じ小説が複数回対象になっていたのを一度のみ
93
+ 対象になるように変更しました
94
+ + 例) A と B というタグをもつ小説があったとして、`narou u A B` で二度更新され
95
+ てしまっていたのが、一度のみ更新されるようになる
96
+ - send --without-freeze オプションを指定時、対象小説を指定した場合でも凍結時は
97
+ 送信されなくなりました。(send.without-freeze を設定していても同じ)
98
+ + WEB UI ではこれまでと同様に一括時のみ凍結済みは送信されず、個別指定時は凍結
99
+ 済みでも送信出来ます
100
+ - send --without-freeze オプションの短縮形として -w を設定しました
101
+ - send で送信時、対象小説を指定した/しないに関わらずタイムスタンプを必ず比較
102
+ して新しければ送信するように変更しました
103
+ + 必ず送信したい場合は --force オプションを指定して下さい
104
+ - 栞のバックアップ・レストア時にタイムスタンプを見て新しい場合のみコピーする
105
+ ように変更しました
42
106
 
43
107
  #### 修正内容
44
- - Windows 環境において、kindlegen を実行時に何も実行されず mobi ファイルが作成
45
- 出来ない場合がある
108
+ - カクヨムの情報が一部取得出来なくなっていた
109
+ - mail コマンド送信時に添付ファイルに @ が付いている場合、全角の@に置換する様
110
+ にしました
111
+ - WEB UI でタグ検索時にフィルター末尾に自動で半角空白を挿入するようにしました
112
+ - list コマンドで検索やタグによる絞り込みと<limit>の指定による表示個数を制限
113
+ を併用した場合に、<limit>で指定した分のみしか絞り込み対象になっていなかった
114
+ - list --filter series を指定時に一つも連載小説が表示されていなかった
115
+ - Linux 環境で send コマンドが送信出来ない場合があった #119
116
+ - 小説IDが一桁の場合に、download.use-subdirectory で作られるサブフォルダに半角
117
+ スペースが含まれてしまっていた
118
+ - WEB UI のフィルターのおいて、本来表示されない内部データにまでマッチングして
119
+ しまう不具合
120
+ - update.logging オプションが有効な場合に、アップデートをしない時でもログを
121
+ 保存してしまう場合がある不具合
122
+ - その他動作の安定性を向上などの細かい修正
46
123
 
47
124
  #{"*" * 60}
48
125
  EOS
@@ -50,9 +127,9 @@ Gem::Specification.new do |gem|
50
127
 
51
128
  gem.required_ruby_version = ">=2.1.0"
52
129
 
53
- gem.files = `git ls-files`.split("\n") << Narou.create_git_commit_version
54
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
55
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
130
+ gem.files = `git ls-files`.split("\n").reject { |fn| fn =~ %r!^spec/|^"spec! } << Narou.create_git_commit_version
131
+ gem.executables = gem.files.grep(%r!^bin/!).map { |f| File.basename(f) }
132
+
56
133
  gem.add_runtime_dependency 'termcolorlight', '~> 1.0', '>= 1.1.1'
57
134
  gem.add_runtime_dependency 'rubyzip', '~> 1.1', '>= 1.1.0'
58
135
  gem.add_runtime_dependency 'mail', '2.5.4'
data/narou.rb CHANGED
@@ -24,7 +24,10 @@ require_relative "lib/inventory"
24
24
 
25
25
  $development = Narou.commit_version.!
26
26
  begin
27
- require "pry" if $development
27
+ if $development
28
+ require "pry"
29
+ require "awesome_print"
30
+ end
28
31
  rescue LoadError
29
32
  end
30
33
 
@@ -44,6 +47,9 @@ begin
44
47
  CommandLine.run(ARGV.map { |v| v.dup })
45
48
  rescue SystemExit => e
46
49
  exit e.status
50
+ rescue SyntaxError => e
51
+ warn e
52
+ exit Narou::EXIT_ERROR_CODE
47
53
  rescue rescue_level => e
48
54
  warn $@.shift + ": #{e.message.encode(Encoding::UTF_8)} (#{e.class})"
49
55
  if $display_backtrace
@@ -5,15 +5,27 @@
5
5
  # ご自分の環境に適宜書き換えて下さい。
6
6
  # ------------------------------------------------------------
7
7
  # Send to Kindle で使う場合の注意点
8
- # ・同じファイル名だとしてもパーソナルドキュメントに別ファイルとしてどんどん溜まっていきます。
9
- # 更新のたびに送信していると恐ろしいことになるので注意して下さい。
8
+ # 送ったファイルがどんどんパーソナル・ドキュメントに保存されていくので、
9
+ # hotentry を有効にした場合などは特に大量に溜まって管理が大変になるので、
10
+ # パーソナル・ドキュメントの保存は無効にしたほうがよいでしょう。
11
+ #
12
+ # コンテンツと端末の管理>設定
13
+ # https://www.amazon.co.jp/mn/dcw/myx.html/ref=kinw_myk_redirect#/home/settings/payment
14
+ # > パーソナル・ドキュメント設定 > パーソナル・ドキュメントの保存
15
+ # > 保存設定を編集
16
+ #
17
+ # 上記で無効に出来ます(デフォルトでは有効になっています)
18
+ #
19
+ # また、同じファイル名で送信したとしても Kindle には別の本として受信されます。
20
+ #
10
21
 
11
22
  # toのアドレスは
12
- # My Kindle > パーソナル・ドキュメント設定 > Send-to-Kindle Eメールアドレスの設定
13
- # https://www.amazon.co.jp/gp/digital/fiona/manage/ref=gno_yam_myk?#pdocSettings
23
+ # https://www.amazon.co.jp/mn/dcw/myx.html/ref=kinw_myk_redirect#/home/settings/payment
24
+ # コンテンツと端末の管理 > パーソナル・ドキュメント設定 > Send-to-Kindle Eメールアドレスの設定
14
25
  # に書いてあります。
15
- # 自分のメールアドレスが承認済みEメールアドレス一覧にあることを確認して下さい。
16
- :to : your_account@kindle.com
26
+ # 自分のメールアドレス(from)が承認済みEメールアドレス一覧にあることを確認して下さい。
27
+ :from : youraccount@gmail.com
28
+ :to : youraccount@kindle.com
17
29
 
18
30
  # 件名を「変換」にすると Kindleフォーマット(.azw) に変換される
19
31
  :subject : ""
@@ -32,3 +44,25 @@
32
44
 
33
45
  # 設定が終わったらこの項目を true にして下さい
34
46
  :complete : false
47
+
48
+
49
+ # 下記は Yahoo! メールで送るための参考設定です。
50
+ #
51
+ # # Yahoo! メールはFromを正しく設定しないと送信出来ない
52
+ # :from : ヤフーID@yahoo.co.jp
53
+ # :to : hogehoge@kindle.com
54
+ #
55
+ # :subject : ""
56
+ #
57
+ # :via : smtp
58
+ # :via_options :
59
+ # :address : smtp.mail.yahoo.co.jp
60
+ # :port : 587
61
+ # :enable_starttls_auto : true
62
+ # :user_name : ヤフーID
63
+ # :password : パスワード
64
+ # :authentication : :plain
65
+ # :domain : yahoo.co.jp
66
+ #
67
+ # # 設定が終わったらこの項目を true にして下さい
68
+ # :complete : false