1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #pragma once
- #include <stdint.h>
- #include <memory>
- #include "Crypto.h"
- #include "LoginBlob.h"
- #include "MercurySession.h"
- #include "TimeProvider.h"
- #include "protobuf/authentication.pb.h" // for AuthenticationType_AUTHE...
- #include "protobuf/metadata.pb.h"
- #ifdef BELL_ONLY_CJSON
- #include "cJSON.h"
- #else
- #include "nlohmann/detail/json_pointer.hpp" // for json_pointer<>::string_t
- #include "nlohmann/json.hpp" // for basic_json<>::object_t, basic_json
- #include "nlohmann/json_fwd.hpp" // for json
- #endif
- namespace cspot {
- struct Context {
- struct ConfigState {
- // Setup default bitrate to 160
- AudioFormat audioFormat = AudioFormat::AudioFormat_OGG_VORBIS_160;
- std::string deviceId;
- std::string deviceName;
- std::vector<uint8_t> authData;
- int volume;
- std::string username;
- std::string countryCode;
- };
- ConfigState config;
- std::shared_ptr<TimeProvider> timeProvider;
- std::shared_ptr<cspot::MercurySession> session;
- std::string getCredentialsJson() {
- #ifdef BELL_ONLY_CJSON
- cJSON* json_obj = cJSON_CreateObject();
- cJSON_AddStringToObject(json_obj, "authData",
- Crypto::base64Encode(config.authData).c_str());
- cJSON_AddNumberToObject(
- json_obj, "authType",
- AuthenticationType_AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS);
- cJSON_AddStringToObject(json_obj, "username", config.username.c_str());
- char* str = cJSON_PrintUnformatted(json_obj);
- cJSON_Delete(json_obj);
- std::string json_objStr(str);
- free(str);
- return json_objStr;
- #else
- nlohmann::json obj;
- obj["authData"] = Crypto::base64Encode(config.authData);
- obj["authType"] =
- AuthenticationType_AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS;
- obj["username"] = config.username;
- return obj.dump();
- #endif
- }
- static std::shared_ptr<Context> createFromBlob(
- std::shared_ptr<LoginBlob> blob) {
- auto ctx = std::make_shared<Context>();
- ctx->timeProvider = std::make_shared<TimeProvider>();
- ctx->session = std::make_shared<MercurySession>(ctx->timeProvider);
- ctx->config.deviceId = blob->getDeviceId();
- ctx->config.deviceName = blob->getDeviceName();
- ctx->config.authData = blob->authData;
- ctx->config.volume = 0;
- ctx->config.username = blob->getUserName();
- return ctx;
- }
- };
- } // namespace cspot
|