mirror of https://github.com/koreader/koreader
resolve conflict on frontend/ui/widget/scrolltextwidget.lua
commit
9ea56827dc
@ -1 +1 @@
|
||||
Subproject commit b5c82144e253844849ab66e55bdff363d4991c66
|
||||
Subproject commit edfd1239c685e930fd0918bab6eb80267555aead
|
@ -0,0 +1,121 @@
|
||||
local lfs = require("libs/libkoreader-lfs")
|
||||
local DataStorage = require("datastorage")
|
||||
local DocSettings = require("docsettings")
|
||||
local joinPath = require("ffi/util").joinPath
|
||||
local dump = require("dump")
|
||||
|
||||
local history_file = joinPath(DataStorage:getDataDir(), "history.lua")
|
||||
|
||||
local ReadHistory = {
|
||||
hist = {},
|
||||
}
|
||||
|
||||
local function buildEntry(input_time, input_file)
|
||||
return {
|
||||
time = input_time,
|
||||
text = input_file:gsub(".*/", ""),
|
||||
file = input_file,
|
||||
callback = function()
|
||||
local ReaderUI = require("apps/reader/readerui")
|
||||
ReaderUI:showReader(input_file)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
function ReadHistory:_sort()
|
||||
for i = #self.hist, 1, -1 do
|
||||
if lfs.attributes(self.hist[i].file, "mode") ~= "file" then
|
||||
table.remove(self.hist, i)
|
||||
end
|
||||
end
|
||||
table.sort(self.hist, function(l, r) return l.file < r.file end)
|
||||
-- TODO(zijiehe): Use binary insert instead of a loop to deduplicate.
|
||||
for i = #self.hist, 2, -1 do
|
||||
if self.hist[i].file == self.hist[i - 1].file then
|
||||
if self.hist[i].time < self.hist[i - 1].time then
|
||||
table.remove(self.hist, i)
|
||||
else
|
||||
table.remove(self.hist,i - 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
table.sort(self.hist, function(v1, v2) return v1.time > v2.time end)
|
||||
-- TODO(zijiehe): Use binary search to find an item when deleting it.
|
||||
for i = 1, #self.hist, 1 do
|
||||
self.hist[i].index = i
|
||||
end
|
||||
end
|
||||
|
||||
-- Reduces total count in hist list to a reasonable number by removing last
|
||||
-- several items.
|
||||
function ReadHistory:_reduce()
|
||||
while #self.hist > 500 do
|
||||
table.remove(self.hist, #self.hist)
|
||||
end
|
||||
end
|
||||
|
||||
-- Flushes current history table into file.
|
||||
function ReadHistory:_flush()
|
||||
local content = {}
|
||||
for k, v in pairs(self.hist) do
|
||||
content[k] = {
|
||||
time = v.time,
|
||||
file = v.file
|
||||
}
|
||||
end
|
||||
local f = io.open(history_file, "w")
|
||||
f:write("return " .. dump(content) .. "\n")
|
||||
f:close()
|
||||
end
|
||||
|
||||
-- Reads history table from file
|
||||
function ReadHistory:_read()
|
||||
local ok, data = pcall(dofile, history_file)
|
||||
if ok then
|
||||
for k, v in pairs(data) do
|
||||
table.insert(self.hist, buildEntry(v.time, v.file))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Reads history from legacy history folder
|
||||
function ReadHistory:_readLegacyHistory()
|
||||
local history_dir = DataStorage:getHistoryDir()
|
||||
for f in lfs.dir(history_dir) do
|
||||
local path = joinPath(history_dir, f)
|
||||
if lfs.attributes(path, "mode") == "file" then
|
||||
local file = joinPath(DocSettings:getPathFromHistory(f),
|
||||
DocSettings:getNameFromHistory(f))
|
||||
table.insert(self.hist,
|
||||
buildEntry(lfs.attributes(path, "modification"), file))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ReadHistory:_init()
|
||||
self:_read()
|
||||
self:_readLegacyHistory()
|
||||
self:_sort()
|
||||
self:_reduce()
|
||||
end
|
||||
|
||||
function ReadHistory:removeItem(item)
|
||||
table.remove(self.hist, item.index)
|
||||
os.remove(DocSettings:getHistoryPath(item.file))
|
||||
self:_flush()
|
||||
end
|
||||
|
||||
function ReadHistory:addItem(file)
|
||||
if file ~= nil and lfs.attributes(file, "mode") == "file" then
|
||||
table.insert(self.hist, 1, buildEntry(os.time(), file))
|
||||
-- TODO(zijiehe): We do not need to sort if we can use binary insert and
|
||||
-- binary search.
|
||||
self:_sort()
|
||||
self:_reduce()
|
||||
self:_flush()
|
||||
end
|
||||
end
|
||||
|
||||
ReadHistory:_init()
|
||||
|
||||
return ReadHistory
|
@ -0,0 +1,18 @@
|
||||
describe("ProgressWidget widget", function()
|
||||
local ProgressWidget, Screen
|
||||
setup(function()
|
||||
require("commonrequire")
|
||||
ProgressWidget = require("ui/widget/progresswidget")
|
||||
Screen = require("device").screen
|
||||
end)
|
||||
|
||||
it("should not crash with nil self.last", function()
|
||||
local progress = ProgressWidget:new{
|
||||
width = 100,
|
||||
height = 50,
|
||||
percentage = 5/100,
|
||||
ticks = {1},
|
||||
}
|
||||
progress:paintTo(Screen.bb, 0, 0)
|
||||
end)
|
||||
end)
|
@ -0,0 +1,94 @@
|
||||
Lorem ipsum
|
||||
Dolor sit amet, foo@bar.com
|
||||
v0.1, 99 September 7999
|
||||
|
||||
Lorem ipsum dolor sit amet, pri id laudem vulputate disputando, ad mea
|
||||
pericula consetetur. Nusquam detraxit ad sed, tritani mandamus aliquando et
|
||||
has, porro graeco at pri. Sale denique ut sit, mel suas erroribus repudiare
|
||||
ea. Vim probo dicit consequuntur te.
|
||||
______________________________________________________________________
|
||||
|
||||
Table of Contents
|
||||
|
||||
|
||||
1. Eos ex eius iusto delicata
|
||||
|
||||
2. Illum argumentum sed a
|
||||
|
||||
3. In eum magna iusto integre
|
||||
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
1. Eos ex eius iusto delicata
|
||||
|
||||
|
||||
Eos ex eius iusto delicata, ius ne facer invenire electram, cu mel assum
|
||||
novum efficiendi. Duo enim eleifend te. Elitr nihil vivendo vix ex, ex homero
|
||||
salutatus sed, ea nec posse commune consetetur. Ea iusto labore docendi his,
|
||||
at per mollis mentitum. Ex esse recteque eos, ex iudicabit gloriatur mei.
|
||||
|
||||
Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue:
|
||||
|
||||
1. Maecenas nec odio et ante tincidunt tempus.
|
||||
|
||||
2. Donec sodales sagittis magna.
|
||||
|
||||
3. Phasellus viverra nulla ut metus varius laoreet.
|
||||
|
||||
Li Europan lingues es membres del sam familie. Lor separat existentie es un
|
||||
myth.
|
||||
|
||||
It va esser tam simplic quam Occidental in fact, it va esser Occidental. A un
|
||||
Angleso it va semblar un simplificat Angles, quam un skeptic Cambridge amico
|
||||
dit me que Occidental es.Li Europan lingues es membres del sam familie. Lor
|
||||
separat existentie es un myth. Por scientie, musica, sport etc, litot Europa
|
||||
usa li sam vocabular. Li lingues differe solmen in li grammatica, li
|
||||
pronunciation e li plu commun vocabules. Omnicos directe al desirabilite de
|
||||
un nov lingua franca: On refusa continuar payar custosi traductores. At
|
||||
solmen va esser necessi far uniform grammatica, pronunciation e plu sommun
|
||||
paroles.
|
||||
|
||||
|
||||
2. Illum argumentum sed a
|
||||
|
||||
Illum argumentum sed ad, vel accumsan noluisse eu. Nam ne minimum consulatu,
|
||||
vim nullam quidam ut. Ea pro temporibus ullamcorper, at case aeque vix. Est
|
||||
id consetetur intellegam. Eu cum oratio gubergren, aeque tritani feugiat vel
|
||||
te.
|
||||
|
||||
· Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
|
||||
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore
|
||||
veritatis et quasi architecto beatae vitae dicta sunt explicabo.
|
||||
|
||||
· Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam
|
||||
nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas
|
||||
nulla pariatur?
|
||||
|
||||
cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod
|
||||
maxime placeat facere.
|
||||
|
||||
To install the tar.gz source, use the commands:
|
||||
|
||||
______________________________________________________________________
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
______________________________________________________________________
|
||||
|
||||
|
||||
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed
|
||||
quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
|
||||
Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,
|
||||
adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore
|
||||
et dolore magnam aliquam quaerat voluptatem.
|
||||
|
||||
|
||||
3. In eum magna iusto integre
|
||||
|
||||
In eum magna iusto integre, cu solet commodo constituto pro. Te nec tota
|
||||
altera, diam periculis ius eu, eum te velit partiendo conclusionemque. Diam
|
||||
mnesarchum at usu, agam nonumes at nec. Vix aliquip liberavisse ex, nam at
|
||||
quis choro accusam. Eu his zril graecis, latine legendos inimicus eum at, qui
|
||||
te adolescens adipiscing.
|
Loading…
Reference in New Issue