diff --git a/base b/base index ef93cf4b4..7f96b5dfb 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit ef93cf4b413ae0cdc0f91d03769d98f3648fbe26 +Subproject commit 7f96b5dfb248f6478492cbba3b86101f5a3cb315 diff --git a/plugins/coverimage.koplugin/main.lua b/plugins/coverimage.koplugin/main.lua index 240c09676..a73feed1a 100644 --- a/plugins/coverimage.koplugin/main.lua +++ b/plugins/coverimage.koplugin/main.lua @@ -33,6 +33,11 @@ local function pathOk(filename) return true end +local function getExtension(filename) + local _, name = util.splitFilePathName(filename) + return util.getFileNameSuffix(name):lower() +end + local CoverImage = WidgetContainer:new{ name = "coverimage", is_doc_only = true, @@ -40,6 +45,8 @@ local CoverImage = WidgetContainer:new{ function CoverImage:init() self.cover_image_path = G_reader_settings:readSetting("cover_image_path") or "cover.png" + self.cover_image_format = G_reader_settings:readSetting("cover_image_format") or "auto" + self.cover_image_extension = getExtension(self.cover_image_path) self.cover_image_background = G_reader_settings:readSetting("cover_image_background") or "black" self.cover_image_fallback_path = G_reader_settings:readSetting("cover_image_fallback_path") or "cover_fallback.png" self.enabled = G_reader_settings:isTrue("cover_image_enabled") @@ -80,7 +87,8 @@ function CoverImage:createCoverImage(doc_settings) local scale_factor = math.min(s_w / i_w, s_h / i_h) if self.cover_image_background == "none" or scale_factor == 1 then - cover_image:writePNG(self.cover_image_path, false) + local act_format = self.cover_image_format == "auto" and self.cover_image_extension or self.cover_image_format + cover_image:writeToFile(self.cover_image_path, act_format) cover_image:free() return end @@ -89,7 +97,7 @@ function CoverImage:createCoverImage(doc_settings) cover_image = RenderImage:scaleBlitBuffer(cover_image, scaled_w, scaled_h) -- new buffer with screen dimensions, - local image = Blitbuffer.new( s_w, s_h, cover_image:getType() ) -- new buffer, filled with black + local image = Blitbuffer.new(s_w, s_h, cover_image:getType()) -- new buffer, filled with black if self.cover_image_background == "white" then image:fill(Blitbuffer.COLOR_WHITE) elseif self.cover_image_background == "gray" then @@ -98,12 +106,15 @@ function CoverImage:createCoverImage(doc_settings) -- copy scaled image to buffer if s_w > scaled_w then -- move right - image:blitFrom(cover_image, math.floor( (s_w - scaled_w) / 2 ), 0, 0, 0, scaled_w, scaled_h) + image:blitFrom(cover_image, math.floor((s_w - scaled_w) / 2), 0, 0, 0, scaled_w, scaled_h) else -- move down - image:blitFrom(cover_image, 0, math.floor( (s_h - scaled_h) / 2 ), 0, 0, scaled_w, scaled_h) + image:blitFrom(cover_image, 0, math.floor((s_h - scaled_h) / 2), 0, 0, scaled_w, scaled_h) end cover_image:free() - image:writePNG(self.cover_image_path, false) + + local act_format = self.cover_image_format == "auto" and self.cover_image_extension or self.cover_image_format + image:writeToFile(self.cover_image_path, act_format) + image:free() logger.dbg("CoverImage: image written to " .. self.cover_image_path) end @@ -196,6 +207,7 @@ function CoverImage:addToMainMenu(menu_items) }) end end + self.cover_image_extension = getExtension(self.cover_image_path) UIManager:close(sample_input) menu:updateItems() end, @@ -230,7 +242,7 @@ function CoverImage:addToMainMenu(menu_items) }, -- menu entry: scale book cover { - text = _("Size and background"), + text = _("Size, background and format"), enabled_func = function() return self.enabled end, @@ -241,12 +253,13 @@ function CoverImage:addToMainMenu(menu_items) return self.cover_image_background == "black" end, callback = function() + local old_background = self.cover_image_background self.cover_image_background = "black" G_reader_settings:saveSetting("cover_image_background", self.cover_image_background) - if self.enabled then + if self.enabled and old_background ~= self.cover_image_background then self:createCoverImage(self.ui.doc_settings) end - end + end, }, { text = _("Scale, white background"), @@ -254,12 +267,13 @@ function CoverImage:addToMainMenu(menu_items) return self.cover_image_background == "white" end, callback = function() + local old_background = self.cover_image_background self.cover_image_background = "white" G_reader_settings:saveSetting("cover_image_background", self.cover_image_background) - if self.enabled then + if self.enabled and old_background ~= self.cover_image_background then self:createCoverImage(self.ui.doc_settings) end - end + end, }, { text = _("Scale, gray background"), @@ -267,12 +281,13 @@ function CoverImage:addToMainMenu(menu_items) return self.cover_image_background == "gray" end, callback = function() + local old_background = self.cover_image_background self.cover_image_background = "gray" G_reader_settings:saveSetting("cover_image_background", self.cover_image_background) - if self.enabled then + if self.enabled and old_background ~= self.cover_image_background then self:createCoverImage(self.ui.doc_settings) end - end + end, }, { text = _("Original image"), @@ -280,12 +295,58 @@ function CoverImage:addToMainMenu(menu_items) return self.cover_image_background == "none" end, callback = function() + local old_background = self.cover_image_background self.cover_image_background = "none" G_reader_settings:saveSetting("cover_image_background", self.cover_image_background) - if self.enabled then + if self.enabled and old_background ~= self.cover_image_background then self:createCoverImage(self.ui.doc_settings) end - end + end, + separator = true, + }, + -- menu entries: File format + { + text = _("File format derived from filename"), + help_text = _("If the file format is not supported, then PNG will be used."), + checked_func = function() + return self.cover_image_format == "auto" + end, + callback = function() + local old_cover_image_format = self.cover_image_format + self.cover_image_format = "auto" + G_reader_settings:saveSetting("cover_image_format", self.cover_image_format) + if self.enabled and old_cover_image_format ~= self.cover_image_format then + self:createCoverImage(self.ui.doc_settings) + end + end, + }, + { + text = _("PNG file format"), + checked_func = function() + return self.cover_image_format == "png" + end, + callback = function() + local old_cover_image_format = self.cover_image_format + self.cover_image_format = "png" + G_reader_settings:saveSetting("cover_image_format", self.cover_image_format) + if self.enabled and old_cover_image_format ~= self.cover_image_format then + self:createCoverImage(self.ui.doc_settings) + end + end, + }, + { + text = _("BMP file format"), + checked_func = function() + return self.cover_image_format == "bmp" + end, + callback = function() + local old_cover_image_format = self.cover_image_format + self.cover_image_format = "bmp" + G_reader_settings:saveSetting("cover_image_format", self.cover_image_format) + if self.enabled and old_cover_image_format ~= self.cover_image_format then + self:createCoverImage(self.ui.doc_settings) + end + end, }, } },