mirror of
https://github.com/hkalexling/Mango.git
synced 2025-08-03 03:15:31 -04:00
Improve filename sanitization rules
This commit is contained in:
parent
60a126024c
commit
ccf558eaa7
@ -61,3 +61,13 @@ describe "chapter_sort" do
|
|||||||
end.should eq ary
|
end.should eq ary
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "sanitize_filename" do
|
||||||
|
it "returns a random string for empty sanitized string" do
|
||||||
|
sanitize_filename("..").should_not eq sanitize_filename("..")
|
||||||
|
end
|
||||||
|
it "sanitizes correctly" do
|
||||||
|
sanitize_filename(".. \n\v.\rマンゴー/|*()<[1/2] 3.14 hello world ")
|
||||||
|
.should eq " . マンゴー_()[1_2] 3.14 hello world"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@ -23,12 +23,6 @@ class Plugin
|
|||||||
job
|
job
|
||||||
end
|
end
|
||||||
|
|
||||||
private def process_filename(str)
|
|
||||||
str
|
|
||||||
.gsub(/[\/\s\.\177\000-\031]/, "_")
|
|
||||||
.gsub(/__+/, "_")
|
|
||||||
end
|
|
||||||
|
|
||||||
private def download(job : Queue::Job)
|
private def download(job : Queue::Job)
|
||||||
@downloading = true
|
@downloading = true
|
||||||
@queue.set_status Queue::JobStatus::Downloading, job
|
@queue.set_status Queue::JobStatus::Downloading, job
|
||||||
@ -43,8 +37,8 @@ class Plugin
|
|||||||
|
|
||||||
pages = info["pages"].as_i
|
pages = info["pages"].as_i
|
||||||
|
|
||||||
manga_title = process_filename job.manga_title
|
manga_title = sanitize_filename job.manga_title
|
||||||
chapter_title = process_filename info["title"].as_s
|
chapter_title = sanitize_filename info["title"].as_s
|
||||||
|
|
||||||
@queue.set_pages pages, job
|
@queue.set_pages pages, job
|
||||||
lib_dir = @library_path
|
lib_dir = @library_path
|
||||||
@ -69,7 +63,7 @@ class Plugin
|
|||||||
while page = plugin.next_page
|
while page = plugin.next_page
|
||||||
break unless @queue.exists? job
|
break unless @queue.exists? job
|
||||||
|
|
||||||
fn = process_filename page["filename"].as_s
|
fn = sanitize_filename page["filename"].as_s
|
||||||
url = page["url"].as_s
|
url = page["url"].as_s
|
||||||
headers = HTTP::Headers.new
|
headers = HTTP::Headers.new
|
||||||
|
|
||||||
|
@ -120,3 +120,22 @@ class String
|
|||||||
match / s.size
|
match / s.size
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Does the followings:
|
||||||
|
# - turns space-like characters into the normal whitespaces ( )
|
||||||
|
# - strips and collapses spaces
|
||||||
|
# - removes ASCII control characters
|
||||||
|
# - replaces slashes (/) with underscores (_)
|
||||||
|
# - removes leading dots (.)
|
||||||
|
# - removes the following special characters: \:*?"<>|
|
||||||
|
#
|
||||||
|
# If the sanitized string is empty, returns a random string instead.
|
||||||
|
def sanitize_filename(str : String) : String
|
||||||
|
sanitized = str
|
||||||
|
.gsub(/\s+/, " ")
|
||||||
|
.strip
|
||||||
|
.gsub(/\//, "_")
|
||||||
|
.gsub(/^\.+/, "")
|
||||||
|
.gsub(/[\177\000-\031\\:\*\?\"<>\|]/, "")
|
||||||
|
sanitized.size > 0 ? sanitized : random_str
|
||||||
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user