lib/downloader.rb in narou-3.1.9 vs lib/downloader.rb in narou-3.1.10
- old
+ new
@@ -66,11 +66,11 @@
#
def self.get_sitesetting_by_target(target)
toc_url = get_toc_url(target)
setting = nil
if toc_url
- setting = @@settings.find { |s| s.multi_match(toc_url, "url") }
+ setting = @@settings.find { |s| s.multi_match_once(toc_url, "url") }
end
setting
end
#
@@ -101,23 +101,11 @@
#
# 指定されたIDとかから小説の保存ディレクトリを取得
#
def self.get_novel_data_dir_by_target(target)
- target = Narou.alias_to_id(target)
- type = get_target_type(target)
- data = nil
- case type
- when :url, :ncode
- toc_url = get_toc_url(target)
- data = @@database.get_data("toc_url", toc_url)
- when :other
- data = @@database.get_data("title", target)
- when :id
- data = @@database[target.to_i]
- end
- return nil unless data
+ data = get_data_by_target(target) or return nil
id = data["id"]
file_title = data["file_title"] || data["title"] # 互換性維持のための処理
use_subdirectory = data["use_subdirectory"] || false
subdirectory = use_subdirectory ? create_subdirecotry_name(file_title) : ""
path = File.join(Database.archive_root_path, data["sitename"], subdirectory, file_title)
@@ -134,20 +122,38 @@
#
# target のIDを取得
#
def self.get_id_by_target(target)
- toc_url = get_toc_url(target) or return nil
- @@database.get_id("toc_url", toc_url)
+ data = get_data_by_target(target)
+ data && data["id"]
end
#
# target からデータベースのデータを取得
#
def self.get_data_by_target(target)
- toc_url = get_toc_url(target) or return nil
- @@database.get_data("toc_url", toc_url)
+ target = Narou.alias_to_id(target)
+ case get_target_type(target)
+ when :url
+ setting = @@settings.find { |s| s.multi_match_once(target, "url") }
+ if setting
+ toc_url = setting["toc_url"]
+ return @@database.get_data_by_toc_url(toc_url, setting)
+ end
+ when :ncode
+ @@database.each_value do |data|
+ return data if data["toc_url"] =~ %r!#{target}/$!
+ end
+ when :id
+ data = @@database[target.to_i]
+ return data if data
+ when :other
+ data = @@database.get_data("title", target)
+ return data if data
+ end
+ nil
end
#
# toc 読込
#
@@ -162,14 +168,14 @@
#
def self.get_toc_url(target)
target = Narou.alias_to_id(target)
case get_target_type(target)
when :url
- setting = @@settings.find { |s| s.multi_match(target, "url") }
+ setting = @@settings.find { |s| s.multi_match_once(target, "url") }
return setting["toc_url"] if setting
when :ncode
- @@database.each do |_, data|
+ @@database.each_value do |data|
if data["toc_url"] =~ %r!#{target}/$!
return data["toc_url"]
end
end
return "#{@@narou["top_url"]}/#{target}/"
@@ -220,10 +226,10 @@
settings = @@__settings_cache ||= []
return settings unless settings.empty?
load_paths = [
File.join(Narou.get_script_dir, NOVEL_SITE_SETTING_DIR, "*.yaml"),
File.join(Narou.get_root_dir, NOVEL_SITE_SETTING_DIR, "*.yaml")
- ].join("\0")
+ ].uniq.join("\0")
Dir.glob(load_paths) do |path|
setting = SiteSetting.load_file(path)
if setting["name"] == "小説家になろう"
@@narou = setting
end