Merge pull request #150 from Leeingnyo/fix/allow-uppercase-extensions

Make file extension check case-insensitive
This commit is contained in:
Alex Ling 2021-01-26 19:16:12 +08:00 committed by GitHub
commit 605dc61777
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 2 deletions

View File

@ -35,6 +35,23 @@ describe "compare_numerically" do
end end
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 describe "chapter_sort" do
it "sorts correctly" do it "sorts correctly" do
ary = ["Vol.1 Ch.01", "Vol.1 Ch.02", "Vol.2 Ch. 2.5", "Ch. 3", "Ch.04"] ary = ["Vol.1 Ch.01", "Vol.1 Ch.02", "Vol.2 Ch. 2.5", "Ch. 3", "Ch.04"]

View File

@ -36,7 +36,7 @@ class Title
@title_ids << title.id @title_ids << title.id
next next
end end
if [".zip", ".cbz", ".rar", ".cbr"].includes? File.extname path if is_supported_file path
entry = Entry.new path, self entry = Entry.new path, self
@entries << entry if entry.pages > 0 || entry.err_msg @entries << entry if entry.pages > 0 || entry.err_msg
end end

View File

@ -1,3 +1,5 @@
require "./util"
class File class File
abstract struct Info abstract struct Info
def inode def inode
@ -11,7 +13,7 @@ class File
# ensures that moving (unless to another device) and renaming the file # ensures that moving (unless to another device) and renaming the file
# preserves the signature, while copying or editing the file changes it. # preserves the signature, while copying or editing the file changes it.
def self.signature(filename) : UInt64 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 info = File.info filename
signatures = [ signatures = [
info.inode, info.inode,

View File

@ -2,6 +2,7 @@ IMGS_PER_PAGE = 5
ENTRIES_IN_HOME_SECTIONS = 8 ENTRIES_IN_HOME_SECTIONS = 8
UPLOAD_URL_PREFIX = "/uploads" UPLOAD_URL_PREFIX = "/uploads"
STATIC_DIRS = ["/css", "/js", "/img", "/favicon.ico"] STATIC_DIRS = ["/css", "/js", "/img", "/favicon.ico"]
SUPPORTED_FILE_EXTNAMES = [".zip", ".cbz", ".rar", ".cbr"]
def random_str def random_str
UUID.random.to_s.gsub "-", "" UUID.random.to_s.gsub "-", ""
@ -31,6 +32,10 @@ def register_mime_types
end end
end end
def is_supported_file(path)
SUPPORTED_FILE_EXTNAMES.includes? File.extname(path).downcase
end
struct Int struct Int
def or(other : Int) def or(other : Int)
if self == 0 if self == 0