mtx_release_version_t get_latest_release_version() { bool debug = debugging_requested("version_check|curl"); std::string url = MTX_VERSION_CHECK_URL; debugging_requested("version_check_url", &url); mxdebug_if(debug, boost::format("Update check started with URL %1%\n") % url); mtx_release_version_t release; auto doc = retrieve_and_parse_xml(url + ".gz"); #if defined(HAVE_BZLIB_H) if (!doc) doc = retrieve_and_parse_xml(url + ".bz2"); #endif // HAVE_BZLIB_H if (!doc) doc = retrieve_and_parse_xml(url); if (!doc) return release; release.latest_source = version_number_t(doc->select_single_node("/mkvtoolnix-releases/latest-source/version").node().child_value()); release.latest_windows_build = version_number_t((boost::format("%1% build %2%") % doc->select_single_node("/mkvtoolnix-releases/latest-windows-pre/version").node().child_value() % doc->select_single_node("/mkvtoolnix-releases/latest-windows-pre/build").node().child_value()).str()); release.valid = release.latest_source.valid; release.urls["general"] = doc->select_single_node("/mkvtoolnix-releases/latest-source/url").node().child_value(); release.urls["source_code"] = doc->select_single_node("/mkvtoolnix-releases/latest-source/source-code-url").node().child_value(); release.urls["windows_pre_build"] = doc->select_single_node("/mkvtoolnix-releases/latest-windows-pre/url").node().child_value(); for (auto arch : std::vector<std::string>{ "x86", "amd64" }) for (auto package : std::vector<std::string>{ "installer", "portable" }) release.urls[std::string{"windows_"} + arch + "_" + package] = doc->select_single_node((std::string{"/mkvtoolnix-releases/latest-windows-binary/"} + package + "-url/" + arch).c_str()).node().child_value(); if (debug) { std::stringstream urls; brng::for_each(release.urls, [&](std::pair<std::string, std::string> const &kv) { urls << " " << kv.first << ":" << kv.second; }); mxdebug(boost::format("update check: current %1% latest source %2% latest winpre %3% URLs%4%\n") % release.current_version.to_string() % release.latest_source.to_string() % release.latest_windows_build.to_string() % urls); } return release; }
version_number_t get_current_version() { return version_number_t(VERSION); }
int compare_current_version_to(const std::string &other_version_str) { return version_number_t(VERSION).compare(version_number_t(other_version_str)); }