Merge pull request #14 from Leeingnyo/change-page-sort

Sort page names alphanumerically
This commit is contained in:
Alex Ling 2020-03-12 13:37:59 -04:00 committed by GitHub
commit 00d2540b95
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 1 deletions

View File

@ -103,3 +103,7 @@ Reader:
Mobile UI:
![mobile screenshot](./.github/screenshots/mobile.png)
## Contributors
[![](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/images/0)](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/links/0)[![](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/images/1)](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/links/1)[![](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/images/2)](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/links/2)[![](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/images/3)](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/links/3)[![](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/images/4)](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/links/4)[![](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/images/5)](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/links/5)[![](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/images/6)](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/links/6)[![](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/images/7)](https://sourcerer.io/fame/hkalexling/hkalexling/Mango/links/7)

View File

@ -2,6 +2,7 @@ require "zip"
require "mime"
require "json"
require "uri"
require "./util"
struct Image
property data : Bytes
@ -44,7 +45,7 @@ class Entry
["image/jpeg", "image/png"].includes? \
MIME.from_filename? e.filename
}
.sort { |a, b| a.filename <=> b.filename }
.sort { |a, b| compare_alphanumerically(split_by_alphanumeric(a.filename), split_by_alphanumeric(b.filename)) }
.[page_num - 1]
page.open do |io|
slice = Bytes.new page.uncompressed_size

View File

@ -32,3 +32,50 @@ def request_path_startswith(env, ary)
end
return false
end
def is_numeric(str)
/^\d+/.match(str) != nil
end
def split_by_alphanumeric(str)
is_number = false
arr = [] of String
arr.push(
str.split("").reduce("") do |memo, c|
if (is_number)
if is_numeric(c)
memo + c
else
arr.push(memo) if memo != ""
is_number = false
c
end
else
if is_numeric(c) # number
arr.push(memo) if memo != ""
is_number = true
c
else
memo + c
end
end
end
)
arr
end
def compare_alphanumerically(c, d)
is_c_bigger = c.size <=> d.size
begin
c.zip(d) do |a, b|
if is_numeric(a) && is_numeric(b)
compare = a.to_i <=> b.to_i
return compare if compare != 0
else
compare = a <=> b
return compare if compare != 0
end
end
is_c_bigger
end
end