mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Basic fixes to calibre-sync (#3558)
* Properly create intermediate directories when receiving books from Calibre. This fixes an issue where you can't receive books except into directories that already exist on the Kobo, which, in particular, causes problems when your configuration in Calibre is something like "put books in $Author/$Title.epub" and you haven't previously synced any books by that author. * Wake up periodically to process ZMQs if any are registered. This fixes an issue where if there are any timed events (such as the suspend timer) in the queue, ZMQ events may not get processed until the timed event fires, which is a problem when (for example) the suspend timer goes off in an hour and you have something trying to send a book to the kobo over wifi *right now*. With this change, the event loop will wake up every 50ms to check for ZMQ events and process them if necessary. If there are no ZMQs registered (which is typical), it uses the original behaviour -- so this won't affect battery life under normal usage.
This commit is contained in:
committed by
Frans de Jonge
parent
79517eb166
commit
f9ac8b138b
@@ -304,6 +304,32 @@ function util.isEmptyDir(path)
|
||||
return true
|
||||
end
|
||||
|
||||
--- Checks if the given path exists. Doesn't care if it's a file or directory.
|
||||
---- @string path
|
||||
---- @treturn bool
|
||||
function util.pathExists(path)
|
||||
local lfs = require("libs/libkoreader-lfs")
|
||||
return lfs.attributes(path, "mode") ~= nil
|
||||
end
|
||||
|
||||
--- As `mkdir -p`.
|
||||
--- Unlike lfs.mkdir(), does not error if the directory already exists, and
|
||||
--- creates intermediate directories as needed.
|
||||
---- @string path the directory to create
|
||||
---- @treturn bool true on success; nil, err_message on error
|
||||
function util.makePath(path)
|
||||
path = path:gsub("/+$", "")
|
||||
if util.pathExists(path) then return true end
|
||||
|
||||
local success, err = util.makePath((util.splitFilePathName(path)))
|
||||
if not success then
|
||||
return nil, err.." (creating "..path..")"
|
||||
end
|
||||
|
||||
local lfs = require("libs/libkoreader-lfs")
|
||||
return lfs.mkdir(path)
|
||||
end
|
||||
|
||||
--- Replaces characters that are invalid filenames.
|
||||
--
|
||||
-- Replaces the characters <code>\/:*?"<>|</code> with an <code>_</code>.
|
||||
@@ -326,7 +352,9 @@ function util.replaceSlashChar(str)
|
||||
end
|
||||
end
|
||||
|
||||
--- Splits a file into its path and name
|
||||
--- Splits a file into its directory path and file name.
|
||||
--- If the given path has a trailing /, returns the entire path as the directory
|
||||
--- path and "" as the file name.
|
||||
---- @string file
|
||||
---- @treturn string path, filename
|
||||
function util.splitFilePathName(file)
|
||||
|
||||
Reference in New Issue
Block a user