Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 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()));
     }
 }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
        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()));
 }
Esempio n. 10
0
        /// <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);
        }