示例#1
0
 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);
 }
示例#2
0
    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);
        }
    }