From 043dc13a24d3e1afa9f77aa71c231d9e793dd467 Mon Sep 17 00:00:00 2001 From: WS64 Date: Thu, 21 Aug 2014 22:22:49 +0200 Subject: [PATCH] Add "last book" screensaver for Kobo Epub only. If someone knows how to get an jpg/png from a pdf on linux (e.g. convert by imangemagick? But i am not a linux specialist and have no idea how to get that one into koreader) I can add something for linux too. cbz/cbr should be possible too, but I have not looked into it yet. Do I see it right that the Kindle screensavers are handled by Kindle itself? But on Kindle you also profit, you can see picture thumbnails now in the search results (long tap on found book) --- frontend/ui/uimanager.lua | 127 +++++++++++++++++++++++++++++++++++--- 1 file changed, 119 insertions(+), 8 deletions(-) diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 0a4f5306c..97c65c9b4 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -59,6 +59,109 @@ local UIManager = { suspend_msg = nil } +function UIManager:getPicture(file) + + local contentopf + local contentpath + local epub_folder = "temp/epub" + + local function check_extension(cover) + if cover then + local itype = string.lower(string.match(cover, ".+%.([^.]+)") or "") + if not (itype == "png" or itype == "jpg" or itype == "jpeg" or itype == "tiff") then + cover = nil + end + end + return cover + end + + local function getValue(zipfile,which_line,to_find,excludecheck) + local f = io.open(zipfile,"r") + local i + + if f then + local line = f:read() + while line and not i do + i = line:lower():find(which_line:lower()) -- found something + if i then + f.close() + line = line:match(to_find .. "\"([^\"]+)\".*") + if not excludecheck then line = check_extension(line) end + if line then + return line + else + i = nil + end + end + if not i then line = f:read() end + end + f.close() + end + end + + local function guess(extension) + local cover = contentpath .. "Images/cover." .. extension + pcall(os.execute("unzip \"" .. file .. "\" \"" .. cover .. "\" -oq -d " .. epub_folder)) + cover = epub_folder .. "/" .. cover + if not io.open(cover,"r") then + cover = nil + end + return cover + end + + local function try_content_opf(which_line,to_find,addimage) + local cover = getValue(epub_folder .. "/" .. contentopf,which_line,to_find) + local imageadd + if cover then + if addimage then + imageadd = "Images/" + else + imageadd = "" + end + cover = contentpath .. imageadd .. cover + pcall(os.execute("unzip \"" .. file .. "\" \"" .. cover .. "\" -oq -d " .. epub_folder)) + cover = epub_folder .. "/" .. cover + if not io.open(cover,"r") then cover = nil end + end + return check_extension(cover) + end + + local cover + if file then + pcall(lfs.mkdir("temp")) + pcall(os.execute("rm -rf " .. epub_folder)) + pcall(lfs.mkdir(epub_folder)) + pcall(os.execute("unzip \"" .. file .. "\" cover.jpeg -oq -d " .. epub_folder)) + if io.open(epub_folder .. "/cover.jpeg","r") then -- picture in main folder + cover = epub_folder .. "/cover.jpeg" -- found one + else + pcall(os.execute("unzip \"" .. file .. "\" \"META-INF/container.xml\" -oq -d " .. epub_folder)) -- read container.xml + contentopf = getValue(epub_folder .. "/META-INF/container.xml","^%s*