From 626aa681c903d5adec50b70a8014b99a38782409 Mon Sep 17 00:00:00 2001 From: Sude Date: Sat, 1 Oct 2022 20:28:03 +0300 Subject: [PATCH] Galaxy: Fix MojoSetup hack for files that have missing XML data Try to get file size using Content-Length header if XML data is missing --- src/downloader.cpp | 70 +++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/src/downloader.cpp b/src/downloader.cpp index c2c3a1c..4ffc5f3 100644 --- a/src/downloader.cpp +++ b/src/downloader.cpp @@ -6002,40 +6002,38 @@ int Downloader::mojoSetupGetFileVector(const gameFile& gf, std::vectorgetResponse(xml_url); if (xml_data.empty()) { std::cerr << "Failed to get XML data" << std::endl; - return 1; + bMissingXML = true; } - - std::uintmax_t file_size = 0; - tinyxml2::XMLDocument xml; - xml.Parse(xml_data.c_str()); - tinyxml2::XMLElement *fileElem = xml.FirstChildElement("file"); - - if (!fileElem) + if (!bMissingXML) { - std::cerr << "Failed to parse XML data" << std::endl; - return 1; - } - else - { - std::string total_size = fileElem->Attribute("total_size"); - try - { - file_size = std::stoull(total_size); - } - catch (std::invalid_argument& e) - { - file_size = 0; - } + tinyxml2::XMLDocument xml; + xml.Parse(xml_data.c_str()); + tinyxml2::XMLElement *fileElem = xml.FirstChildElement("file"); - if (file_size == 0) + if (!fileElem) { - std::cerr << "Failed to get file size" << std::endl; - return 1; + std::cerr << "Failed to parse XML data" << std::endl; + bXMLParsingError = true; + } + else + { + std::string total_size = fileElem->Attribute("total_size"); + try + { + file_size = std::stoull(total_size); + } + catch (std::invalid_argument& e) + { + file_size = 0; + } } } @@ -6046,6 +6044,28 @@ int Downloader::mojoSetupGetFileVector(const gameFile& gf, std::vector