From f95ad00b9e4a1e3bed1f00b0c93afc3efa308b3f Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Thu, 29 Dec 2016 00:10:38 -0800 Subject: [PATCH] feat: add logger module & rewrite kobo suspend script in lua --- frontend/apps/filemanager/filemanager.lua | 6 +- frontend/apps/filemanager/filemanagermenu.lua | 2 - .../apps/filemanager/filemanagersearch.lua | 6 +- frontend/apps/opdscatalog/opdscatalog.lua | 6 +- .../apps/reader/modules/readerbookmark.lua | 8 +- .../apps/reader/modules/readerdictionary.lua | 16 +-- .../apps/reader/modules/readerfrontlight.lua | 12 +- .../apps/reader/modules/readerhighlight.lua | 49 ++++--- frontend/apps/reader/modules/readermenu.lua | 2 - frontend/apps/reader/modules/readerpaging.lua | 20 +-- .../apps/reader/modules/readerpanning.lua | 4 +- .../apps/reader/modules/readerrolling.lua | 13 +- frontend/apps/reader/modules/readersearch.lua | 6 +- frontend/apps/reader/modules/readerview.lua | 13 +- .../apps/reader/modules/readerwikipedia.lua | 12 +- .../apps/reader/modules/readerzooming.lua | 10 +- frontend/apps/reader/readerui.lua | 18 +-- frontend/cache.lua | 8 +- frontend/dbg.lua | 3 + frontend/device/android/device.lua | 6 +- frontend/device/generic/device.lua | 14 +- frontend/device/generic/powerd.lua | 4 +- frontend/device/gesturedetector.lua | 39 +++--- frontend/device/input.lua | 14 +- frontend/device/kindle/device.lua | 30 ++-- frontend/device/kobo/device.lua | 132 ++++++++++++++++-- frontend/device/pocketbook/device.lua | 5 +- frontend/device/sdl/device.lua | 6 +- frontend/document/credocument.lua | 64 ++++----- frontend/document/document.lua | 16 +-- frontend/document/documentregistry.lua | 4 +- frontend/document/koptinterface.lua | 49 ++----- frontend/document/pdfdocument.lua | 4 +- frontend/document/tilecacheitem.lua | 8 +- frontend/gettext.lua | 4 +- frontend/logger.lua | 88 ++++++++++++ frontend/pluginloader.lua | 4 +- frontend/ui/font.lua | 4 +- frontend/ui/message/filemessagequeue.lua | 6 +- frontend/ui/message/messagequeue.lua | 6 +- frontend/ui/message/streammessagequeue.lua | 7 +- frontend/ui/message/zyremessagequeue.lua | 2 - frontend/ui/otamanager.lua | 10 +- frontend/ui/rendertext.lua | 9 +- frontend/ui/screensaver.lua | 6 +- frontend/ui/translator.lua | 12 +- frontend/ui/uimanager.lua | 22 +-- frontend/ui/widget/configdialog.lua | 7 +- frontend/ui/widget/confirmbox.lua | 4 +- frontend/ui/widget/dictquicklookup.lua | 4 +- frontend/ui/widget/imagewidget.lua | 6 +- frontend/ui/widget/inputdialog.lua | 1 - frontend/ui/widget/menu.lua | 4 +- frontend/ui/widget/multiconfirmbox.lua | 4 +- frontend/ui/widget/opdsbrowser.lua | 40 +++--- frontend/ui/widget/physicalkeyboard.lua | 4 +- frontend/ui/widget/textboxwidget.lua | 6 +- frontend/ui/widget/virtualkeyboard.lua | 10 +- frontend/ui/wikipedia.lua | 11 +- platform/kobo/suspend.sh | 59 -------- reader.lua | 5 +- 61 files changed, 518 insertions(+), 436 deletions(-) create mode 100644 frontend/logger.lua delete mode 100755 platform/kobo/suspend.sh diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index a7c117dbb..7ab3bd75d 100755 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -21,7 +21,7 @@ local Event = require("ui/event") local Device = require("device") local util = require("ffi/util") local Font = require("ui/font") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local KeyValuePage = require("ui/widget/keyvaluepage") local ReaderUI = require("apps/reader/readerui") @@ -302,7 +302,7 @@ function FileManager:init() self.loaded_modules = {} -- koreader plugins for _,plugin_module in ipairs(PluginLoader:loadPlugins()) do - DEBUG("Loaded plugin", plugin_module.name, "at", plugin_module.path) + logger.info("FM loaded plugin", plugin_module.name, "at", plugin_module.path) if not plugin_module.is_doc_only then -- Keep references to the modules which do not register into menu. table.insert(self.loaded_modules, plugin_module:new{ ui = self, }) @@ -363,7 +363,7 @@ function FileManager:toggleReverseCollate() end function FileManager:onClose() - DEBUG("close filemanager") + logger.dbg("close filemanager") UIManager:close(self) if self.onExit then self:onExit() diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 4ec40f0bf..620cda508 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -8,7 +8,6 @@ local Geom = require("ui/geometry") local Device = require("device") local Screensaver = require("ui/screensaver") local Screen = Device.screen -local DEBUG = require("dbg") local _ = require("gettext") local FileSearcher = require("apps/filemanager/filemanagerfilesearcher") local Search = require("apps/filemanager/filemanagersearch") @@ -335,7 +334,6 @@ end function FileManagerMenu:onCloseFileManagerMenu() local last_tab_index = self.menu_container[1].last_index - DEBUG("remember menu tab index", last_tab_index) G_reader_settings:saveSetting("filemanagermenu_tab_index", last_tab_index) UIManager:close(self.menu_container) return true diff --git a/frontend/apps/filemanager/filemanagersearch.lua b/frontend/apps/filemanager/filemanagersearch.lua index 6e763231f..f501b69a4 100644 --- a/frontend/apps/filemanager/filemanagersearch.lua +++ b/frontend/apps/filemanager/filemanagersearch.lua @@ -9,7 +9,7 @@ local Menu = require("ui/widget/menu") local Screen = require("device").screen local util = require("ffi/util") local Font = require("ui/font") -local DEBUG = require("dbg") +local logger = require("logger") local T = require("ffi/util").template local _ = require("gettext") local SetDefaults = require("apps/filemanager/filemanagersetdefaults") @@ -71,7 +71,7 @@ function Search:getCalibre() -- check if we find the calibre file -- check 1st file if SEARCH_LIBRARY_PATH == nil then - DEBUG("search Calibre database") + logger.dbg("search Calibre database") self.metafile_1 = findcalibre("/mnt") if not self.metafile_1 then self.error = _("SEARCH_LIBRARY_PATH should be defined in DEFAULTS.LUA.") @@ -85,7 +85,7 @@ function Search:getCalibre() if io.open(SEARCH_LIBRARY_PATH .. calibre,"r") == nil then if io.open(SEARCH_LIBRARY_PATH .. "." .. calibre,"r") == nil then self.error = SEARCH_LIBRARY_PATH .. calibre .. " " .. _("not found.") - DEBUG(self.error) + logger.err(self.error) else self.metafile_1 = SEARCH_LIBRARY_PATH .. "." .. calibre end diff --git a/frontend/apps/opdscatalog/opdscatalog.lua b/frontend/apps/opdscatalog/opdscatalog.lua index 30620b9d5..403a8e935 100644 --- a/frontend/apps/opdscatalog/opdscatalog.lua +++ b/frontend/apps/opdscatalog/opdscatalog.lua @@ -3,7 +3,7 @@ local FrameContainer = require("ui/widget/container/framecontainer") local OPDSBrowser = require("ui/widget/opdsbrowser") local UIManager = require("ui/uimanager") local Screen = require("device").screen -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local Blitbuffer = require("ffi/blitbuffer") local ReaderUI = require("apps/reader/readerui") @@ -79,7 +79,7 @@ function OPDSCatalog:onCloseWidget() end function OPDSCatalog:showCatalog() - DEBUG("show OPDS catalog") + logger.dbg("show OPDS catalog") UIManager:show(OPDSCatalog:new{ dimen = Screen:getSize(), onExit = function() @@ -89,7 +89,7 @@ function OPDSCatalog:showCatalog() end function OPDSCatalog:onClose() - DEBUG("close OPDS catalog") + logger.dbg("close OPDS catalog") UIManager:close(self) if self.onExit then self:onExit() diff --git a/frontend/apps/reader/modules/readerbookmark.lua b/frontend/apps/reader/modules/readerbookmark.lua index a3d61773d..679df933d 100644 --- a/frontend/apps/reader/modules/readerbookmark.lua +++ b/frontend/apps/reader/modules/readerbookmark.lua @@ -9,7 +9,7 @@ local Screen = require("device").screen local UIManager = require("ui/uimanager") local Event = require("ui/event") local Font = require("ui/font") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local ReaderBookmark = InputContainer:new{ @@ -285,7 +285,7 @@ function ReaderBookmark:addBookmark(item) _middle = math.floor((_start + _end)/2) -- won't add duplicated bookmarks if self:isBookmarkSame(item, self.bookmarks[_middle]) then - DEBUG("skip adding duplicated bookmark") + logger.warn("skip adding duplicated bookmark") return end if self:isBookmarkInPageOrder(item, self.bookmarks[_middle]) then @@ -351,7 +351,7 @@ function ReaderBookmark:toggleBookmark(pn_or_xp) end function ReaderBookmark:getPreviousBookmarkedPage(pn_or_xp) - DEBUG("go to next bookmark from", pn_or_xp) + logger.dbg("go to next bookmark from", pn_or_xp) for i = 1, #self.bookmarks do if self:isBookmarkInPageOrder({page = pn_or_xp}, self.bookmarks[i]) then return self.bookmarks[i].page @@ -360,7 +360,7 @@ function ReaderBookmark:getPreviousBookmarkedPage(pn_or_xp) end function ReaderBookmark:getNextBookmarkedPage(pn_or_xp) - DEBUG("go to next bookmark from", pn_or_xp) + logger.dbg("go to next bookmark from", pn_or_xp) for i = #self.bookmarks, 1, -1 do if self:isBookmarkInReversePageOrder({page = pn_or_xp}, self.bookmarks[i]) then return self.bookmarks[i].page diff --git a/frontend/apps/reader/modules/readerdictionary.lua b/frontend/apps/reader/modules/readerdictionary.lua index e7756892e..cc6f5bafe 100644 --- a/frontend/apps/reader/modules/readerdictionary.lua +++ b/frontend/apps/reader/modules/readerdictionary.lua @@ -6,7 +6,7 @@ local UIManager = require("ui/uimanager") local Screen = require("device").screen local Device = require("device") local JSON = require("json") -local DEBUG = require("dbg") +local logger = require("logger") local util = require("util") local _ = require("gettext") local T = require("ffi/util").template @@ -127,10 +127,10 @@ function ReaderDictionary:onLookupDone() end function ReaderDictionary:stardictLookup(word, box) - DEBUG("lookup word:", word, box) + logger.dbg("lookup word:", word, box) -- escape quotes and other funny characters in word word = self:cleanSelection(word) - DEBUG("stripped word:", word) + logger.dbg("stripped word:", word) if word == "" then return end @@ -162,7 +162,6 @@ function ReaderDictionary:stardictLookup(word, box) std_out:close() end end - --DEBUG("result str:", word, results_str) local ok, results = pcall(JSON.decode, results_str) if ok and results then -- we may get duplicates (sdcv may do multiple queries, @@ -176,7 +175,7 @@ function ReaderDictionary:stardictLookup(word, box) end end else - DEBUG("JSON data cannot be decoded", results) + logger.warn("JSON data cannot be decoded", results) end end if #final_results == 0 then @@ -190,13 +189,12 @@ function ReaderDictionary:stardictLookup(word, box) } end self:onLookupDone() - --DEBUG("lookup result table:", word, final_results) self:showDict(word, tidyMarkup(final_results), box) end function ReaderDictionary:showDict(word, results, box) if results and results[1] then - DEBUG("showing quick lookup window", word, results) + logger.dbg("showing quick lookup window", word, results) self.dict_window = DictQuickLookup:new{ window_list = self.dict_window_list, ui = self.ui, @@ -218,7 +216,7 @@ function ReaderDictionary:showDict(word, results, box) end function ReaderDictionary:onUpdateDefaultDict(dict) - DEBUG("make default dictionary:", dict) + logger.dbg("make default dictionary:", dict) self.default_dictionary = dict UIManager:show(InfoMessage:new{ text = T(_("%1 is now the default dictionary for this document."), dict), @@ -232,7 +230,7 @@ function ReaderDictionary:onReadSettings(config) end function ReaderDictionary:onSaveSettings() - DEBUG("save default dictionary", self.default_dictionary) + logger.dbg("save default dictionary", self.default_dictionary) self.ui.doc_settings:saveSetting("default_dictionary", self.default_dictionary) end diff --git a/frontend/apps/reader/modules/readerfrontlight.lua b/frontend/apps/reader/modules/readerfrontlight.lua index 2da0c528a..270a5a361 100644 --- a/frontend/apps/reader/modules/readerfrontlight.lua +++ b/frontend/apps/reader/modules/readerfrontlight.lua @@ -4,7 +4,7 @@ local GestureRange = require("ui/gesturerange") local UIManager = require("ui/uimanager") local Screen = require("device").screen local Device = require("device") -local DEBUG = require("dbg") +local logger = require("logger") local T = require("ffi/util").template local _ = require("gettext") @@ -40,11 +40,11 @@ end function ReaderFrontLight:onAdjust(arg, ges) local powerd = Device:getPowerDevice() if powerd.fl_intensity ~= nil then - DEBUG("frontlight intensity", powerd.fl_intensity) + logger.dbg("frontlight intensity", powerd.fl_intensity) local step = math.ceil(#self.steps * ges.distance / self.gestureScale) - DEBUG("step = ", step) + logger.dbg("step = ", step) local delta_int = self.steps[step] or self.steps[#self.steps] - DEBUG("delta_int = ", delta_int) + logger.dbg("delta_int = ", delta_int) local new_intensity if ges.direction == "north" then new_intensity = powerd.fl_intensity + delta_int @@ -71,13 +71,13 @@ end function ReaderFrontLight:onSwipe(arg, ges) if ges.direction == "north" or ges.direction == "south" then - DEBUG("onSwipe activated") + logger.dbg("onSwipe activated") return self:onShowIntensity() end end function ReaderFrontLight:onPanRelease(arg, ges) - DEBUG("onPanRelease activated") + logger.dbg("onPanRelease activated") return self:onShowIntensity() end diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 788534cd1..71390f1ea 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -6,7 +6,7 @@ local Device = require("device") local Event = require("ui/event") local UIManager = require("ui/uimanager") local ButtonDialog = require("ui/widget/buttondialog") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local ConfirmBox = require("ui/widget/confirmbox") @@ -168,7 +168,7 @@ function ReaderHighlight:onTapPageSavedHighlight(ges) if boxes then for index, box in pairs(boxes) do if inside_box(pos, box) then - DEBUG("Tap on hightlight") + logger.dbg("Tap on hightlight") return self:onShowHighlightDialog(page, i) end end @@ -188,7 +188,7 @@ function ReaderHighlight:onTapXPointerSavedHighlight(ges) if boxes then for index, box in pairs(boxes) do if inside_box(pos, box) then - DEBUG("Tap on hightlight") + logger.dbg("Tap on hightlight") return self:onShowHighlightDialog(page, i) end end @@ -228,15 +228,15 @@ function ReaderHighlight:onHold(_, ges) -- disable hold gesture if highlighting is disabled if self.view.highlight.disabled then return true end self.hold_pos = self.view:screenToPageTransform(ges.pos) - DEBUG("hold position in page", self.hold_pos) + logger.dbg("hold position in page", self.hold_pos) if not self.hold_pos then - DEBUG("not inside page area") + logger.dbg("not inside page area") return true end local ok, word = pcall(self.ui.document.getWordFromPosition, self.ui.document, self.hold_pos) if ok and word then - DEBUG("selected word:", word) + logger.dbg("selected word:", word) self.selected_word = word if self.ui.document.info.has_pages then local boxes = {} @@ -253,24 +253,24 @@ end function ReaderHighlight:onHoldPan(_, ges) if self.hold_pos == nil then - DEBUG("no previous hold position") + logger.dbg("no previous hold position") return true end local page_area = self.view:getScreenPageArea(self.hold_pos.page) if ges.pos:notIntersectWith(page_area) then - DEBUG("not inside page area", ges, page_area) + logger.dbg("not inside page area", ges, page_area) return true end self.holdpan_pos = self.view:screenToPageTransform(ges.pos) - DEBUG("holdpan position in page", self.holdpan_pos) + logger.dbg("holdpan position in page", self.holdpan_pos) local old_text = self.selected_text and self.selected_text.text self.selected_text = self.ui.document:getTextFromPositions(self.hold_pos, self.holdpan_pos) if self.selected_text and old_text and old_text == self.selected_text.text then -- no modification return end - DEBUG("selected text:", self.selected_text) + logger.dbg("selected text:", self.selected_text) if self.selected_text then self.view.highlight.temp[self.hold_pos.page] = self.selected_text.sboxes -- remove selected word if hold moves out of word box @@ -292,7 +292,7 @@ function ReaderHighlight:lookup(selected_word) -- or we will do OCR elseif selected_word.sbox and self.hold_pos then local word = self.ui.document:getOCRWord(self.hold_pos.page, selected_word) - DEBUG("OCRed word:", word) + logger.dbg("OCRed word:", word) local word_box = self.view:pageToScreenTransform(self.hold_pos.page, selected_word.sbox) self.ui:handleEvent(Event:new("LookupWord", word, word_box, self)) end @@ -304,7 +304,7 @@ function ReaderHighlight:translate(selected_text) -- or we will do OCR else local text = self.ui.document:getOCRText(self.hold_pos.page, selected_text) - DEBUG("OCRed text:", text) + logger.dbg("OCRed text:", text) self.ui:handleEvent(Event:new("TranslateText", self, text)) end end @@ -314,7 +314,7 @@ function ReaderHighlight:onHoldRelease() self:lookup(self.selected_word) self.selected_word = nil elseif self.selected_text then - DEBUG("show highlight dialog") + logger.dbg("show highlight dialog") self.highlight_dialog = ButtonDialog:new{ buttons = { { @@ -380,7 +380,7 @@ function ReaderHighlight:highlightFromHoldPos() if self.hold_pos then if not self.selected_text then self.selected_text = self.ui.document:getTextFromPositions(self.hold_pos, self.hold_pos) - DEBUG("selected text:", self.selected_text) + logger.dbg("selected text:", self.selected_text) end end end @@ -410,7 +410,7 @@ end function ReaderHighlight:saveHighlight() self:handleEvent(Event:new("AddHighlight")) - DEBUG("save highlight") + logger.dbg("save highlight") local page = self.hold_pos.page if self.hold_pos and self.selected_text and self.selected_text.pos0 and self.selected_text.pos1 then @@ -443,12 +443,11 @@ function ReaderHighlight:saveHighlight() self:exportToDocument(page, hl_item) end end - --DEBUG("saved hightlights", self.view.highlight.saved[page]) end --[[ function ReaderHighlight:exportToClippings(page, item) - DEBUG("export highlight to clippings", item) + logger.dbg("export highlight to clippings", item) local clippings = io.open("/mnt/us/documents/My Clippings.txt", "a+") if clippings and item.text then local current_locale = os.setlocale() @@ -466,13 +465,13 @@ end --]] function ReaderHighlight:exportToDocument(page, item) - DEBUG("export highlight to document", item) + logger.dbg("export highlight to document", item) self.ui.document:saveHighlight(page, item) end function ReaderHighlight:addNote() self:handleEvent(Event:new("addNote")) - DEBUG("add Note") + logger.dbg("add Note") end function ReaderHighlight:lookupWikipedia() @@ -482,7 +481,7 @@ function ReaderHighlight:lookupWikipedia() end function ReaderHighlight:onHighlightSearch() - DEBUG("search highlight") + logger.dbg("search highlight") self:highlightFromHoldPos() if self.selected_text then local text = require("util").stripePunctuations(self.selected_text.text) @@ -491,7 +490,7 @@ function ReaderHighlight:onHighlightSearch() end function ReaderHighlight:onHighlightDictLookup() - DEBUG("dictionary lookup highlight") + logger.dbg("dictionary lookup highlight") self:highlightFromHoldPos() if self.selected_text then self.ui:handleEvent(Event:new("LookupWord", self.selected_text.text)) @@ -499,15 +498,15 @@ function ReaderHighlight:onHighlightDictLookup() end function ReaderHighlight:shareHighlight() - DEBUG("share highlight") + logger.info("share highlight") end function ReaderHighlight:moreAction() - DEBUG("more action") + logger.info("more action") end function ReaderHighlight:deleteHighlight(page, i) - DEBUG("delete highlight") + logger.dbg("delete highlight") local removed = table.remove(self.view.highlight.saved[page], i) self.ui.bookmark:removeBookmark({ page = self.ui.document.info.has_pages and page or removed.pos0, @@ -516,7 +515,7 @@ function ReaderHighlight:deleteHighlight(page, i) end function ReaderHighlight:editHighlight() - DEBUG("edit highlight") + logger.info("edit highlight") end function ReaderHighlight:onReadSettings(config) diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 415e09b31..59e548ae6 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -5,7 +5,6 @@ local Device = require("device") local Screensaver = require("ui/screensaver") local Event = require("ui/event") local Screen = require("device").screen -local DEBUG = require("dbg") local _ = require("gettext") local ReaderMenu = InputContainer:new{ @@ -215,7 +214,6 @@ end function ReaderMenu:onCloseReaderMenu() self.last_tab_index = self.menu_container[1].last_index - DEBUG("remember menu tab index", self.last_tab_index) self:onSaveSettings() UIManager:close(self.menu_container) return true diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 425ccc822..09b0aa00b 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -6,7 +6,7 @@ local Screen = Device.screen local Event = require("ui/event") local UIManager = require("ui/uimanager") local Math = require("optmath") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") @@ -229,7 +229,7 @@ users change font size, page margin or line spacing or close and reopen the book, the page view will be roughly the same. --]] function ReaderPaging:setPagePosition(page, pos) - DEBUG("set page position", pos) + logger.dbg("set page position", pos) self.page_positions[page] = pos end @@ -241,7 +241,7 @@ function ReaderPaging:getPagePosition(page) -- fractional page number the reader runs silently well, but the -- number won't fit to retrieve page position. page = math.floor(page) - DEBUG("get page position", self.page_positions[page]) + logger.dbg("get page position", self.page_positions[page]) return self.page_positions[page] or 0 end @@ -298,7 +298,7 @@ function ReaderPaging:enterFlippingMode() self.orig_reflow_mode = self.view.document.configurable.text_wrap self.orig_scroll_mode = self.view.page_scroll self.orig_zoom_mode = self.view.zoom_mode - DEBUG("store zoom mode", self.orig_zoom_mode) + logger.dbg("store zoom mode", self.orig_zoom_mode) self.view.document.configurable.text_wrap = 0 self.view.page_scroll = self.flipping_scroll_mode Input.disable_double_tap = false @@ -311,7 +311,7 @@ function ReaderPaging:exitFlippingMode() Input.disable_double_tap = true self.flipping_zoom_mode = self.view.zoom_mode self.flipping_scroll_mode = self.view.page_scroll - DEBUG("restore zoom mode", self.orig_zoom_mode) + logger.dbg("restore zoom mode", self.orig_zoom_mode) self.ui:handleEvent(Event:new("ExitFlippingMode", self.orig_zoom_mode)) end @@ -421,7 +421,7 @@ function ReaderPaging:onViewRecalculate(visible_area, page_area) end function ReaderPaging:onGotoPercent(percent) - DEBUG("goto document offset in percent:", percent) + logger.dbg("goto document offset in percent:", percent) local dest = math.floor(self.number_of_pages * percent / 100) if dest < 1 then dest = 1 end if dest > self.number_of_pages then @@ -493,7 +493,7 @@ function ReaderPaging:getTopPage() end function ReaderPaging:onInitScrollPageStates(orig_mode) - DEBUG("init scroll page states", orig_mode) + logger.dbg("init scroll page states", orig_mode) if self.view.page_scroll and self.view.state.page then self.orig_page = self.current_page self.view.page_states = {} @@ -671,7 +671,7 @@ end function ReaderPaging:onScrollPanRel(diff) if diff == 0 then return true end - DEBUG("pan relative height:", diff) + logger.dbg("pan relative height:", diff) local offset = Geom:new{x = 0, y = diff} local blank_area = Geom:new{} blank_area:setSizeTo(self.view.dimen) @@ -746,7 +746,7 @@ function ReaderPaging:onScrollPageRel(page_diff) end function ReaderPaging:onGotoPageRel(diff) - DEBUG("goto relative page:", diff) + logger.dbg("goto relative page:", diff) local new_va = self.visible_area:copy() local x_pan_off, y_pan_off = 0, 0 @@ -852,7 +852,7 @@ function ReaderPaging:_gotoPage(number, orig_mode) return true end if number > self.number_of_pages or number < 1 then - DEBUG("wrong page number: "..number.."!") + logger.warn("wrong page number: "..number.."!") return false end -- this is an event to allow other controllers to be aware of this change diff --git a/frontend/apps/reader/modules/readerpanning.lua b/frontend/apps/reader/modules/readerpanning.lua index a1e362c03..3410f5498 100644 --- a/frontend/apps/reader/modules/readerpanning.lua +++ b/frontend/apps/reader/modules/readerpanning.lua @@ -1,6 +1,5 @@ local InputContainer = require("ui/widget/container/inputcontainer") local Device = require("device") -local DEBUG = require("dbg") local _ = require("gettext") local ReaderPanning = InputContainer:new{ @@ -37,9 +36,8 @@ function ReaderPanning:onSetDimensions(dimensions) self.dimen = dimensions end -function ReaderPanning:onPanning(args, key) +function ReaderPanning:onPanning(args, _) local dx, dy = unpack(args) - DEBUG("key =", key) -- for now, bounds checking/calculation is done in the view self.view:PanningUpdate( dx * self.panning_steps.normal * self.dimen.w / 100, diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 094738e9f..86d1283e7 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -5,7 +5,7 @@ local Device = require("device") local Input = require("device").input local Event = require("ui/event") local UIManager = require("ui/uimanager") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local pan_rate = Screen.eink and 4.0 or 10.0 @@ -348,7 +348,7 @@ function ReaderRolling:onNotCharging() end function ReaderRolling:onGotoPercent(percent) - DEBUG("goto document offset in percent:", percent) + logger.dbg("goto document offset in percent:", percent) self:_gotoPercent(percent) self.xpointer = self.ui.document:getXPointer() return true @@ -385,7 +385,7 @@ function ReaderRolling:onRestoreBookLocation(saved_location) end function ReaderRolling:onGotoViewRel(diff) - DEBUG("goto relative screen:", diff, ", in mode: ", self.view.view_mode) + logger.dbg("goto relative screen:", diff, ", in mode: ", self.view.view_mode) if self.view.view_mode == "scroll" then local pan_diff = diff * self.ui.dimen.h if self.show_overlap_enable then @@ -412,10 +412,9 @@ function ReaderRolling:onGotoViewRel(diff) return true end -function ReaderRolling:onPanning(args, key) +function ReaderRolling:onPanning(args, _) --@TODO disable panning in page view_mode? 22.12 2012 (houqp) local _, dy = unpack(args) - DEBUG("key =", key) self:_gotoPos(self.current_pos + dy * self.panning_steps.normal) self.xpointer = self.ui.document:getXPointer() return true @@ -533,13 +532,13 @@ currently we don't need to get page links on each page/pos update since we can check link on the fly when tapping on the screen --]] function ReaderRolling:updatePageLink() - DEBUG("update page link") + logger.dbg("update page link") local links = self.ui.document:getPageLinks() self.view.links = links end function ReaderRolling:updateBatteryState() - DEBUG("update battery state") + logger.dbg("update battery state") if self.view.view_mode == "page" then local powerd = Device:getPowerDevice() -- -1 is CR_BATTERY_STATE_CHARGING @ crengine/crengine/include/lvdocview.h diff --git a/frontend/apps/reader/modules/readersearch.lua b/frontend/apps/reader/modules/readersearch.lua index b5478e9a8..6bc12486e 100644 --- a/frontend/apps/reader/modules/readersearch.lua +++ b/frontend/apps/reader/modules/readersearch.lua @@ -1,7 +1,7 @@ local InputContainer = require("ui/widget/container/inputcontainer") local ButtonDialog = require("ui/widget/buttondialog") local UIManager = require("ui/uimanager") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local ReaderSearch = InputContainer:new{ @@ -63,7 +63,7 @@ function ReaderSearch:onShowSearchDialog(text) } }, tap_close_callback = function() - DEBUG("highlight clear") + logger.dbg("highlight clear") self.ui.highlight:clear() end, } @@ -75,7 +75,7 @@ function ReaderSearch:onShowSearchDialog(text) end function ReaderSearch:search(pattern, origin) - DEBUG("search pattern", pattern) + logger.dbg("search pattern", pattern) if pattern == nil or pattern == '' then return end local direction = self.direction local case = self.case_insensitive diff --git a/frontend/apps/reader/modules/readerview.lua b/frontend/apps/reader/modules/readerview.lua index 65db0b09a..ae12c6aae 100644 --- a/frontend/apps/reader/modules/readerview.lua +++ b/frontend/apps/reader/modules/readerview.lua @@ -14,6 +14,7 @@ local Screen = Device.screen local Geom = require("ui/geometry") local Event = require("ui/event") local dbg = require("dbg") +local logger = require("logger") local Blitbuffer = require("ffi/blitbuffer") local _ = require("gettext") @@ -176,7 +177,6 @@ function ReaderView:paintTo(bb, x, y) -- dim last read area if self.dim_area.w ~= 0 and self.dim_area.h ~= 0 then - --dbg("dim area", self.dim_area) if self.page_overlap_style == "dim" then bb:dimRect( self.dim_area.x, self.dim_area.y, @@ -226,7 +226,7 @@ function ReaderView:screenToPageTransform(pos) else pos.page = self.ui.document:getCurrentPage() -- local last_y = self.ui.document:getCurrentPos() - dbg("document has no pages at", pos) + logger.dbg("document has no pages at", pos) return pos end end @@ -556,14 +556,14 @@ function ReaderView:recalculate() end function ReaderView:PanningUpdate(dx, dy) - dbg("pan by", dx, dy) + logger.dbg("pan by", dx, dy) local old = self.visible_area:copy() self.visible_area:offsetWithin(self.page_area, dx, dy) if self.visible_area ~= old then -- flag a repaint UIManager:setDirty(self.dialog, "partial") - dbg("on pan: page_area", self.page_area) - dbg("on pan: visible_area", self.visible_area) + logger.dbg("on pan: page_area", self.page_area) + logger.dbg("on pan: visible_area", self.visible_area) self.ui:handleEvent( Event:new("ViewRecalculate", self.visible_area, self.page_area)) end @@ -571,7 +571,7 @@ function ReaderView:PanningUpdate(dx, dy) end function ReaderView:PanningStart(x, y) - dbg("panning start", x, y) + logger.dbg("panning start", x, y) if not self.panning_visible_area then self.panning_visible_area = self.visible_area:copy() end @@ -650,7 +650,6 @@ function ReaderView:onSetDimensions(dimensions) end function ReaderView:onRestoreDimensions(dimensions) - --dbg("restore dimen", dimensions) self:resetLayout() self.dimen = dimensions -- recalculate view diff --git a/frontend/apps/reader/modules/readerwikipedia.lua b/frontend/apps/reader/modules/readerwikipedia.lua index b74f9b3c9..0e22042c0 100644 --- a/frontend/apps/reader/modules/readerwikipedia.lua +++ b/frontend/apps/reader/modules/readerwikipedia.lua @@ -1,7 +1,7 @@ local ReaderDictionary = require("apps/reader/modules/readerdictionary") local Translator = require("ui/translator") local Wikipedia = require("ui/wikipedia") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local T = require("ffi/util").template @@ -77,14 +77,14 @@ function ReaderWikipedia:onLookupWikipedia(word, box, get_fullpage) self:initLanguages(word) -- use first lang from self.wiki_languages, which may have been rotated by DictQuickLookup local lang = self.wiki_languages[1] - DEBUG("lookup word:", word, box, get_fullpage) + logger.dbg("lookup word:", word, box, get_fullpage) -- no need to clean word if get_fullpage, as it is the exact wikipetia page title if word and not get_fullpage then -- escape quotes and other funny characters in word word = self:cleanSelection(word) -- no need to lower() word with wikipedia search end - DEBUG("stripped word:", word) + logger.dbg("stripped word:", word) if word == "" then return end @@ -128,9 +128,9 @@ function ReaderWikipedia:onLookupWikipedia(word, box, get_fullpage) } table.insert(results, result) end - DEBUG("lookup result:", word, results) + logger.dbg("lookup result:", word, results) else - DEBUG("error:", pages) + logger.dbg("error:", pages) -- dummy results results = { { @@ -140,7 +140,7 @@ function ReaderWikipedia:onLookupWikipedia(word, box, get_fullpage) is_fullpage = get_fullpage, } } - DEBUG("dummy result table:", word, results) + logger.dbg("dummy result table:", word, results) end self:onLookupDone() self:showDict(word, results, box) diff --git a/frontend/apps/reader/modules/readerzooming.lua b/frontend/apps/reader/modules/readerzooming.lua index baca0919a..94934ba24 100644 --- a/frontend/apps/reader/modules/readerzooming.lua +++ b/frontend/apps/reader/modules/readerzooming.lua @@ -7,7 +7,7 @@ local Input = require("device").input local Screen = require("device").screen local Geom = require("ui/geometry") local Event = require("ui/event") -local DEBUG = require("dbg") +local logger = require("logger") local T = require("ffi/util").template local _ = require("gettext") @@ -143,7 +143,7 @@ function ReaderZooming:onToggleFreeZoom(arg, ges) self.orig_zoom = self.zoom local xpos, ypos self.zoom, xpos, ypos = self:getRegionalZoomCenter(self.current_page, ges.pos) - DEBUG("zoom center", self.zoom, xpos, ypos) + logger.info("zoom center", self.zoom, xpos, ypos) self.ui:handleEvent(Event:new("SetZoomMode", "free")) if xpos == nil or ypos == nil then xpos = ges.pos.x * self.zoom / self.orig_zoom @@ -173,13 +173,13 @@ function ReaderZooming:onRotationUpdate(rotation) end function ReaderZooming:onZoom(direction) - DEBUG("zoom", direction) + logger.info("zoom", direction) if direction == "in" then self.zoom = self.zoom * 1.333333 elseif direction == "out" then self.zoom = self.zoom * 0.75 end - DEBUG("zoom is now at", self.zoom) + logger.info("zoom is now at", self.zoom) self:onSetZoomMode("free") self.view:onZoomUpdate(self.zoom) return true @@ -188,7 +188,7 @@ end function ReaderZooming:onSetZoomMode(new_mode) self.view.zoom_mode = new_mode if self.zoom_mode ~= new_mode then - DEBUG("setting zoom mode to", new_mode) + logger.info("setting zoom mode to", new_mode) self.ui:handleEvent(Event:new("ZoomModeUpdate", new_mode)) self.zoom_mode = new_mode self:setZoom() diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index 46735a948..8b4c6f2f8 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -12,7 +12,7 @@ local Device = require("device") local Screen = require("device").screen local Event = require("ui/event") local Cache = require("cache") -local dbg = require("dbg") +local logger = require("logger") local T = require("ffi/util").template local _ = require("gettext") @@ -309,7 +309,7 @@ function ReaderUI:init() }) -- koreader plugins for _,plugin_module in ipairs(PluginLoader:loadPlugins()) do - dbg("Loaded plugin", plugin_module.name, "at", plugin_module.path) + logger.info("RD loaded plugin", plugin_module.name, "at", plugin_module.path) self:registerModule(plugin_module.name, plugin_module:new{ dialog = self.dialog, view = self.view, @@ -332,7 +332,7 @@ function ReaderUI:init() end function ReaderUI:showReader(file) - dbg("show reader ui") + logger.dbg("show reader ui") require("readhistory"):addItem(file) if lfs.attributes(file, "mode") ~= "file" then UIManager:show(InfoMessage:new{ @@ -347,7 +347,7 @@ function ReaderUI:showReader(file) -- doShowReader might block for a long time, so force repaint here UIManager:forceRePaint() UIManager:nextTick(function() - dbg("creating coroutine for showing reader") + logger.dbg("creating coroutine for showing reader") local co = coroutine.create(function() self:doShowReader(file) end) @@ -362,7 +362,7 @@ end local _running_instance = nil function ReaderUI:doShowReader(file) - dbg("opening file", file) + logger.info("opening file", file) -- keep only one instance running if _running_instance then _running_instance:onClose() @@ -375,7 +375,7 @@ function ReaderUI:doShowReader(file) return end if document.is_locked then - dbg("document is locked") + logger.info("document is locked") self._coroutine = coroutine.running() or self._coroutine self:unlockDocumentWithPassword(document) if coroutine.running() then @@ -400,7 +400,7 @@ function ReaderUI:_getRunningInstance() end function ReaderUI:unlockDocumentWithPassword(document, try_again) - dbg("show input password dialog") + logger.dbg("show input password dialog") self.password_dialog = InputDialog:new{ title = try_again and _("Password is incorrect, try again?") or _("Input document password"), @@ -495,10 +495,10 @@ function ReaderUI:notifyCloseDocument() end function ReaderUI:onClose() - dbg("closing reader") + logger.dbg("closing reader") self:saveSettings() if self.document ~= nil then - dbg("closing document") + logger.dbg("closing document") self:notifyCloseDocument() end UIManager:close(self.dialog, "full") diff --git a/frontend/cache.lua b/frontend/cache.lua index 263bc305f..f648a2df6 100644 --- a/frontend/cache.lua +++ b/frontend/cache.lua @@ -4,7 +4,7 @@ A global LRU cache local md5 = require("ffi/MD5") local lfs = require("libs/libkoreader-lfs") local DataStorage = require("datastorage") -local DEBUG = require("dbg") +local logger = require("logger") if require("device"):isAndroid() then require("jit").off(true, true) @@ -99,7 +99,7 @@ function Cache:insert(key, object) self:drop(key) -- guarantee that we have enough memory in cache if (object.size > self.max_memsize) then - DEBUG("too much memory claimed for", key) + logger.warn("too much memory claimed for", key) return end -- delete objects that least recently used @@ -135,7 +135,7 @@ function Cache:check(key, ItemClass) self:insert(key, item) return item else - DEBUG("discard cache", msg) + logger.warn("discard cache", msg) end end end @@ -163,7 +163,7 @@ function Cache:serialize() local cache_item = self.cache[key] -- only dump cache item that requests serialization explicitly if cache_item.persistent and cache_item.dump then - DEBUG("dump cache item", key) + logger.dbg("dump cache item", key) cache_size = cache_item:dump(cache_path..md5.sum(key)) or 0 if cache_size > 0 then break end end diff --git a/frontend/dbg.lua b/frontend/dbg.lua index 961537250..3b05bbc94 100644 --- a/frontend/dbg.lua +++ b/frontend/dbg.lua @@ -1,3 +1,4 @@ +local logger = require("logger") local dump = require("dump") local isAndroid, android = pcall(require, "android") @@ -30,6 +31,7 @@ end function Dbg:turnOn() if self.is_on == true then return end self.is_on = true + logger:setLevel(logger.levels.dbg) Dbg_mt.__call = function(dbg, ...) LvDEBUG(math.huge, ...) end Dbg.guard = function(_, mod, method, pre_guard, post_guard) @@ -53,6 +55,7 @@ end function Dbg:turnOff() if self.is_on == false then return end self.is_on = false + logger:setLevel(logger.levels.info) function Dbg_mt.__call() end function Dbg.guard() end if self.ev_log then diff --git a/frontend/device/android/device.lua b/frontend/device/android/device.lua index b94f4d5cb..a90bcff2c 100644 --- a/frontend/device/android/device.lua +++ b/frontend/device/android/device.lua @@ -1,7 +1,7 @@ local Generic = require("device/generic/device") local _, android = pcall(require, "android") local ffi = require("ffi") -local DEBUG = require("dbg") +local logger = require("logger") local function yes() return true end local function no() return false end @@ -17,13 +17,13 @@ local Device = Generic:new{ } function Device:init() - self.screen = require("ffi/framebuffer_android"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_android"):new{device = self, debug = logger.dbg} self.powerd = require("device/android/powerd"):new{device = self} self.input = require("device/input"):new{ device = self, event_map = require("device/android/event_map"), handleMiscEv = function(this, ev) - DEBUG("Android application event", ev.code) + logger.dbg("Android application event", ev.code) if ev.code == ffi.C.APP_CMD_SAVE_STATE then return "SaveState" elseif ev.code == ffi.C.APP_CMD_GAINED_FOCUS then diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index 17fa2a01a..d05e00185 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -1,5 +1,5 @@ local Event = require("ui/event") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local function yes() return true end @@ -60,8 +60,8 @@ function Device:init() local is_eink = G_reader_settings:readSetting("eink") self.screen.eink = (is_eink == nil) or is_eink - DEBUG("initializing for device", self.model) - DEBUG("framebuffer resolution:", self.screen:getSize()) + logger.info("initializing for device", self.model) + logger.info("framebuffer resolution:", self.screen:getSize()) if not self.input then self.input = require("device/input"):new{device = self} @@ -71,7 +71,7 @@ function Device:init() end if self.viewport then - DEBUG("setting a viewport:", self.viewport) + logger.dbg("setting a viewport:", self.viewport) self.screen:setViewport(self.viewport) self.input:registerEventAdjustHook( self.input.adjustTouchTranslate, @@ -97,7 +97,7 @@ function Device:onPowerEvent(ev) -- don't let power key press wake up device when the cover is in closed state self:rescheduleSuspend() else - DEBUG("Resuming...") + logger.dbg("Resuming...") local UIManager = require("ui/uimanager") UIManager:unschedule(self.suspend) local network_manager = require("ui/network/manager") @@ -119,7 +119,7 @@ function Device:onPowerEvent(ev) -- Already in screen saver mode, no need to update UI/state before -- suspending the hardware. This usually happens when sleep cover -- is closed after the device was sent to suspend state. - DEBUG("Already in screen saver mode, suspending...") + logger.dbg("Already in screen saver mode, suspending...") self:rescheduleSuspend() end -- else we we not in screensaver mode @@ -134,7 +134,7 @@ function Device:onPowerEvent(ev) -- flushing settings first in case the screensaver takes too long time -- that flushing has no chance to run UIManager:broadcastEvent(Event:new("FlushSettings")) - DEBUG("Suspending...") + logger.dbg("Suspending...") -- always suspend in portrait mode self.orig_rotation_mode = self.screen:getRotationMode() self.screen:setRotationMode(0) diff --git a/frontend/device/generic/powerd.lua b/frontend/device/generic/powerd.lua index efb03a512..6a6e52a41 100644 --- a/frontend/device/generic/powerd.lua +++ b/frontend/device/generic/powerd.lua @@ -1,4 +1,4 @@ -local DEBUG = require("dbg") +local logger = require("logger") local BasePowerD = { fl_min = 0, -- min frontlight intensity @@ -61,7 +61,7 @@ end function BasePowerD:setIntensity(intensity) if intensity == self.fl_intensity then return end self.fl_intensity = self:normalizeIntensity(intensity) - DEBUG("set light intensity", self.fl_intensity) + logger.dbg("set light intensity", self.fl_intensity) self:setIntensityHW() end diff --git a/frontend/device/gesturedetector.lua b/frontend/device/gesturedetector.lua index 9ff212ff4..25fdec3f2 100644 --- a/frontend/device/gesturedetector.lua +++ b/frontend/device/gesturedetector.lua @@ -1,6 +1,6 @@ local Geom = require("ui/geometry") local TimeVal = require("ui/timeval") -local DEBUG = require("dbg") +local logger = require("logger") --[[ Current detectable gestures: @@ -92,7 +92,6 @@ function GestureDetector:feedEvent(tevs) repeat local tev = table.remove(tevs) if tev then - --DEBUG("tev fed|",tev.timev.sec,"|",tev.timev.usec,"|",tev.x,"|",tev.y,"|",tev.id,"| Evt",tev.slot) local slot = tev.slot if not self.states[slot] then self:clearState(slot) -- initiate state @@ -241,7 +240,7 @@ end this method handles both single and double tap --]] function GestureDetector:tapState(tev) - DEBUG("in tap state...") + logger.dbg("in tap state...") local slot = tev.slot if tev.id == -1 then -- end of tap event @@ -258,7 +257,7 @@ function GestureDetector:tapState(tev) w = 0, h = 0, } local tap_span = pos0:distance(pos1) - DEBUG("two-finger tap detected with span", tap_span) + logger.dbg("two-finger tap detected with span", tap_span) self:clearStates() return { ges = "two_finger_tap", @@ -314,27 +313,27 @@ function GestureDetector:handleDoubleTap(tev) self:clearState(slot) ges_ev.ges = "double_tap" self.last_taps[slot] = nil - DEBUG("double tap detected in slot", slot) + logger.dbg("double tap detected in slot", slot) return ges_ev end -- set current tap to last tap self.last_taps[slot] = cur_tap - DEBUG("set up tap timer") + logger.dbg("set up tap timer") -- deadline should be calculated by adding current tap time and the interval local deadline = cur_tap.timev + TimeVal:new{ sec = 0, usec = not self.input.disable_double_tap and self.DOUBLE_TAP_INTERVAL or 0, } self.input:setTimeout(function() - DEBUG("in tap timer", self.last_taps[slot] ~= nil) + logger.dbg("in tap timer", self.last_taps[slot] ~= nil) -- double tap will set last_tap to nil so if it is not, then -- user must only tapped once if self.last_taps[slot] ~= nil then self.last_taps[slot] = nil -- we are using closure here - DEBUG("single tap detected in slot", slot, ges_ev.pos) + logger.dbg("single tap detected in slot", slot, ges_ev.pos) return ges_ev end end, deadline) @@ -349,18 +348,17 @@ function GestureDetector:handleNonTap(tev) -- switched from other state, probably from initialState -- we return nil in this case self.states[slot] = self.tapState - DEBUG("set up hold timer") + logger.dbg("set up hold timer") local deadline = tev.timev + TimeVal:new{ sec = 0, usec = self.HOLD_INTERVAL } self.input:setTimeout(function() if self.states[slot] == self.tapState then -- timer set in tapState, so we switch to hold - DEBUG("hold gesture detected in slot", slot) + logger.dbg("hold gesture detected in slot", slot) return self:switchState("holdState", tev, true) end end, deadline) - --DEBUG("handle non-tap", tev) return { ges = "touch", pos = Geom:new{ @@ -383,7 +381,7 @@ function GestureDetector:handleNonTap(tev) end function GestureDetector:panState(tev) - DEBUG("in pan state...") + logger.dbg("in pan state...") local slot = tev.slot if tev.id == -1 then -- end of pan, signal swipe gesture if necessary @@ -399,7 +397,7 @@ function GestureDetector:panState(tev) elseif ges_ev.ges == "outward_pan" then ges_ev.ges = "spread" end - DEBUG(ges_ev.ges, ges_ev.direction, ges_ev.distance, "detected") + logger.dbg(ges_ev.ges, ges_ev.direction, ges_ev.distance, "detected") end return ges_ev else @@ -430,7 +428,7 @@ function GestureDetector:handleSwipe(tev) elseif swipe_direction == "east" and DCHANGE_EAST_SWIPE_TO_WEST then swipe_direction = "west" end - DEBUG("swipe", swipe_direction, swipe_distance, "detected in slot", slot) + logger.dbg("swipe", swipe_direction, swipe_distance, "detected in slot", slot) self:clearState(slot) return { ges = "swipe", @@ -467,7 +465,6 @@ function GestureDetector:handlePan(tev) y = self.last_tevs[slot].y, w = 0, h = 0, } - --DEBUG(pan_ev.ges, pan_ev, "detected") return pan_ev end end @@ -518,11 +515,11 @@ function GestureDetector:handleTwoFingerPan(tev) end ges_ev.direction = self.DIRECTION_TABLE[tpan_dir] end - DEBUG(ges_ev.ges, ges_ev.direction, ges_ev.distance, "detected") + logger.dbg(ges_ev.ges, ges_ev.direction, ges_ev.distance, "detected") return ges_ev elseif self.states[rslot] == self.holdState then local angle = self:getRotate(rstart_pos, tstart_pos, tend_pos) - DEBUG("rotate", angle, "detected") + logger.dbg("rotate", angle, "detected") return { ges = "rotate", pos = rstart_pos, @@ -545,18 +542,18 @@ function GestureDetector:handlePanRelease(tev) time = tev.timev, } if self.detectings[0] and self.detectings[1] then - DEBUG("two finger pan release detected") + logger.dbg("two finger pan release detected") pan_ev.ges = "two_finger_pan_release" self:clearStates() else - DEBUG("pan release detected in slot", slot) + logger.dbg("pan release detected in slot", slot) self:clearState(slot) end return pan_ev end function GestureDetector:holdState(tev, hold) - DEBUG("in hold state...") + logger.dbg("in hold state...") local slot = tev.slot -- when we switch to hold state, we pass additional param "hold" if tev.id ~= -1 and hold and self.last_tevs[slot].x and self.last_tevs[slot].y then @@ -572,7 +569,7 @@ function GestureDetector:holdState(tev, hold) } elseif tev.id == -1 and self.last_tevs[slot] ~= nil then -- end of hold, signal hold release - DEBUG("hold_release detected in slot", slot) + logger.dbg("hold_release detected in slot", slot) local last_x = self.last_tevs[slot].x local last_y = self.last_tevs[slot].y self:clearState(slot) diff --git a/frontend/device/input.lua b/frontend/device/input.lua index b5b3979ec..d2a001fe1 100644 --- a/frontend/device/input.lua +++ b/frontend/device/input.lua @@ -2,6 +2,7 @@ local Event = require("ui/event") local TimeVal = require("ui/timeval") local input = require("ffi/input") local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local Key = require("device/key") local GestureDetector = require("device/gesturedetector") @@ -145,10 +146,10 @@ function Input:init() -- user custom event map local ok, custom_event_map = pcall(dofile, "custom.event.map.lua") if ok then - DEBUG("custom event map", custom_event_map) for key, value in pairs(custom_event_map) do self.event_map[key] = value end + logger.info("loaded custom event map", custom_event_map) end end @@ -386,7 +387,6 @@ function Input:handleTouchEv(ev) local touch_ges = self.gesture_detector:feedEvent(self.MTSlots) self.MTSlots = {} if touch_ges then - --DEBUG("ges", touch_ges) self:gestureAdjustHook(touch_ges) return Event:new("Gesture", self.gesture_detector:adjustGesCoordinate(touch_ges) @@ -483,10 +483,6 @@ function Input:handleOasisOrientationEv(ev) local old_rotation_mode = self.device.screen:getRotationMode() local old_screen_mode = self.device.screen:getScreenMode() - DEBUG:v("old_rotation_mode: ", old_rotation_mode) - DEBUG:v("new_rotation_mode: ", rotation_mode) - DEBUG:v("old_screen_mode: ", old_screen_mode) - DEBUG:v("new_screen_mode: ", screen_mode) if rotation_mode ~= old_rotation_mode and screen_mode == old_screen_mode then self.device.screen:setRotationMode(rotation_mode) local UIManager = require("ui/uimanager") @@ -588,7 +584,7 @@ function Input:waitEvent(timeout_us) -- TODO: return an event that can be handled os.exit(0) end - --DEBUG("got error waiting for events:", ev) + logger.warn("got error waiting for events:", ev) if ev ~= "Waiting for input failed: 4\n" then -- we only abort if the error is not EINTR break @@ -598,11 +594,11 @@ function Input:waitEvent(timeout_us) if ok and ev then if DEBUG.is_on and ev then DEBUG:logEv(ev) - DEBUG:v("ev", ev) + logger.dbg("ev", ev) end self:eventAdjustHook(ev) if ev.type == EV_KEY then - DEBUG("key ev", ev) + logger.dbg("key ev", ev) return self:handleKeyBoardEv(ev) elseif ev.type == EV_ABS and ev.code == ABS_OASIS_ORIENTATION then return self:handleOasisOrientationEv(ev) diff --git a/frontend/device/kindle/device.lua b/frontend/device/kindle/device.lua index 2dae3e24b..75b32f174 100644 --- a/frontend/device/kindle/device.lua +++ b/frontend/device/kindle/device.lua @@ -1,7 +1,7 @@ local Generic = require("device/generic/device") local util = require("ffi/util") local Event = require("ui/event") -local DEBUG = require("dbg") +local logger = require("logger") local function yes() return true end local function no() return false end -- luacheck: ignore @@ -189,7 +189,7 @@ local KindleBasic2 = Kindle:new{ } function Kindle2:init() - self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, is_charging_file = "/sys/devices/platform/charger/charging", @@ -204,7 +204,7 @@ function Kindle2:init() end function KindleDXG:init() - self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, is_charging_file = "/sys/devices/platform/charger/charging", @@ -220,7 +220,7 @@ function KindleDXG:init() end function Kindle3:init() - self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, batt_capacity_file = "/sys/devices/system/luigi_battery/luigi_battery0/battery_capacity", @@ -237,7 +237,7 @@ function Kindle3:init() end function Kindle4:init() - self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_einkfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, batt_capacity_file = "/sys/devices/system/yoshi_battery/yoshi_battery0/battery_capacity", @@ -258,7 +258,7 @@ local ABS_MT_POSITION_X = 53 local ABS_MT_POSITION_Y = 54 -- luacheck: pop function KindleTouch:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, batt_capacity_file = "/sys/devices/system/yoshi_battery/yoshi_battery0/battery_capacity", @@ -282,7 +282,7 @@ function KindleTouch:init() end function KindlePaperWhite:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, fl_intensity_file = "/sys/devices/system/fl_tps6116x/fl_tps6116x0/fl_intensity", @@ -297,7 +297,7 @@ function KindlePaperWhite:init() end function KindlePaperWhite2:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, fl_intensity_file = "/sys/class/backlight/max77696-bl/brightness", @@ -312,7 +312,7 @@ function KindlePaperWhite2:init() end function KindleBasic:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, batt_capacity_file = "/sys/devices/system/wario_battery/wario_battery0/battery_capacity", @@ -326,7 +326,7 @@ function KindleBasic:init() end function KindleVoyage:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, fl_intensity_file = "/sys/class/backlight/max77696-bl/brightness", @@ -378,7 +378,7 @@ function KindleVoyage:init() end function KindlePaperWhite3:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, fl_intensity_file = "/sys/class/backlight/max77696-bl/brightness", @@ -393,7 +393,7 @@ function KindlePaperWhite3:init() end function KindleOasis:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, fl_intensity_file = "/sys/class/backlight/max77696-bl/brightness", @@ -460,7 +460,7 @@ function KindleOasis:init() end function KindleBasic2:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kindle/powerd"):new{ device = self, batt_capacity_file = "/sys/class/power_supply/bd7181x_bat/capacity", @@ -480,12 +480,12 @@ local function isSpecialOffers() -- Look at the current blanket modules to see if the SO screensavers are enabled... local lipc = require("liblipclua") if not lipc then - DEBUG("could not load liblibclua") + logger.warn("could not load liblibclua") return false end local lipc_handle = lipc.init("com.github.koreader.device") if not lipc_handle then - DEBUG("could not get lipc handle") + logger.warn("could not get lipc handle") return false end local so = false diff --git a/frontend/device/kobo/device.lua b/frontend/device/kobo/device.lua index 3badeff03..c9e24be74 100644 --- a/frontend/device/kobo/device.lua +++ b/frontend/device/kobo/device.lua @@ -1,8 +1,9 @@ local Generic = require("device/generic/device") local TimeVal = require("ui/timeval") local Geom = require("ui/geometry") -local dbg = require("dbg") +local util = require("ffi/util") local _ = require("gettext") +local logger = require("logger") local function yes() return true end @@ -123,7 +124,7 @@ local KoboPika = Kobo:new{ } function Kobo:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = dbg} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/kobo/powerd"):new{device = self} self.input = require("device/input"):new{ device = self, @@ -320,16 +321,131 @@ function Kobo:getFirmwareVersion() end function Kobo:suspend() - dbg("Executing kobo suspend script...") - os.execute("./suspend.sh") - dbg("Returned from kobo suspend script.") + logger.info("Kobo Suspend: Going to sleep . . .") + local f, re, err_msg, err_code + -- NOTE: Sleep as little as possible here, sleeping has a tendency to make + -- everything mysteriously hang... + + -- Depending on device/FW version, some kernels do not support + -- wakeup_count, account for that + -- + -- NOTE: ... and of course, it appears to be broken, which probably + -- explains why nickel doesn't use this facility... + -- (By broken, I mean that the system wakes up right away). + -- So, unless that changes, unconditionally disable it. + + --[[ + + local has_wakeup_count = false + f = io.open("/sys/power/wakeup_count", "r") + if f ~= nil then + io.close(f) + has_wakeup_count = true + end + + -- Clear the kernel ring buffer... (we're missing a proper -C flag...) + --dmesg -c >/dev/null + + -- Go to sleep + local curr_wakeup_count + if has_wakeup_count then + curr_wakeup_count = "$(cat /sys/power/wakeup_count)" + logger.info("Kobo Suspend: Current WakeUp count:", curr_wakeup_count) + end + + -]] + + f = io.open("/sys/power/state-extended", "w") + if not f then + logger.err("Cannot open /sys/power/state-extended for writing!") + return false + end + -- NOTE: Sets gSleep_Mode_Suspend to 1. Used as a flag throughout the + -- kernel to suspend/resume various subsystems + -- cf. kernel/power/main.c @ L#207 + re, err_msg, err_code = f:write("1\n") + logger.info("Write syscall returned: ", re) + if not re then + logger.err('write error: ', err_msg, err_code) + end + io.close(f) + logger.info("Kobo Suspend: Asked the kernel to put subsystems to sleep") + + util.sleep(2) + logger.info("Kobo Suspend: Waited for 2s because of reasons...") + + os.execute("sync") + logger.info("Kobo Suspend: Synced FS") + + --[[ + + if has_wakeup_count then + f = io.open("/sys/power/wakeup_count", "w") + if not f then + logger.err("Cannot open /sys/power/wakeup_count") + return false + end + re, err_msg, err_code = f:write(tostring(curr_wakeup_count), "\n") + logger.info("Kobo Suspend: Wrote WakeUp count:", curr_wakeup_count) + if not re then + logger.err("Kobo Suspend: failed to write WakeUp count:", + err_msg, + err_code) + end + io.close(f) + end + + --]] + + logger.info("Kobo Suspend: Asking for a suspend to RAM . . .") + f = io.open("/sys/power/state", "w") + if not f then + -- TODO: update state-extended? + return false + end + re, err_msg, err_code = f:write("mem\n") + -- NOTE: At this point, we *should* be in suspend to RAM, as such, + -- execution should only resume on wakeup... + + logger.info("Kobo Suspend: ZzZ ZzZ ZzZ? Write syscall returned: ", re) + if not re then + logger.err('write error: ', err_msg, err_code) + end + io.close(f) + -- NOTE: Ideally, we'd need a way to warn the user that suspending + -- gloriously failed at this point... + -- We can safely assume that just from a non-zero return code, without + -- looking at the detailed stderr message + -- (most of the failures we'll see are -EBUSY anyway) + -- For reference, when that happens to nickel, it appears to keep retrying + -- to wakeup & sleep ad nauseam, + -- which is where the non-sensical 1 -> mem -> 0 loop idea comes from... + -- cf. nickel_suspend_strace.txt for more details. + + logger.info("Kobo Suspend: Woke up!") + + --[[ + + if has_wakeup_count then + logger.info("WakeUp count: $(cat /sys/power/wakeup_count)") + end + + -- Print tke kernel log since our attempt to sleep... + --dmesg -c + + --]] + + -- NOTE: We unflag /sys/power/state-extended in Kobo:resume() to keep + -- things tidy and easier to follow end function Kobo:resume() - -- Unflag subsystems for suspend + -- Now that we're up, unflag subsystems for suspend... os.execute("echo 0 > /sys/power/state-extended") - -- HACK: wait a bit for the kernel to catch up - os.execute("sleep 0.1") + logger.info("Kobo Suspend: Unflagged kernel subsystems for suspend") + + -- HACK: wait a bit (0.1 sec) for the kernel to catch up + util.usleep(100000) -- cf. #1862, I can reliably break IR touch input on resume... -- cf. also #1943 for the rationale behind applying this workaorund in every case... local f = io.open("/sys/devices/virtual/input/input1/neocmd", "r") diff --git a/frontend/device/pocketbook/device.lua b/frontend/device/pocketbook/device.lua index 1c94e86e7..4a89f876b 100644 --- a/frontend/device/pocketbook/device.lua +++ b/frontend/device/pocketbook/device.lua @@ -1,5 +1,5 @@ local Generic = require("device/generic/device") -- <= look at this file! -local DEBUG = require("dbg") +local logger = require("logger") -- luacheck: push -- luacheck: ignore @@ -51,7 +51,6 @@ local PocketBook = Generic:new{ function PocketBook:init() self.input:registerEventAdjustHook(function(_input, ev) - --DEBUG("ev", ev.type, ev.code, ev.value) if ev.type == EVT_KEYDOWN or ev.type == EVT_KEYUP then ev.code = ev.code ev.value = ev.type == EVT_KEYDOWN and 1 or 0 @@ -96,7 +95,7 @@ local PocketBook840 = PocketBook:new{ } function PocketBook840:init() - self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_mxcfb"):new{device = self, debug = logger.dbg} self.powerd = require("device/pocketbook/powerd"):new{device = self} self.input = require("device/input"):new{ device = self, diff --git a/frontend/device/sdl/device.lua b/frontend/device/sdl/device.lua index 93bb5ec9a..83adcd1d5 100644 --- a/frontend/device/sdl/device.lua +++ b/frontend/device/sdl/device.lua @@ -1,6 +1,6 @@ local Generic = require("device/generic/device") local util = require("ffi/util") -local DEBUG = require("dbg") +local logger = require("logger") local function yes() return true end local function no() return false end @@ -33,13 +33,13 @@ function Device:init() end if util.haveSDL2() then - self.screen = require("ffi/framebuffer_SDL2_0"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_SDL2_0"):new{device = self, debug = logger.dbg} self.input = require("device/input"):new{ device = self, event_map = require("device/sdl/event_map_sdl2"), } else - self.screen = require("ffi/framebuffer_SDL1_2"):new{device = self, debug = DEBUG} + self.screen = require("ffi/framebuffer_SDL1_2"):new{device = self, debug = logger.dbg} self.input = require("device/input"):new{ device = self, event_map = require("device/sdl/event_map_sdl"), diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index c3b1195bf..5662750b6 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -6,7 +6,7 @@ local DataStorage = require("datastorage") local Geom = require("ui/geometry") local Screen = require("device").screen local Font = require("ui/font") -local DEBUG = require("dbg") +local logger = require("logger") local ffi = require("ffi") local CreDocument = Document:new{ @@ -61,7 +61,7 @@ function CreDocument:engineInit() if not _v:find("/urw/") then local ok, err = pcall(cre.registerFont, _v) if not ok then - DEBUG(err) + logger.err("failed to register crengine font", err) end end end @@ -157,9 +157,9 @@ end function CreDocument:getWordFromPosition(pos) local word_box = self._document:getWordFromPosition(pos.x, pos.y) - DEBUG("CreDocument: get word box", word_box) + logger.dbg("CreDocument: get word box", word_box) local text_range = self._document:getTextFromPositions(pos.x, pos.y, pos.x, pos.y) - DEBUG("CreDocument: get text range", text_range) + logger.dbg("CreDocument: get text range", text_range) local wordbox = { word = text_range.text == "" and word_box.word or text_range.text, page = self._document:getCurrentPage(), @@ -182,7 +182,7 @@ end function CreDocument:getTextFromPositions(pos0, pos1) local text_range = self._document:getTextFromPositions(pos0.x, pos0.y, pos1.x, pos1.y) - DEBUG("CreDocument: get text range", text_range) + logger.dbg("CreDocument: get text range", text_range) if text_range then -- local line_boxes = self:getScreenBoxesFromPositions(text_range.pos0, text_range.pos1) return { @@ -198,7 +198,6 @@ function CreDocument:getScreenBoxesFromPositions(pos0, pos1) local line_boxes = {} if pos0 and pos1 then local word_boxes = self._document:getWordBoxesFromPositions(pos0, pos1) - -- DEBUG("word boxes", word_boxes) for i = 1, #word_boxes do local line_box = word_boxes[i] table.insert(line_boxes, Geom:new{ @@ -207,7 +206,6 @@ function CreDocument:getScreenBoxesFromPositions(pos0, pos1) h = line_box.y1 - line_box.y0, }) end - --DEBUG("line boxes", line_boxes) end return line_boxes end @@ -244,7 +242,7 @@ function CreDocument:renderPage(pageno, rect, zoom, rotation) end function CreDocument:gotoXPointer(xpointer) - DEBUG("CreDocument: goto xpointer", xpointer) + logger.dbg("CreDocument: goto xpointer", xpointer) self._document:gotoXPointer(xpointer) end @@ -277,27 +275,27 @@ function CreDocument:getLinkFromPosition(pos) end function Document:gotoPos(pos) - DEBUG("CreDocument: goto position", pos) + logger.dbg("CreDocument: goto position", pos) self._document:gotoPos(pos) end function CreDocument:gotoPage(page) - DEBUG("CreDocument: goto page", page) + logger.dbg("CreDocument: goto page", page) self._document:gotoPage(page) end function CreDocument:gotoLink(link) - DEBUG("CreDocument: goto link", link) + logger.dbg("CreDocument: goto link", link) self._document:gotoLink(link) end function CreDocument:goBack() - DEBUG("CreDocument: go back") + logger.dbg("CreDocument: go back") self._document:goBack() end function CreDocument:goForward(link) - DEBUG("CreDocument: go forward") + logger.dbg("CreDocument: go forward") self._document:goForward() end @@ -307,20 +305,20 @@ end function CreDocument:setFontFace(new_font_face) if new_font_face then - DEBUG("CreDocument: set font face", new_font_face) + logger.dbg("CreDocument: set font face", new_font_face) self._document:setStringProperty("font.face.default", new_font_face) end end function CreDocument:setHyphDictionary(new_hyph_dictionary) if new_hyph_dictionary then - DEBUG("CreDocument: set hyphenation dictionary", new_hyph_dictionary) + logger.dbg("CreDocument: set hyphenation dictionary", new_hyph_dictionary) self._document:setStringProperty("crengine.hyphenation.directory", new_hyph_dictionary) end end function CreDocument:clearSelection() - DEBUG("clear selection") + logger.dbg("clear selection") self._document:clearSelection() end @@ -330,14 +328,14 @@ end function CreDocument:setFontSize(new_font_size) if new_font_size then - DEBUG("CreDocument: set font size", new_font_size) + logger.dbg("CreDocument: set font size", new_font_size) self._document:setFontSize(new_font_size) end end function CreDocument:setViewMode(new_mode) if new_mode then - DEBUG("CreDocument: set view mode", new_mode) + logger.dbg("CreDocument: set view mode", new_mode) if new_mode == "scroll" then self._document:setViewMode(self.SCROLL_VIEW_MODE) else @@ -347,50 +345,50 @@ function CreDocument:setViewMode(new_mode) end function CreDocument:setViewDimen(dimen) - DEBUG("CreDocument: set view dimen", dimen) + logger.dbg("CreDocument: set view dimen", dimen) self._document:setViewDimen(dimen.w, dimen.h) end function CreDocument:setHeaderFont(new_font) if new_font then - DEBUG("CreDocument: set header font", new_font) + logger.dbg("CreDocument: set header font", new_font) self._document:setHeaderFont(new_font) end end function CreDocument:zoomFont(delta) - DEBUG("CreDocument: zoom font", delta) + logger.dbg("CreDocument: zoom font", delta) self._document:zoomFont(delta) end function CreDocument:setInterlineSpacePercent(percent) - DEBUG("CreDocument: set interline space", percent) + logger.dbg("CreDocument: set interline space", percent) self._document:setDefaultInterlineSpace(percent) end function CreDocument:toggleFontBolder(toggle) - DEBUG("CreDocument: toggle font bolder", toggle) + logger.dbg("CreDocument: toggle font bolder", toggle) self._document:setIntProperty("font.face.weight.embolden", toggle) end function CreDocument:setGammaIndex(index) - DEBUG("CreDocument: set gamma index", index) + logger.dbg("CreDocument: set gamma index", index) cre.setGammaIndex(index) end function CreDocument:setStyleSheet(new_css) - DEBUG("CreDocument: set style sheet", new_css) + logger.dbg("CreDocument: set style sheet", new_css) self._document:setStyleSheet(new_css) end function CreDocument:setEmbeddedStyleSheet(toggle) -- FIXME: occasional segmentation fault when switching embedded style sheet - DEBUG("CreDocument: set embedded style sheet", toggle) + logger.dbg("CreDocument: set embedded style sheet", toggle) self._document:setIntProperty("crengine.doc.embedded.styles.enabled", toggle) end function CreDocument:setPageMargins(left, top, right, bottom) - DEBUG("CreDocument: set page margins", left, top, right, bottom) + logger.dbg("CreDocument: set page margins", left, top, right, bottom) self._document:setIntProperty("crengine.page.margin.left", left) self._document:setIntProperty("crengine.page.margin.top", top) self._document:setIntProperty("crengine.page.margin.right", right) @@ -399,7 +397,7 @@ end function CreDocument:setFloatingPunctuation(enabled) -- FIXME: occasional segmentation fault when toggling floating punctuation - DEBUG("CreDocument: set floating punctuation", enabled) + logger.dbg("CreDocument: set floating punctuation", enabled) self._document:setIntProperty("crengine.style.floating.punctuation.enabled", enabled) end @@ -408,27 +406,27 @@ function CreDocument:getVisiblePageCount() end function CreDocument:setVisiblePageCount(new_count) - DEBUG("CreDocument: set visible page count", new_count) + logger.dbg("CreDocument: set visible page count", new_count) self._document:setVisiblePageCount(new_count) end function CreDocument:setBatteryState(state) - DEBUG("CreDocument: set battery state", state) + logger.dbg("CreDocument: set battery state", state) self._document:setBatteryState(state) end function CreDocument:isXPointerInCurrentPage(xp) - DEBUG("CreDocument: check xpointer in current page", xp) + logger.dbg("CreDocument: check xpointer in current page", xp) return self._document:isXPointerInCurrentPage(xp) end function CreDocument:setStatusLineProp(prop) - DEBUG("CreDocument: set status line property", prop) + logger.dbg("CreDocument: set status line property", prop) self._document:setStringProperty("window.status.line", prop) end function CreDocument:findText(pattern, origin, reverse, caseInsensitive) - DEBUG("CreDocument: find text", pattern, origin, reverse, caseInsensitive) + logger.dbg("CreDocument: find text", pattern, origin, reverse, caseInsensitive) return self._document:findText( pattern, origin, reverse, caseInsensitive and 1 or 0) end diff --git a/frontend/document/document.lua b/frontend/document/document.lua index 0e200e3fc..6c53a8b6b 100644 --- a/frontend/document/document.lua +++ b/frontend/document/document.lua @@ -7,7 +7,7 @@ local CacheItem = require("cacheitem") local Geom = require("ui/geometry") local Math = require("optmath") local Cache = require("cache") -local DEBUG = require("dbg") +local logger = require("logger") --[[ This is an abstract interface to a document @@ -177,36 +177,30 @@ function Document:getPageDimensions(pageno, zoom, rotation) native_dimen.w, native_dimen.h = native_dimen.h, native_dimen.w end native_dimen:scaleBy(zoom) - --DEBUG("dimen for pageno", pageno, "zoom", zoom, "rotation", rotation, "is", native_dimen) return native_dimen end function Document:getPageBBox(pageno) local bbox = self.bbox[pageno] -- exact if bbox ~= nil then - --DEBUG("bbox from", pageno) return bbox else local oddEven = Math.oddEven(pageno) bbox = self.bbox[oddEven] -- odd/even end if bbox ~= nil then -- last used up to this page - --DEBUG("bbox from", oddEven) return bbox else for i = 0,pageno do bbox = self.bbox[ pageno - i ] if bbox ~= nil then - --DEBUG("bbox from", pageno - i) return bbox end end end if bbox == nil then -- fallback bbox bbox = self:getUsedBBox(pageno) - --DEBUG("bbox from ORIGINAL page") end - --DEBUG("final bbox", bbox) return bbox end @@ -287,10 +281,10 @@ function Document:renderPage(pageno, rect, zoom, rotation, gamma, render_mode) -- we prefer to render the full page, if it fits into cache if not Cache:willAccept(size.w * size.h + 64) then -- whole page won't fit into cache - DEBUG("rendering only part of the page") + logger.dbg("rendering only part of the page") -- TODO: figure out how to better segment the page if not rect then - DEBUG("aborting, since we do not have a specification for that part") + logger.warn("aborting, since we do not have a specification for that part") -- required part not given, so abort return end @@ -323,7 +317,6 @@ function Document:renderPage(pageno, rect, zoom, rotation, gamma, render_mode) dc:setZoom(zoom) if gamma ~= self.GAMMA_NO_GAMMA then - --DEBUG("gamma correction: ", gamma) dc:setGamma(gamma) end @@ -339,7 +332,7 @@ end -- a hint for the cache engine to paint a full page to the cache -- TODO: this should trigger a background operation function Document:hintPage(pageno, zoom, rotation, gamma, render_mode) - DEBUG("hinting page", pageno) + logger.dbg("hinting page", pageno) self:renderPage(pageno, nil, zoom, rotation, gamma, render_mode) end @@ -353,7 +346,6 @@ Draw page content to blitbuffer. --]] function Document:drawPage(target, x, y, rect, pageno, zoom, rotation, gamma, render_mode) local tile = self:renderPage(pageno, rect, zoom, rotation, gamma, render_mode) - DEBUG:v("document drawing", tile, rect) target:blitFrom(tile.bb, x, y, rect.x - tile.excerpt.x, diff --git a/frontend/document/documentregistry.lua b/frontend/document/documentregistry.lua index 2e8c79fd6..711981122 100644 --- a/frontend/document/documentregistry.lua +++ b/frontend/document/documentregistry.lua @@ -1,4 +1,4 @@ -local DEBUG = require("dbg") +local logger = require("logger") --[[ This is a registry for document providers @@ -34,7 +34,7 @@ function DocumentRegistry:openDocument(file) refs = 1, } else - DEBUG("cannot open document", file, doc) + logger.warn("cannot open document", file, doc) end end else diff --git a/frontend/document/koptinterface.lua b/frontend/document/koptinterface.lua index 641071b68..a8deaadcb 100644 --- a/frontend/document/koptinterface.lua +++ b/frontend/document/koptinterface.lua @@ -8,6 +8,7 @@ local Geom = require("ui/geometry") local serial = require("serialize") local Cache = require("cache") local DEBUG = require("dbg") +local logger = require("logger") local util = require("ffi/util") local KoptInterface = { @@ -25,20 +26,20 @@ local ContextCacheItem = CacheItem:new{} function ContextCacheItem:onFree() if self.kctx.free then KoptInterface:waitForContext(self.kctx) - DEBUG("free koptcontext", self.kctx) + logger.dbg("free koptcontext", self.kctx) self.kctx:free() end end function ContextCacheItem:dump(filename) if self.kctx:isPreCache() == 0 then - DEBUG("dumping koptcontext to", filename) + logger.dbg("dumping koptcontext to", filename) return serial.dump(self.size, KOPTContext.totable(self.kctx), filename) end end function ContextCacheItem:load(filename) - DEBUG("loading koptcontext from", filename) + logger.dbg("loading koptcontext from", filename) local size, kc_table = serial.load(filename) self.size = size self.kctx = KOPTContext.fromtable(kc_table) @@ -48,7 +49,7 @@ local OCREngine = CacheItem:new{} function OCREngine:onFree() if self.ocrengine.freeOCR then - DEBUG("free OCREngine", self.ocrengine) + logger.dbg("free OCREngine", self.ocrengine) self.ocrengine:freeOCR() end end @@ -57,7 +58,7 @@ function KoptInterface:waitForContext(kc) -- if koptcontext is being processed in background thread -- the isPreCache will return 1. while kc and kc:isPreCache() == 1 do - DEBUG("waiting for background rendering") + logger.dbg("waiting for background rendering") util.usleep(100000) end return kc @@ -142,17 +143,13 @@ function KoptInterface:getAutoBBox(doc, pageno) if not cached then local page = doc._document:openPage(pageno) local kc = self:createContext(doc, pageno, bbox) - --DEBUGBT() - --DEBUG("getAutoBBox:native page size", native_size) page:getPagePix(kc) local x0, y0, x1, y1 = kc:getAutoBBox() local w, h = native_size.w, native_size.h if (x1 - x0)/w > 0.1 or (y1 - y0)/h > 0.1 then bbox.x0, bbox.y0, bbox.x1, bbox.y1 = x0, y0, x1, y1 - --DEBUG("getAutoBBox:auto detected bbox", bbox) else bbox = Document.getPageBBox(doc, pageno) - --DEBUG("getAutoBBox:use manual bbox", bbox) end Cache:insert(hash, CacheItem:new{ autobbox = bbox }) page:close() @@ -182,7 +179,7 @@ function KoptInterface:getSemiAutoBBox(doc, pageno) auto_bbox.y0 = auto_bbox.y0 + bbox.y0 auto_bbox.x1 = auto_bbox.x1 + bbox.x0 auto_bbox.y1 = auto_bbox.y1 + bbox.y0 - DEBUG("Semi-auto detected bbox", auto_bbox) + logger.dbg("Semi-auto detected bbox", auto_bbox) page:close() Cache:insert(hash, CacheItem:new{ semiautobbox = auto_bbox }) kc:free() @@ -206,17 +203,16 @@ function KoptInterface:getCachedContext(doc, pageno) -- If kctx is not cached, create one and get reflowed bmp in foreground. local kc = self:createContext(doc, pageno, bbox) local page = doc._document:openPage(pageno) - DEBUG("reflowing page", pageno, "in foreground") + logger.dbg("reflowing page", pageno, "in foreground") -- reflow page --local secs, usecs = util.gettime() page:reflow(kc, 0) page:close() --local nsecs, nusecs = util.gettime() --local dur = nsecs - secs + (nusecs - usecs) / 1000000 - --DEBUG("Reflow duration:", dur) --self:logReflowDuration(pageno, dur) local fullwidth, fullheight = kc:getPageDim() - DEBUG("reflowed page", pageno, "fullwidth:", fullwidth, "fullheight:", fullheight) + logger.dbg("reflowed page", pageno, "fullwidth:", fullwidth, "fullheight:", fullheight) self.last_context_size = fullwidth * fullheight + 128 -- estimation Cache:insert(kctx_hash, ContextCacheItem:new{ persistent = true, @@ -332,7 +328,7 @@ function KoptInterface:renderOptimizedPage(doc, pageno, rect, zoom, rotation, re kc:setZoom(zoom) page:getPagePix(kc) page:close() - DEBUG("optimizing page", pageno) + logger.dbg("optimizing page", pageno) kc:optimizePage() local fullwidth, fullheight = kc:getPageDim() -- prepare cache item with contained blitbuffer @@ -379,7 +375,7 @@ function KoptInterface:hintReflowedPage(doc, pageno, zoom, rotation, gamma, rend if not cached then local kc = self:createContext(doc, pageno, bbox) local page = doc._document:openPage(pageno) - DEBUG("hinting page", pageno, "in background") + logger.dbg("hinting page", pageno, "in background") -- reflow will return immediately and running in background thread kc:setPreCache() page:reflow(kc, 0) @@ -407,7 +403,6 @@ draw cached tile pixels into target blitbuffer. --]] function KoptInterface:drawContextPage(doc, target, x, y, rect, pageno, zoom, rotation, render_mode) local tile = self:renderPage(doc, pageno, rect, zoom, rotation, render_mode) - --DEBUG("now painting", tile, rect) target:blitFrom(tile.bb, x, y, rect.x - tile.excerpt.x, @@ -615,7 +610,7 @@ get word from OCR in native page function KoptInterface:getNativeOCRWord(doc, pageno, rect) self.ocr_lang = doc.configurable.doc_language local hash = "ocrword|"..doc.file.."|"..pageno..rect.x..rect.y..rect.w..rect.h - DEBUG("hash", hash) + logger.dbg("hash", hash) local cached = Cache:check(hash) if not cached then local bbox = { @@ -630,13 +625,12 @@ function KoptInterface:getNativeOCRWord(doc, pageno, rect) page:getPagePix(kc) --kc:exportSrcPNGFile({rect}, nil, "ocr-word.png") local word_w, word_h = kc:getPageDim() - --DEBUG(word_w, word_h) local _, word = pcall( kc.getTOCRWord, kc, "src", 0, 0, word_w, word_h, self.tessocr_data, self.ocr_lang, self.ocr_type, 0, 1) Cache:insert(hash, CacheItem:new{ ocrword = word }) - DEBUG("word", word) + logger.dbg("word", word) page:close() kc:free() return word @@ -652,7 +646,7 @@ function KoptInterface:getOCRText(doc, pageno, tboxes) if not Cache:check(self.ocrengine) then Cache:insert(self.ocrengine, OCREngine:new{ ocrengine = KOPTContext.new() }) end - DEBUG("Not implemented yet") + logger.info("Not implemented yet") end function KoptInterface:getClipPageContext(doc, pos0, pos1, pboxes, drawer) @@ -869,16 +863,12 @@ function KoptInterface:getWordFromReflowPosition(doc, boxes, pos) local scratch_reflowed_page_boxes = self:getReflowedTextBoxesFromScratch(doc, pageno) local scratch_reflowed_word_box = self:getWordFromBoxes(scratch_reflowed_page_boxes, pos) - --DEBUG("word box from scratch", scratch_reflowed_word_box) local reflowed_page_boxes = self:getReflowedTextBoxes(doc, pageno) local reflowed_word_box = self:getWordFromBoxes(reflowed_page_boxes, pos) - --DEBUG("word box from reflow", reflowed_word_box) local reflowed_pos_abs = scratch_reflowed_word_box.box:center() local reflowed_pos_rel = getBoxRelativePosition(scratch_reflowed_word_box.box, reflowed_word_box.box) - --DEBUG("word box absolote center", reflowed_pos_abs) - --DEBUG("word box relative center", reflowed_pos_rel) local native_pos = self:reflowToNativePosTransform(doc, pageno, reflowed_pos_abs, reflowed_pos_rel) local native_word_box = self:getWordFromBoxes(boxes, native_pos) @@ -946,10 +936,8 @@ transform position in native page to reflowed page ]]-- function KoptInterface:nativeToReflowPosTransform(doc, pageno, pos) local kc = self:getCachedContext(doc, pageno) - --DEBUG("transform native pos", pos) local rpos = {} rpos.x, rpos.y = kc:nativeToReflowPosTransform(pos.x, pos.y) - --DEBUG("transformed reflowed pos", rpos) return rpos end @@ -958,11 +946,8 @@ transform position in reflowed page to native page ]]-- function KoptInterface:reflowToNativePosTransform(doc, pageno, abs_pos, rel_pos) local kc = self:getCachedContext(doc, pageno) - --kc:setDebug() - --DEBUG("transform reflowed pos", abs_pos, rel_pos) local npos = {} npos.x, npos.y = kc:reflowToNativePosTransform(abs_pos.x, abs_pos.y, rel_pos.x, rel_pos.y) - --DEBUG("transformed native pos", npos) return npos end @@ -998,12 +983,9 @@ function KoptInterface:getTextFromReflowPositions(doc, native_boxes, pos0, pos1) local reflowed_pos_rel0 = getBoxRelativePosition(scratch_reflowed_word_box0.box, reflowed_word_box0.box) local reflowed_pos_abs1 = scratch_reflowed_word_box1.box:center() local reflowed_pos_rel1 = getBoxRelativePosition(scratch_reflowed_word_box1.box, reflowed_word_box1.box) - --DEBUG("absolute positions", reflowed_pos_abs0, reflowed_pos_abs1) - --DEBUG("relative positions", reflowed_pos_rel0, reflowed_pos_rel1) local native_pos0 = self:reflowToNativePosTransform(doc, pageno, reflowed_pos_abs0, reflowed_pos_rel0) local native_pos1 = self:reflowToNativePosTransform(doc, pageno, reflowed_pos_abs1, reflowed_pos_rel1) - --DEBUG("native positions", native_pos0, native_pos1) local reflowed_text_boxes = self:getTextFromBoxes(reflowed_page_boxes, pos0, pos1) local native_text_boxes = self:getTextFromBoxes(native_boxes, native_pos0, native_pos1) @@ -1127,7 +1109,6 @@ end function KoptInterface:findAllMatches(doc, pattern, caseInsensitive, page) local text_boxes = doc:getPageTextBoxes(page) if not text_boxes then return end - --DEBUG("boxes", text_boxes) local matches = {} for indices in all_matches(text_boxes or {}, pattern, caseInsensitive) do for _, index in ipairs(indices) do @@ -1146,7 +1127,7 @@ function KoptInterface:findAllMatches(doc, pattern, caseInsensitive, page) end function KoptInterface:findText(doc, pattern, origin, reverse, caseInsensitive, pageno) - DEBUG("Koptinterface: find text", pattern, origin, reverse, caseInsensitive, pageno) + logger.dbg("Koptinterface: find text", pattern, origin, reverse, caseInsensitive, pageno) local last_pageno = doc:getPageCount() local start_page, end_page if reverse == 1 then diff --git a/frontend/document/pdfdocument.lua b/frontend/document/pdfdocument.lua index 09b6f8f74..993f6f123 100644 --- a/frontend/document/pdfdocument.lua +++ b/frontend/document/pdfdocument.lua @@ -3,7 +3,7 @@ local CacheItem = require("cacheitem") local KoptOptions = require("ui/data/koptoptions") local Document = require("document/document") local DrawContext = require("ffi/drawcontext") -local DEBUG = require("dbg") +local logger = require("logger") local util = require("util") local PdfDocument = Document:new{ @@ -150,7 +150,7 @@ function PdfDocument:saveHighlight(pageno, item) end function PdfDocument:writeDocument() - DEBUG("writing document to", self.file) + logger.info("writing document to", self.file) self._document:writeDocument(self.file) end diff --git a/frontend/document/tilecacheitem.lua b/frontend/document/tilecacheitem.lua index a3c2b38f7..508f8326b 100644 --- a/frontend/document/tilecacheitem.lua +++ b/frontend/document/tilecacheitem.lua @@ -1,19 +1,19 @@ local Blitbuffer = require("ffi/blitbuffer") local CacheItem = require("cacheitem") local serial = require("serialize") -local DEBUG = require("dbg") +local logger = require("logger") local TileCacheItem = CacheItem:new{} function TileCacheItem:onFree() if self.bb.free then - DEBUG("free blitbuffer", self.bb) + logger.dbg("free blitbuffer", self.bb) self.bb:free() end end function TileCacheItem:dump(filename) - DEBUG("dumping tile cache to", filename, self.excerpt) + logger.dbg("dumping tile cache to", filename, self.excerpt) return serial.dump(self.size, self.excerpt, self.pageno, self.bb.w, self.bb.h, self.bb.pitch, self.bb:getType(), Blitbuffer.tostring(self.bb), filename) @@ -24,7 +24,7 @@ function TileCacheItem:load(filename) self.size, self.excerpt, self.pageno, w, h, pitch, bb_type, bb_data = serial.load(filename) self.bb = Blitbuffer.fromstring(w, h, bb_type, bb_data, pitch) - DEBUG("loading tile cache from", filename, self) + logger.dbg("loading tile cache from", filename, self) end return TileCacheItem diff --git a/frontend/gettext.lua b/frontend/gettext.lua index cd52a7024..5ca561c40 100644 --- a/frontend/gettext.lua +++ b/frontend/gettext.lua @@ -1,5 +1,5 @@ local isAndroid, android = pcall(require, "android") -local DEBUG = require("dbg") +local logger = require("logger") local GetText = { translation = {}, @@ -49,7 +49,7 @@ function GetText_mt.__index.changeLang(new_lang) local po = io.open(file, "r") if not po then - DEBUG("cannot open translation file " .. file) + logger.err("cannot open translation file:", file) return end diff --git a/frontend/logger.lua b/frontend/logger.lua new file mode 100644 index 000000000..e250e05bf --- /dev/null +++ b/frontend/logger.lua @@ -0,0 +1,88 @@ +--[[-- +Logger module. +See @{Logger.levels} for list of supported levels. + +Example: + + local logger = require("logger") + logger.info("Something happened.") + logger.err("House is on fire!") +]] + +local dump = require("dump") +local isAndroid, android = pcall(require, "android") + +local DEFAULT_DUMP_LVL = 10 + +--- Supported logging levels +-- @table Logger.levels +-- @field dbg debug +-- @field info informational (default level) +-- @field warn warning +-- @field err error +local LOG_LVL = { + dbg = 1, + info = 2, + warn = 3, + err = 4, +} + +local LOG_PREFIX = { + dbg = 'DEBUG', + info = 'INFO ', + warn = 'WARN ', + err = 'ERROR', +} + +local noop = function() end + +local Logger = { + levels = LOG_LVL, +} + +local function log(log_lvl, dump_lvl, ...) + local line = "" + for i,v in ipairs({...}) do + if type(v) == "table" then + line = line .. " " .. dump(v, dump_lvl) + else + line = line .. " " .. tostring(v) + end + end + if isAndroid then + android.LOGI(LOG_PREFIX[log_lvl]..line) + else + io.stdout:write(os.date("%x-%X"), " ", LOG_PREFIX[log_lvl], line, "\n") + io.stdout:flush() + end +end + +local LVL_FUNCTIONS = { + dbg = function(...) log('dbg', DEFAULT_DUMP_LVL, ...) end, + info = function(...) log('info', DEFAULT_DUMP_LVL, ...) end, + warn = function(...) log('warn', DEFAULT_DUMP_LVL, ...) end, + err = function(...) log('err', DEFAULT_DUMP_LVL, ...) end, +} + + +--[[-- +Set logging level. By default, level is set to info. + +@int new_lvl new logging level, must be one of the levels from @{Logger.levels} + +@usage +Logger:setLevel(Logger.levels.warn) +]] +function Logger:setLevel(new_lvl) + for lvl_name, lvl_value in pairs(LOG_LVL) do + if new_lvl <= lvl_value then + self[lvl_name] = LVL_FUNCTIONS[lvl_name] + else + self[lvl_name] = noop + end + end +end + +Logger:setLevel(LOG_LVL.info) + +return Logger diff --git a/frontend/pluginloader.lua b/frontend/pluginloader.lua index 9457b7724..26e300179 100644 --- a/frontend/pluginloader.lua +++ b/frontend/pluginloader.lua @@ -1,5 +1,5 @@ local lfs = require("libs/libkoreader-lfs") -local DEBUG = require("dbg") +local logger = require("logger") local PluginLoader = { plugin_path = "plugins" @@ -21,7 +21,7 @@ function PluginLoader:loadPlugins() package.cpath = path.."/lib/?.so;"..package.cpath local ok, plugin_module = pcall(dofile, mainfile) if not ok or not plugin_module then - DEBUG("Error when loading", mainfile, plugin_module) + logger.warn("Error when loading", mainfile, plugin_module) end if ok and plugin_module and not plugin_module.disabled then package.path = package_path diff --git a/frontend/ui/font.lua b/frontend/ui/font.lua index ec4eff331..80eafe5b6 100644 --- a/frontend/ui/font.lua +++ b/frontend/ui/font.lua @@ -6,7 +6,7 @@ local lfs = require("libs/libkoreader-lfs") local Freetype = require("ffi/freetype") local Screen = require("device").screen local Device = require("device") -local DEBUG = require("dbg") +local logger = require("logger") local Font = { fontmap = { @@ -83,7 +83,7 @@ function Font:getFace(font, size) realname = self.fontdir.."/"..realname local ok, face = pcall(Freetype.newFace, realname, size) if not ok then - DEBUG("#! Font "..font.." ("..realname..") not supported: "..face) + logger.warn("#! Font ", font, " (", realname, ") not supported: ", face) return nil end --- Freetype font face wrapper object diff --git a/frontend/ui/message/filemessagequeue.lua b/frontend/ui/message/filemessagequeue.lua index 8125c0ae2..94b72551e 100644 --- a/frontend/ui/message/filemessagequeue.lua +++ b/frontend/ui/message/filemessagequeue.lua @@ -1,5 +1,5 @@ local ffi = require("ffi") -local DEBUG = require("dbg") +local logger = require("logger") local MessageQueue = require("ui/message/messagequeue") local _ = require("ffi/zeromq_h") local czmq = ffi.load("libs/libczmq.so.1") @@ -26,11 +26,11 @@ end function FileMessageQueue:stop() if self.client ~= nil then - DEBUG("stop filemq client") + logger.dbg("stop filemq client") filemq.fmq_client_destroy(ffi.new('fmq_client_t *[1]', self.client)) end if self.server ~= nil then - DEBUG("stop filemq server") + logger.dbg("stop filemq server") filemq.fmq_server_destroy(ffi.new('fmq_server_t *[1]', self.server)) end if self.poller ~= nil then diff --git a/frontend/ui/message/messagequeue.lua b/frontend/ui/message/messagequeue.lua index 8241b1c78..510f966c9 100644 --- a/frontend/ui/message/messagequeue.lua +++ b/frontend/ui/message/messagequeue.lua @@ -1,6 +1,6 @@ local ffi = require("ffi") local Event = require("ui/event") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("ffi/zeromq_h") local czmq = ffi.load("libs/libczmq.so.1") @@ -62,18 +62,16 @@ function MessageQueue:handleZMsgs(messages) end if #messages == 0 then return end local command = pop_string() - DEBUG("ØMQ message", command) + logger.dbg("ØMQ message", command) if command == "ENTER" then local id = pop_string() local name = pop_string() local header = pop_header() local endpoint = pop_string() - --DEBUG(id, name, header, endpoint) return Event:new("ZyreEnter", id, name, header, endpoint) elseif command == "DELIVER" then local filename = pop_string() local fullname = pop_string() - --DEBUG("received", filename) return Event:new("FileDeliver", filename, fullname) end end diff --git a/frontend/ui/message/streammessagequeue.lua b/frontend/ui/message/streammessagequeue.lua index 9978f2b76..680339088 100644 --- a/frontend/ui/message/streammessagequeue.lua +++ b/frontend/ui/message/streammessagequeue.lua @@ -1,5 +1,5 @@ local ffi = require("ffi") -local DEBUG = require("dbg") +local logger = require("logger") local MessageQueue = require("ui/message/messagequeue") local _ = require("ffi/zeromq_h") @@ -16,7 +16,7 @@ function StreamMessageQueue:start() self.socket = czmq.zsocket_new(self.context, ffi.C.ZMQ_STREAM) self.poller = czmq.zpoller_new(self.socket, nil) local endpoint = string.format("tcp://%s:%d", self.host, self.port) - DEBUG("connect to endpoint", endpoint) + logger.warn("connect to endpoint", endpoint) local rc = czmq.zsocket_connect(self.socket, endpoint) if rc ~= 0 then error("cannot connect to " .. endpoint) @@ -26,7 +26,7 @@ function StreamMessageQueue:start() -- @todo: check return of zmq_getsockopt zmq.zmq_getsockopt(self.socket, ffi.C.ZMQ_IDENTITY, buffer, id_size) self.id = ffi.string(buffer, id_size[0]) - DEBUG("id", #self.id, self.id) + logger.dbg("id", #self.id, self.id) end function StreamMessageQueue:stop() @@ -79,7 +79,6 @@ function StreamMessageQueue:waitEvent() end function StreamMessageQueue:send(data) - --DEBUG("send", data) local msg = czmq.zmsg_new() czmq.zmsg_addmem(msg, self.id, #self.id) czmq.zmsg_addmem(msg, data, #data) diff --git a/frontend/ui/message/zyremessagequeue.lua b/frontend/ui/message/zyremessagequeue.lua index d1806353c..cd103f3c3 100644 --- a/frontend/ui/message/zyremessagequeue.lua +++ b/frontend/ui/message/zyremessagequeue.lua @@ -1,5 +1,4 @@ local ffi = require("ffi") -local DEBUG = require("dbg") local MessageQueue = require("ui/message/messagequeue") local _ = require("ffi/zeromq_h") @@ -25,7 +24,6 @@ end function ZyreMessageQueue:stop() if self.node ~= nil then - DEBUG("stop zyre node") zyre.zyre_stop(self.node) zyre.zyre_destroy(ffi.new('zyre_t *[1]', self.node)) end diff --git a/frontend/ui/otamanager.lua b/frontend/ui/otamanager.lua index 81e3fdf6e..92f7a52a3 100644 --- a/frontend/ui/otamanager.lua +++ b/frontend/ui/otamanager.lua @@ -5,7 +5,7 @@ local lfs = require("libs/libkoreader-lfs") local DataStorage = require("datastorage") local UIManager = require("ui/uimanager") local Device = require("device") -local DEBUG = require("dbg") +local logger = require("logger") local T = require("ffi/util").template local _ = require("gettext") @@ -59,7 +59,7 @@ function OTAManager:getOTAServer() end function OTAManager:setOTAServer(server) - DEBUG("Set OTA server:", server) + logger.dbg("Set OTA server:", server) G_reader_settings:saveSetting("ota_server", server) end @@ -68,7 +68,7 @@ function OTAManager:getOTAChannel() end function OTAManager:setOTAChannel(channel) - DEBUG("Set OTA channel:", channel) + logger.dbg("Set OTA channel:", channel) G_reader_settings:saveSetting("ota_channel", channel) end @@ -84,12 +84,12 @@ function OTAManager:checkUpdate() local ota_zsync_file = self:getOTAServer() .. zsync_file local local_zsync_file = ota_dir .. zsync_file -- download zsync file from OTA server - DEBUG("downloading zsync file", ota_zsync_file) + logger.dbg("downloading zsync file", ota_zsync_file) local _, c, _ = http.request{ url = ota_zsync_file, sink = ltn12.sink.file(io.open(local_zsync_file, "w"))} if c ~= 200 then - DEBUG("cannot find zsync file", c) + logger.warn("cannot find zsync file", c) return end -- parse OTA package version diff --git a/frontend/ui/rendertext.lua b/frontend/ui/rendertext.lua index 49c0bb9ec..e61e3bd52 100644 --- a/frontend/ui/rendertext.lua +++ b/frontend/ui/rendertext.lua @@ -6,7 +6,7 @@ local Font = require("ui/font") local Cache = require("cache") local CacheItem = require("cacheitem") local BlitBuffer = require("ffi/blitbuffer") -local DEBUG = require("dbg") +local logger = require("logger") if require("device"):isAndroid() then require("jit").off(true, true) @@ -87,14 +87,13 @@ function RenderText:getGlyph(face, charcode, bold) -- for some characters it cannot find in Fallbacks, it will crash here if fb_face.ftface:checkGlyph(charcode) ~= 0 then rendered_glyph = fb_face.ftface:renderGlyph(charcode, bold) - --DEBUG("fallback to font", font) break end end end end if not rendered_glyph then - DEBUG("error rendering glyph (charcode=", charcode, ") for face", face) + logger.warn("error rendering glyph (charcode=", charcode, ") for face", face) return end glyph = CacheItem:new{rendered_glyph} @@ -149,7 +148,7 @@ end -- @treturn RenderTextSize function RenderText:sizeUtf8Text(x, width, face, text, kerning, bold) if not text then - DEBUG("sizeUtf8Text called without text"); + logger.warn("sizeUtf8Text called without text"); return end @@ -196,7 +195,7 @@ end -- @return int width of rendered bitmap function RenderText:renderUtf8Text(dest_bb, x, baseline, face, text, kerning, bold, fgcolor, width) if not text then - DEBUG("renderUtf8Text called without text"); + logger.warn("renderUtf8Text called without text"); return 0 end diff --git a/frontend/ui/screensaver.lua b/frontend/ui/screensaver.lua index 6ab13b052..be14a445f 100644 --- a/frontend/ui/screensaver.lua +++ b/frontend/ui/screensaver.lua @@ -3,7 +3,7 @@ local UIManager = require("ui/uimanager") local Device = require("device") local Screen = Device.screen local DocSettings = require("docsettings") -local DEBUG = require("dbg") +local logger = require("logger") local Screensaver = { } @@ -88,7 +88,7 @@ function Screensaver:getCoverImage(file) end function Screensaver:show(kind, default_msg) - DEBUG("show screensaver") + logger.dbg("show screensaver") local InfoMessage = require("ui/widget/infomessage") local screensaver_settings = G_reader_settings:readSetting(kind .. "_screensaver") or {} -- first check book cover image, on by default @@ -137,7 +137,7 @@ function Screensaver:show(kind, default_msg) end function Screensaver:close() - DEBUG("close screensaver") + logger.dbg("close screensaver") if self.left_msg then UIManager:close(self.left_msg) self.left_msg = nil diff --git a/frontend/ui/translator.lua b/frontend/ui/translator.lua index 31544c21c..1a639e2ce 100644 --- a/frontend/ui/translator.lua +++ b/frontend/ui/translator.lua @@ -1,5 +1,5 @@ local JSON = require("json") -local DEBUG = require("dbg") +local logger = require("logger") --[[ -- Translate text using Google Translate. @@ -52,7 +52,6 @@ function Translator:loadPage(target_lang, source_lang, text) request['url'] = url.build(parsed) request['method'] = 'GET' request['sink'] = ltn12.sink.table(sink) - DEBUG("request", request) http.TIMEOUT, https.TIMEOUT = 10, 10 local httpRequest = parsed.scheme == 'http' and http.request or https.request -- first argument returned by skip is code @@ -64,7 +63,7 @@ function Translator:loadPage(target_lang, source_lang, text) end if status ~= "HTTP/1.1 200 OK" then - DEBUG("HTTP status not okay:", status) + logger.warn("translator HTTP status not okay:", status) return end @@ -72,13 +71,12 @@ function Translator:loadPage(target_lang, source_lang, text) if content ~= "" and string.sub(content, 1,1) == "{" then local ok, result = pcall(JSON.decode, content) if ok and result then - --DEBUG("translate result", result) return result else - DEBUG("error:", result) + logger.warn("translator error:", result) end else - DEBUG("not JSON:", content) + logger.warn("not JSON in translator response:", content) end end @@ -86,7 +84,7 @@ function Translator:detect(text) local result = self:loadPage("en", nil, text) if result then local src_lang = result.src - DEBUG("detected language:", src_lang) + logger.dbg("detected language:", src_lang) return src_lang else return self.default_lang diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 2c991b67c..0138f98bc 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -5,6 +5,7 @@ local Event = require("ui/event") local Geom = require("ui/geometry") local util = require("ffi/util") local dbg = require("dbg") +local logger = require("logger") local _ = require("gettext") local noop = function() end @@ -136,10 +137,10 @@ end -- for refreshtype & refreshregion see description of setDirty() function UIManager:show(widget, refreshtype, refreshregion, x, y) if not widget then - dbg("widget not exist to be closed") + logger.dbg("widget not exist to be shown") return end - dbg("show widget", widget.id or widget.name or "unknown") + logger.dbg("show widget", widget.id or widget.name or "unknown") self._running = true local window = {x = x or 0, y = y or 0, widget = widget} @@ -168,10 +169,10 @@ end -- for refreshtype & refreshregion see description of setDirty() function UIManager:close(widget, refreshtype, refreshregion) if not widget then - dbg("widget not exist to be closed") + logger.dbg("widget not exist to be closed") return end - dbg("close widget", widget.id or widget.name) + logger.dbg("close widget", widget.id or widget.name) local dirty = false -- first send close event to widget widget:handleEvent(Event:new("CloseWidget")) @@ -337,7 +338,7 @@ end -- set full refresh rate for e-ink screen -- and make the refresh rate persistant in global reader settings function UIManager:setRefreshRate(rate) - dbg("set screen full refresh rate", rate) + logger.dbg("set screen full refresh rate", rate) self.FULL_REFRESH_COUNT = rate G_reader_settings:saveSetting("full_refresh_count", rate) end @@ -349,7 +350,7 @@ end -- signal to quit function UIManager:quit() - dbg("quiting uimanager") + logger.info("quiting uimanager") self._task_queue_dirty = false self._running = false self._run_forever = nil @@ -371,7 +372,6 @@ end -- transmit an event to an active widget function UIManager:sendEvent(event) - --dbg:v("send event", event) if #self._window_stack == 0 then return end local top_widget = self._window_stack[#self._window_stack] @@ -511,7 +511,7 @@ function UIManager:_refresh(mode, region) if not region and mode == "partial" and not self.refresh_counted then self.refresh_count = (self.refresh_count + 1) % self.FULL_REFRESH_COUNT if self.refresh_count == self.FULL_REFRESH_COUNT - 1 then - dbg("promote refresh to full refresh") + logger.dbg("promote refresh to full refresh") mode = "full" end self.refresh_counted = true @@ -568,7 +568,7 @@ function UIManager:_repaint() -- we should have at least one refresh if we did repaint. If we don't, we -- add one now and log a warning if we are debugging if dirty and #self._refresh_stack == 0 then - dbg("WARNING: no refresh got enqueued. Will do a partial full screen refresh, which might be inefficient") + logger.warn("no refresh got enqueued. Will do a partial full screen refresh, which might be inefficient") self:_refresh("partial") end @@ -610,7 +610,7 @@ function UIManager:handleInput() -- stop when we have no window to show if #self._window_stack == 0 and not self._run_forever then - dbg("no dialog left to show") + logger.info("no dialog left to show") self:quit() return nil end @@ -655,7 +655,7 @@ function UIManager:handleInput() end if self.looper then - dbg("handle input in turbo I/O looper") + logger.info("handle input in turbo I/O looper") self.looper:add_callback(function() -- FIXME: force close looper when there is unhandled error, -- otherwise the looper will hang. Any better solution? diff --git a/frontend/ui/widget/configdialog.lua b/frontend/ui/widget/configdialog.lua index 4ccfd5e2e..2c1e86c3c 100644 --- a/frontend/ui/widget/configdialog.lua +++ b/frontend/ui/widget/configdialog.lua @@ -22,7 +22,7 @@ local Screen = require("device").screen local Event = require("ui/event") local Device = require("device") local Font = require("ui/font") -local DEBUG = require("dbg") +local logger = require("logger") local T = require("ffi/util").template local _ = require("gettext") @@ -207,7 +207,7 @@ function ConfigOption:init() local current_item = nil local function value_diff(val1, val2, name) if type(val1) ~= type(val2) then - DEBUG("different data types in option") + logger.dbg("different data types in option") end if type(val1) == "number" then return math.abs(val1 - val2) @@ -539,20 +539,17 @@ function ConfigDialog:onShowConfigPanel(index) end function ConfigDialog:onConfigChoice(option_name, option_value) - --DEBUG("config option value", option_name, option_value) self.configurable[option_name] = option_value self.ui:handleEvent(Event:new("StartActivityIndicator")) return true end function ConfigDialog:onConfigEvent(option_event, option_arg) - --DEBUG("config option event", option_event, option_arg) self.ui:handleEvent(Event:new(option_event, option_arg)) return true end function ConfigDialog:onConfigEvents(option_events, arg_index) - --DEBUG("config option events", option_events, arg_index) for i=1, #option_events do option_events[i].args = option_events[i].args or {} self.ui:handleEvent(Event:new(option_events[i].event, option_events[i].args[arg_index])) diff --git a/frontend/ui/widget/confirmbox.lua b/frontend/ui/widget/confirmbox.lua index e4d1f26af..0caad48a0 100644 --- a/frontend/ui/widget/confirmbox.lua +++ b/frontend/ui/widget/confirmbox.lua @@ -26,7 +26,7 @@ local UIManager = require("ui/uimanager") local Device = require("device") local Screen = Device.screen local Font = require("ui/font") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local Blitbuffer = require("ffi/blitbuffer") @@ -115,7 +115,7 @@ function ConfirmBox:onClose() end function ConfirmBox:onSelect() - DEBUG("selected:", self.selected.x) + logger.dbg("selected:", self.selected.x) if self.selected.x == 1 then self:ok_callback() else diff --git a/frontend/ui/widget/dictquicklookup.lua b/frontend/ui/widget/dictquicklookup.lua index 4ecd23f97..b16102c76 100644 --- a/frontend/ui/widget/dictquicklookup.lua +++ b/frontend/ui/widget/dictquicklookup.lua @@ -19,7 +19,7 @@ local Device = require("device") local Geom = require("ui/geometry") local Event = require("ui/event") local Font = require("ui/font") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local T = require("ffi/util").template local Blitbuffer = require("ffi/blitbuffer") @@ -384,7 +384,7 @@ function DictQuickLookup:update() } UIManager:setDirty("all", function() local update_region = self.dict_frame.dimen:combine(orig_dimen) - DEBUG("update dict region", update_region) + logger.dbg("update dict region", update_region) return "partial", update_region end) end diff --git a/frontend/ui/widget/imagewidget.lua b/frontend/ui/widget/imagewidget.lua index fa0ced9b0..5bcb09838 100644 --- a/frontend/ui/widget/imagewidget.lua +++ b/frontend/ui/widget/imagewidget.lua @@ -26,7 +26,7 @@ local CacheItem = require("cacheitem") local Mupdf = require("ffi/mupdf") local Geom = require("ui/geometry") local Cache = require("cache") -local DEBUG = require("dbg") +local logger = require("logger") local ImageCache = Cache:new{ max_memsize = 2*1024*1024, -- 2M of image cache @@ -40,7 +40,7 @@ local ImageCacheItem = CacheItem:new{} function ImageCacheItem:onFree() if self.bb.free then - DEBUG("free image blitbuffer", self.bb) + logger.dbg("free image blitbuffer", self.bb) self.bb:free() end end @@ -87,7 +87,7 @@ function ImageWidget:_loadfile() self._bb = Mupdf.renderImageFile(self.file, self.width, self.height) else -- cache this image - DEBUG("cache", hash) + logger.dbg("cache", hash) cache = ImageCacheItem:new{ bb = Mupdf.renderImageFile(self.file, self.width, self.height), } diff --git a/frontend/ui/widget/inputdialog.lua b/frontend/ui/widget/inputdialog.lua index c5a637734..8e21c2f89 100644 --- a/frontend/ui/widget/inputdialog.lua +++ b/frontend/ui/widget/inputdialog.lua @@ -110,7 +110,6 @@ function InputDialog:init() enter_callback = self.enter_callback or function() for _,btn_row in ipairs(self.buttons) do for _,btn in ipairs(btn_row) do - require('dbg')('looging for btn', btn) if btn.is_enter_default then btn.callback() return diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index a81d4a7a0..e0f27d752 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -24,7 +24,7 @@ local UIManager = require("ui/uimanager") local RenderText = require("ui/rendertext") local InfoMessage = require("ui/widget/infomessage") local util = require("ffi/util") -local DEBUG = require("dbg") +local logger = require("logger") local Blitbuffer = require("ffi/blitbuffer") local _ = require("gettext") @@ -292,7 +292,7 @@ function MenuItem:onTapSelect(arg, ges) UIManager:scheduleIn(0.1, function() self[1].invert = false UIManager:setDirty(self.show_parent, refreshfunc) - DEBUG("creating coroutine for menu select") + logger.dbg("creating coroutine for menu select") local co = coroutine.create(function() self.menu:onMenuSelect(self.table, pos) end) diff --git a/frontend/ui/widget/multiconfirmbox.lua b/frontend/ui/widget/multiconfirmbox.lua index 4a4e53665..8d9253948 100644 --- a/frontend/ui/widget/multiconfirmbox.lua +++ b/frontend/ui/widget/multiconfirmbox.lua @@ -10,7 +10,7 @@ local ButtonTable = require("ui/widget/buttontable") local UIManager = require("ui/uimanager") local Screen = require("device").screen local Font = require("ui/font") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local Blitbuffer = require("ffi/blitbuffer") @@ -113,7 +113,7 @@ function MultiConfirmBox:onClose() end function MultiConfirmBox:onSelect() - DEBUG("selected:", self.selected.x) + logger.dbg("selected:", self.selected.x) if self.selected.x == 1 then self:choice1_callback() elseif self.selected.x == 2 then diff --git a/frontend/ui/widget/opdsbrowser.lua b/frontend/ui/widget/opdsbrowser.lua index 0119d07dd..c9cd664e8 100644 --- a/frontend/ui/widget/opdsbrowser.lua +++ b/frontend/ui/widget/opdsbrowser.lua @@ -11,7 +11,7 @@ local Screen = require("device").screen local url = require('socket.url') local util = require("ffi/util") local Cache = require("cache") -local DEBUG = require("dbg") +local logger = require("logger") local _ = require("gettext") local socket = require('socket') @@ -63,7 +63,7 @@ function OPDSBrowser:init() end function OPDSBrowser:addServerFromInput(fields) - DEBUG("input catalog", fields) + logger.dbg("input catalog", fields) local servers = G_reader_settings:readSetting("opds_servers") or {} table.insert(servers, { title = fields[1], @@ -74,7 +74,7 @@ function OPDSBrowser:addServerFromInput(fields) end function OPDSBrowser:editCalibreFromInput(fields) - DEBUG("input calibre server", fields) + logger.dbg("input calibre server", fields) local calibre = G_reader_settings:readSetting("calibre_opds") or {} if fields[1] then calibre.host = fields[1] @@ -243,7 +243,7 @@ function OPDSBrowser:fetchFeed(feed_url) request['method'] = 'GET' request['sink'] = ltn12.sink.table(sink) request['headers'] = self:getAuthorizationHeader(parsed.host) - DEBUG("request", request) + logger.dbg("request", request) http.TIMEOUT, https.TIMEOUT = 10, 10 local httpRequest = parsed.scheme == 'http' and http.request or https.request local code, headers, status = socket.skip(1, httpRequest(request)) @@ -253,7 +253,6 @@ function OPDSBrowser:fetchFeed(feed_url) error(code) end - --DEBUG("response", code, headers, status) if code == 401 and status and status:find("Unauthorized") then self._coroutine = coroutine.running() or self._coroutine self:fetchWithLogin(parsed.host, function() @@ -266,7 +265,6 @@ function OPDSBrowser:fetchFeed(feed_url) else local xml = table.concat(sink) if xml ~= "" then - --DEBUG("xml", xml) return xml end end @@ -326,7 +324,7 @@ function OPDSBrowser:parseFeed(feed_url) if cache then feed = cache.feed else - DEBUG("cache", hash) + logger.dbg("cache", hash) feed = self:fetchFeed(feed_url) if feed then CatalogCache:insert(hash, CatalogCacheItem:new{ feed = feed }) @@ -344,7 +342,7 @@ function OPDSBrowser:getCatalog(feed_url) NetworkMgr:promptWifiOn() return elseif not ok and catalog then - DEBUG("cannot get catalog info from", feed_url, catalog) + logger.warn("cannot get catalog info from", feed_url, catalog) UIManager:show(InfoMessage:new{ text = util.template( _("Cannot get catalog info from %1"), @@ -355,7 +353,7 @@ function OPDSBrowser:getCatalog(feed_url) end if ok and catalog then - DEBUG("catalog", catalog) + logger.dbg("catalog", catalog) return catalog end end @@ -431,7 +429,7 @@ function OPDSBrowser:genItemTableFromCatalog(catalog, item_url) end end if title == "Unknown" then - DEBUG("Cannot handle title", entry.title) + logger.warn("Cannot handle title", entry.title) end local author = "Unknown Author" if type(entry.author) == "table" and entry.author.name then @@ -451,7 +449,6 @@ end function OPDSBrowser:updateCatalog(item_table_url) local menu_table = self:genItemTableFromURL(item_table_url) if #menu_table > 0 then - --DEBUG("menu table", menu_table) self:swithItemTable(nil, menu_table) if self.page_num <= 1 then self:onNext() @@ -475,24 +472,23 @@ function OPDSBrowser:downloadFile(item, format, remote_url) local lastdir = G_reader_settings:readSetting("lastdir") local download_dir = G_reader_settings:readSetting("download_dir") or lastdir local local_path = download_dir .. "/" .. item.author .. ' - ' .. item.title .. "." .. string.lower(format) - DEBUG("downloading file", local_path, "from", remote_url) + logger.dbg("downloading file", local_path, "from", remote_url) local parsed = url.parse(remote_url) http.TIMEOUT, https.TIMEOUT = 10, 10 local httpRequest = parsed.scheme == 'http' and http.request or https.request - local r, c, h = httpRequest{ + local _, c, _ = httpRequest{ url = remote_url, headers = self:getAuthorizationHeader(parsed.host), sink = ltn12.sink.file(io.open(local_path, "w")), } if c == 200 then - DEBUG("file downloaded to", local_path) + logger.dbg("file downloaded to", local_path) if self.file_downloaded_callback then self.file_downloaded_callback(local_path) end else - DEBUG("response", {r, c, h}) UIManager:show(InfoMessage:new{ text = _("Could not save file to:\n") .. local_path, timeout = 3, @@ -539,7 +535,7 @@ function OPDSBrowser:showDownloads(item) require("ui/downloadmgr"):new{ title = _("Choose download directory"), onConfirm = function(path) - DEBUG("set download directory to", path) + logger.dbg("set download directory to", path) G_reader_settings:saveSetting("download_dir", path) end, }:chooseDir() @@ -559,7 +555,7 @@ function OPDSBrowser:onMenuSelect(item) item.callback() -- acquisition elseif item.acquisitions and #item.acquisitions > 0 then - DEBUG("downloads available", item) + logger.dbg("downloads available", item) self:showDownloads(item) -- navigation else @@ -574,7 +570,7 @@ function OPDSBrowser:onMenuSelect(item) end function OPDSBrowser:editServerFromInput(item, fields) - DEBUG("input catalog", fields) + logger.dbg("input catalog", fields) local servers = {} for _, server in ipairs(G_reader_settings:readSetting("opds_servers") or {}) do if server.title == item.text or server.url == item.url then @@ -588,7 +584,7 @@ function OPDSBrowser:editServerFromInput(item, fields) end function OPDSBrowser:editOPDSServer(item) - DEBUG("edit", item) + logger.dbg("edit", item) self.edit_server_dialog = MultiInputDialog:new{ title = _("Edit OPDS catalog"), fields = { @@ -628,7 +624,7 @@ function OPDSBrowser:editOPDSServer(item) end function OPDSBrowser:deleteOPDSServer(item) - DEBUG("delete", item) + logger.dbg("delete", item) local servers = {} for _, server in ipairs(G_reader_settings:readSetting("opds_servers") or {}) do if server.title ~= item.text or server.url ~= item.url then @@ -673,7 +669,7 @@ function OPDSBrowser:onMenuHold(item) end function OPDSBrowser:onReturn() - DEBUG("return to last page catalog") + logger.dbg("return to last page catalog") if #self.paths > 0 then table.remove(self.paths) local path = self.paths[#self.paths] @@ -689,7 +685,7 @@ function OPDSBrowser:onReturn() end function OPDSBrowser:onNext() - DEBUG("fetch next page catalog") + logger.dbg("fetch next page catalog") local hrefs = self.item_table.hrefs local page_num = self.page_num while page_num == self.page_num and hrefs and hrefs.next do diff --git a/frontend/ui/widget/physicalkeyboard.lua b/frontend/ui/widget/physicalkeyboard.lua index a3ea05772..c33af9bfc 100644 --- a/frontend/ui/widget/physicalkeyboard.lua +++ b/frontend/ui/widget/physicalkeyboard.lua @@ -14,7 +14,7 @@ local Font = require("ui/font") local Screen = Device.screen local Geom = require("ui/geometry") local util = require("util") -local DEBUG = require("dbg") +local logger = require("logger") local PhysicalNumericKey = WidgetContainer:new{ @@ -112,7 +112,7 @@ end function PhysicalKeyboard:onKeyPress(ev) local key = ev.key if key == "Back" then - DEBUG("TODO: exit keyboard") + logger.warn("TODO: exit keyboard") elseif key == "Del" then self.inputbox:delChar() else diff --git a/frontend/ui/widget/textboxwidget.lua b/frontend/ui/widget/textboxwidget.lua index 70e1cb385..cf77d1e0c 100644 --- a/frontend/ui/widget/textboxwidget.lua +++ b/frontend/ui/widget/textboxwidget.lua @@ -19,7 +19,7 @@ local RenderText = require("ui/rendertext") local Screen = require("device").screen local Geom = require("ui/geometry") local util = require("util") -local DEBUG= require("dbg") +local logger = require("logger") local TimeVal = require("ui/timeval") local TextBoxWidget = Widget:new{ @@ -316,7 +316,7 @@ function TextBoxWidget:onHoldWord(callback, ges) local x, y = ges.pos.x - self.dimen.x, ges.pos.y - self.dimen.y local line_num = math.ceil(y / self.line_height_px) + self.virtual_line_num-1 local line = self.vertical_string_list[line_num] - DEBUG("holding on line", line) + logger.dbg("holding on line", line) if line then local char_start = line.offset local char_end -- char_end is non-inclusive @@ -429,7 +429,7 @@ function TextBoxWidget:onHoldReleaseText(callback, ges) end local selected_text = table.concat(self.charlist, "", sel_start_idx, sel_end_idx) - DEBUG("onHoldReleaseText (duration:", hold_duration, ") :", sel_start_idx, ">", sel_end_idx, "=", selected_text) + logger.dbg("onHoldReleaseText (duration:", hold_duration, ") :", sel_start_idx, ">", sel_end_idx, "=", selected_text) callback(selected_text, hold_duration) return true end diff --git a/frontend/ui/widget/virtualkeyboard.lua b/frontend/ui/widget/virtualkeyboard.lua index f06b97002..e1d2bc42d 100644 --- a/frontend/ui/widget/virtualkeyboard.lua +++ b/frontend/ui/widget/virtualkeyboard.lua @@ -14,7 +14,7 @@ local Device = require("device") local Screen = Device.screen local GestureRange = require("ui/gesturerange") local UIManager = require("ui/uimanager") -local DEBUG = require("dbg") +local logger = require("logger") local Blitbuffer = require("ffi/blitbuffer") local VirtualKey = InputContainer:new{ @@ -97,7 +97,7 @@ end function VirtualKey:update_keyboard() UIManager:setDirty(self.keyboard, function() - DEBUG("update key region", self[1].dimen) + logger.dbg("update key region", self[1].dimen) return "ui", self[1].dimen end) end @@ -270,17 +270,17 @@ function VirtualKeyboard:setLayout(key) end function VirtualKeyboard:addChar(key) - DEBUG("add char", key) + logger.dbg("add char", key) self.inputbox:addChar(key) end function VirtualKeyboard:delChar() - DEBUG("delete char") + logger.dbg("delete char") self.inputbox:delChar() end function VirtualKeyboard:clear() - DEBUG("clear input") + logger.dbg("clear input") self.inputbox:clear() end diff --git a/frontend/ui/wikipedia.lua b/frontend/ui/wikipedia.lua index 20309f550..7437a2a4e 100644 --- a/frontend/ui/wikipedia.lua +++ b/frontend/ui/wikipedia.lua @@ -1,5 +1,5 @@ local JSON = require("json") -local DEBUG = require("dbg") +local logger = require("logger") --[[ -- Query wikipedia using Wikimedia Web API. @@ -76,7 +76,6 @@ function Wikipedia:loadPage(text, lang, intro, plain) request['url'] = url.build(parsed) request['method'] = 'GET' request['sink'] = ltn12.sink.table(sink) - DEBUG("request", request) http.TIMEOUT, https.TIMEOUT = 10, 10 local httpRequest = parsed.scheme == 'http' and http.request or https.request -- first argument returned by skip is code @@ -88,7 +87,7 @@ function Wikipedia:loadPage(text, lang, intro, plain) end if status ~= "HTTP/1.1 200 OK" then - DEBUG("HTTP status not okay:", status) + logger.warn("HTTP status not okay:", status) return end @@ -96,13 +95,13 @@ function Wikipedia:loadPage(text, lang, intro, plain) if content ~= "" and string.sub(content, 1,1) == "{" then local ok, result = pcall(JSON.decode, content) if ok and result then - DEBUG("wiki result", result) + logger.dbg("wiki result", result) return result else - DEBUG("error:", result) + logger.warn("wiki error:", result) end else - DEBUG("not JSON:", content) + logger.warn("not JSON from wiki response:", content) end end diff --git a/platform/kobo/suspend.sh b/platform/kobo/suspend.sh deleted file mode 100755 index 067d81759..000000000 --- a/platform/kobo/suspend.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh -export PATH="${PATH}:/sbin:/usr/sbin" - -echo "[$(date +'%x @ %X')] Kobo Suspend: Going to sleep . . ." -# NOTE: Sleep as little as possible here, sleeping has a tendency to make everything mysteriously hang... - -# Depending on device/FW version, some kernels do not support wakeup_count, account for that -if [ -e "/sys/power/wakeup_count" ] ; then - #HAS_WAKEUP_COUNT="true" - # NOTE: ... and of course, it appears to be broken, which probably explains why nickel doesn't use this facility... - # (By broken, I mean that the system wakes up right away). - # So, unless that changes, unconditionally disable it. - HAS_WAKEUP_COUNT="false" -fi - -# Clear the kernel ring buffer... (we're missing a proper -C flag...) -#dmesg -c >/dev/null - -# Go to sleep -if [ "${HAS_WAKEUP_COUNT}" == "true" ] ; then - current_wakeup_count="$(cat /sys/power/wakeup_count)" - echo "[$(date +'%x @ %X')] Kobo Suspend: Current WakeUp count: ${current_wakeup_count}" -fi -echo 1 > /sys/power/state-extended -# NOTE: Sets gSleep_Mode_Suspend to 1. Used as a flag throughout the kernel to suspend/resume various subsystems -# cf. kernel/power/main.c @ L#207 -echo "[$(date +'%x @ %X')] Kobo Suspend: Asked the kernel to put subsystems to sleep" -sleep 2 -echo "[$(date +'%x @ %X')] Kobo Suspend: Waited for 2s because of reasons..." -sync -echo "[$(date +'%x @ %X')] Kobo Suspend: Synced FS" -if [ "${HAS_WAKEUP_COUNT}" == "true" ] ; then - echo ${current_wakeup_count} > /sys/power/wakeup_count - echo "[$(date +'%x @ %X')] Kobo Suspend: Wrote WakeUp count: ${current_wakeup_count} ($?)" -fi -echo "[$(date +'%x @ %X')] Kobo Suspend: Asking for a suspend to RAM . . ." -echo mem > /sys/power/state -# NOTE: At this point, we *should* be in suspend to RAM, as such, execution should only resume on wakeup... -echo "[$(date +'%x @ %X')] Kobo Suspend: ZzZ ZzZ ZzZ? ($?)" -## NOTE: Ideally, we'd need a way to warn the user that suspending gloriously failed at this point... -## We can safely assume that just from a non-zero return code, without looking at the detailed stderr message -## (most of the failures we'll see are -EBUSY anyway) -## For reference, when that happens to nickel, it appears to keep retrying to wakeup & sleep ad nauseam, -## which is where the non-sensical 1 -> mem -> 0 loop idea comes from... -## cf. nickel_suspend_strace.txt for more details. - -if [ "${HAS_WAKEUP_COUNT}" == "true" ] ; then - echo "[$(date +'%x @ %X')] Kobo Suspend: Woke up! (WakeUp count: $(cat /sys/power/wakeup_count))" -else - echo "[$(date +'%x @ %X')] Kobo Suspend: Woke up!" -fi - -# Print tke kernel log since our attempt to sleep... -#dmesg -c - -# Now that we're up, unflag subsystems for suspend... -# NOTE: We do that in Kobo:resume() to keep things tidy and easier to follow -#echo 0 > /sys/power/state-extended -#echo "[$(date +'%x @ %X')] Kobo Suspend: Unflagged kernel subsystems for suspend" diff --git a/reader.lua b/reader.lua index 769e76b42..f50e53336 100755 --- a/reader.lua +++ b/reader.lua @@ -1,5 +1,5 @@ #!./luajit -io.stdout:write(string.format([[ +io.stdout:write([[ --------------------------------------------- launching... _ _____ ____ _ @@ -8,8 +8,7 @@ io.stdout:write(string.format([[ | . \ |_| | _ < __/ (_| | (_| | __/ | |_|\_\___/|_| \_\___|\__,_|\__,_|\___|_| - [*] Current time: %s -]], os.date("%x-%X"))) + [*] Current time: ]], os.date("%x-%X"), "\n\n") io.stdout:flush()