Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/RA_Defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
#else

#include "util\Log.hh"
#include "RA_Json.h"

// RA-Only
using namespace std::string_literals;
Expand Down
1 change: 0 additions & 1 deletion src/RA_Integration.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@
<ClCompile Include="RA_Core.cpp" />
<ClCompile Include="RA_Defs.cpp" />
<ClCompile Include="RA_ImageFactory.cpp" />
<ClCompile Include="RA_Json.cpp" />
<ClCompile Include="RA_md5factory.cpp" />
<ClCompile Include="services\AchievementLogicSerializer.cpp" />
<ClCompile Include="services\AchievementRuntime.cpp" />
Expand Down
3 changes: 0 additions & 3 deletions src/RA_Integration.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,6 @@
<ClCompile Include="ui\win32\Desktop.cpp">
<Filter>UI\Win32</Filter>
</ClCompile>
<ClCompile Include="RA_Json.cpp">
<Filter>Services</Filter>
</ClCompile>
<ClCompile Include="ui\viewmodels\RichPresenceMonitorViewModel.cpp">
<Filter>UI\ViewModels</Filter>
</ClCompile>
Expand Down
66 changes: 0 additions & 66 deletions src/RA_Json.cpp

This file was deleted.

12 changes: 0 additions & 12 deletions src/RA_Json.h

This file was deleted.

68 changes: 21 additions & 47 deletions src/api/impl/ConnectedServer.cpp
Original file line number Diff line number Diff line change
@@ -1,28 +1,19 @@
#include "ConnectedServer.hh"

#include "DisconnectedServer.hh"
#include "RA_Defs.h"
#include "util\Json.hh"
#include "util\Log.hh"

#include "RA_md5factory.h"

#include "context\UserContext.hh"

#include "services\Http.hh"
#include "services\IFileSystem.hh"
#include "services\IHttpRequester.hh"
#include "services\ILocalStorage.hh"
#include "services\ServiceLocator.hh"

#include <future>

#include <rapidjson\document.h>

#include <rcheevos\src\rapi\rc_api_common.h> // for parsing cached patchdata response
#include <rc_api_editor.h>
#include <rc_api_info.h>
#include <rc_api_runtime.h>
#include <rc_api_user.h>

