From 1493a092dbbb9f011573236b2a320898bc48ab48 Mon Sep 17 00:00:00 2001 From: hius07 <62179190+hius07@users.noreply.github.com> Date: Tue, 15 Oct 2024 10:30:57 +0300 Subject: [PATCH] Cloud storage: fix sorting non-English filenames (#12644) Reported in #12638. --- frontend/apps/cloudstorage/dropboxapi.lua | 8 ++++---- frontend/apps/cloudstorage/ftpapi.lua | 5 +++-- frontend/apps/cloudstorage/webdavapi.lua | 8 ++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/frontend/apps/cloudstorage/dropboxapi.lua b/frontend/apps/cloudstorage/dropboxapi.lua index c82699cb4..6f06da304 100644 --- a/frontend/apps/cloudstorage/dropboxapi.lua +++ b/frontend/apps/cloudstorage/dropboxapi.lua @@ -1,5 +1,6 @@ local DocumentRegistry = require("document/documentregistry") local JSON = require("json") +local ffiUtil = require("ffi/util") local http = require("socket.http") local lfs = require("libs/libkoreader-lfs") local logger = require("logger") @@ -7,7 +8,6 @@ local ltn12 = require("ltn12") local socket = require("socket") local socketutil = require("socketutil") local util = require("util") -local BaseUtil = require("ffi/util") local _ = require("gettext") local DropBoxApi = { @@ -126,7 +126,7 @@ function DropBoxApi:downloadFile(path, token, local_path) end function DropBoxApi:uploadFile(path, token, file_path, etag, overwrite) - local data = "{\"path\": \"" .. path .. "/" .. BaseUtil.basename(file_path) .. + local data = "{\"path\": \"" .. path .. "/" .. ffiUtil.basename(file_path) .. "\",\"mode\":" .. (overwrite and "\"overwrite\"" or "\"add\"") .. ",\"autorename\": " .. (overwrite and "false" or "true") .. ",\"mute\": false,\"strict_conflict\": false}" @@ -202,10 +202,10 @@ function DropBoxApi:listFolder(path, token, folder_mode) end --sort table.sort(dropbox_list, function(v1,v2) - return v1.text < v2.text + return ffiUtil.strcoll(v1.text, v2.text) end) table.sort(dropbox_file, function(v1,v2) - return v1.text < v2.text + return ffiUtil.strcoll(v1.text, v2.text) end) -- Add special folder. if folder_mode then diff --git a/frontend/apps/cloudstorage/ftpapi.lua b/frontend/apps/cloudstorage/ftpapi.lua index aaabfecc6..85cac3326 100644 --- a/frontend/apps/cloudstorage/ftpapi.lua +++ b/frontend/apps/cloudstorage/ftpapi.lua @@ -1,4 +1,5 @@ local DocumentRegistry = require("document/documentregistry") +local ffiUtil = require("ffi/util") local ftp = require("socket.ftp") local ltn12 = require("ltn12") local util = require("util") @@ -71,10 +72,10 @@ function FtpApi:listFolder(address_path, folder_path) end --sort table.sort(ftp_list, function(v1,v2) - return v1.text < v2.text + return ffiUtil.strcoll(v1.text, v2.text) end) table.sort(ftp_file, function(v1,v2) - return v1.text < v2.text + return ffiUtil.strcoll(v1.text, v2.text) end) for _, files in ipairs(ftp_file) do table.insert(ftp_list, { diff --git a/frontend/apps/cloudstorage/webdavapi.lua b/frontend/apps/cloudstorage/webdavapi.lua index c306092f1..03c1bc16b 100644 --- a/frontend/apps/cloudstorage/webdavapi.lua +++ b/frontend/apps/cloudstorage/webdavapi.lua @@ -1,5 +1,5 @@ local DocumentRegistry = require("document/documentregistry") -local FFIUtil = require("ffi/util") +local ffiUtil = require("ffi/util") local http = require("socket.http") local ltn12 = require("ltn12") local socket = require("socket") @@ -103,7 +103,7 @@ function WebDavApi:listFolder(address, user, pass, folder_path, folder_mode) --logger.dbg("WebDav catalog item=", item) -- is the path and filename of the entry. local item_fullpath = item:match("<[^:]*:href[^>]*>(.*)") - local item_name = FFIUtil.basename(util.htmlEntitiesToUtf8(util.urlDecode(item_fullpath))) + local item_name = ffiUtil.basename(util.htmlEntitiesToUtf8(util.urlDecode(item_fullpath))) local is_current_dir = item_name == string.sub(folder_path, -#item_name) local is_not_collection = item:find("<[^:]*:resourcetype%s*/>") or item:find("<[^:]*:resourcetype>") @@ -133,10 +133,10 @@ function WebDavApi:listFolder(address, user, pass, folder_path, folder_mode) --sort table.sort(webdav_list, function(v1,v2) - return v1.text < v2.text + return ffiUtil.strcoll(v1.text, v2.text) end) table.sort(webdav_file, function(v1,v2) - return v1.text < v2.text + return ffiUtil.strcoll(v1.text, v2.text) end) for _, files in ipairs(webdav_file) do table.insert(webdav_list, {