From c45328f14e8f4d4311f4c4afb01299a2e3e86b8e Mon Sep 17 00:00:00 2001 From: Alexander Pletnev Date: Sun, 13 Sep 2015 22:34:20 +0300 Subject: [PATCH] Add Statistic plugin (#1581 Amount of hours spent on a book) Changes based on comments --- .../apps/reader/modules/readerhighlight.lua | 4 +- .../main.lua | 74 +++++++++---------- .../tableutil.lua | 0 3 files changed, 38 insertions(+), 40 deletions(-) rename plugins/{statistic.koplugin => statistics.koplugin}/main.lua (85%) rename plugins/{statistic.koplugin => statistics.koplugin}/tableutil.lua (100%) diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index c696294fd..e5e89d6ac 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -384,11 +384,9 @@ function ReaderHighlight:highlightFromHoldPos() end end ---[[ function ReaderHighlight:onHighlight() self:saveHighlight() end -]] function ReaderHighlight:getHighlightBookmarkItem() if self.hold_pos and not self.selected_text then @@ -410,7 +408,7 @@ function ReaderHighlight:getHighlightBookmarkItem() end function ReaderHighlight:saveHighlight() - self:handleEvent(Event:new("Highlight")) + self:handleEvent(Event:new("AddHighlight")) DEBUG("save highlight") local page = self.hold_pos.page if self.hold_pos and self.selected_text and self.selected_text.pos0 diff --git a/plugins/statistic.koplugin/main.lua b/plugins/statistics.koplugin/main.lua similarity index 85% rename from plugins/statistic.koplugin/main.lua rename to plugins/statistics.koplugin/main.lua index 33d62b5be..69ffc2ae7 100755 --- a/plugins/statistic.koplugin/main.lua +++ b/plugins/statistics.koplugin/main.lua @@ -12,9 +12,9 @@ local dump = require("dump") local lfs = require("libs/libkoreader-lfs") local tableutil = require("tableutil") -local statistic_dir = "./statistics" +local statistics_dir = "./statistics" -local ReaderStatistic = InputContainer:new { +local ReaderStatistics = InputContainer:new { last_time = nil, page_min_read_sec = 5, page_max_read_sec = 90, @@ -33,7 +33,7 @@ local ReaderStatistic = InputContainer:new { }, } -function ReaderStatistic:init() +function ReaderStatistics:init() if self.ui.document.is_djvu or self.ui.document.is_pdf or self.ui.document.is_pic then return end @@ -41,7 +41,7 @@ function ReaderStatistic:init() self.ui.menu:registerToMainMenu(self) self.current_period = 0 - local settings = G_reader_settings:readSetting("statistic") or {} + local settings = G_reader_settings:readSetting("statistics") or {} self.page_min_read_sec = tonumber(settings.min_sec) self.page_max_read_sec = tonumber(settings.max_sec) self.is_enabled = not (settings.is_enabled == false) @@ -50,7 +50,7 @@ function ReaderStatistic:init() UIManager:scheduleIn(0.1, function() self:initData() end) end -function ReaderStatistic:initData() +function ReaderStatistics:initData() --first execution if self.is_enabled then local book_properties = self:getBookProperties() @@ -61,7 +61,7 @@ function ReaderStatistic:initData() end end -function ReaderStatistic:addToMainMenu(tab_item_table) +function ReaderStatistics:addToMainMenu(tab_item_table) table.insert(tab_item_table.plugins, { text = _("Statistic"), sub_item_table = { @@ -73,7 +73,7 @@ function ReaderStatistic:addToMainMenu(tab_item_table) }) end -function ReaderStatistic:getStatisticEnabledMenuTable() +function ReaderStatistics:getStatisticEnabledMenuTable() return { text_func = function() return _("Enabled") @@ -95,7 +95,7 @@ function ReaderStatistic:getStatisticEnabledMenuTable() } end -function ReaderStatistic:getStatisticSettingsMenuTable() +function ReaderStatistics:getStatisticSettingsMenuTable() return { text_func = function() return _("Settings") @@ -107,9 +107,9 @@ function ReaderStatistic:getStatisticSettingsMenuTable() } end -function ReaderStatistic:updateSettings() +function ReaderStatistics:updateSettings() self.settings_dialog = MultiInputDialog:new { - title = _("Statistic settings"), + title = _("Statistics settings"), fields = { { text = "", @@ -149,7 +149,7 @@ function ReaderStatistic:updateSettings() UIManager:show(self.settings_dialog) end -function ReaderStatistic:getStatisticForCurrentBookMenuTable() +function ReaderStatistics:getStatisticForCurrentBookMenuTable() self.status_menu = {} local book_status = Menu:new { @@ -175,7 +175,7 @@ function ReaderStatistic:getStatisticForCurrentBookMenuTable() book_status.show_parent = self.status_menu return { - text = "Current", + text = _("Current"), enabled_func = function() return true end, checked_func = function() return false end, callback = function() @@ -186,7 +186,7 @@ function ReaderStatistic:getStatisticForCurrentBookMenuTable() } end -function ReaderStatistic:getStatisticTotalStatisticMenuTable() +function ReaderStatistics:getStatisticTotalStatisticMenuTable() self.total_status = Menu:new { title = _("Total"), item_table = self:updateTotalStat(), @@ -210,7 +210,7 @@ function ReaderStatistic:getStatisticTotalStatisticMenuTable() self.total_status.show_parent = self.total_menu return { - text = "Total", + text = _("Total"), callback = function() self.total_status:swithItemTable(nil, self:updateTotalStat()) UIManager:show(self.total_menu) @@ -219,7 +219,7 @@ function ReaderStatistic:getStatisticTotalStatisticMenuTable() } end -function ReaderStatistic:updateCurrentStat() +function ReaderStatistics:updateCurrentStat() local stats = {} local dates = {} @@ -233,11 +233,11 @@ function ReaderStatistic:updateCurrentStat() table.insert(stats, { text = _("Total notes"), mandatory = self.data.notes }) table.insert(stats, { text = _("Total days"), mandatory = tableutil.tablelength(dates) }) table.insert(stats, { text = _("Average time per page"), mandatory = os.date("!%X", self.data.total_time / tableutil.tablelength(self.data.details)) }) - table.insert(stats, { text = _("Readed pages/Total pages"), mandatory = tableutil.tablelength(self.data.details) .. "/" .. self.data.pages }) + table.insert(stats, { text = _("Read pages/Total pages"), mandatory = tableutil.tablelength(self.data.details) .. "/" .. self.data.pages }) return stats end -function ReaderStatistic:getDatesForBook(book) +function ReaderStatistics:getDatesForBook(book) local dates = {} local result = {} @@ -260,18 +260,18 @@ function ReaderStatistic:getDatesForBook(book) table.insert(result, { text = _(book.title) }) for k, v in tableutil.spairs(dates, function(t, a, b) return t[b].date > t[a].date end) do - table.insert(result, { text = _(k), mandatory = "Pages(" .. v.count .. ") Time: " .. os.date("!%X", v.read) }) + table.insert(result, { text = _(k), mandatory = _("Pages(") .. v.count .. _(") Time: ") .. os.date("!%X", v.read) }) end return result end -function ReaderStatistic:updateTotalStat() +function ReaderStatistics:updateTotalStat() local total_stats = {} local total_books_time = 0 - for curr_file in lfs.dir(statistic_dir) do - local path = statistic_dir .. "/" .. curr_file + for curr_file in lfs.dir(statistics_dir) do + local path = statistics_dir .. "/" .. curr_file if lfs.attributes(path, "mode") == "file" then local book_result = self:importFromFile(curr_file) if book_result and book_result.title ~= self.data.title then @@ -303,7 +303,7 @@ function ReaderStatistic:updateTotalStat() return total_stats end -function ReaderStatistic:getBookProperties() +function ReaderStatistics:getBookProperties() local props = self.view.document:getProps() if props.title == "No document" or props.title == "" then --sometime crengine returns "No document" try to get one more time props = self.view.document:getProps() @@ -311,7 +311,7 @@ function ReaderStatistic:getBookProperties() return props end -function ReaderStatistic:onPageUpdate(pageno) +function ReaderStatistics:onPageUpdate(pageno) if self.is_enabled then local curr_time = TimeVal:now() local diff_time = curr_time.sec - self.last_time.sec @@ -336,12 +336,12 @@ function ReaderStatistic:onPageUpdate(pageno) end end -function ReaderStatistic:exportToFile(book_properties) +function ReaderStatistics:exportToFile(book_properties) if book_properties then self:savePropertiesInToData(book_properties) end - local statistics = io.open(statistic_dir .. "/" .. self.data.title .. ".stat", "w") + local statistics = io.open(statistics_dir .. "/" .. self.data.title .. ".stat", "w") if statistics then local current_locale = os.setlocale() os.setlocale("C") @@ -355,19 +355,19 @@ function ReaderStatistic:exportToFile(book_properties) end -function ReaderStatistic:savePropertiesInToData(item) +function ReaderStatistics:savePropertiesInToData(item) self.data.title = item.title self.data.authors = item.authors self.data.language = item.language self.data.series = item.series end -function ReaderStatistic:importFromFile(item) +function ReaderStatistics:importFromFile(item) item = string.gsub(item, "^%s*(.-)%s*$", "%1") --trim - if lfs.attributes(statistic_dir, "mode") ~= "directory" then + if lfs.attributes(statistics_dir, "mode") ~= "directory" then lfs.mkdir("statistics") end - local statisticFile = statistic_dir .. "/" .. item + local statisticFile = statistics_dir .. "/" .. item local ok, stored = pcall(dofile, statisticFile) if ok then return stored @@ -376,22 +376,22 @@ function ReaderStatistic:importFromFile(item) end end -function ReaderStatistic:onCloseDocument() +function ReaderStatistics:onCloseDocument() if self.last_time and self.is_enabled then self:exportToFile() end end -function ReaderStatistic:onHighlight() +function ReaderStatistics:onAddHighlight() self.data.highlights = self.data.highlights + 1 end -function ReaderStatistic:onAddNote() +function ReaderStatistics:onAddNote() self.data.notes = self.data.notes + 1 end -- in case when screensaver starts -function ReaderStatistic:onFlushSettings() +function ReaderStatistics:onFlushSettings() self:onSaveSettings() self:exportToFile() self.current_period = 0 @@ -399,12 +399,12 @@ function ReaderStatistic:onFlushSettings() end -- screensaver off -function ReaderStatistic:onResume() +function ReaderStatistics:onResume() self.current_period = 0 return true end -function ReaderStatistic:onSaveSettings(fields) +function ReaderStatistics:onSaveSettings(fields) if fields then self.page_min_read_sec = tonumber(fields[1]) self.page_max_read_sec = tonumber(fields[2]) @@ -415,9 +415,9 @@ function ReaderStatistic:onSaveSettings(fields) max_sec = self.page_max_read_sec, is_enabled = self.is_enabled, } - G_reader_settings:saveSetting("statistic", settings) + G_reader_settings:saveSetting("statistics", settings) end -return ReaderStatistic +return ReaderStatistics diff --git a/plugins/statistic.koplugin/tableutil.lua b/plugins/statistics.koplugin/tableutil.lua similarity index 100% rename from plugins/statistic.koplugin/tableutil.lua rename to plugins/statistics.koplugin/tableutil.lua