Module: Narou
- Extended by:
- Memoist
- Defined in:
- lib/web/settingmessages.rb,
lib/input.rb,
lib/narou.rb,
lib/logger.rb,
lib/narou/api.rb,
lib/web/pushserver.rb,
lib/web/streaminginput.rb
Overview
Copyright 2013 whiteleaf. All rights reserved.
Defined Under Namespace
Modules: Eventable, Input, LoggerModule, ServerHelpers
Classes: API, AppServer, Logger, LoggerError, PushServer, StreamingLogger, Worker
Constant Summary
collapse
- LOCAL_SETTING_DIR =
".narou"
- GLOBAL_SETTING_DIR =
".narousetting"
- AOZORAEPUB3_JAR_NAME =
"AozoraEpub3.jar"
- AOZORAEPUB3_DIR =
"AozoraEpub3"
- PRESET_DIR =
"preset"
- MISC_DIR =
"misc"
- GLOBAL_REPLACE_NAME =
"replace.txt"
- EXIT_ERROR_CODE =
127
- EXIT_INTERRUPT =
126
- EXIT_REQUEST_REBOOT =
125
- UPDATE_SORT_KEYS =
{
"id" => "ID", "last_update" => "更新日", "title" => "タイトル", "author" => "作者名",
"new_arrivals_date" => "新着日", "general_lastup" => "最新話掲載日"
}
- SETTING_VARIABLES_WEBUI_MESSAGES =
WEB UI > 環境設定画面で表示する各項目の説明 ここになければ元々の説明が表示される
{
"convert.multi-device" => "複数の端末用に同時に変換する。deviceよりも優先される。\nただのEPUBを出力したい場合はepubを指定",
"device" => "変換、送信対象の端末",
"difftool" => "Diffで使うツールのパスを指定する\n※WEB UIでは使われません",
"update.sort-by" => "アップデートを指定した項目順で行う",
"default.title_date_align" => "enable_add_date_to_title で付与する日付の位置",
"force.title_date_align" => "enable_add_date_to_title で付与する日付の位置",
"difftool.arg" => "difftoolで使う引数(指定しなければ単純に新旧ファイルを引数に呼び出す)\n" \
"特殊な変数\n" \
"<b>%NEW</b> : 最新データの差分用ファイルパス\n" \
"<b>%OLD</b> : 古い方の差分用ファイルパス",
"no-color" => "コンソールのカラー表示を無効にする\n※要WEB UIサーバ再起動",
"economy" => "容量節約に関する設定"
}
- @@is_web =
false
Class Method Summary
collapse
Class Method Details
.alias_to_id(target) ⇒ Object
target が alias だった場合はIDに変換する
全てのtarget照合系はこのメソッドを通過するので、ここで小文字にしてしまう
96
97
98
99
100
101
102
|
# File 'lib/narou.rb', line 96
def alias_to_id(target)
aliases = Inventory.load("alias")
if aliases[target]
return aliases[target]
end
target.kind_of?(Numeric) ? target : target.downcase
end
|
.already_init? ⇒ Boolean
80
81
82
|
# File 'lib/narou.rb', line 80
def already_init?
!!get_root_dir
end
|
.aozoraepub3_directory?(path) ⇒ Boolean
118
119
120
|
# File 'lib/narou.rb', line 118
def aozoraepub3_directory?(path)
File.exist?(create_aozoraepub3_jar_path(path))
end
|
.commit_version ⇒ Object
292
293
294
295
|
# File 'lib/narou.rb', line 292
def commit_version
cv_path = File.expand_path("commitversion", get_script_dir)
File.read(cv_path) if File.exist?(cv_path)
end
|
.create_aozoraepub3_jar_path(*paths) ⇒ Object
114
115
116
|
# File 'lib/narou.rb', line 114
def create_aozoraepub3_jar_path(*paths)
File.expand_path(File.join(*paths, AOZORAEPUB3_JAR_NAME))
end
|
.create_novel_filename(novel_data, ext = "") ⇒ Object
書籍ファイル名を生成する convert.filename-to-ncode を設定している場合に novel_data に ncode、domain を 設定しない場合は id カラムが必須
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
# File 'lib/narou.rb', line 192
def create_novel_filename(novel_data, ext = "")
filename_to_ncode = Inventory.load("local_setting")["convert.filename-to-ncode"]
if filename_to_ncode
ncode, domain = novel_data["ncode"], novel_data["domain"]
if !ncode || !domain
id = novel_data["id"]
unless id
raise ArgumentError, %!novel_data["id"] を設定して下さい!
end
site_setting = Downloader.get_sitesetting_by_target(id)
ncode = site_setting["ncode"]
domain = site_setting["domain"]
end
serialized_domain = domain.to_s.gsub(".", "_")
%!#{serialized_domain}_#{ncode}#{ext}!
else
author, title = %w(author title).map { |k|
Helper.replace_filename_special_chars(novel_data[k], true)
}
"[#{author}] #{title}#{ext}"
end
end
|
.economy?(mode) ⇒ Boolean
270
271
272
273
|
# File 'lib/narou.rb', line 270
def economy?(mode)
eco_modes = Inventory.load("local_setting")["economy"].to_s.split(",").map(&:strip)
eco_modes.include?(mode)
end
|
.get_aozoraepub3_path ⇒ Object
AozoraEpub3 の実行ファイル(.jar)のフルパス取得 検索順序
-
グローバルセッティング (global_setting aozoraepub3dir)
-
小説保存ディレクトリ(Narou.get_root_dir) 直下の AozoraEpub3
-
スクリプト保存ディレクトリ(Narou.get_script_dir) 直下の AozoraEpub3
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
# File 'lib/narou.rb', line 169
def get_aozoraepub3_path
global_setting_aozora_path = Inventory.load("global_setting", :global)["aozoraepub3dir"]
if global_setting_aozora_path
aozora_jar_path = create_aozoraepub3_jar_path(global_setting_aozora_path)
if File.exist?(aozora_jar_path)
return aozora_jar_path
end
end
[Narou.get_root_dir, Narou.get_script_dir].each do |dir|
aozora_jar_path = create_aozoraepub3_jar_path(dir, AOZORAEPUB3_DIR)
if File.exist?(aozora_jar_path)
return aozora_jar_path
end
end
nil
end
|
.get_device(device_name = nil) ⇒ Object
232
233
234
235
236
237
238
|
# File 'lib/narou.rb', line 232
def get_device(device_name = nil)
device_name = Inventory.load("local_setting")["device"] unless device_name
if device_name && Device.exists?(device_name)
return Device.create(device_name)
end
nil
end
|
.get_ebook_file_path(target, ext) ⇒ Object
.get_global_setting_dir ⇒ Object
66
67
68
69
70
71
72
|
# File 'lib/narou.rb', line 66
def get_global_setting_dir
global_setting_dir = File.expand_path(File.join("~", GLOBAL_SETTING_DIR))
unless File.exist?(global_setting_dir)
FileUtils.mkdir(global_setting_dir)
end
global_setting_dir
end
|
.get_local_setting_dir ⇒ Object
56
57
58
59
60
61
62
63
|
# File 'lib/narou.rb', line 56
def get_local_setting_dir
local_setting_dir = nil
root_dir = get_root_dir
if root_dir
local_setting_dir = File.join(root_dir, LOCAL_SETTING_DIR)
end
local_setting_dir
end
|
.get_misc_dir ⇒ Object
226
227
228
|
# File 'lib/narou.rb', line 226
def get_misc_dir
File.join(get_root_dir, MISC_DIR)
end
|
.get_mobi_path(target) ⇒ Object
215
216
217
|
# File 'lib/narou.rb', line 215
def get_mobi_path(target)
get_ebook_file_path(target, ".mobi")
end
|
.get_preset_dir ⇒ Object
109
110
111
|
# File 'lib/narou.rb', line 109
def get_preset_dir
File.expand_path(File.join(get_script_dir, PRESET_DIR))
end
|
.get_root_dir ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/narou.rb', line 36
def get_root_dir
root_dir = nil
path = Dir.pwd
drive_letter = ""
if Helper.os_windows?
path.encode!(Encoding::UTF_8)
path.gsub!(/^[a-z]:/i, "")
drive_letter = $&
end
while path != ""
if File.directory?("#{drive_letter}#{path}/#{LOCAL_SETTING_DIR}")
root_dir = drive_letter + path
break
end
path.gsub!(%r!/[^/]*$!, "")
end
root_dir
end
|
.get_script_dir ⇒ Object
75
76
77
|
# File 'lib/narou.rb', line 75
def get_script_dir
File.expand_path(File.join(File.dirname(__FILE__), ".."))
end
|
.get_theme ⇒ Object
254
255
256
|
# File 'lib/narou.rb', line 254
def get_theme
Inventory.load("local_setting")["theme"]
end
|
.get_theme_dir(name = nil) ⇒ Object
258
259
260
|
# File 'lib/narou.rb', line 258
def get_theme_dir(name = nil)
File.join([get_script_dir, "lib/web/public/theme", name].compact)
end
|
.get_theme_names ⇒ Object
262
263
264
265
266
267
|
# File 'lib/narou.rb', line 262
def get_theme_names
Dir.glob(get_theme_dir("*")).map do |path|
name = File.basename(path)
name == "fonts" ? nil : name
end.compact
end
|
.global_replace_pattern ⇒ Object
153
154
155
|
# File 'lib/narou.rb', line 153
def global_replace_pattern
@@global_replace_pattern_pairs ||= load_global_replace_pattern
end
|
.latest_version ⇒ Object
Narou.rb gem の最新バージョン番号を取得する
rubygems公式APIによる取得は、WindowsでのSSL証明書問題で取得出来ない 環境があるため、gemコマンド経由で取得する
285
286
287
288
289
290
|
# File 'lib/narou.rb', line 285
def latest_version
response = `gem search ^narou$`.split("\n")
if response.last =~ /\Anarou \((.+?)\)\z/
$1
end
end
|
.load_global_replace_pattern ⇒ Object
140
141
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/narou.rb', line 140
def load_global_replace_pattern
path = File.join(get_root_dir, GLOBAL_REPLACE_NAME)
if File.exist?(path)
pairs = Helper::CacheLoader.memo(path) do |text|
parse_replace_txt(text)
end
else
pairs = []
end
@@global_replace_pattern_pairs = pairs
pairs
end
|
.novel_frozen?(target) ⇒ Boolean
.novel_type_text(type) ⇒ Object
275
276
277
|
# File 'lib/narou.rb', line 275
def novel_type_text(type)
type == 2 ? "短編" : "連載"
end
|
.parse_replace_txt(text) ⇒ Object
122
123
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/narou.rb', line 122
def parse_replace_txt(text)
pattern = []
text.each_line do |line|
line.sub!(/[\r\n]+\z/, "")
next if line[0] == ";" pair = line.split("\t", 2)
if pair.length == 2 && pair[0]
pattern << pair
end
end
pattern
end
|
.save_global_replace_pattern ⇒ Object
157
158
159
160
|
# File 'lib/narou.rb', line 157
def save_global_replace_pattern
path = File.join(get_root_dir, GLOBAL_REPLACE_NAME)
write_replace_txt(path, @@global_replace_pattern_pairs)
end
|
.update_sort_key_summaries(width = 27) ⇒ Object
248
249
250
251
252
|
# File 'lib/narou.rb', line 248
def update_sort_key_summaries(width = 27)
({"KEY" => "対象"}.merge(UPDATE_SORT_KEYS)).map { |(key, summary)|
"#{key.rjust(width)} : #{summary}"
}.join("\n")
end
|
.web=(bool) ⇒ Object
240
241
242
|
# File 'lib/narou.rb', line 240
def web=(bool)
@@is_web = bool
end
|
.web? ⇒ Boolean
244
245
246
|
# File 'lib/narou.rb', line 244
def web?
@@is_web
end
|
.write_replace_txt(path, pairs) ⇒ Object
135
136
137
138
|
# File 'lib/narou.rb', line 135
def write_replace_txt(path, pairs)
buffer = pairs.each_with_object("\t").map(&:join).join("\n")
File.write(path, buffer)
end
|