Adapt kiwix-manage to new kiwix-lib API.

- Books are identified by Id, not by index.
- No more current option.
This commit is contained in:
Matthieu Gautier 2018-09-06 18:59:51 +02:00
parent 74fecd34e6
commit bf40d4ff91

View File

@ -30,25 +30,26 @@ using namespace std;
enum supportedAction { NONE, ADD, SHOW, REMOVE }; enum supportedAction { NONE, ADD, SHOW, REMOVE };
void show(kiwix::Library library) void show(kiwix::Library* library)
{ {
std::vector<kiwix::Book>::iterator itr; auto booksIds = library->getBooksIds();
unsigned int inc = 1; 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 std::cout << "#" << inc++ << std::endl
<< "id:\t\t" << itr->id << std::endl << "id:\t\t" << book.getId() << std::endl
<< "path:\t\t" << itr->path << std::endl << "path:\t\t" << book.getPath() << std::endl
<< "indexpath:\t" << itr->indexPath << std::endl << "indexpath:\t" << book.getIndexPath() << std::endl
<< "url:\t\t" << itr->url << std::endl << "url:\t\t" << book.getUrl() << std::endl
<< "title:\t\t" << itr->title << std::endl << "title:\t\t" << book.getTitle() << std::endl
<< "name:\t\t" << itr->name << std::endl << "name:\t\t" << book.getName() << std::endl
<< "tags:\t\t" << itr->tags << std::endl << "tags:\t\t" << book.getTags() << std::endl
<< "description:\t" << itr->description << std::endl << "description:\t" << book.getDescription() << std::endl
<< "creator:\t" << itr->creator << std::endl << "creator:\t" << book.getCreator() << std::endl
<< "date:\t\t" << itr->date << std::endl << "date:\t\t" << book.getDate() << std::endl
<< "articleCount:\t" << itr->articleCount << std::endl << "articleCount:\t" << book.getArticleCount() << std::endl
<< "mediaCount:\t" << itr->mediaCount << std::endl << "mediaCount:\t" << book.getMediaCount() << std::endl
<< "size:\t\t" << itr->size << " KB" << std::endl << "size:\t\t" << book.getSize() << " KB" << std::endl
<< 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[]) int argc, char* argv[])
{ {
show(libraryManager->cloneLibrary()); show(library);
return(0); 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[]) int argc, char* argv[])
{ {
string zimPath; string zimPath;
@ -84,7 +85,6 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath,
kiwix::supportedIndexType indexBackend = kiwix::XAPIAN; kiwix::supportedIndexType indexBackend = kiwix::XAPIAN;
string url; string url;
string origID = ""; string origID = "";
bool setCurrent = false;
int option_index = 0; int option_index = 0;
int c = 0; int c = 0;
bool resultCode = 0; bool resultCode = 0;
@ -102,7 +102,6 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath,
{"indexPath", required_argument, 0, 'i'}, {"indexPath", required_argument, 0, 'i'},
{"indexBackend", required_argument, 0, 'b'}, {"indexBackend", required_argument, 0, 'b'},
{"zimPathToSave", required_argument, 0, 'z'}, {"zimPathToSave", required_argument, 0, 'z'},
{"current", no_argument, 0, 'c'},
{0, 0, 0, 0}}; {0, 0, 0, 0}};
c = getopt_long(argc, argv, "cz:u:i:b:", long_options, &option_index); 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; origID = optarg;
break; break;
case 'c':
setCurrent = true;
break;
case 'i': case 'i':
indexPath = optarg; indexPath = optarg;
break; break;
@ -143,15 +138,14 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath,
} }
if (!zimPath.empty()) { if (!zimPath.empty()) {
kiwix::Manager manager(library);
zimPathToSave = zimPathToSave == "." ? zimPath : zimPathToSave; zimPathToSave = zimPathToSave == "." ? zimPath : zimPathToSave;
string bookId = libraryManager->addBookFromPathAndGetId( string bookId = manager.addBookFromPathAndGetId(
zimPath, zimPathToSave, url, false); zimPath, zimPathToSave, url, false);
if (!bookId.empty()) { if (!bookId.empty()) {
if (setCurrent)
libraryManager->setCurrentBookId(bookId);
/* Save the index infos if necessary */ /* Save the index infos if necessary */
if (!indexPath.empty()) if (!indexPath.empty())
libraryManager->setBookIndex(bookId, indexPath, indexBackend); manager.setBookIndex(bookId, indexPath, indexBackend);
} else { } else {
cerr << "Unable to build or save library file '" << libraryPath << "'" cerr << "Unable to build or save library file '" << libraryPath << "'"
<< endl; << endl;
@ -165,28 +159,25 @@ bool handle_add(kiwix::Manager* libraryManager, const std::string& libraryPath,
return(resultCode); 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[]) int argc, char* argv[])
{ {
unsigned int bookIndex = 0; std::string bookId = 0;
const unsigned int totalBookCount = libraryManager->getBookCount(true, true); const unsigned int totalBookCount = library->getBookCount(true, true);
bool exitCode = 0; bool exitCode = 0;
if (argc > 3) { if (argc > 3) {
bookIndex = atoi(argv[3]); bookId = argv[3];
} }
if (bookIndex > 0 && bookIndex <= totalBookCount) { if (!library->removeBookById(bookId)) {
libraryManager->removeBookByIndex(bookIndex - 1);
} else {
if (totalBookCount > 0) { if (totalBookCount > 0) {
std::cerr std::cerr
<< "Invalid book index number. Please give a number between 1 and " << "Invalid book id." << std::endl;
<< totalBookCount << std::endl;
exitCode = 1; exitCode = 1;
} else { } else {
std::cerr 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; << std::endl;
exitCode = 1; exitCode = 1;
} }
@ -199,7 +190,7 @@ int main(int argc, char** argv)
{ {
string libraryPath = ""; string libraryPath = "";
supportedAction action = NONE; supportedAction action = NONE;
kiwix::Manager libraryManager; kiwix::Library library;
/* Argument parsing */ /* Argument parsing */
if (argc > 2) { if (argc > 2) {
@ -224,21 +215,22 @@ int main(int argc, char** argv)
libraryPath = isRelativePath(libraryPath) libraryPath = isRelativePath(libraryPath)
? computeAbsolutePath(getCurrentDirectory(), libraryPath) ? computeAbsolutePath(getCurrentDirectory(), libraryPath)
: libraryPath; : libraryPath;
libraryManager.readFile(libraryPath, false); kiwix::Manager manager(&library);
manager.readFile(libraryPath, false);
/* SHOW */ /* SHOW */
bool exitCode = 0; bool exitCode = 0;
if (action == SHOW) { if (action == SHOW) {
exitCode = handle_show(&libraryManager, libraryPath, argc, argv); exitCode = handle_show(&library, libraryPath, argc, argv);
} else if (action == ADD) { } else if (action == ADD) {
exitCode = handle_add(&libraryManager, libraryPath, argc, argv); exitCode = handle_add(&library, libraryPath, argc, argv);
} else if (action == REMOVE) { } else if (action == REMOVE) {
exitCode = handle_remove(&libraryManager, libraryPath, argc, argv); exitCode = handle_remove(&library, libraryPath, argc, argv);
} }
/* Rewrite the library file */ /* Rewrite the library file */
if (action == REMOVE || action == ADD) { if (action == REMOVE || action == ADD) {
libraryManager.writeFile(libraryPath); library.writeToFile(libraryPath);
} }
exit(exitCode); exit(exitCode);