Library::addBook() updates the reader cache

This commit is contained in:
Veloman Yunkan 2021-11-20 22:08:12 +04:00
parent 2d6a7fe88d
commit 76a5e3a877
2 changed files with 17 additions and 2 deletions

View File

@ -357,6 +357,7 @@ private: // functions
std::vector<std::string> getBookPropValueSet(BookStrPropMemFn p) const; std::vector<std::string> getBookPropValueSet(BookStrPropMemFn p) const;
BookIdCollection filterViaBookDB(const Filter& filter) const; BookIdCollection filterViaBookDB(const Filter& filter) const;
void updateBookDB(const Book& book); void updateBookDB(const Book& book);
void dropReader(const std::string& bookId);
}; };
} }

View File

@ -49,6 +49,13 @@ std::string normalizeText(const std::string& text)
return removeAccents(text); return removeAccents(text);
} }
bool booksReferToTheSameArchive(const Book& book1, const Book& book2)
{
return book1.isPathValid()
&& book2.isPathValid()
&& book1.getPath() == book2.getPath();
}
} // unnamed namespace } // unnamed namespace
class Library::BookDB : public Xapian::WritableDatabase class Library::BookDB : public Xapian::WritableDatabase
@ -79,6 +86,9 @@ bool Library::addBook(const Book& book)
updateBookDB(book); updateBookDB(book);
try { try {
auto& oldbook = m_books.at(book.getId()); auto& oldbook = m_books.at(book.getId());
if ( ! booksReferToTheSameArchive(oldbook, book) ) {
dropReader(book.getId());
}
oldbook.update(book); oldbook.update(book);
return false; return false;
} catch (std::out_of_range&) { } catch (std::out_of_range&) {
@ -104,12 +114,16 @@ bool Library::removeBookmark(const std::string& zimId, const std::string& url)
} }
void Library::dropReader(const std::string& id)
{
m_readers.erase(id);
m_archives.erase(id);
}
bool Library::removeBookById(const std::string& id) bool Library::removeBookById(const std::string& id)
{ {
m_bookDB->delete_document("Q" + id); m_bookDB->delete_document("Q" + id);
m_readers.erase(id); dropReader(id);
m_archives.erase(id);
return m_books.erase(id) == 1; return m_books.erase(id) == 1;
} }