feat(UGC): Simplify Job Import (#805)

This commit is contained in:
Bugisoft 2023-01-03 11:35:11 +01:00 committed by GitHub
parent 175d93f18a
commit b77e09065c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 38 deletions

View File

@ -3519,10 +3519,10 @@ namespace NETWORK
static int UGC_GET_CONTENT_DESCRIPTION_HASH(Any p0) { return invoke<int>(0x7CF0448787B23758, p0); } // 0x7CF0448787B23758 0x91534C6E b323
static const char* UGC_GET_CONTENT_PATH(int p0, int p1) { return invoke<const char*>(0xBAF6BABF9E7CCC13, p0, p1); } // 0xBAF6BABF9E7CCC13 0x744A9EA5 b323
static void UGC_GET_CONTENT_UPDATED_DATE(Any p0, Any* p1) { invoke<void>(0xCFD115B373C0DF63, p0, p1); } // 0xCFD115B373C0DF63 0xA19A238D b323
static Any UGC_GET_CONTENT_FILE_VERSION(Any p0, Any p1) { return invoke<Any>(0x37025B27D9B658B1, p0, p1); } // 0x37025B27D9B658B1 0xFF7D44E6 b323
static int UGC_GET_CONTENT_FILE_VERSION(int contentId, int fileIndex) { return invoke<Any>(0x37025B27D9B658B1, contentId, fileIndex); } // 0x37025B27D9B658B1 0xFF7D44E6 b323
static BOOL UGC_GET_CONTENT_HAS_LO_RES_PHOTO(int p0) { return invoke<BOOL>(0x1D610EB0FEA716D9, p0); } // 0x1D610EB0FEA716D9 b323
static BOOL UGC_GET_CONTENT_HAS_HI_RES_PHOTO(int p0) { return invoke<BOOL>(0x7FCC39C46C3C03BD, p0); } // 0x7FCC39C46C3C03BD b323
static Any UGC_GET_CONTENT_LANGUAGE(Any p0) { return invoke<Any>(0x32DD916F3F7C9672, p0); } // 0x32DD916F3F7C9672 0xA2C5BD9D b323
static int UGC_GET_CONTENT_LANGUAGE(int contentIndex) { return invoke<Any>(0x32DD916F3F7C9672, contentIndex); } // 0x32DD916F3F7C9672 0xA2C5BD9D b323
static BOOL UGC_GET_CONTENT_IS_PUBLISHED(Any p0) { return invoke<BOOL>(0x3054F114121C21EA, p0); } // 0x3054F114121C21EA 0xA850DDE1 b323
static BOOL UGC_GET_CONTENT_IS_VERIFIED(Any p0) { return invoke<BOOL>(0xA9240A96C74CCA13, p0); } // 0xA9240A96C74CCA13 0x8F6754AE b323
static Any UGC_GET_CONTENT_RATING(Any p0, Any p1) { return invoke<Any>(0x1ACCFBA3D8DAB2EE, p0, p1); } // 0x1ACCFBA3D8DAB2EE 0x1E34953F b323

View File

@ -63,40 +63,28 @@ namespace big
return response.status_code == 200;
}
bool api_service::get_job_details(std::string_view job_link, nlohmann::json& result)
bool api_service::get_job_details(std::string_view content_id, nlohmann::json& result)
{
if (job_link.starts_with("https://"))
job_link = job_link.substr(46); // https://socialclub.rockstargames.com/job/gtav/
cpr::Response response = cpr::Get(
cpr::Url{ "https://scapi.rockstargames.com/ugc/mission/details" },
cpr::Header{ {"X-AMC", "true" }, { "X-Requested-With", "XMLHttpRequest"} },
cpr::Parameters{ {"title", "gtav"}, {"contentId", job_link.data()} });
cpr::Parameters{ {"title", "gtav"}, {"contentId", content_id.data()} });
result = nlohmann::json::parse(response.text);
return response.status_code == 200;
}
bool api_service::download_job_metadata(std::string_view content_part)
bool api_service::download_job_metadata(std::string_view content_id, int f1, int f0, int lang)
{
for (int major = 0; major < 3; major++)
cpr::Response response = cpr::Get(cpr::Url{ std::format("https://prod.cloud.rockstargames.com/ugc/gta5mission/{}/{}_{}_{}.json", content_id, f1, f0, languages.at(lang))});
if (response.status_code == 200)
{
for (int minor = 0; minor < 3; minor++)
{
for (const auto& lang : languages)
{
cpr::Response response = cpr::Get(cpr::Url{ std::format("https://prod.cloud.rockstargames.com/ugc/gta5mission/{}/{}_{}_{}.json", content_part, major, minor, lang) });
std::ofstream of = creator_storage_service::create_file(std::string(content_id) + ".json");
cpr::Response r = cpr::Download(of, response.url);
if (response.status_code == 200)
{
std::ofstream of = creator_storage_service::create_file(std::string(content_part).substr(5) + ".json");
cpr::Response r = cpr::Download(of, response.url);
return true;
}
}
}
return true;
}
return false;

View File

@ -24,9 +24,9 @@ namespace big
bool get_job_details(std::string_view job_link, nlohmann::json& result);
// Returns true if the job metadata was successfully downloaded
bool download_job_metadata(std::string_view content_part);
bool download_job_metadata(std::string_view content_id, int f1, int f0, int lang);
private:
const std::list<std::string> languages = { "en", "fr", "de", "it", "es", "pt", "pl", "ru", "es-mx" };
const std::vector<std::string> languages = { "unset", "en", "fr", "de", "it", "es", "pt", "pl", "ru", "es-mx" };
inline std::string get_ticket()
{

View File

@ -83,25 +83,33 @@ namespace big
{
g_thread_pool->push([]
{
std::string content_id = job_link;
nlohmann::json job_details;
if (g_api_service->get_job_details(job_link, job_details))
{
std::string img_src = job_details["content"]["imgSrc"];
std::string content_part = img_src.substr(53, 27);
if (content_id.starts_with("https://"))
content_id = content_id.substr(46);
nlohmann::json job_metadata;
if (g_api_service->download_job_metadata(content_part))
g_fiber_pool->queue_job([content_id] {
if (NETWORK::UGC_QUERY_BY_CONTENT_ID(content_id.c_str(), false, "gta5mission"))
{
cached_creator_files = false;
g_notification_service->push("Job Import", "Job Import successfully done");
while (NETWORK::UGC_IS_GETTING())
script::get_current()->yield();
int f1 = NETWORK::UGC_GET_CONTENT_FILE_VERSION(0, 1);
int f0 = NETWORK::UGC_GET_CONTENT_FILE_VERSION(0, 0);
if (g_api_service->download_job_metadata(content_id, f1 < 0 ? 0 : f1, f0 < 0 ? 0 : f0, NETWORK::UGC_GET_CONTENT_LANGUAGE(0)))
{
cached_creator_files = false;
g_notification_service->push("Job Import", "Job Import successfully done");
}
else {
g_notification_service->push_error("Job Import", "Could download job metadata");
}
}
else {
g_notification_service->push_error("Job Import", "Couldn't download the job metadata");
g_notification_service->push_error("Job Import", "UGC QueryContent failed");
}
} else {
g_notification_service->push_error("Job Import", "Couldn't get the job details");
}
});
});
});