コード例 #1
0
        public static string ToBadgeValue(this VSMarketplaceItem item, BadgeType type)
        {
            switch (type)
            {
            case BadgeType.Version:
            case BadgeType.VersionShort:
                return(item.Version);

            case BadgeType.Installs:
                return(item.InstallCount.ToString());

            case BadgeType.InstallsShort:
                return(ApplyUnit(item.InstallCount));

            case BadgeType.Rating:
                return($"average: {Math.Round(item.AverageRating, 2)}/5 ({item.RatingCount } ratings)");

            case BadgeType.RatingShort:
                return($"{Math.Round(item.AverageRating, 2)}/5 ({item.RatingCount })");

            case BadgeType.TrendingDaily:
                return($"{Math.Round(item.TrendingDaily, 2)}");

            case BadgeType.TrendingMonthly:
                return($"{Math.Round(item.TrendingMonthly, 2)}");

            case BadgeType.TrendingWeekly:
                return($"{Math.Round(item.TrendingWeekly, 2)}");

            case BadgeType.RatingStar:
                return(LoadRatingStar(item.AverageRating));

            case BadgeType.Downloads:
                return(item.DownloadCount.ToString());

            case BadgeType.DownloadsShort:
                return(ApplyUnit(item.DownloadCount));

            default:
                throw new ArgumentException();
            }
        }
コード例 #2
0
        private async Task <VSMarketplaceItem> CoreRequest(string itemName)
        {
            var req = new ByteArrayContent(JsonSerializer.Serialize(new { filters = new[] { new { criteria = new[] { new { filterType = 7, value = itemName } } } }, flags = 914 }));

            req.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var result = await client.PostAsync(endpoint, req);

            if (result.IsSuccessStatusCode)
            {
                var response = await result.Content.ReadAsByteArrayAsync();

                try
                {
                    var extensions = JsonSerializer.Deserialize <VSMarketplaceResponse>(response);
                    var raw        = extensions.Results.FirstOrDefault()?.Extensions?.FirstOrDefault();
                    if (raw == null)
                    {
                        logger.LogInformation("Not found item: {itemName}", itemName);
                        return(null);
                    }
                    var item = new VSMarketplaceItem(raw);
                    await SaveCache(itemName, response, new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) });

                    return(item);
                }
                catch (Exception ex)
                {
                    ex.Data.Add("json", await result.Content.ReadAsStringAsync());
                    throw ex;
                }
            }
            var e = new InvalidCastException("Invalid extension data");

            e.Data.Add("req", req.ToString());
            e.Data.Add("res", await result.Content.ReadAsStringAsync());
            throw e;
        }