feat(UGC): Simplify Job Import (#805)
This commit is contained in:
parent
175d93f18a
commit
b77e09065c
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -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");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user