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 0db6b21..05eb62d 100644 --- a/src/util/signature.cr +++ b/src/util/signature.cr @@ -1,3 +1,5 @@ +require "./util" + class File abstract struct Info def inode @@ -11,7 +13,7 @@ class File # ensures that moving (unless to another device) and renaming the file # preserves the signature, while copying or editing the file changes it. def self.signature(filename) : UInt64 - return 0u64 unless %w(.zip .rar .cbz .cbr).includes? File.extname filename + return 0u64 unless is_supported_file filename info = File.info filename signatures = [ info.inode, 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