DRY when listing archive entries

This commit is contained in:
Alex Ling 2020-09-12 06:58:03 +00:00
parent 5d7b8a1ef9
commit 67ef1f7112

View File

@ -79,11 +79,9 @@ class Entry
url url
end end
def read_page(page_num) private def sorted_archive_entries
raise "Unreadble archive. #{@err_msg}" if @err_msg
img = nil
ArchiveFile.open @zip_path do |file| ArchiveFile.open @zip_path do |file|
page = file.entries entries = file.entries
.select { |e| .select { |e|
SUPPORTED_IMG_TYPES.includes? \ SUPPORTED_IMG_TYPES.includes? \
MIME.from_filename? e.filename MIME.from_filename? e.filename
@ -91,7 +89,15 @@ class Entry
.sort { |a, b| .sort { |a, b|
compare_numerically a.filename, b.filename compare_numerically a.filename, b.filename
} }
.[page_num - 1] yield file, entries
end
end
def read_page(page_num)
raise "Unreadble archive. #{@err_msg}" if @err_msg
img = nil
sorted_archive_entries do |file, entries|
page = entries[page_num - 1]
data = file.read_entry page data = file.read_entry page
if data if data
img = Image.new data, MIME.from_filename(page.filename), page.filename, img = Image.new data, MIME.from_filename(page.filename), page.filename,
@ -103,16 +109,8 @@ class Entry
def page_dimensions def page_dimensions
sizes = [] of Hash(String, Int32) sizes = [] of Hash(String, Int32)
ArchiveFile.open @zip_path do |file| sorted_archive_entries do |file, entries|
file.entries entries.each_with_index do |e, i|
.select { |e|
SUPPORTED_IMG_TYPES.includes? \
MIME.from_filename? e.filename
}
.sort { |a, b|
compare_numerically a.filename, b.filename
}
.each_with_index do |e, i|
begin begin
data = file.read_entry(e).not_nil! data = file.read_entry(e).not_nil!
size = ImageSize.get data size = ImageSize.get data