Add a LibraryManipulator.

Library client (kiwix-desktop) need to know when a book is added to
library by the manager. By using a LibraryManipulator, we can do
dependency injection.
This commit is contained in:
Matthieu Gautier
2018-10-16 17:46:00 +02:00
parent 8176a6eded
commit f718c4c472
2 changed files with 41 additions and 63 deletions

View File

@ -34,6 +34,24 @@ class xml_document;
namespace kiwix
{
class LibraryManipulator {
public:
virtual ~LibraryManipulator() {}
virtual bool addBookToLibrary(Book book) = 0;
};
class DefaultLibraryManipulator : public LibraryManipulator {
public:
DefaultLibraryManipulator(Library* library) :
library(library) {}
virtual ~DefaultLibraryManipulator() {}
bool addBookToLibrary(Book book) {
return library->addBook(book);
}
private:
kiwix::Library* library;
};
/**
* A tool to manage a `Library`.
*
@ -43,6 +61,7 @@ namespace kiwix
class Manager
{
public:
Manager(LibraryManipulator* manipulator);
Manager(Library* library);
~Manager();
@ -94,27 +113,6 @@ class Manager
*/
bool readOpds(const std::string& content, const std::string& urlHost);
/**
* Set the path of the external fulltext index associated to a book.
*
* @param id The id of the book to set.
* @param path The path of the external fullext index.
* @param supportedIndexType The type of the fulltext index.
* @return True if the book is in the library.
*/
bool setBookIndex(const std::string& id,
const std::string& path,
const supportedIndexType type = XAPIAN);
/**
* Set the path of the zim file associated to a book.
*
* @param id The id of the book to set.
* @param path The path of the zim file.
* @return True if the book is in the library.
*/
bool setBookPath(const std::string& id, const std::string& path);
/**
* Add a book to the library.
*
@ -201,7 +199,8 @@ class Manager
std::vector<std::string> bookIdList;
protected:
kiwix::Library* library;
kiwix::LibraryManipulator* manipulator;
bool mustDeleteManipulator;
bool readBookFromPath(const std::string& path, Book* book);
bool parseXmlDom(const pugi::xml_document& doc,