Phase 4- Full format support

This commit is contained in:
jpirnay
2026-05-20 00:25:06 +02:00
parent dddb3c1bcb
commit dcbe79aab2
3 changed files with 48 additions and 4 deletions
+17 -1
View File
@@ -15,9 +15,11 @@
#include "CrossPointState.h"
#include "FinishedBookActivity.h"
#include "GlobalBookmarkIndex.h"
#include "KOReaderDocumentId.h"
#include "MappedInputManager.h"
#include "ReaderActivity.h"
#include "ReaderUtils.h"
#include "ReadingSessionTracker.h"
#include "RecentBooksStore.h"
#include "StarredPagesActivity.h"
#include "components/UITheme.h"
@@ -124,6 +126,10 @@ void TxtReaderActivity::onEnter() {
const std::string txtCover = txtSidecar.empty() ? txt->getThumbBmpPath() : txtSidecar;
RECENT_BOOKS.addBook(filePath, fileName, "", "", txtCover);
// Start reading-stats session. Same filename-hash policy as EPUB so renamed
// files start fresh; author is unknown for plain TXT.
globalReadingSessionTracker().begin(KOReaderDocumentId::calculateFromFilename(filePath), fileName, "");
// Trigger first update
requestUpdate();
}
@@ -131,6 +137,10 @@ void TxtReaderActivity::onEnter() {
void TxtReaderActivity::onExit() {
Activity::onExit();
// Flush the stats session before tearing down the txt — same pattern as
// EpubReaderActivity::onExit().
globalReadingSessionTracker().end();
// Save bookmarks before exit
bookmarkStore.save();
if (txt) {
@@ -195,6 +205,7 @@ void TxtReaderActivity::loop() {
ev.type == ButtonEventManager::PressType::Short) {
if (currentPage > 0) {
currentPage--;
globalReadingSessionTracker().onPageTurn();
requestUpdate();
}
return;
@@ -204,6 +215,7 @@ void TxtReaderActivity::loop() {
ev.type == ButtonEventManager::PressType::Short) {
if (currentPage < totalPages - 1) {
currentPage++;
globalReadingSessionTracker().onPageTurn();
requestUpdate();
} else {
launchFinishedBookFlow();
@@ -220,11 +232,13 @@ void TxtReaderActivity::loop() {
if (prevTriggered) {
if (currentPage > 0) {
currentPage--;
globalReadingSessionTracker().onPageTurn();
requestUpdate();
}
} else if (nextTriggered) {
if (currentPage < totalPages - 1) {
currentPage++;
globalReadingSessionTracker().onPageTurn();
requestUpdate();
} else {
launchFinishedBookFlow();
@@ -515,6 +529,7 @@ void TxtReaderActivity::saveProgress() const {
// 7-byte format: page(2 bytes LE) + file offset(4 bytes LE) + overallPercent(1 byte)
// The offset lets drawCurrentPageToBuffer render without requiring index.bin.
const size_t offset = (currentPage < static_cast<int>(pageOffsets.size())) ? pageOffsets[currentPage] : 0;
const uint8_t percent = ReaderUtils::pageProgressPercentByte(currentPage, totalPages);
uint8_t data[7];
data[0] = currentPage & 0xFF;
data[1] = (currentPage >> 8) & 0xFF;
@@ -522,9 +537,10 @@ void TxtReaderActivity::saveProgress() const {
data[3] = (offset >> 8) & 0xFF;
data[4] = (offset >> 16) & 0xFF;
data[5] = (offset >> 24) & 0xFF;
data[6] = ReaderUtils::pageProgressPercentByte(currentPage, totalPages);
data[6] = percent;
f.write(data, 7);
f.close();
globalReadingSessionTracker().updateProgress(percent);
}
}