Dota2Patcher
 
Загрузка...
Поиск...
Не найдено
Updater.h
См. документацию.
1#include <compare>
2#include <format>
3
4struct WebVer {
5 string tag_name;
7 string html_url;
8 optional <string> body;
9};
10
11struct SemVer {
13 optional <int> rc_ver;
14 optional <string> update_url;
15 optional <string> body;
16
17 static SemVer from_string(const string& version_str) {
18 SemVer ver{ 0, 0, 0, nullopt };
19
20 int matched = sscanf(version_str.c_str(), "%d.%d.%d", &ver.major, &ver.minor, &ver.patch);
21 if (matched < 3)
22 throw std::invalid_argument("[-] (Updater) Invalid version format: " + version_str);
23
24 size_t rc_pos = version_str.find("-rc");
25 if (rc_pos != string::npos) {
26 if (rc_pos + 3 == version_str.size())
27 ver.rc_ver = 0;
28 else if (version_str[rc_pos + 3] == '.') {
29 int rc_num;
30 if (sscanf(version_str.c_str() + rc_pos, "-rc.%d", &rc_num) == 1)
31 ver.rc_ver = rc_num;
32 else
33 throw std::invalid_argument("[-] (Updater) Invalid RC format: " + version_str);
34 }
35 else
36 throw std::invalid_argument("[-] (Updater) Invalid RC format: " + version_str);
37 }
38 return ver;
39 }
40
41 string to_string() const {
42 if (rc_ver.has_value()) {
43 if (rc_ver.value() == 0)
44 return std::format("{}.{}.{}-rc", major, minor, patch);
45 return std::format("{}.{}.{}-rc.{}", major, minor, patch, rc_ver.value());
46 }
47 return std::format("{}.{}.{}", major, minor, patch);
48 }
49
50 auto operator<=>(const SemVer& other) const = default;
51};
52
53class Updater {
54public:
55 static bool update_required();
56
57private:
58 static constexpr SemVer local_version = { 2, 9, 1 };
59
60 static optional<string> web_request();
61 static SemVer get_latest_version(const std::vector<WebVer>& versions);
62 static constexpr std::string_view update_url = "https://api.github.com/repos/Wolf49406/Dota2Patcher/releases";
63};
Definition Updater.h:53
static bool update_required()
Definition Updater.cpp:77
Definition Updater.h:11
int patch
Definition Updater.h:12
optional< int > rc_ver
Definition Updater.h:13
auto operator<=>(const SemVer &other) const =default
optional< string > update_url
Definition Updater.h:14
static SemVer from_string(const string &version_str)
Definition Updater.h:17
string to_string() const
Definition Updater.h:41
int minor
Definition Updater.h:12
int major
Definition Updater.h:12
optional< string > body
Definition Updater.h:15
Definition Updater.h:4
string tag_name
Definition Updater.h:5
optional< string > body
Definition Updater.h:8
bool prerelease
Definition Updater.h:6
string html_url
Definition Updater.h:7