diff options
| author | Aotrix <[email protected]> | 2026-07-31 02:03:10 +0200 |
|---|---|---|
| committer | Aotrix <[email protected]> | 2026-07-31 02:03:10 +0200 |
| commit | d27b6aeb73679737ca921b5fc25a7b9c1f3c832c (patch) | |
| tree | 6741a355c79302c29f839d546b1b6c6ad96b1566 /battleNetApi/src/main.cpp | |
| parent | 71b50eaf1e10028b2a0119bc935671be2f7b405e (diff) | |
Remove GameMode enum class
Diffstat (limited to 'battleNetApi/src/main.cpp')
| -rw-r--r-- | battleNetApi/src/main.cpp | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/battleNetApi/src/main.cpp b/battleNetApi/src/main.cpp index 64fa935..9d2ed86 100644 --- a/battleNetApi/src/main.cpp +++ b/battleNetApi/src/main.cpp @@ -4,12 +4,14 @@ #include <hearthstoneTokenBuilder.hpp> #include <iostream> #include <memory> +#include <nlohmann/json.hpp> #include <stdexcept> #include <tokenBuilder.hpp> class DownloadMethod { public: - virtual nlohmann::json download(const std::shared_ptr<bnet::Token> &iToken) = 0; + virtual nlohmann::json download(const bnet::ApiUrl &iApiUrl, + const std::shared_ptr<bnet::Token> &iToken) = 0; virtual ~DownloadMethod() = default; }; @@ -17,15 +19,10 @@ class DefaultDownloadMethod : public DownloadMethod { public: DefaultDownloadMethod() = default; ~DefaultDownloadMethod() = default; - nlohmann::json download(const std::shared_ptr<bnet::Token> &iToken) override { - const std::string kContentType{"cards"}; - const std::string kRegion{"eu"}; - bnet::ApiUrl aApiUrl(kContentType, kRegion); - aApiUrl.setLocale("fr_FR"); - aApiUrl.setGameMode(bnet::GameMode::constructed); - aApiUrl.setPageSize(100); + nlohmann::json download(const bnet::ApiUrl &iApiUrl, + const std::shared_ptr<bnet::Token> &iToken) override { if (iToken) { - return bnet::HearthstoneApi::downloadCards(aApiUrl, *iToken); + return bnet::HearthstoneApi::downloadCards(iApiUrl, *iToken); } return nlohmann::json({}); }; @@ -39,9 +36,10 @@ class DownloaderContext { void setDownloadMethod(std::unique_ptr<DownloadMethod> iDownloader) { mDownloader = std::move(iDownloader); } - nlohmann::json download(const std::shared_ptr<bnet::Token> &iToken) { + nlohmann::json download(const bnet::ApiUrl &iApiUrl, + const std::shared_ptr<bnet::Token> &iToken) { if (mDownloader) { - return mDownloader->download(iToken); + return mDownloader->download(iApiUrl, iToken); } else { std::cerr << "No download method available in DownloaderContext\n"; return nlohmann::json({}); @@ -52,16 +50,36 @@ class DownloaderContext { std::unique_ptr<DownloadMethod> mDownloader; }; +bnet::ApiUrl computeApiUrl(nlohmann::json &iApiUrl) { + if (!iApiUrl.contains("ContentType") || !iApiUrl.contains("Region")) { + throw std::invalid_argument("computeApiUrl: missing ContentType and Region parameters"); + } + bnet::ApiUrl aApiUrl(iApiUrl["ContentType"], iApiUrl["Region"]); + if (iApiUrl.contains("Locale")) { + aApiUrl.setLocale(iApiUrl["Locale"]); + } + if (iApiUrl.contains("GameMode")) { + aApiUrl.setGameMode(iApiUrl["GameMode"]); + } + if (iApiUrl.contains("PageSize")) { + aApiUrl.setPageSize(iApiUrl["PageSize"]); + } + return aApiUrl; +} + int main(int argc, char *argv[]) { if (argc != 3) { - throw std::invalid_argument( - "/path/to/executable /path/to/credentials.json /path/to/output_file.json"); + throw std::invalid_argument("Provide following arguments: /path/to/executable " + "/path/to/configuration.json /path/to/output_file.json"); } DownloaderContext aDownloaderContext{std::make_unique<DefaultDownloadMethod>()}; bnet::HearthstoneTokenBuilder aHearthstoneTokenBuilder(argv[1]); std::ofstream aOutputJsonFile(argv[2]); - aOutputJsonFile - << aDownloaderContext.download(aHearthstoneTokenBuilder.buildToken().getToken()).dump(4) - << '\n'; + aOutputJsonFile << aDownloaderContext + .download(computeApiUrl( + nlohmann::json::parse(std::ifstream(argv[1]))["ApiUrl"]), + aHearthstoneTokenBuilder.buildToken().getToken()) + .dump(4) + << '\n'; return 0; } |
