MCPcopy Create free account
hub / github.com/BohemiaInteractive/CWR / ResolveModPathList

Function ResolveModPathList

engine/Poseidon/Core/ModCollection.cpp:299–374  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

297 }
298 return col;
299}
300
301ModPathResolveResult ResolveModPathList(const ModPathResolveRequest& request)
302{
303 ModPathResolveResult result;
304
305 std::istringstream ss(request.modPaths);
306 std::string segment;
307 while (std::getline(ss, segment, ';'))
308 {
309 segment = Trim(segment);
310 if (segment.empty())
311 continue;
312
313 const std::filesystem::path requested(segment);
314 std::vector<std::filesystem::path> candidates;
315
316 if (requested.is_absolute())
317 {
318 candidates.push_back(requested);
319 }
320 else if (!request.explicitModsDir.empty())
321 {
322 candidates.push_back(std::filesystem::path(request.explicitModsDir) / requested);
323 }
324 else
325 {
326 candidates.push_back(std::filesystem::path(request.currentDir.empty() ? "." : request.currentDir) /
327 requested);
328 if (!request.gameDir.empty())
329 candidates.push_back(std::filesystem::path(request.gameDir) / requested);
330 if (!request.managedModsDir.empty())
331 candidates.push_back(std::filesystem::path(request.managedModsDir) / requested);
332 }
333
334 std::string resolved;
335 for (const auto& candidate : candidates)
336 {
337 resolved = AbsoluteResolvedModPath(candidate);
338 if (!resolved.empty())
339 break;
340 }
341
342 if (resolved.empty() && !requested.is_absolute())
343 {
344 std::vector<std::filesystem::path> roots;
345 if (!request.explicitModsDir.empty())
346 roots.push_back(request.explicitModsDir);
347 else
348 {
349 roots.push_back(request.currentDir.empty() ? "." : request.currentDir);
350 if (!request.gameDir.empty())
351 roots.push_back(request.gameDir);
352 if (!request.managedModsDir.empty())
353 roots.push_back(request.managedModsDir);
354 }
355 for (const auto& root : roots)
356 {

Callers 2

ParseCommandLineMethod · 0.85

Calls 5

AbsoluteResolvedModPathFunction · 0.85
JoinCandidatesForErrorFunction · 0.85
TrimFunction · 0.70
emptyMethod · 0.45

Tested by

no test coverage detected