MCPcopy Create free account
hub / github.com/PolyMC/PolyMC / loadIndexedPackVersion

Method loadIndexedPackVersion

launcher/modplatform/modrinth/ModrinthPackIndex.cpp:119–189  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

117}
118
119auto Modrinth::loadIndexedPackVersion(QJsonObject &obj, QString preferred_hash_type, QString preferred_file_name) -> ModPlatform::IndexedVersion
120{
121 ModPlatform::IndexedVersion file;
122
123 file.addonId = Json::requireString(obj, "project_id");
124 file.fileId = Json::requireString(obj, "id");
125 file.date = Json::requireString(obj, "date_published");
126 auto versionArray = Json::requireArray(obj, "game_versions");
127 if (versionArray.empty()) {
128 return {};
129 }
130 for (auto mcVer : versionArray) {
131 file.mcVersion.append(mcVer.toString());
132 }
133 auto loaders = Json::requireArray(obj, "loaders");
134 for (auto loader : loaders) {
135 file.loaders.append(loader.toString());
136 }
137 file.version = Json::requireString(obj, "name");
138 file.version_number = Json::requireString(obj, "version_number");
139 file.changelog = Json::requireString(obj, "changelog");
140
141 auto files = Json::requireArray(obj, "files");
142 int i = 0;
143
144 // Find correct file (needed in cases where one version may have multiple files)
145 // Will default to the last one if there's no primary (though I think Modrinth requires that
146 // at least one file is primary, idk)
147 // NOTE: files.count() is 1-indexed, so we need to subtract 1 to become 0-indexed
148 while (i < files.count() - 1) {
149 auto parent = files[i].toObject();
150 auto fileName = Json::requireString(parent, "filename");
151
152 if (!preferred_file_name.isEmpty() && fileName.contains(preferred_file_name)) {
153 file.is_preferred = true;
154 break;
155 }
156
157 // Grab the primary file, if available
158 if (Json::requireBoolean(parent, "primary"))
159 break;
160
161 i++;
162 }
163
164 auto parent = files[i].toObject();
165 if (parent.contains("url")) {
166 file.downloadUrl = Json::requireString(parent, "url");
167 file.fileName = Json::requireString(parent, "filename");
168 file.is_preferred = Json::requireBoolean(parent, "primary") || (files.count() == 1);
169 auto hash_list = Json::requireObject(parent, "hashes");
170
171 if (hash_list.contains(preferred_hash_type)) {
172 file.hash = Json::requireString(hash_list, preferred_hash_type);
173 file.hash_type = preferred_hash_type;
174 } else {
175 auto hash_types = ProviderCaps.hashType(ModPlatform::Provider::MODRINTH);
176 for (auto& hash_type : hash_types) {

Callers

nothing calls this directly

Calls 9

requireArrayFunction · 0.85
requireObjectFunction · 0.85
appendMethod · 0.80
isEmptyMethod · 0.80
hashTypeMethod · 0.80
emptyMethod · 0.45
toStringMethod · 0.45
countMethod · 0.45
containsMethod · 0.45

Tested by

no test coverage detected