#include "debug.h" #include "ocdb.h" #include "okapi.h" #include "common.h" #include "config_user_key.h" #include #include #include #include #include using json = nlohmann::json; int main(int argc, char** argv) { std::string Dump_path; std::string Database; std::string okapi_url; std::string okapi_key; bool update = 0; int o; while ((o = getopt(argc, argv, "pdui:cD:h?")) != -1) switch (o) { case 'D': try { if (std::stoi(optarg) > 0) { Debug::set_debug_level(std::stoi(optarg)); } } catch (...) { std::cout << "Option \"-d\" requires a valid number as an argument\n"; std::exit(EXIT_FAILURE); } break; case 'i': Dump_path = optarg; if (!Dump_path.ends_with('/')) Dump_path.push_back('/'); break; case 'c': update = 1; break; case 'd': if (!Database.empty()) { std::cout << "Options \"-d\", \"-p\", \"-u\" are mutually exclusive.\n"; std::exit(EXIT_FAILURE); } Database = Database_de; okapi_url = ocde_url; okapi_key = ocde_key; break; case 'p': if (!Database.empty()) { std::cout << "Options \"-d\", \"-p\", \"-u\" are mutually exclusive.\n"; std::exit(EXIT_FAILURE); } Database = Database_pl; okapi_url = ocpl_url; okapi_key = ocpl_key; break; case 'u': if (!Database.empty()) { std::cout << "Options \"-d\", \"-p\", \"-u\" are mutually exclusive.\n"; std::exit(EXIT_FAILURE); } Database = Database_us; okapi_url = ocus_url; okapi_key = ocus_key; break; case 'h': case '?': default: std::cout << "Usage: geodb [-i path] [-uh]\n"; std::cout << "Manage local Opencaching database.\n\n"; std::cout << "\t-i folder\tinitialize database from dump located in given folder\n"; std::cout << "\t-c\tupdate database with changelogs grabbed via OKAPI\n"; std::cout << "\t-h\tdisplay this help screen\n"; std::cout << "\t-p\t\tuse opencaching.pl\n"; std::cout << "\t-d\t\tuse opencaching.de\n"; std::cout << "\t-u\t\tuse opencaching.us\n"; std::exit(EXIT_FAILURE); } if (Database.empty()) { std::cout << "You need to specify one of the options \"-d\", \"-p\", \"-u\".\n"; std::exit(EXIT_FAILURE); } OCdb db(Database); if (!Dump_path.empty()) db.init(Dump_path); if (update) { Okapi OK(okapi_url, okapi_key); db.update(OK); } Debug(2) << "Database now at revision: " << db.get_revision(); }