Merge pull request #1189 from hwhw/master

fix strcoll() workaround
pull/1191/head
Huang Xin 10 years ago
commit 05b17429a0

@ -155,6 +155,12 @@ DDICT_FONT_SIZE = 20
-- e.g. 2 changes the sensitivity by 1/2, 3 by 1/3 etc.
FRONTLIGHT_SENSITIVITY_DECREASE = 2
-- Normally, Koreader will present file lists sorted in case insensitive manner
-- when presenting an alphatically sorted list. So the Order is "A, b, C, d".
-- You can switch to a case sensitive sort ("A", "C", "b", "d") by disabling
-- insensitive sort
DALPHA_SORT_CASE_INSENSITIVE = true
-- Set a path to a folder that is filled by Calibre (must contain the file metadata.calibre)
-- e.g.
-- "/mnt/sd/.hidden" for Kobo with files in ".hidden" on the SD card

@ -8,12 +8,12 @@ local DEBUG = require("dbg")
local _ = require("gettext")
local ffi = require("ffi")
ffi.cdef[[
int strcoll (char *str1, char *str2);
int strcoll (const char *str1, const char *str2);
]]
-- string sort function respecting LC_COLLATE
local function strcoll(str1, str2)
return ffi.C.strcoll(ffi.cast("char*", str1), ffi.cast("char*", str2)) <= 0
return ffi.C.strcoll(str1, str2) < 0
end
local FileChooser = Menu:extend{
@ -38,8 +38,10 @@ function FileChooser:init()
end
return true
end
-- disable string collating in Kobo devices. See issue koreader/koreader#686
if Device:isKobo() then self.strcoll = nil end
-- circumvent string collating in Kobo devices. See issue koreader/koreader#686
if Device:isKobo() then
self.strcoll = function(a, b) return a < b end
end
self.item_table = self:genItemTableFromPath(self.path)
Menu.init(self) -- call parent's init()
end
@ -71,11 +73,15 @@ function FileChooser:genItemTableFromPath(path)
local sorting = nil
local reverse = self.reverse_collate
if self.collate == "strcoll" then
sorting = self.strcoll and function(a, b)
if DALPHA_SORT_CASE_INSENSITIVE then
sorting = function(a, b)
return self.strcoll(string.lower(a.name), string.lower(b.name)) == not reverse
end
else
sorting = function(a, b)
return self.strcoll(a.name, b.name) == not reverse
end or function(a, b)
return (a.name < b.name) == not reverse
end
end
elseif self.collate == "access" then
sorting = function(a, b)
if reverse then

Loading…
Cancel
Save