diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index 9f49d5393..516faa88c 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -153,15 +153,41 @@ function ReaderToc:getPreviousChapter(cur_pageno, level) return previous_chapter end +function ReaderToc:isChapterBegin(cur_pageno, level) + local ticks = self:getTocTicks(level) + local _begin = false + for i = 1, #ticks do + if ticks[i] == cur_pageno then + _begin = true + break + end + end + return _begin +end + +function ReaderToc:isChapterEnd(cur_pageno, level) + local ticks = self:getTocTicks(level) + local _end= false + for i = 1, #ticks do + if ticks[i] - 1 == cur_pageno then + _end = true + break + end + end + return _end +end + function ReaderToc:getChapterPagesLeft(pageno, level) + --if self:isChapterEnd(pageno, level) then return 0 end local next_chapter = self:getNextChapter(pageno, level) if next_chapter then - next_chapter = next_chapter - pageno + next_chapter = next_chapter - pageno - 1 end return next_chapter end function ReaderToc:getChapterPagesDone(pageno, level) + if self:isChapterBegin(pageno, level) then return 0 end local previous_chapter = self:getPreviousChapter(pageno, level) if previous_chapter then previous_chapter = pageno - previous_chapter diff --git a/spec/unit/readertoc_spec.lua b/spec/unit/readertoc_spec.lua index 6798f8df0..ed1c81f17 100644 --- a/spec/unit/readertoc_spec.lua +++ b/spec/unit/readertoc_spec.lua @@ -24,6 +24,7 @@ describe("Readertoc module", function() local ticks_level_0 = nil it("should get ticks of level 0", function() ticks_level_0 = toc:getTocTicks(0) + DEBUG("ticks", ticks_level_0) assert.are.same(26, #ticks_level_0) end) local ticks_level_1 = nil @@ -53,8 +54,13 @@ describe("Readertoc module", function() assert.are.same(190, toc:getPreviousChapter(200, 0)) end) it("should get page left of chapter", function() - assert.are.same(15, toc:getChapterPagesLeft(10, 0)) - assert.are.same(3, toc:getChapterPagesLeft(100, 0)) + assert.are.same(14, toc:getChapterPagesLeft(10, 0)) + assert.are.same(2, toc:getChapterPagesLeft(100, 0)) assert.are.same(nil, toc:getChapterPagesLeft(200, 0)) end) + it("should get page done of chapter", function() + assert.are.same(1, toc:getChapterPagesDone(10, 0)) + assert.are.same(0, toc:getChapterPagesDone(100, 0)) + assert.are.same(10, toc:getChapterPagesDone(200, 0)) + end) end) diff --git a/test/juliet.epub b/test/juliet.epub new file mode 100644 index 000000000..a29d2e019 Binary files /dev/null and b/test/juliet.epub differ