From bf40d4ff91e42bd83480b458bcab0d2d9c4a7348 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Thu, 6 Sep 2018 18:59:51 +0200 Subject: [PATCH] Adapt kiwix-manage to new kiwix-lib API. - Books are identified by Id, not by index. - No more current option. --- src/manager/kiwix-manage.cpp | 82 ++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 45 deletions(-) diff --git a/src/manager/kiwix-manage.cpp b/src/manager/kiwix-manage.cpp index d6bdf7a..ccfb828 100644 --- a/src/manager/kiwix-manage.cpp +++ b/src/manager/kiwix-manage.cpp @@ -30,25 +30,26 @@ using namespace std; enum supportedAction { NONE, ADD, SHOW, REMOVE }; -void show(kiwix::Library library) +void show(kiwix::Library* library) { - std::vector::iterator itr; + auto booksIds = library->getBooksIds(); unsigned int inc = 1; - for (itr = library.books.begin(); itr != library.books.end(); ++itr) { + for(auto& id: booksIds) { + auto& book = library->getBookById(id); std::cout << "#" << inc++ << std::endl - << "id:\t\t" << itr->id << std::endl - << "path:\t\t" << itr->path << std::endl - << "indexpath:\t" << itr->indexPath << std::endl - << "url:\t\t" << itr->url << std::endl - << "title:\t\t" << itr->title << std::endl - << "name:\t\t" << itr->name << std::endl - << "tags:\t\t" << itr->tags << std::endl - << "description:\t" << itr->description << std::endl - << "creator:\t" << itr->creator << std::endl - << "date:\t\t" << itr->date << std::endl - << "articleCount:\t" << itr->articleCount << std::endl - << "mediaCount:\t" << itr->mediaCount << std::endl - << "size:\t\t" << itr->size << " KB" << std::endl + << "id:\t\t" << book.getId() << std::endl + << "path:\t\t" << book.getPath() << std::endl + << "indexpath:\t" << book.getIndexPath() << std::endl + << "url:\t\t" << book.getUrl() << std::endl + << "title:\t\t" << book.getTitle() << std::endl + << "name:\t\t" << book.getName() << std::endl + << "tags:\t\t" << book.getTags() << std::endl + << "description:\t" << book.getDescription() << std::endl + << "creator:\t" << book.getCreator() << std::endl + << "date:\t\t" << book.getDate() << std::endl + << "articleCount:\t" << book.getArticleCount() << std::endl + << "mediaCount:\t" << book.getMediaCount() << std::endl + << "size:\t\t" << book.getSize() << " KB" << std::endl << std::endl; } } @@ -68,14 +69,14 @@ void usage() } -bool handle_show(kiwix::Manager* libraryManager, const std::string& libraryPath, +bool handle_show(kiwix::Library* library, const std::string& libraryPath, int argc, char* argv[]) { - show(libraryManager->cloneLibrary()); + show(library); return(0); } -bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath, +bool handle_add(kiwix::Library* library, const std::string& libraryPath, int argc, char* argv[]) { string zimPath; @@ -84,7 +85,6 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath, kiwix::supportedIndexType indexBackend = kiwix::XAPIAN; string url; string origID = ""; - bool setCurrent = false; int option_index = 0; int c = 0; bool resultCode = 0; @@ -102,7 +102,6 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath, {"indexPath", required_argument, 0, 'i'}, {"indexBackend", required_argument, 0, 'b'}, {"zimPathToSave", required_argument, 0, 'z'}, - {"current", no_argument, 0, 'c'}, {0, 0, 0, 0}}; c = getopt_long(argc, argv, "cz:u:i:b:", long_options, &option_index); @@ -117,10 +116,6 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath, origID = optarg; break; - case 'c': - setCurrent = true; - break; - case 'i': indexPath = optarg; break; @@ -143,15 +138,14 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath, } if (!zimPath.empty()) { + kiwix::Manager manager(library); zimPathToSave = zimPathToSave == "." ? zimPath : zimPathToSave; - string bookId = libraryManager->addBookFromPathAndGetId( + string bookId = manager.addBookFromPathAndGetId( zimPath, zimPathToSave, url, false); if (!bookId.empty()) { - if (setCurrent) - libraryManager->setCurrentBookId(bookId); /* Save the index infos if necessary */ if (!indexPath.empty()) - libraryManager->setBookIndex(bookId, indexPath, indexBackend); + manager.setBookIndex(bookId, indexPath, indexBackend); } else { cerr << "Unable to build or save library file '" << libraryPath << "'" << endl; @@ -165,28 +159,25 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath, return(resultCode); } -bool handle_remove(kiwix::Manager* libraryManager, const std::string& libraryPath, +bool handle_remove(kiwix::Library* library, const std::string& libraryPath, int argc, char* argv[]) { - unsigned int bookIndex = 0; - const unsigned int totalBookCount = libraryManager->getBookCount(true, true); + std::string bookId = 0; + const unsigned int totalBookCount = library->getBookCount(true, true); bool exitCode = 0; if (argc > 3) { - bookIndex = atoi(argv[3]); + bookId = argv[3]; } - if (bookIndex > 0 && bookIndex <= totalBookCount) { - libraryManager->removeBookByIndex(bookIndex - 1); - } else { + if (!library->removeBookById(bookId)) { if (totalBookCount > 0) { std::cerr - << "Invalid book index number. Please give a number between 1 and " - << totalBookCount << std::endl; + << "Invalid book id." << std::endl; exitCode = 1; } else { std::cerr - << "Invalid book index number. Library is empty, no book to delete." + << "Invalid book id. Library is empty, no book to delete." << std::endl; exitCode = 1; } @@ -199,7 +190,7 @@ int main(int argc, char** argv) { string libraryPath = ""; supportedAction action = NONE; - kiwix::Manager libraryManager; + kiwix::Library library; /* Argument parsing */ if (argc > 2) { @@ -224,21 +215,22 @@ int main(int argc, char** argv) libraryPath = isRelativePath(libraryPath) ? computeAbsolutePath(getCurrentDirectory(), libraryPath) : libraryPath; - libraryManager.readFile(libraryPath, false); + kiwix::Manager manager(&library); + manager.readFile(libraryPath, false); /* SHOW */ bool exitCode = 0; if (action == SHOW) { - exitCode = handle_show(&libraryManager, libraryPath, argc, argv); + exitCode = handle_show(&library, libraryPath, argc, argv); } else if (action == ADD) { - exitCode = handle_add(&libraryManager, libraryPath, argc, argv); + exitCode = handle_add(&library, libraryPath, argc, argv); } else if (action == REMOVE) { - exitCode = handle_remove(&libraryManager, libraryPath, argc, argv); + exitCode = handle_remove(&library, libraryPath, argc, argv); } /* Rewrite the library file */ if (action == REMOVE || action == ADD) { - libraryManager.writeFile(libraryPath); + library.writeToFile(libraryPath); } exit(exitCode);