Remove empty sentinel BMP file from generateThumbBmp() that blocked placeholder generation for books without covers. Add removeBook() to RecentBooksStore and clear book from recents on cache delete. Ensure home screen always generates placeholder when thumbnail generation fails. Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
#pragma once
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
struct RecentBook {
|
|
std::string path;
|
|
std::string title;
|
|
std::string author;
|
|
std::string coverBmpPath;
|
|
|
|
bool operator==(const RecentBook& other) const { return path == other.path; }
|
|
};
|
|
|
|
class RecentBooksStore {
|
|
// Static instance
|
|
static RecentBooksStore instance;
|
|
|
|
std::vector<RecentBook> recentBooks;
|
|
|
|
public:
|
|
~RecentBooksStore() = default;
|
|
|
|
// Get singleton instance
|
|
static RecentBooksStore& getInstance() { return instance; }
|
|
|
|
// Add a book to the recent list (moves to front if already exists)
|
|
void addBook(const std::string& path, const std::string& title, const std::string& author,
|
|
const std::string& coverBmpPath);
|
|
|
|
void updateBook(const std::string& path, const std::string& title, const std::string& author,
|
|
const std::string& coverBmpPath);
|
|
|
|
// Remove a book from the recent list by path
|
|
void removeBook(const std::string& path);
|
|
|
|
// Get the list of recent books (most recent first)
|
|
const std::vector<RecentBook>& getBooks() const { return recentBooks; }
|
|
|
|
// Get the count of recent books
|
|
int getCount() const { return static_cast<int>(recentBooks.size()); }
|
|
|
|
bool saveToFile() const;
|
|
|
|
bool loadFromFile();
|
|
RecentBook getDataFromBook(std::string path) const;
|
|
};
|
|
|
|
// Helper macro to access recent books store
|
|
#define RECENT_BOOKS RecentBooksStore::getInstance()
|