Merge branch 'feat-koysnc-xpath' of https://github.com/jpirnay/crosspoint-reader into mybuild
This commit is contained in:
@@ -84,6 +84,14 @@ class ChapterHtmlSlimParser {
|
|||||||
int xpathBodyDepth = -1; // depth of the <body> element (-1 = not yet seen)
|
int xpathBodyDepth = -1; // depth of the <body> element (-1 = not yet seen)
|
||||||
std::vector<uint16_t> paragraphIndexPerPage; // <p> index at each page completion
|
std::vector<uint16_t> paragraphIndexPerPage; // <p> index at each page completion
|
||||||
|
|
||||||
|
// Paragraph index tracking for XPath-to-page lookup table.
|
||||||
|
// Counts <p> sibling indices (1-based, matching XPath convention) during page building.
|
||||||
|
// Stored per page in the section cache so that XPath p[N] can be resolved to a page
|
||||||
|
// without reparsing, and current page can generate an XPath without reparsing.
|
||||||
|
uint16_t xpathParagraphIndex = 0; // current <p> sibling index (1-based)
|
||||||
|
int xpathBodyDepth = -1; // depth of the <body> element (-1 = not yet seen)
|
||||||
|
std::vector<uint16_t> paragraphIndexPerPage; // <p> index at each page completion
|
||||||
|
|
||||||
// Footnote link tracking
|
// Footnote link tracking
|
||||||
bool insideFootnoteLink = false;
|
bool insideFootnoteLink = false;
|
||||||
int footnoteLinkDepth = -1;
|
int footnoteLinkDepth = -1;
|
||||||
|
|||||||
@@ -176,5 +176,8 @@ HalFile HalFile::openNextFile() {
|
|||||||
assert(impl != nullptr);
|
assert(impl != nullptr);
|
||||||
return HalFile(std::make_unique<Impl>(impl->file.openNextFile()));
|
return HalFile(std::make_unique<Impl>(impl->file.openNextFile()));
|
||||||
}
|
}
|
||||||
|
bool HalFile::getModifyDateTime(uint16_t* pdate, uint16_t* ptime) {
|
||||||
|
HAL_FILE_WRAPPED_CALL(getModifyDateTime, pdate, ptime);
|
||||||
|
}
|
||||||
bool HalFile::isOpen() const { return impl != nullptr && impl->file.isOpen(); } // already thread-safe, no need to wrap
|
bool HalFile::isOpen() const { return impl != nullptr && impl->file.isOpen(); } // already thread-safe, no need to wrap
|
||||||
HalFile::operator bool() const { return isOpen(); }
|
HalFile::operator bool() const { return isOpen(); }
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ class HalFile : public Print {
|
|||||||
void rewindDirectory();
|
void rewindDirectory();
|
||||||
bool close();
|
bool close();
|
||||||
HalFile openNextFile();
|
HalFile openNextFile();
|
||||||
|
bool getModifyDateTime(uint16_t* pdate, uint16_t* ptime);
|
||||||
bool isOpen() const;
|
bool isOpen() const;
|
||||||
operator bool() const;
|
operator bool() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -201,6 +201,7 @@ void KOReaderSyncActivity::performUpload() {
|
|||||||
{
|
{
|
||||||
RenderLock lock(*this);
|
RenderLock lock(*this);
|
||||||
state = UPLOAD_COMPLETE;
|
state = UPLOAD_COMPLETE;
|
||||||
|
uploadCompleteTime = millis();
|
||||||
}
|
}
|
||||||
requestUpdate(true);
|
requestUpdate(true);
|
||||||
}
|
}
|
||||||
@@ -351,6 +352,13 @@ void KOReaderSyncActivity::render(RenderLock&&) {
|
|||||||
|
|
||||||
void KOReaderSyncActivity::loop() {
|
void KOReaderSyncActivity::loop() {
|
||||||
if (state == NO_CREDENTIALS || state == SYNC_FAILED || state == UPLOAD_COMPLETE) {
|
if (state == NO_CREDENTIALS || state == SYNC_FAILED || state == UPLOAD_COMPLETE) {
|
||||||
|
if (state == UPLOAD_COMPLETE && millis() - uploadCompleteTime >= 3000) {
|
||||||
|
ActivityResult result;
|
||||||
|
result.isCancelled = true;
|
||||||
|
setResult(std::move(result));
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (mappedInput.wasReleased(MappedInputManager::Button::Back)) {
|
if (mappedInput.wasReleased(MappedInputManager::Button::Back)) {
|
||||||
ActivityResult result;
|
ActivityResult result;
|
||||||
result.isCancelled = true;
|
result.isCancelled = true;
|
||||||
|
|||||||
@@ -78,6 +78,9 @@ class KOReaderSyncActivity final : public Activity {
|
|||||||
// Selection in result screen (0=Apply, 1=Upload)
|
// Selection in result screen (0=Apply, 1=Upload)
|
||||||
int selectedOption = 0;
|
int selectedOption = 0;
|
||||||
|
|
||||||
|
// Timestamp when UPLOAD_COMPLETE state was entered (for auto-close)
|
||||||
|
unsigned long uploadCompleteTime = 0;
|
||||||
|
|
||||||
void onWifiSelectionComplete(bool success);
|
void onWifiSelectionComplete(bool success);
|
||||||
void performSync();
|
void performSync();
|
||||||
void performUpload();
|
void performUpload();
|
||||||
|
|||||||
Reference in New Issue
Block a user