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