From ad92af928ba079ce62d42558d465706ac4712e92 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Mon, 26 Mar 2018 21:25:01 +0200 Subject: [PATCH] Be able to filter a library. This generate a new library only with the corresponding books. --- include/manager.h | 10 ++++++++++ src/manager.cpp | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) 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()) {