Add Statistic plugin (#1581 Amount of hours spent on a book)

Changes based on comments
pull/1628/head
Alexander Pletnev 9 years ago
parent 52d821df00
commit c45328f14e

@ -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

@ -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
Loading…
Cancel
Save