コード例 #1
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="cache">The cache in which to store mod metadata.</param>
        /// <param name="configProvider">The config settings for mod update checks.</param>
        public ModsController(IMemoryCache cache, IOptions <ModUpdateCheckConfig> configProvider)
        {
            ModUpdateCheckConfig config = configProvider.Value;

            this.Cache = cache;
            this.SuccessCacheMinutes = config.SuccessCacheMinutes;
        }
コード例 #2
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="cache">The cache in which to store mod metadata.</param>
        /// <param name="configProvider">The config settings for mod update checks.</param>
        /// <param name="chucklefish">The Chucklefish API client.</param>
        /// <param name="github">The GitHub API client.</param>
        /// <param name="nexus">The Nexus API client.</param>
        public ModsApiController(IMemoryCache cache, IOptions <ModUpdateCheckConfig> configProvider, IChucklefishClient chucklefish, IGitHubClient github, INexusClient nexus)
        {
            ModUpdateCheckConfig config = configProvider.Value;

            this.Cache        = cache;
            this.CacheMinutes = config.CacheMinutes;
            this.VersionRegex = config.SemanticVersionRegex;
            this.Repositories =
                new IModRepository[]
            {
                new ChucklefishRepository(config.ChucklefishKey, chucklefish),
                new GitHubRepository(config.GitHubKey, github),
                new NexusRepository(config.NexusKey, nexus)
            }
            .ToDictionary(p => p.VendorKey, StringComparer.CurrentCultureIgnoreCase);
        }
コード例 #3
0
        public async Task <IEnumerable <ModEntryModel> > PostAsync([FromBody] ModSearchModel model, [FromRoute] string version)
        {
            if (model?.Mods == null)
            {
                return(Array.Empty <ModEntryModel>());
            }

            ModUpdateCheckConfig config = this.Config.Value;

            // fetch wiki data
            WikiModEntry[] wikiData = this.WikiCache.GetWikiMods().Select(p => p.Data).ToArray();
            IDictionary <string, ModEntryModel> mods = new Dictionary <string, ModEntryModel>(StringComparer.CurrentCultureIgnoreCase);

            foreach (ModSearchEntryModel mod in model.Mods)
            {
                if (string.IsNullOrWhiteSpace(mod.ID))
                {
                    continue;
                }

                // special case: if this is an update check for the official SMAPI repo, check the Nexus mod page for beta versions
                if (mod.ID == config.SmapiInfo.ID && mod.UpdateKeys?.Any(key => key == config.SmapiInfo.DefaultUpdateKey) == true && mod.InstalledVersion?.IsPrerelease() == true)
                {
                    mod.UpdateKeys = mod.UpdateKeys.Concat(config.SmapiInfo.AddBetaUpdateKeys).ToArray();
                }

                // fetch result
                ModEntryModel result = await this.GetModData(mod, wikiData, model.IncludeExtendedMetadata, model.ApiVersion);

                if (!model.IncludeExtendedMetadata && (model.ApiVersion == null || mod.InstalledVersion == null))
                {
                    var errors = new List <string>(result.Errors);
                    errors.Add($"This API can't suggest an update because {nameof(model.ApiVersion)} or {nameof(mod.InstalledVersion)} are null, and you didn't specify {nameof(model.IncludeExtendedMetadata)} to get other info. See the SMAPI technical docs for usage.");
                    result.Errors = errors.ToArray();
                }

                mods[mod.ID] = result;
            }

            // return data
            return(mods.Values);
        }
