private static void GameBananaAddCommon(GameBananaMod modItem, GameBananaModFile file, WebDownloadablePackage package) { package.Source = SourceName; package.FileSize = file.FileSize.GetValueOrDefault(); package.ProjectUri = new Uri(modItem.LinkToModPage); package.LikeCount = modItem.LikeCount; package.ViewCount = modItem.ViewCount; package.DownloadCount = modItem.DownloadCount; package.Published = file.DateAdded; GameBananaAddAuthors(modItem, package); GameBananaAddSubmitter(modItem, package); GameBananaAddImages(modItem, package); GameBananaAddChangelog(modItem, package); }
private async Task <int> TryAddResultFromReleaseMetadataFile(ConcurrentBag <IDownloadablePackage> results, GameBananaModFile file, GameBananaMod item) { var metadata = await Caches.GameBananaFiles.GetOrDownloadFileFromUrlBrotli(new Uri(file.DownloadUrl !), file.Id, Caches.ReleaseMetadataExpiration, true); try { // Get metadata & filter potentially invalid file. var releaseMetadata = await Singleton <ReleaseMetadata> .Instance.ReadFromDataAsync(metadata); if (releaseMetadata.ExtraData == null || releaseMetadata.Releases.Count <= 0) { return(0); } // Get the highest version of release. var highestVersion = releaseMetadata.Releases.OrderByDescending(x => new NuGetVersion(x.Version)).First(); var newestRelease = releaseMetadata.GetRelease(highestVersion.Version, new ReleaseMetadataVerificationInfo() { FolderPath = _dummyFolderForReleaseVerification }); if (newestRelease == null) { return(0); } var url = GetDownloadUrlForFileName(newestRelease.FileName, item.Files !, out var modFile); if (string.IsNullOrEmpty(url)) { return(0); } var package = new WebDownloadablePackage(new Uri(url), false) { Name = item.Name !, Description = HtmlUtilities.ConvertToPlainText(item.Description) }; // Get better details from extra data. if (TryGetExtraData(releaseMetadata, out var extraData)) { package.Id = !string.IsNullOrEmpty(extraData !.ModId) ? extraData.ModId : package.Name; package.Name = !string.IsNullOrEmpty(extraData.ModName) ? extraData.ModName : package.Name; package.Description = !string.IsNullOrEmpty(extraData.ModDescription) ? extraData.ModDescription : package.Name; package.MarkdownReadme = extraData.Readme; package.Changelog = extraData.Changelog; } // Set enhanced readme if possible. if (string.IsNullOrEmpty(package.MarkdownReadme)) { package.MarkdownReadme = Singleton <Converter> .Instance.Convert(item.Description); } GameBananaAddCommon(item, modFile !, package); results.Add(package); return(1); } catch (Exception) { // Suppress return(0); } }