diff --git a/spec/util_spec.cr b/spec/util_spec.cr index 94c326c..3ee4aac 100644 --- a/spec/util_spec.cr +++ b/spec/util_spec.cr @@ -35,6 +35,23 @@ describe "compare_numerically" do end end +describe "is_supported_file" do + it "returns true when the filename has a supported extension" do + filename = "manga.cbz" + is_supported_file(filename).should eq true + end + + it "returns true when the filename does not have a supported extension" do + filename = "info.json" + is_supported_file(filename).should eq false + end + + it "is case insensitive" do + filename = "manga.ZiP" + is_supported_file(filename).should eq true + end +end + describe "chapter_sort" do it "sorts correctly" do ary = ["Vol.1 Ch.01", "Vol.1 Ch.02", "Vol.2 Ch. 2.5", "Ch. 3", "Ch.04"] diff --git a/src/library/title.cr b/src/library/title.cr index 001e9af..4c439e7 100644 --- a/src/library/title.cr +++ b/src/library/title.cr @@ -36,7 +36,7 @@ class Title @title_ids << title.id next end - if [".zip", ".cbz", ".rar", ".cbr"].includes? File.extname path + if is_supported_file path entry = Entry.new path, self @entries << entry if entry.pages > 0 || entry.err_msg end diff --git a/src/util/signature.cr b/src/util/signature.cr index c82584d..8c6ffa7 100644 --- a/src/util/signature.cr +++ b/src/util/signature.cr @@ -1,3 +1,5 @@ +require "./util" + class File abstract struct Info def inode @@ -17,7 +19,7 @@ class File # information as long as the above changes do not happen together with # a file/folder rename, with no library scan in between. def self.signature(filename) : UInt64 - if %w(.zip .rar .cbz .cbr).includes? File.extname filename + if is_supported_file filename File.info(filename).inode else 0u64 diff --git a/src/util/util.cr b/src/util/util.cr index f174c39..873a226 100644 --- a/src/util/util.cr +++ b/src/util/util.cr @@ -2,6 +2,7 @@ IMGS_PER_PAGE = 5 ENTRIES_IN_HOME_SECTIONS = 8 UPLOAD_URL_PREFIX = "/uploads" STATIC_DIRS = ["/css", "/js", "/img", "/favicon.ico"] +SUPPORTED_FILE_EXTNAMES = [".zip", ".cbz", ".rar", ".cbr"] def random_str UUID.random.to_s.gsub "-", "" @@ -31,6 +32,10 @@ def register_mime_types end end +def is_supported_file(path) + SUPPORTED_FILE_EXTNAMES.includes? File.extname(path).downcase +end + struct Int def or(other : Int) if self == 0