/// <summary> /// Checks if a dependency is present on the mod portal. /// </summary> public bool IsPresent(ExtendedModInfo modInfo, Version factorioVersion, out ModRelease release) { bool result = false; release = null; if (IsBase || IsInverted) { result = true; } else if (HasRestriction) { var comparison = comparisonFunctions[RestrictionComparison]; var candidates = modInfo.Releases.Where(item => (item.InfoFile.FactorioVersion == factorioVersion) && comparison(item.Version, RestrictionVersion)); release = candidates.MaxBy(candidate => candidate.Version, new VersionComparer()); result = release != null; } else { var candidates = modInfo.Releases.Where(item => item.InfoFile.FactorioVersion == factorioVersion); release = candidates.MaxBy(candidate => candidate.Version, new VersionComparer()); result = release != null; } return(result); }
private ModRelease GetNewestRelease(ExtendedModInfo info, ModRelease currentRelease) { if (App.Instance.Settings.ManagerMode == ManagerMode.PerFactorioVersion) { return(info.Releases.Where(release => release.FactorioVersion == currentRelease.FactorioVersion) .MaxBy(release => release.Version, new VersionComparer())); } else { return(info.Releases.MaxBy(release => release.Version, new VersionComparer())); } }
private static ExtendedModInfo GetExtendedInfoInternal(string modName) { string modUrl = $"{ModsUrl}/{modName}/full"; string document = WebHelper.GetDocument(modUrl, null); if (!string.IsNullOrEmpty(document)) { ExtendedModInfo result = JsonHelper.Deserialize <ExtendedModInfo>(document); return(result); } return(default(ExtendedModInfo)); }
private async Task <ExtendedModInfo> GetModInfo(ModExportTemplate modTemplate) { ExtendedModInfo info = null; try { info = await ModWebsite.GetExtendedInfoAsync(modTemplate.Name); } catch (WebException ex) { if (ex.Status != WebExceptionStatus.ProtocolError) { throw; } } return(info); }
private static async Task <ExtendedModInfo> GetExtendedInfoAsyncInner(string name) { string modUrl = $"{ModsUrl}/{name}"; ExtendedModInfo info = await Task.Run <ExtendedModInfo>(() => { string document = WebHelper.GetDocument(modUrl, null); if (!string.IsNullOrEmpty(document)) { ExtendedModInfo result = JsonHelper.Deserialize <ExtendedModInfo>(document); return(result); } return(default(ExtendedModInfo)); }); return(info); }
private async Task LoadExtendedModInfoAsync(ModInfo mod, int operationIndex) { ExtendedModInfo extendedInfo; try { extendedInfo = await ModWebsite.GetExtendedInfoAsync(mod); } catch (WebException) { MessageBox.Show(Window, App.Instance.GetLocalizedMessage("InternetConnection", MessageType.Error), App.Instance.GetLocalizedMessageTitle("InternetConnection", MessageType.Error), MessageBoxButton.OK, MessageBoxImage.Error); return; } if (operationIndex == asyncFetchExtendedInfoIndex) { ExtendedInfo = extendedInfo; } }
private async Task DownloadIncludedMod(ModExportTemplate modTemplate, DirectoryInfo fileLocation, ExtendedModInfo info, IProgress <double> progress, CancellationToken cancellationToken) { var file = GetIncludedFileOrDirectory(modTemplate, fileLocation); if ((file == null) || !file.Exists) // File should exist, download if it doesn't { await DownloadExcludedMod(modTemplate, fileLocation, info, progress, cancellationToken); return; } ModRelease targetRelease = null; switch (modTemplate.MaskedExportMode) { case ExportMode.NewestVersion: targetRelease = info.Releases.MaxBy(release => release.Version); break; case ExportMode.SpecificVersion: targetRelease = info.Releases.FirstOrDefault(release => release.Version == modTemplate.Version); break; case ExportMode.FactorioVersion: targetRelease = info.Releases.Where(release => release.InfoFile.FactorioVersion == modTemplate.FactorioVersion).MaxBy(release => release.Version); break; } if (targetRelease != null) { var fileVersion = GetVersionFromFile(file); if (fileVersion != targetRelease.Version) { file.Delete(); await DownloadModRelease(modTemplate, targetRelease, fileLocation, progress, cancellationToken); } } }
private async Task DownloadExcludedMod(ModExportTemplate modTemplate, DirectoryInfo fileLocation, ExtendedModInfo info, IProgress <double> progress, CancellationToken cancellationToken) { switch (modTemplate.MaskedExportMode) { case ExportMode.NewestVersion: var newestRelease = info.Releases.MaxBy(release => release.Version); if (newestRelease != null) { await DownloadModRelease(modTemplate, newestRelease, fileLocation, progress, cancellationToken); } break; case ExportMode.SpecificVersion: var specificRelease = info.Releases.FirstOrDefault(release => release.Version == modTemplate.Version); if (specificRelease != null) { await DownloadModRelease(modTemplate, specificRelease, fileLocation, progress, cancellationToken); } break; case ExportMode.FactorioVersion: var factorioRelease = info.Releases.Where(release => release.InfoFile.FactorioVersion == modTemplate.FactorioVersion).MaxBy(release => release.Version); if (factorioRelease != null) { await DownloadModRelease(modTemplate, factorioRelease, fileLocation, progress, cancellationToken); } break; } }
private ModRelease GetNewestRelease(ExtendedModInfo info) { return(info?.Releases.MaxBy(release => release.Version, new VersionComparer())); }
/// <summary> /// Gets extended information about a specific mod. /// </summary> /// <param name="modName">The name ot the mod to get the extended information about.</param> /// <returns>Returns extended information about the specified mod.</returns> public static async Task <ExtendedModInfo> GetExtendedInfoAsync(string modName) { ExtendedModInfo info = await Task.Run(() => GetExtendedInfoInternal(modName)); return(info); }