mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-04 14:47:37 +03:00
Fixed recent books migration
This commit is contained in:
parent
8a82397a79
commit
9572fc3fb2
@ -79,7 +79,8 @@ bool RecentBooksStore::loadFromFile() {
|
|||||||
serialization::readString(inputFile, path);
|
serialization::readString(inputFile, path);
|
||||||
// Title and author will be empty, they will be filled when the book is
|
// Title and author will be empty, they will be filled when the book is
|
||||||
// opened again
|
// opened again
|
||||||
recentBooks.push_back({path, "", "", ""});
|
std::string fileName = path.substr(path.rfind('/') + 1);
|
||||||
|
recentBooks.push_back({path, fileName, "", "-"});
|
||||||
}
|
}
|
||||||
} else if (version == 2) {
|
} else if (version == 2) {
|
||||||
// Old version, just read paths, titles and authors
|
// Old version, just read paths, titles and authors
|
||||||
@ -94,7 +95,7 @@ bool RecentBooksStore::loadFromFile() {
|
|||||||
serialization::readString(inputFile, author);
|
serialization::readString(inputFile, author);
|
||||||
// Title and author will be empty, they will be filled when the book is
|
// Title and author will be empty, they will be filled when the book is
|
||||||
// opened again
|
// opened again
|
||||||
recentBooks.push_back({path, title, author, ""});
|
recentBooks.push_back({path, title, author, "-"});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Serial.printf("[%lu] [RBS] Deserialization failed: Unknown version %u\n", millis(), version);
|
Serial.printf("[%lu] [RBS] Deserialization failed: Unknown version %u\n", millis(), version);
|
||||||
|
|||||||
@ -44,8 +44,11 @@ void HomeActivity::loadRecentBooks(int maxBooks, int coverHeight) {
|
|||||||
const auto& books = RECENT_BOOKS.getBooks();
|
const auto& books = RECENT_BOOKS.getBooks();
|
||||||
recentBooks.reserve(std::min(static_cast<int>(books.size()), maxBooks));
|
recentBooks.reserve(std::min(static_cast<int>(books.size()), maxBooks));
|
||||||
|
|
||||||
|
bool mustReloadRecents = false; // We're migrating from an older version of recent books
|
||||||
int progress = 0;
|
int progress = 0;
|
||||||
for (const RecentBook& book : books) {
|
for (const RecentBook& book : books) {
|
||||||
|
bool mustLoadCover = false;
|
||||||
|
|
||||||
// Limit to maximum number of recent books
|
// Limit to maximum number of recent books
|
||||||
if (recentBooks.size() >= maxBooks) {
|
if (recentBooks.size() >= maxBooks) {
|
||||||
break;
|
break;
|
||||||
@ -56,51 +59,70 @@ void HomeActivity::loadRecentBooks(int maxBooks, int coverHeight) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!book.coverBmpPath.empty()) {
|
if (book.coverBmpPath == "-") {
|
||||||
|
mustReloadRecents = true;
|
||||||
|
} else {
|
||||||
std::string coverPath = UITheme::getCoverThumbPath(book.coverBmpPath, coverHeight);
|
std::string coverPath = UITheme::getCoverThumbPath(book.coverBmpPath, coverHeight);
|
||||||
if (!SdMan.exists(coverPath.c_str())) {
|
if (!SdMan.exists(coverPath.c_str())) {
|
||||||
std::string lastBookFileName = "";
|
mustLoadCover = true;
|
||||||
const size_t lastSlash = book.path.find_last_of('/');
|
}
|
||||||
if (lastSlash != std::string::npos) {
|
}
|
||||||
lastBookFileName = book.path.substr(lastSlash + 1);
|
|
||||||
|
if (mustReloadRecents || mustLoadCover) {
|
||||||
|
std::string lastBookFileName = "";
|
||||||
|
const size_t lastSlash = book.path.find_last_of('/');
|
||||||
|
if (lastSlash != std::string::npos) {
|
||||||
|
lastBookFileName = book.path.substr(lastSlash + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.printf("Loading recent book: %s\n", book.path.c_str());
|
||||||
|
|
||||||
|
// If epub, try to load the metadata for title/author and cover
|
||||||
|
if (StringUtils::checkFileExtension(lastBookFileName, ".epub")) {
|
||||||
|
Epub epub(book.path, "/.crosspoint");
|
||||||
|
epub.load(false);
|
||||||
|
|
||||||
|
// Try to generate thumbnail image for Continue Reading card
|
||||||
|
if (!showingLoading) {
|
||||||
|
showingLoading = true;
|
||||||
|
popupRect = GUI.drawPopup(renderer, "Loading...");
|
||||||
}
|
}
|
||||||
|
GUI.fillPopupProgress(renderer, popupRect, progress * (100 / maxBooks));
|
||||||
|
epub.generateThumbBmp(coverHeight);
|
||||||
|
|
||||||
Serial.printf("Loading recent book: %s\n", book.path.c_str());
|
if (mustReloadRecents) {
|
||||||
|
// Update recent book entry with title/author/cover path
|
||||||
// If epub, try to load the metadata for title/author and cover
|
RECENT_BOOKS.addBook(book.path, epub.getTitle(), epub.getAuthor(), epub.getThumbBmpPath());
|
||||||
if (StringUtils::checkFileExtension(lastBookFileName, ".epub")) {
|
recentBooks.push_back({book.path, epub.getTitle(), epub.getAuthor(), epub.getThumbBmpPath()});
|
||||||
Epub epub(book.path, "/.crosspoint");
|
}
|
||||||
epub.load(false);
|
} else if (StringUtils::checkFileExtension(lastBookFileName, ".xtch") ||
|
||||||
|
StringUtils::checkFileExtension(lastBookFileName, ".xtc")) {
|
||||||
|
// Handle XTC file
|
||||||
|
Xtc xtc(book.path, "/.crosspoint");
|
||||||
|
if (xtc.load()) {
|
||||||
// Try to generate thumbnail image for Continue Reading card
|
// Try to generate thumbnail image for Continue Reading card
|
||||||
if (!showingLoading) {
|
if (!showingLoading) {
|
||||||
showingLoading = true;
|
showingLoading = true;
|
||||||
popupRect = GUI.drawPopup(renderer, "Loading...");
|
popupRect = GUI.drawPopup(renderer, "Loading...");
|
||||||
}
|
}
|
||||||
GUI.fillPopupProgress(renderer, popupRect, progress * 30);
|
GUI.fillPopupProgress(renderer, popupRect, progress * (100 / maxBooks));
|
||||||
epub.generateThumbBmp(coverHeight);
|
xtc.generateThumbBmp(coverHeight);
|
||||||
} else if (StringUtils::checkFileExtension(lastBookFileName, ".xtch") ||
|
|
||||||
StringUtils::checkFileExtension(lastBookFileName, ".xtc")) {
|
if (mustReloadRecents) {
|
||||||
// Handle XTC file
|
// Update recent book entry with title/author/cover path
|
||||||
Xtc xtc(book.path, "/.crosspoint");
|
RECENT_BOOKS.addBook(book.path, xtc.getTitle(), xtc.getAuthor(), xtc.getThumbBmpPath());
|
||||||
if (xtc.load()) {
|
recentBooks.push_back({book.path, xtc.getTitle(), xtc.getAuthor(), xtc.getThumbBmpPath()});
|
||||||
// Try to generate thumbnail image for Continue Reading card
|
|
||||||
if (!showingLoading) {
|
|
||||||
showingLoading = true;
|
|
||||||
popupRect = GUI.drawPopup(renderer, "Loading...");
|
|
||||||
}
|
|
||||||
GUI.fillPopupProgress(renderer, popupRect, progress * 30);
|
|
||||||
xtc.generateThumbBmp(coverHeight);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
recentBooks.push_back(book);
|
if (!mustReloadRecents) {
|
||||||
|
recentBooks.push_back(book);
|
||||||
|
}
|
||||||
progress++;
|
progress++;
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial.printf("Recent books loaded: %d\n", recentBooks.size());
|
|
||||||
recentsLoaded = true;
|
recentsLoaded = true;
|
||||||
recentsLoading = false;
|
recentsLoading = false;
|
||||||
updateRequired = true;
|
updateRequired = true;
|
||||||
|
|||||||
@ -58,9 +58,11 @@ void TxtReaderActivity::onEnter() {
|
|||||||
txt->setupCacheDir();
|
txt->setupCacheDir();
|
||||||
|
|
||||||
// Save current txt as last opened file and add to recent books
|
// Save current txt as last opened file and add to recent books
|
||||||
APP_STATE.openEpubPath = txt->getPath();
|
auto filePath = txt->getPath();
|
||||||
|
auto fileName = filePath.substr(filePath.rfind('/') + 1);
|
||||||
|
APP_STATE.openEpubPath = filePath;
|
||||||
APP_STATE.saveToFile();
|
APP_STATE.saveToFile();
|
||||||
RECENT_BOOKS.addBook(txt->getPath(), "", "", "");
|
RECENT_BOOKS.addBook(filePath, fileName, "", "");
|
||||||
|
|
||||||
// Trigger first update
|
// Trigger first update
|
||||||
updateRequired = true;
|
updateRequired = true;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user