mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2025-12-19 07:37:41 +03:00
Fix: Footnotes crashes after Screen→Activity refactor
This commit is contained in:
parent
b2985f87d3
commit
91a0677503
@ -46,7 +46,6 @@ void EpubReaderActivity::onEnter() {
|
|||||||
nextPageNumber = data[2] + (data[3] << 8);
|
nextPageNumber = data[2] + (data[3] << 8);
|
||||||
Serial.printf("[%lu] [ERS] Loaded cache: %d, %d\n", millis(), currentSpineIndex, nextPageNumber);
|
Serial.printf("[%lu] [ERS] Loaded cache: %d, %d\n", millis(), currentSpineIndex, nextPageNumber);
|
||||||
f.close();
|
f.close();
|
||||||
f.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trigger first update
|
// Trigger first update
|
||||||
@ -322,11 +321,16 @@ void EpubReaderActivity::renderScreen() {
|
|||||||
return renderScreen();
|
return renderScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Serial.printf("[%lu] [ERS] Page loaded: %d elements, %d footnotes\n",
|
||||||
|
millis(), p->elementCount, p->footnoteCount);
|
||||||
|
|
||||||
// Copy footnotes from page to currentPageFootnotes
|
// Copy footnotes from page to currentPageFootnotes
|
||||||
currentPageFootnotes.clear();
|
currentPageFootnotes.clear();
|
||||||
for (int i = 0; i < p->footnoteCount && i < 16; i++) {
|
int maxFootnotes = (p->footnoteCount < 16) ? p->footnoteCount : 16;
|
||||||
|
|
||||||
|
for (int i = 0; i < maxFootnotes; i++) {
|
||||||
FootnoteEntry* footnote = p->getFootnote(i);
|
FootnoteEntry* footnote = p->getFootnote(i);
|
||||||
if (footnote) {
|
if (footnote && footnote->href[0] != '\0') {
|
||||||
currentPageFootnotes.addFootnote(footnote->number, footnote->href);
|
currentPageFootnotes.addFootnote(footnote->number, footnote->href);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,15 +7,20 @@
|
|||||||
#include "../Activity.h"
|
#include "../Activity.h"
|
||||||
|
|
||||||
class FootnotesData {
|
class FootnotesData {
|
||||||
private:
|
private:
|
||||||
FootnoteEntry entries[32];
|
FootnoteEntry entries[16];
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FootnotesData() : count(0) {}
|
FootnotesData() : count(0) {
|
||||||
|
for (int i = 0; i < 16; i++) {
|
||||||
|
entries[i].number[0] = '\0';
|
||||||
|
entries[i].href[0] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void addFootnote(const char* number, const char* href) {
|
void addFootnote(const char* number, const char* href) {
|
||||||
if (count < 32) {
|
if (count < 16 && number && href) {
|
||||||
strncpy(entries[count].number, number, 2);
|
strncpy(entries[count].number, number, 2);
|
||||||
entries[count].number[2] = '\0';
|
entries[count].number[2] = '\0';
|
||||||
strncpy(entries[count].href, href, 63);
|
strncpy(entries[count].href, href, 63);
|
||||||
@ -24,7 +29,13 @@ class FootnotesData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear() { count = 0; }
|
void clear() {
|
||||||
|
count = 0;
|
||||||
|
for (int i = 0; i < 16; i++) {
|
||||||
|
entries[i].number[0] = '\0';
|
||||||
|
entries[i].href[0] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int getCount() const { return count; }
|
int getCount() const { return count; }
|
||||||
|
|
||||||
@ -42,7 +53,7 @@ class EpubReaderFootnotesActivity final : public Activity {
|
|||||||
const std::function<void(const char*)> onSelectFootnote;
|
const std::function<void(const char*)> onSelectFootnote;
|
||||||
int selectedIndex;
|
int selectedIndex;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EpubReaderFootnotesActivity(GfxRenderer& renderer, InputManager& inputManager, const FootnotesData& footnotes,
|
EpubReaderFootnotesActivity(GfxRenderer& renderer, InputManager& inputManager, const FootnotesData& footnotes,
|
||||||
const std::function<void()>& onGoBack,
|
const std::function<void()>& onGoBack,
|
||||||
const std::function<void(const char*)>& onSelectFootnote)
|
const std::function<void(const char*)>& onSelectFootnote)
|
||||||
@ -56,6 +67,6 @@ class EpubReaderFootnotesActivity final : public Activity {
|
|||||||
void onExit() override;
|
void onExit() override;
|
||||||
void loop() override;
|
void loop() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void render();
|
void render();
|
||||||
};
|
};
|
||||||
Loading…
Reference in New Issue
Block a user