diff --git a/include/manager.h b/include/manager.h index af12eac02..f80421b73 100644 --- a/include/manager.h +++ b/include/manager.h @@ -35,26 +35,23 @@ class xml_document; namespace kiwix { -class LibraryManipulator { - public: - virtual ~LibraryManipulator() {} - virtual bool addBookToLibrary(Book book) = 0; - virtual void addBookmarkToLibrary(Bookmark bookmark) = 0; -}; +class LibraryManipulator +{ + public: // functions + explicit LibraryManipulator(Library* library); + virtual ~LibraryManipulator(); -class DefaultLibraryManipulator : public LibraryManipulator { - public: - DefaultLibraryManipulator(Library* library) : - library(library) {} - virtual ~DefaultLibraryManipulator() {} - bool addBookToLibrary(Book book) { - return library->addBook(book); - } - void addBookmarkToLibrary(Bookmark bookmark) { - library->addBookmark(bookmark); - } - private: - kiwix::Library* library; + Library& getLibrary() const { return library; } + + bool addBookToLibrary(const Book& book); + void addBookmarkToLibrary(const Bookmark& bookmark); + + protected: // overrides + virtual void bookWasAddedToLibrary(const Book& book); + virtual void bookmarkWasAddedToLibrary(const Bookmark& bookmark); + + private: // data + kiwix::Library& library; }; /** diff --git a/src/manager.cpp b/src/manager.cpp index dbd094c2b..f44ec9b53 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -37,6 +37,44 @@ struct NoDelete } // unnamed namespace +//////////////////////////////////////////////////////////////////////////////// +// LibraryManipulator +//////////////////////////////////////////////////////////////////////////////// + +LibraryManipulator::LibraryManipulator(Library* library) + : library(*library) +{} + +LibraryManipulator::~LibraryManipulator() +{} + +bool LibraryManipulator::addBookToLibrary(const Book& book) +{ + const auto ret = library.addBook(book); + if ( ret ) { + bookWasAddedToLibrary(book); + } + return ret; +} + +void LibraryManipulator::addBookmarkToLibrary(const Bookmark& bookmark) +{ + library.addBookmark(bookmark); + bookmarkWasAddedToLibrary(bookmark); +} + +void LibraryManipulator::bookWasAddedToLibrary(const Book& book) +{ +} + +void LibraryManipulator::bookmarkWasAddedToLibrary(const Bookmark& bookmark) +{ +} + +//////////////////////////////////////////////////////////////////////////////// +// Manager +//////////////////////////////////////////////////////////////////////////////// + /* Constructor */ Manager::Manager(LibraryManipulator* manipulator): writableLibraryPath(""), @@ -46,7 +84,7 @@ Manager::Manager(LibraryManipulator* manipulator): Manager::Manager(Library* library) : writableLibraryPath(""), - manipulator(new DefaultLibraryManipulator(library)) + manipulator(new LibraryManipulator(library)) { }