namespace ra {
namespace api {
Expand Down Expand Up @@ -56,12 +47,10 @@ _NODISCARD static bool HandleHttpError(_In_ const ra::services::Http::StatusCode

_NODISCARD static bool GetJson([[maybe_unused]] _In_ const char* sApiName,
_In_ const ra::services::Http::Response& httpResponse,
_Inout_ ApiResponseBase& pResponse, _Out_ rapidjson::Document& pDocument)
_Inout_ ApiResponseBase& pResponse, _Inout_ ra::util::Json::Reader& pJson)
{
if (httpResponse.Content().empty())
{
pDocument.SetArray();

if (!HandleHttpError(httpResponse.StatusCode(), pResponse))
{
pResponse.ErrorMessage = "Empty JSON response";
Expand All @@ -74,8 +63,7 @@ _NODISCARD static bool GetJson([[maybe_unused]] _In_ const char* sApiName,

RA_LOG_INFO("-- %s Response: %s", sApiName, httpResponse.Content());

pDocument.Parse(httpResponse.Content());
if (pDocument.HasParseError())
if (!pJson.Parse(httpResponse.Content()))
{
if (HandleHttpError(httpResponse.StatusCode(), pResponse))
{
Expand All @@ -87,7 +75,7 @@ _NODISCARD static bool GetJson([[maybe_unused]] _In_ const char* sApiName,

pResponse.Result = ApiResult::Error;

if (pDocument.GetParseError() == rapidjson::kParseErrorValueInvalid && pDocument.GetErrorOffset() == 0)
if (pJson.GetParseErrorOffset() == 0)
{
// server did not return JSON, check for HTML
if (ra::util::String::StartsWith(httpResponse.Content(), "<html>"))
Expand Down Expand Up @@ -123,15 +111,15 @@ _NODISCARD static bool GetJson([[maybe_unused]] _In_ const char* sApiName,
if (pResponse.ErrorMessage.empty())
{
pResponse.ErrorMessage =
ra::util::String::Printf("JSON Parse Error: %s (at %zu)", GetParseError_En(pDocument.GetParseError()), pDocument.GetErrorOffset());
ra::util::String::Printf("JSON Parse Error: %s (at %zu)", pJson.GetParseError(), pJson.GetParseErrorOffset());
}

return false;
}

if (pDocument.HasMember("Error"))
std::string sError;
if (pJson.TryGetString("Error", pResponse.ErrorMessage))
{
pResponse.ErrorMessage = pDocument["Error"].GetString();
if (httpResponse.StatusCode() == ra::services::Http::StatusCode::TooManyRequests)
{
pResponse.Result = ApiResult::Incomplete;
Expand All @@ -146,7 +134,7 @@ _NODISCARD static bool GetJson([[maybe_unused]] _In_ const char* sApiName,
}
}

if (pDocument.HasMember("Success") && !pDocument["Success"].GetBool())
if (pJson.GetBoolean("Success", true) == false)
{
pResponse.Result = ApiResult::Failed;
RA_LOG_ERR("-- %s Error: Success=false", sApiName);
Expand All @@ -162,27 +150,6 @@ _NODISCARD static bool GetJson([[maybe_unused]] _In_ const char* sApiName,
return true;
}

static void GetRequiredJsonField(_Out_ std::string& sValue, _In_ const rapidjson::Value& pDocument,
_In_ const char* const sField, _Inout_ ApiResponseBase& response)
{
if (!pDocument.HasMember(sField))
{
sValue.clear();

response.Result = ApiResult::Error;
if (response.ErrorMessage.empty())
response.ErrorMessage = ra::util::String::Printf("%s not found in response", sField);
}
else
{
auto& pField = pDocument[sField];
if (pField.IsString())
sValue = pField.GetString();
else
sValue.clear();
}
}

static bool DoRequestWithoutLog(const rc_api_request_t& api_request, _UNUSED const char* sApiName, ra::services::Http::Response& pHttpResponse, ApiResponseBase& pResponse)
{
ra::services::Http::Request httpRequest(api_request.url);
Expand Down Expand Up @@ -326,7 +293,7 @@ static bool ValidateResponse(int nResult, const rc_api_response_t& api_response,
}

static bool DoUpload(const std::string& sHost, const char* _RESTRICT sApiName, const char* _RESTRICT sRequestName,
const std::wstring& sFilePath, ApiResponseBase& pResponse, rapidjson::Document& document)
const std::wstring& sFilePath, ApiResponseBase& pResponse, ra::util::Json::Reader& pJson)
{
const auto& pFileSystem = ra::services::ServiceLocator::Get<ra::services::IFileSystem>();
const auto nFileSize = pFileSystem.GetFileSize(sFilePath);
Expand Down Expand Up @@ -391,7 +358,7 @@ static bool DoUpload(const std::string& sHost, const char* _RESTRICT sApiName, c
httpRequest.SetPostData(sPostData);

const auto httpResponse = httpRequest.Call();
return GetJson(sApiName, httpResponse, pResponse, document);
return GetJson(sApiName, httpResponse, pResponse, pJson);
}

// === APIs ===
Expand Down Expand Up @@ -728,12 +695,13 @@ UpdateRichPresence::Response ConnectedServer::UpdateRichPresence(const UpdateRic
UploadBadge::Response ConnectedServer::UploadBadge(const UploadBadge::Request& request)
{
UploadBadge::Response response;
rapidjson::Document document;
ra::util::Json::Reader pJson;
std::string sPostData;

if (DoUpload(m_sHost, UploadBadge::Name(), "uploadbadgeimage", request.ImageFilePath, response, document))
if (DoUpload(m_sHost, UploadBadge::Name(), "uploadbadgeimage", request.ImageFilePath, response, pJson))
{
if (!document.HasMember("Response"))
ra::util::Json::Reader::Node pResponse;
if (!pJson.TryGetObject("Response", pResponse))
{
if (response.Result == ApiResult::None)
response.Result = ApiResult::Error;
Expand All @@ -744,7 +712,13 @@ UploadBadge::Response ConnectedServer::UploadBadge(const UploadBadge::Request& r
else
{
response.Result = ApiResult::Success;
GetRequiredJsonField(response.BadgeId, document["Response"], "BadgeIter", response);

if (!pResponse.TryGetString("BadgeIter", response.BadgeId))
{
response.Result = ApiResult::Error;
if (response.ErrorMessage.empty())
response.ErrorMessage = ra::util::String::Printf("%s not found in response", "BadgeIter");
}
}
}

Expand Down
2 changes: 2 additions & 0 deletions src/devkit/RADevKit.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
<ClCompile Include="services\Http.cpp" />
<ClCompile Include="ui\ImageReference.cpp" />
<ClCompile Include="util\GSL.cpp" />
<ClCompile Include="util\Json.cpp" />
<ClCompile Include="util\StringBuilder.cpp" />
<ClCompile Include="util\Strings.cpp" />
<ClCompile Include="util\Tokenizer.cpp" />
Expand Down Expand Up @@ -144,6 +145,7 @@
<ClInclude Include="util\Compat.hh" />
<ClInclude Include="util\EnumOps.hh" />
<ClInclude Include="util\GSL.hh" />
<ClInclude Include="util\Json.hh" />
<ClInclude Include="util\Log.hh" />
<ClInclude Include="util\StringBuilder.hh" />
<ClInclude Include="util\Strings.hh" />
Expand Down
6 changes: 6 additions & 0 deletions src/devkit/RADevKit.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,9 @@
<ClInclude Include="services\IConfiguration.hh">
<Filter>services</Filter>
</ClInclude>
<ClInclude Include="util\Json.hh">
<Filter>util</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="util\GSL.cpp">
Expand Down Expand Up @@ -317,5 +320,8 @@
<ClCompile Include="data\models\AchievementSetModel.cpp">
<Filter>data\models</Filter>
</ClCompile>
<ClCompile Include="util\Json.cpp">
<Filter>util</Filter>
</ClCompile>
</ItemGroup>
</Project>
Loading
Loading