예제 #1
0
        public async Task LoadSinglePreviewPlayerThumbnails(ReplayPreview replay)
        {
            if (replay == null)
            {
                throw new ArgumentNullException(nameof(replay));
            }

            if (LatestDataDragonVersion == null)
            {
                LatestDataDragonVersion = await RequestManager.GetDataDragonVersionAsync(null).ConfigureAwait(true);
            }

            var dataVersion = LatestDataDragonVersion;

            // Get the correct data version for the replay version
            if (!SettingsManager.Settings.UseMostRecent)
            {
                dataVersion = await RequestManager.GetDataDragonVersionAsync(replay.GameVersion).ConfigureAwait(true);
            }

            var allPlayers = new List <PlayerPreview>();

            allPlayers.AddRange(replay.BluePreviewPlayers);
            allPlayers.AddRange(replay.RedPreviewPlayers);

            _log.Information($"Processing {allPlayers.Count} champion thumbnail requests");
            var allRequests = new List <dynamic>(allPlayers.Select(x =>
                                                                   new
            {
                Player  = x,
                Request = new ChampionRequest()
                {
                    ChampionName      = x.ChampionName,
                    DataDragonVersion = dataVersion
                }
            }));

            var allTasks = new List <Task>();

            foreach (var request in allRequests)
            {
                Application.Current.Dispatcher.Invoke((Action) delegate
                {
                    request.Player.ImageSource = ResourceTools.GetImageSourceFromResource("DownloadDrawingImage");
                });

                allTasks.Add(Task.Run(async() =>
                {
                    var response = await RequestManager.MakeRequestAsync(request.Request as RequestBase)
                                   .ConfigureAwait(true);

                    if (response.IsFaulted)
                    {
                        Application.Current.Dispatcher.Invoke((Action) delegate
                        {
                            request.Player.ImageSource = ResourceTools.GetImageSourceFromResource("ErrorDrawingImage");
                        });
                    }

                    Application.Current.Dispatcher.Invoke((Action) delegate
                    {
                        request.Player.ImageSource = ResourceTools.GetImageSourceFromPath(response.ResponsePath);
                    });
                }));
            }

            await Task.WhenAll(allTasks).ConfigureAwait(true);
        }
예제 #2
0
        public async Task LoadItemThumbnails(ReplayDetail replay)
        {
            _log.Information("Loading/downloading thumbnails for items...");
            if (replay == null)
            {
                throw new ArgumentNullException(nameof(replay));
            }

            if (LatestDataDragonVersion == null)
            {
                LatestDataDragonVersion = await RequestManager.GetDataDragonVersionAsync(null).ConfigureAwait(true);
            }

            var dataVersion = LatestDataDragonVersion;

            var allItems  = new List <Item>();
            var itemTasks = new List <Task>();

            allItems.AddRange(replay.BluePlayers.SelectMany(x => x.Items));
            allItems.AddRange(replay.RedPlayers.SelectMany(x => x.Items));

            _log.Information($"Processing {allItems.Count} item thumbnail requests");
            foreach (var item in allItems)
            {
                // If an item does not exist, set it to nothing!
                if (item.ItemId == "0")
                {
                    Application.Current.Dispatcher.Invoke((Action) delegate
                    {
                        item.ShowBorder = true;
                    });
                    continue;
                }

                // Set default item image, to be replaced
                Application.Current.Dispatcher.Invoke((Action) delegate
                {
                    item.ImageSource = ResourceTools.GetImageSourceFromResource("DownloadDrawingImage");
                });

                itemTasks.Add(Task.Run(async() =>
                {
                    var response = await RequestManager.MakeRequestAsync(new ItemRequest
                    {
                        DataDragonVersion = dataVersion,
                        ItemID            = item.ItemId
                    }).ConfigureAwait(true);

                    if (response.IsFaulted)
                    {
                        Application.Current.Dispatcher.Invoke((Action) delegate
                        {
                            item.ImageSource = ResourceTools.GetImageSourceFromResource("ErrorDrawingImage");
                        });
                    }
                    else
                    {
                        Application.Current.Dispatcher.Invoke((Action) delegate
                        {
                            item.ImageSource = ResourceTools.GetImageSourceFromPath(response.ResponsePath);
                        });
                    }
                }));
            }

            await Task.WhenAll(itemTasks).ConfigureAwait(true);
        }