コード例 #4
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="environment">The web hosting environment.</param>
        /// <param name="cache">The cache in which to store mod metadata.</param>
        /// <param name="configProvider">The config settings for mod update checks.</param>
        /// <param name="chucklefish">The Chucklefish API client.</param>
        /// <param name="github">The GitHub API client.</param>
        /// <param name="nexus">The Nexus API client.</param>
        public ModsApiController(IHostingEnvironment environment, IMemoryCache cache, IOptions <ModUpdateCheckConfig> configProvider, IChucklefishClient chucklefish, IGitHubClient github, INexusClient nexus)
        {
            this.ModDatabase = new ModToolkit().GetModDatabase(Path.Combine(environment.WebRootPath, "StardewModdingAPI.metadata.json"));
            ModUpdateCheckConfig config = configProvider.Value;

            this.WikiCompatibilityPageUrl = config.WikiCompatibilityPageUrl;

            this.Cache = cache;
            this.SuccessCacheMinutes = config.SuccessCacheMinutes;
            this.ErrorCacheMinutes   = config.ErrorCacheMinutes;
            this.VersionRegex        = config.SemanticVersionRegex;
            this.Repositories        =
                new IModRepository[]
            {
                new ChucklefishRepository(config.ChucklefishKey, chucklefish),
                new GitHubRepository(config.GitHubKey, github),
                new NexusRepository(config.NexusKey, nexus)
            }
            .ToDictionary(p => p.VendorKey, StringComparer.CurrentCultureIgnoreCase);
        }
コード例 #5
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="environment">The web hosting environment.</param>
        /// <param name="wikiCache">The cache in which to store wiki data.</param>
        /// <param name="modCache">The cache in which to store mod metadata.</param>
        /// <param name="configProvider">The config settings for mod update checks.</param>
        /// <param name="chucklefish">The Chucklefish API client.</param>
        /// <param name="curseForge">The CurseForge API client.</param>
        /// <param name="github">The GitHub API client.</param>
        /// <param name="modDrop">The ModDrop API client.</param>
        /// <param name="nexus">The Nexus API client.</param>
        public ModsApiController(IHostingEnvironment environment, IWikiCacheRepository wikiCache, IModCacheRepository modCache, IOptions <ModUpdateCheckConfig> configProvider, IChucklefishClient chucklefish, ICurseForgeClient curseForge, IGitHubClient github, IModDropClient modDrop, INexusClient nexus)
        {
            this.ModDatabase = new ModToolkit().GetModDatabase(Path.Combine(environment.WebRootPath, "SMAPI.metadata.json"));
            ModUpdateCheckConfig config = configProvider.Value;

            this.WikiCache           = wikiCache;
            this.ModCache            = modCache;
            this.SuccessCacheMinutes = config.SuccessCacheMinutes;
            this.ErrorCacheMinutes   = config.ErrorCacheMinutes;
            this.Repositories        =
                new IModRepository[]
            {
                new ChucklefishRepository(chucklefish),
                new CurseForgeRepository(curseForge),
                new GitHubRepository(github),
                new ModDropRepository(modDrop),
                new NexusRepository(nexus)
            }
            .ToDictionary(p => p.VendorKey);
        }
コード例 #6
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="cache">The cache in which to store mod metadata.</param>
        /// <param name="configProvider">The config settings for mod update checks.</param>
        public ModsApiController(IMemoryCache cache, IOptions <ModUpdateCheckConfig> configProvider)
        {
            ModUpdateCheckConfig config = configProvider.Value;

            this.Cache        = cache;
            this.CacheMinutes = config.CacheMinutes;
            this.VersionRegex = config.SemanticVersionRegex;

            string version = this.GetType().Assembly.GetName().Version.ToString(3);

            this.Repositories =
                new IModRepository[]
            {
                new ChucklefishRepository(
                    vendorKey: config.ChucklefishKey,
                    userAgent: string.Format(config.ChucklefishUserAgent, version),
                    baseUrl: config.ChucklefishBaseUrl,
                    modPageUrlFormat: config.ChucklefishModPageUrlFormat
                    ),
                new GitHubRepository(
                    vendorKey: config.GitHubKey,
                    baseUrl: config.GitHubBaseUrl,
                    releaseUrlFormat: config.GitHubReleaseUrlFormat,
                    userAgent: string.Format(config.GitHubUserAgent, version),
                    acceptHeader: config.GitHubAcceptHeader,
                    username: config.GitHubUsername,
                    password: config.GitHubPassword
                    ),
                new NexusRepository(
                    vendorKey: config.NexusKey,
                    userAgent: config.NexusUserAgent,
                    baseUrl: config.NexusBaseUrl,
                    modUrlFormat: config.NexusModUrlFormat
                    )
            }
            .ToDictionary(p => p.VendorKey, StringComparer.CurrentCultureIgnoreCase);
        }