From 299c34a49c3ad94c97f3b82787cd4876f682ffa1 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Sat, 11 Jun 2022 19:30:16 +0200 Subject: [PATCH] ScreenSaver: Ignore macOS resource forks when choosing a random image Might help w/ https://www.mobileread.com/forums/showthread.php?t=343622 --- frontend/ui/screensaver.lua | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/ui/screensaver.lua b/frontend/ui/screensaver.lua index 269bf9281..83529ce26 100644 --- a/frontend/ui/screensaver.lua +++ b/frontend/ui/screensaver.lua @@ -18,12 +18,13 @@ local SpinWidget = require("ui/widget/spinwidget") local TextBoxWidget = require("ui/widget/textboxwidget") local TopContainer = require("ui/widget/container/topcontainer") local UIManager = require("ui/uimanager") +local ffiUtil = require("ffi/util") local lfs = require("libs/libkoreader-lfs") local logger = require("logger") +local util = require("util") local _ = require("gettext") -local ffiUtil = require("ffi/util") -local T = ffiUtil.template local Screen = Device.screen +local T = ffiUtil.template -- Default settings if G_reader_settings:hasNot("screensaver_show_message") then @@ -77,12 +78,13 @@ function Screensaver:_getRandomImage(dir) math.randomseed(os.time()) local ok, iter, dir_obj = pcall(lfs.dir, dir) if ok then - for entry in iter, dir_obj do - if lfs.attributes(dir .. entry, "mode") == "file" then - local extension = string.lower(string.match(entry, ".+%.([^.]+)") or "") + for f in iter, dir_obj do + -- Always ignore macOS resource forks, too. + if lfs.attributes(dir .. f, "mode") == "file" and not util.stringStartsWith(f, "._") then + local extension = string.lower(string.match(f, ".+%.([^.]+)") or "") if self.screensaver_provider[extension] then i = i + 1 - pics[i] = entry + pics[i] = f end end end @@ -106,7 +108,6 @@ function Screensaver:_calcAverageTimeForPages(pages) -- Compare average_time_per_page against itself to make sure it's not nan if average_time_per_page and average_time_per_page == average_time_per_page and pages then - local util = require("util") local user_duration_format = G_reader_settings:readSetting("duration_format", "classic") sec = util.secondsToClockDuration(user_duration_format, pages * average_time_per_page, true) end @@ -277,7 +278,6 @@ function Screensaver:chooseFile(document_cover) text = text, callback = function() UIManager:close(self.choose_dialog) - local util = require("util") local PathChooser = require("ui/widget/pathchooser") local path_chooser = PathChooser:new{ select_directory = false,