Пример #1
0
    /// <summary>
    /// Checks if there are any updates for the mod loader.
    /// </summary>
    public static async Task CheckForLoaderUpdatesAsync()
    {
        if (!HasInternetConnection)
        {
            return;
        }

        // Check for loader updates.
        UpdateManager <Empty>?manager = null;

        try
        {
            var releaseVersion = Version.GetReleaseVersion() !;
            var resolver       = new GitHubReleaseResolver(new GitHubResolverConfiguration()
            {
                LegacyFallbackPattern = Constants.GitRepositoryReleaseName,
                RepositoryName        = Constants.GitRepositoryName,
                UserName = Constants.GitRepositoryAccount
            }, new CommonPackageResolverSettings()
            {
                AllowPrereleases = releaseVersion.IsPrerelease
            });

            var metadata = new ItemMetadata(releaseVersion, Constants.ApplicationPath, null);
            manager = await UpdateManager <Empty> .CreateAsync(metadata, resolver, new SevenZipSharpExtractor());

            // Check for new version and, if available, perform full update and restart
            var result = await manager.CheckForUpdatesAsync();

            if (result.CanUpdate)
            {
                Actions.SynchronizationContext.Send(_ =>
                {
                    // ReSharper disable once AccessToDisposedClosure
                    Actions.ShowModLoaderUpdateDialog(new ModLoaderUpdateDialogViewModel(manager, result.LastVersion !));
                }, null);
            }
        }
        catch (Exception ex)
        {
            manager?.Dispose();
            var errorMessage = $"{Resources.ErrorCheckUpdatesFailed.Get()}\n" +
                               $"{Resources.ErrorError.Get()}: {ex.Message}\n" +
                               $"{ex.StackTrace}";

            Actions.SynchronizationContext.Send(_ =>
            {
                Actions.DisplayMessagebox.Invoke(Resources.ErrorError.Get(), errorMessage, new Actions.DisplayMessageBoxParams()
                {
                    StartupLocation = Actions.WindowStartupLocation.CenterScreen
                });
            }, null);
        }
    }
Пример #2
0
    /// <inheritdoc />
    public async Task <ModDependencyResolveResult> ResolveAsync(string packageId, Dictionary <string, object>?pluginData = null, CancellationToken token = default)
    {
        // If no mod config is provided, we cannot resolve.
        if (pluginData == null)
        {
            return new ModDependencyResolveResult()
                   {
                       NotFoundDependencies = { packageId }
                   }
        }
        ;

        // If no dependency data is available, return none.
        if (!pluginData.TryGetValue(GitHubReleasesDependencyMetadataWriter.PluginId, out DependencyResolverMetadata <GitHubReleasesUpdateResolverFactory.GitHubConfig> metadata))
        {
            return new ModDependencyResolveResult()
                   {
                       NotFoundDependencies = { packageId }
                   }
        }
        ;

        // Try to get configuration for update.
        if (!metadata.IdToConfigMap.TryGetValue(packageId, out var gitConfig))
        {
            return new ModDependencyResolveResult()
                   {
                       NotFoundDependencies = { packageId }
                   }
        }
        ;

        var result   = new ModDependencyResolveResult();
        var resolver = new GitHubReleaseResolver(new GitHubResolverConfiguration()
        {
            UserName              = gitConfig.Config.UserName,
            RepositoryName        = gitConfig.Config.RepositoryName,
            LegacyFallbackPattern = gitConfig.Config.AssetFileName,
            InheritVersionFromTag = gitConfig.Config.UseReleaseTag
        }, new CommonPackageResolverSettings()
        {
            MetadataFileName = gitConfig.ReleaseMetadataName
        });

        await((IPackageResolver)resolver).InitializeAsync();
        result.FoundDependencies.Add(new UpdateDownloadablePackage(resolver)
        {
            Id = packageId
        });

        return(result);
    }
}