diff --git a/include/manager.h b/include/manager.h index a2f4ea1c6..513366bd2 100644 --- a/include/manager.h +++ b/include/manager.h @@ -254,6 +254,16 @@ class Manager const string creator, const string publisher, const string search); + + /** + * Filter the library and generate a new one with the keep elements. + * + * @param search List only books with search in the title or description. + * @return A `Library`. + */ + Library filter(const string& search); + + /** * Get all langagues of the books in the library. * diff --git a/src/manager.cpp b/src/manager.cpp index 4caa57307..79ca21d7d 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -626,6 +626,24 @@ bool Manager::listBooks(const supportedListMode mode, return true; } + +Library Manager::filter(const std::string& search) { + Library library; + + if (search.empty()) { + return library; + } + + for(auto book:this->library.books) { + if (matchRegex(book.title, "\\Q" + search + "\\E") + || matchRegex(book.description, "\\Q" + search + "\\E")) { + library.addBook(book); + } + } + + return library; +} + void Manager::checkAndCleanBookPaths(Book& book, const string& libraryPath) { if (!book.path.empty()) {