public static ModuleReplacement GetReplacement(this IRegistryQuerier querier, CkanModule installedVersion, KspVersionCriteria version) { // Mod is not installed, so we don't care about replacements if (installedVersion == null) { return(null); } // No replaced_by relationship if (installedVersion.replaced_by == null) { return(null); } // Get the identifier from the replaced_by relationship, if it exists ModuleRelationshipDescriptor replacedBy = installedVersion.replaced_by; // Now we need to see if there is a compatible version of the replacement try { ModuleReplacement replacement = new ModuleReplacement(); replacement.ToReplace = installedVersion; if (installedVersion.replaced_by.version != null) { replacement.ReplaceWith = querier.GetModuleByVersion(installedVersion.replaced_by.name, installedVersion.replaced_by.version); if (replacement.ReplaceWith != null) { if (replacement.ReplaceWith.IsCompatibleKSP(version)) { return(replacement); } } } else { replacement.ReplaceWith = querier.LatestAvailable(installedVersion.replaced_by.name, version); if (replacement.ReplaceWith != null) { if (installedVersion.replaced_by.min_version != null) { if (!replacement.ReplaceWith.version.IsLessThan(replacedBy.min_version)) { return(replacement); } } else { return(replacement); } } } return(null); } catch (ModuleNotFoundKraken) { return(null); } }
public override bool Equals(RelationshipDescriptor other) { ModuleRelationshipDescriptor modRel = other as ModuleRelationshipDescriptor; return(modRel != null && name == modRel.name && version == modRel.version && min_version == modRel.min_version && max_version == modRel.max_version); }