/// <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); } }
/// <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); } }