Manager::reload() also removes books from Library

This commit is contained in:
Veloman Yunkan 2021-11-28 20:55:09 +04:00
parent 262e13845c
commit 7161db8e2a
2 changed files with 20 additions and 0 deletions

View File

@ -45,10 +45,12 @@ class LibraryManipulator
bool addBookToLibrary(const Book& book); bool addBookToLibrary(const Book& book);
void addBookmarkToLibrary(const Bookmark& bookmark); void addBookmarkToLibrary(const Bookmark& bookmark);
uint32_t removeBooksNotUpdatedSince(Library::Revision rev);
protected: // overrides protected: // overrides
virtual void bookWasAddedToLibrary(const Book& book); virtual void bookWasAddedToLibrary(const Book& book);
virtual void bookmarkWasAddedToLibrary(const Bookmark& bookmark); virtual void bookmarkWasAddedToLibrary(const Bookmark& bookmark);
virtual void booksWereRemovedFromLibrary();
private: // data private: // data
kiwix::Library& library; kiwix::Library& library;
@ -81,6 +83,8 @@ class Manager
* Sync the contents of the library with one or more `library.xml` files. * Sync the contents of the library with one or more `library.xml` files.
* *
* The metadata of the library files is trusted unconditionally. * The metadata of the library files is trusted unconditionally.
* Any books not present in the input library.xml files are removed
* from the library.
* *
* @param paths The (utf8) paths to the `library.xml` files. * @param paths The (utf8) paths to the `library.xml` files.
*/ */

View File

@ -63,6 +63,15 @@ void LibraryManipulator::addBookmarkToLibrary(const Bookmark& bookmark)
bookmarkWasAddedToLibrary(bookmark); bookmarkWasAddedToLibrary(bookmark);
} }
uint32_t LibraryManipulator::removeBooksNotUpdatedSince(Library::Revision rev)
{
const auto n = library.removeBooksNotUpdatedSince(rev);
if ( n != 0 ) {
booksWereRemovedFromLibrary();
}
return n;
}
void LibraryManipulator::bookWasAddedToLibrary(const Book& book) void LibraryManipulator::bookWasAddedToLibrary(const Book& book)
{ {
} }
@ -71,6 +80,10 @@ void LibraryManipulator::bookmarkWasAddedToLibrary(const Bookmark& bookmark)
{ {
} }
void LibraryManipulator::booksWereRemovedFromLibrary()
{
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Manager // Manager
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -291,6 +304,7 @@ bool Manager::readBookmarkFile(const std::string& path)
void Manager::reload(const Paths& paths) void Manager::reload(const Paths& paths)
{ {
const auto libRevision = manipulator->getLibrary().getRevision();
for (std::string path : paths) { for (std::string path : paths) {
if (!path.empty()) { if (!path.empty()) {
if ( kiwix::isRelativePath(path) ) if ( kiwix::isRelativePath(path) )
@ -301,6 +315,8 @@ void Manager::reload(const Paths& paths)
} }
} }
} }
manipulator->removeBooksNotUpdatedSince(libRevision);
} }
} }