mirror of
https://github.com/hkalexling/Mango.git
synced 2025-08-04 20:05:29 -04:00
97 lines
2.8 KiB
Crystal
97 lines
2.8 KiB
Crystal
require "yaml"
|
|
|
|
class Config
|
|
include YAML::Serializable
|
|
|
|
@[YAML::Field(ignore: true)]
|
|
property path : String = ""
|
|
property port : Int32 = 9000
|
|
property base_url : String = "/"
|
|
property session_secret : String = "mango-session-secret"
|
|
property library_path : String = File.expand_path "~/mango/library",
|
|
home: true
|
|
property db_path : String = File.expand_path "~/mango/mango.db", home: true
|
|
property scan_interval_minutes : Int32 = 5
|
|
property thumbnail_generation_interval_hours : Int32 = 24
|
|
property db_optimization_interval_hours : Int32 = 24
|
|
property log_level : String = "info"
|
|
property upload_path : String = File.expand_path "~/mango/uploads",
|
|
home: true
|
|
property plugin_path : String = File.expand_path "~/mango/plugins",
|
|
home: true
|
|
property download_timeout_seconds : Int32 = 30
|
|
property page_margin : Int32 = 30
|
|
property disable_login = false
|
|
property default_username = ""
|
|
property mangadex = Hash(String, String | Int32).new
|
|
|
|
@[YAML::Field(ignore: true)]
|
|
@mangadex_defaults = {
|
|
"base_url" => "https://mangadex.org",
|
|
"api_url" => "https://mangadex.org/api",
|
|
"download_wait_seconds" => 5,
|
|
"download_retries" => 4,
|
|
"download_queue_db_path" => File.expand_path("~/mango/queue.db",
|
|
home: true),
|
|
"chapter_rename_rule" => "[Vol.{volume} ][Ch.{chapter} ]{title|id}",
|
|
"manga_rename_rule" => "{title}",
|
|
}
|
|
|
|
@@singlet : Config?
|
|
|
|
def self.current
|
|
@@singlet.not_nil!
|
|
end
|
|
|
|
def set_current
|
|
@@singlet = self
|
|
end
|
|
|
|
def self.load(path : String?)
|
|
path = "~/.config/mango/config.yml" if path.nil?
|
|
cfg_path = File.expand_path path, home: true
|
|
if File.exists? cfg_path
|
|
config = self.from_yaml File.read cfg_path
|
|
config.preprocess
|
|
config.path = path
|
|
config.fill_defaults
|
|
return config
|
|
end
|
|
puts "The config file #{cfg_path} does not exist. " \
|
|
"Dumping the default config there."
|
|
default = self.allocate
|
|
default.path = path
|
|
default.fill_defaults
|
|
cfg_dir = File.dirname cfg_path
|
|
unless Dir.exists? cfg_dir
|
|
Dir.mkdir_p cfg_dir
|
|
end
|
|
File.write cfg_path, default.to_yaml
|
|
puts "The config file has been created at #{cfg_path}."
|
|
default
|
|
end
|
|
|
|
def fill_defaults
|
|
{% for hash_name in ["mangadex"] %}
|
|
@{{hash_name.id}}_defaults.map do |k, v|
|
|
if @{{hash_name.id}}[k]?.nil?
|
|
@{{hash_name.id}}[k] = v
|
|
end
|
|
end
|
|
{% end %}
|
|
end
|
|
|
|
def preprocess
|
|
unless base_url.starts_with? "/"
|
|
raise "base url (#{base_url}) should start with `/`"
|
|
end
|
|
unless base_url.ends_with? "/"
|
|
@base_url += "/"
|
|
end
|
|
if disable_login && default_username.empty?
|
|
raise "Login is disabled, but default username is not set. " \
|
|
"Please set a default username"
|
|
end
|
|
end
|
|
end
|