summaryrefslogtreecommitdiff
path: root/battleNetApi/src/main.cpp
diff options
context:
space:
mode:
authorAotrix <[email protected]>2026-07-31 02:03:10 +0200
committerAotrix <[email protected]>2026-07-31 02:03:10 +0200
commitd27b6aeb73679737ca921b5fc25a7b9c1f3c832c (patch)
tree6741a355c79302c29f839d546b1b6c6ad96b1566 /battleNetApi/src/main.cpp
parent71b50eaf1e10028b2a0119bc935671be2f7b405e (diff)
Remove GameMode enum class
Diffstat (limited to 'battleNetApi/src/main.cpp')
-rw-r--r--battleNetApi/src/main.cpp50
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;
}