From dc91a5c1edb481ecf8c00169a79eaa73396669f0 Mon Sep 17 00:00:00 2001 From: Tomasz Golinski Date: Tue, 1 Oct 2019 01:49:25 +0200 Subject: [PATCH] Possibility to apply changelogs grabbed from OKapi --- ocdb.cpp | 10 ++++++++++ okapi.cpp | 7 +++++++ okapi.h | 1 + 3 files changed, 18 insertions(+) diff --git a/ocdb.cpp b/ocdb.cpp index 25a4973..f52ab8e 100644 --- a/ocdb.cpp +++ b/ocdb.cpp @@ -82,6 +82,16 @@ bool OCdb::init_part(std::string json_file) { } bool OCdb::update(Okapi& oc) { + Debug(2) << "Fetching changelog since revision " << revision << ".\n"; + std::string output = oc.get_changelog_json(revision); + json j = json::parse(output); + + for (auto& el : j["changelog"].items()) { + parse_item(el.value()); + } + revision = j["revision"]; + if (j["more"]) + update(oc); return 1; } diff --git a/okapi.cpp b/okapi.cpp index 97689bc..15fd9cb 100644 --- a/okapi.cpp +++ b/okapi.cpp @@ -14,6 +14,7 @@ static const std::string OKAPI_logs = "services/logs/userlogs"; static const std::string OKAPI_cache = "services/caches/geocache"; static const std::string OKAPI_caches = "services/caches/geocaches"; static const std::string OKAPI_username = "services/users/by_username"; +static const std::string OKAPI_changelog = "services/replicate/changelog"; // Callback for cURL easy interface used to save received output to std::string object size_t Okapi::write_cb(char* ptr, size_t size, size_t nmemb, void* userdata) { @@ -184,3 +185,9 @@ std::string Okapi::get_uuid(std::string username) { json j = json::parse(curl_post(service, query)); return j["uuid"]; } + +std::string Okapi::get_changelog_json(int revision) { + std::string service = url + OKAPI_changelog; + std::string query = "consumer_key=" + key + "&since=" + std::to_string(revision); + return curl_post(service, query); +} diff --git a/okapi.h b/okapi.h index fcd1010..d9695e4 100644 --- a/okapi.h +++ b/okapi.h @@ -21,6 +21,7 @@ public: // Cache get_cache(std::string code); Caches get_caches(std::vector codes); Caches get_user_caches(std::string uuid, int count = 0); + std::string get_changelog_json(int revision); std::string get_uuid(std::string username); };