Exemple #1
0
        private async void ReplayListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (!(this.DataContext is MainWindowViewModel context))
            {
                return;
            }
            if (!(sender is ListView replayList))
            {
                return;
            }
            if (!(replayList.SelectedItem is ReplayPreview previewModel))
            {
                return;
            }

            FileResult replayFile = context.FileResults[previewModel.Location];

            ReplayDetail replayDetail = new ReplayDetail(replayFile, previewModel);

            ReplayDetailControl detailControl = this.FindName("DetailView") as ReplayDetailControl;

            detailControl.DataContext = replayDetail;

            (detailControl.FindName("BlankContent") as StackPanel).Visibility = Visibility.Hidden;
            (detailControl.FindName("ReplayContent") as Grid).Visibility      = Visibility.Visible;

            await(this.DataContext as MainWindowViewModel).LoadItemThumbnails(replayDetail).ConfigureAwait(true);
        }
        public FIL.Contracts.DataModels.ReplayDetail SaveReplayDetail(
            FIL.Contracts.Models.CreateEventV1.ReplayDetailModel replayDetail,
            ReplayDetailCommand command
            )
        {
            var replayDetails         = _replayDetailRepository.GetAllByEventId(command.EventId);
            var currentReplayDetail   = replayDetails.Where(s => s.IsPaid == replayDetail.IsPaid).FirstOrDefault();
            var replayDetailDataModel = new ReplayDetail();

            replayDetailDataModel.AltId      = currentReplayDetail != null ? currentReplayDetail.AltId : Guid.NewGuid();
            replayDetailDataModel.Id         = currentReplayDetail != null ? currentReplayDetail.Id : 0;
            replayDetailDataModel.EventId    = command.EventId;
            replayDetailDataModel.StartDate  = replayDetail.IsEnabled ? replayDetail.StartDate : (DateTime?)null;
            replayDetailDataModel.EndDate    = replayDetail.IsEnabled ? replayDetail.EndDate : (DateTime?)null;
            replayDetailDataModel.IsPaid     = replayDetail.IsPaid;
            replayDetailDataModel.Price      = replayDetail.IsEnabled ? replayDetail.Price : 0;
            replayDetailDataModel.IsEnabled  = replayDetail.IsEnabled;
            replayDetailDataModel.CurrencyId = replayDetail.CurrencyId == 0 ? null : replayDetail.CurrencyId;
            replayDetailDataModel.CreatedBy  = currentReplayDetail != null ? currentReplayDetail.CreatedBy : command.ModifiedBy;
            replayDetailDataModel.CreatedUtc = currentReplayDetail != null ? currentReplayDetail.CreatedUtc : DateTime.UtcNow;
            replayDetailDataModel.UpdatedBy  = command.ModifiedBy;
            replayDetailDataModel.UpdatedUtc = DateTime.UtcNow;
            _replayDetailRepository.Save(replayDetailDataModel);
            return(replayDetailDataModel);
        }
Exemple #3
0
        private async void Window_Loaded(object sender, RoutedEventArgs e)
        {
            if (!(this.DataContext is MainWindowViewModel context))
            {
                return;
            }

            var replay = await _files.GetSingleFile(ReplayFileLocation).ConfigureAwait(true);

            if (replay == null)
            {
                _log.Error($"Failed to load file {ReplayFileLocation}");
                MessageBox.Show((string)TryFindResource("FailedToLoadReplayText"),
                                (string)TryFindResource("ErrorTitle"),
                                MessageBoxButton.OK,
                                MessageBoxImage.Error);

                Application.Current.Shutdown();
            }
            else
            {
                // Let the view model know about the replay
                var previewReplay = context.AddReplay(replay);
                var replayDetail  = new ReplayDetail(replay, previewReplay);
                DetailView.DataContext = replayDetail;
                (DetailView.FindName("BlankContent") as Grid).Visibility  = Visibility.Hidden;
                (DetailView.FindName("ReplayContent") as Grid).Visibility = Visibility.Visible;

                await context.LoadItemThumbnails(replayDetail).ConfigureAwait(true);

                await context.LoadSinglePreviewPlayerThumbnails(previewReplay).ConfigureAwait(true);
            }
        }
Exemple #4
0
        private async void ReplayListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (!(this.DataContext is MainWindowViewModel context))
            {
                return;
            }
            if (!(sender is System.Windows.Controls.ListView replayList))
            {
                return;
            }
            if (!(replayList.SelectedItem is ReplayPreview previewModel))
            {
                return;
            }

            // Deselect the last selected item
            if (_lastSelection != null && _lastSelection.IsSelected)
            {
                _lastSelection.IsSelected = false;
            }

            previewModel.IsSelected = true;
            _lastSelection          = previewModel;

            FileResult replayFile = context.FileResults[previewModel.Location];

            ReplayDetail replayDetail = new ReplayDetail(replayFile, previewModel);

            ReplayDetailControl detailControl = this.FindName("DetailView") as ReplayDetailControl;

            detailControl.DataContext = replayDetail;

            (detailControl.FindName("BlankContent") as Grid).Visibility  = Visibility.Hidden;
            (detailControl.FindName("ReplayContent") as Grid).Visibility = Visibility.Visible;

            await(this.DataContext as MainWindowViewModel).LoadItemThumbnails(replayDetail).ConfigureAwait(true);

            // See if tab control needs to update runes:
            if ((detailControl.FindName("DetailTabControl") as TabControl).SelectedIndex == 1)
            {
                await context.LoadRuneThumbnails(replayDetail).ConfigureAwait(true);
            }
        }
        public async Task LoadItemThumbnails(ReplayDetail replay)
        {
            _log.Information("Loading/downloading thumbnails for items...");
            if (replay == null)
            {
                throw new ArgumentNullException(nameof(replay));
            }

            var dataVersion = await RequestManager.GetLatestDataDragonVersionAsync().ConfigureAwait(true);

            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.OverlayIcon = ResourceTools.GetObjectFromResource <Geometry>("DownloadPathIcon");
                });

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

                    if (response.IsFaulted)
                    {
                        _log.Warning($"Failed to load image for {(response.Request as ItemRequest).ItemID}");
                        Application.Current.Dispatcher.Invoke((Action) delegate
                        {
                            item.OverlayIcon = ResourceTools.GetObjectFromResource <Geometry>("ErrorPathIcon");
                        });
                    }
                    else
                    {
                        if (response.FromCache)
                        {
                            Application.Current.Dispatcher.Invoke((Action) delegate
                            {
                                item.OverlayIcon = null; // hide overlay icons, if any
                                item.ImageSource = ResourceTools.GetImageSourceFromPath(response.ResponsePath);
                            });
                        }
                        else
                        {
                            Application.Current.Dispatcher.Invoke((Action) delegate
                            {
                                item.OverlayIcon = null; // hide overlay icons, if any
                                item.ImageSource = response.ResponseBytes.ToBitmapImage();
                            });
                        }
                    }
                }));
            }

            await Task.WhenAll(itemTasks).ConfigureAwait(true);
        }
Exemple #6
0
        public static ReplayData Parse(ReplayDetail detail)
        {
            var w = new JsonWriter();

            w.WriteObjectStart();
            w.WritePropertyName("battle_id");
            w.Write(detail.battle_id);
            w.WritePropertyName("seed");
            w.Write(detail.seed);
            w.WritePropertyName("field_id");
            w.Write(detail.field_id);
            w.WritePropertyName("first_turn");
            w.Write(detail.first_turn);

            w.WritePropertyName("play_list");
            w.WriteObjectStart();
            foreach (var key in detail.play_list.Keys)
            {
                if (detail.play_list[key].GetType() == typeof(string))
                {
                    w.WritePropertyName(key);
                    w.Write(detail.play_list[key] as string);
                }
                else
                {
                    w.WritePropertyName(key);
                    w.WriteArrayStart();
                    var list = detail.play_list[key] as List <object>;
                    foreach (Dictionary <string, object> item in list)
                    {
                        w.WriteObjectStart();
                        foreach (var k in item.Keys)
                        {
                            if (item[k].GetType() == typeof(JsonData))
                            {
                                w.WritePropertyName(k);
                                var d = item[k] as JsonData;
                                switch (d.GetJsonType())
                                {
                                case JsonType.Int:
                                    w.Write(d.ToInt());
                                    break;

                                case JsonType.Long:
                                    w.Write(d.ToLong());
                                    break;

                                case JsonType.Double:
                                    w.Write(d.ToDouble());
                                    break;

                                case JsonType.Boolean:
                                    w.Write(d.ToBoolean());
                                    break;

                                default:
                                    w.Write(d.ToString());
                                    break;
                                }
                            }
                            else
                            {
                                w.WritePropertyName(k);
                                w.WriteArrayStart();
                                var l = item[k] as List <object>;
                                foreach (Dictionary <string, object> i in l)
                                {
                                    w.WriteObjectStart();

                                    foreach (var k2 in i.Keys)
                                    {
                                        w.WritePropertyName(k2);
                                        var d = i[k2] as JsonData;
                                        switch (d.GetJsonType())
                                        {
                                        case JsonType.Int:
                                            w.Write(d.ToInt());
                                            break;

                                        case JsonType.Long:
                                            w.Write(d.ToLong());
                                            break;

                                        case JsonType.Double:
                                            w.Write(d.ToDouble());
                                            break;

                                        case JsonType.Boolean:
                                            w.Write(d.ToBoolean());
                                            break;

                                        default:
                                            w.Write(d.ToString());
                                            break;
                                        }
                                    }
                                    w.WriteObjectEnd();
                                }
                                w.WriteArrayEnd();
                            }
                        }
                        w.WriteObjectEnd();
                    }
                    w.WriteArrayEnd();
                }
            }
            w.WriteObjectEnd();

            w.WritePropertyName("viewer_id");
            w.Write(detail.viewer_id);
            w.WritePropertyName("name");
            w.Write(detail.name);
            w.WritePropertyName("chara_id");
            w.Write(detail.chara_id);
            w.WritePropertyName("emblem_id");
            w.Write(detail.emblem_id);
            w.WritePropertyName("degree_id");
            w.Write(detail.degree_id);
            w.WritePropertyName("country_code");
            w.Write(detail.country_code);
            w.WritePropertyName("sleeve_id");
            w.Write(detail.sleeve_id);
            w.WritePropertyName("battle_point");
            w.Write(detail.battle_point);
            w.WritePropertyName("master_point");
            w.Write(detail.master_point);
            w.WritePropertyName("rank");
            w.Write(detail.rank);
            w.WritePropertyName("is_offical_user");
            w.Write(detail.IsOfficialUser);

            w.WritePropertyName("deck");
            w.WriteArrayStart();
            foreach (Dictionary <string, object> item in detail.deck)
            {
                w.WriteObjectStart();
                w.WritePropertyName("idx");
                w.Write(item["idx"] as string);
                w.WritePropertyName("card_id");
                w.Write(item["card_id"] as string);
                w.WriteObjectEnd();
            }
            w.WriteArrayEnd();

            w.WritePropertyName("opponent_viewer_id");
            w.Write(detail.opponent_viewer_id);
            w.WritePropertyName("opponent_name");
            w.Write(detail.opponent_name);
            w.WritePropertyName("opponent_chara_id");
            w.Write(detail.opponent_chara_id);
            w.WritePropertyName("opponent_emblem_id");
            w.Write(detail.opponent_emblem_id);
            w.WritePropertyName("opponent_degree_id");
            w.Write(detail.opponent_degree_id);
            w.WritePropertyName("opponent_country_code");
            w.Write(detail.opponent_country_code);
            w.WritePropertyName("opponent_sleeve_id");
            w.Write(detail.opponent_sleeve_id);
            w.WritePropertyName("opponent_battle_point");
            w.Write(detail.opponent_battle_point);
            w.WritePropertyName("opponent_master_point");
            w.Write(detail.opponent_master_point);
            w.WritePropertyName("opponent_rank");
            w.Write(detail.opponent_rank);
            w.WritePropertyName("is_opponent_offical_user");
            w.Write(detail.IsOpponentOfficialUser);

            w.WritePropertyName("opponent_deck");
            w.WriteArrayStart();
            foreach (Dictionary <string, object> item in detail.opponent_deck)
            {
                w.WriteObjectStart();
                w.WritePropertyName("idx");
                w.Write(item["idx"] as string);
                w.WritePropertyName("card_id");
                w.Write(item["card_id"] as string);
                w.WriteObjectEnd();
            }
            w.WriteArrayEnd();

            w.WritePropertyName("is_two_pick");
            w.Write(detail.is_two_pick);
            w.WritePropertyName("is_win");
            w.Write(detail.is_win);

            w.WriteObjectEnd();

            return(new ReplayData
            {
                Data = JsonMapper.ToObject(w.ToString())
            });
        }
        public static ReplayData Parse(ReplayDetail detail)
        {
            var w = new JsonWriter();

            w.WriteObjectStart();
            w.WritePropertyName("battle_id");
            w.Write(detail.battle_id);
            w.WritePropertyName("seed");
            w.Write(detail.seed);
            w.WritePropertyName("field_id");
            w.Write(detail.field_id);
            w.WritePropertyName("first_turn");
            w.Write(detail.first_turn);

            w.WritePropertyName("play_list");
            w.WriteObjectStart();
            foreach (var key in detail.play_list.Keys)
            {
                w.WritePropertyName(key);
                jsonify(w, detail.play_list[key]);
            }
            w.WriteObjectEnd();

            w.WritePropertyName("viewer_id");
            w.Write(detail.viewer_id);
            w.WritePropertyName("name");
            w.Write(detail.name);
            w.WritePropertyName("chara_id");
            w.Write(detail.chara_id);
            w.WritePropertyName("emblem_id");
            w.Write(detail.emblem_id);
            w.WritePropertyName("degree_id");
            w.Write(detail.degree_id);
            w.WritePropertyName("country_code");
            w.Write(detail.country_code);
            w.WritePropertyName("sleeve_id");
            w.Write(detail.sleeve_id);
            w.WritePropertyName("battle_point");
            w.Write(detail.battle_point);
            w.WritePropertyName("master_point");
            w.Write(detail.master_point);
            w.WritePropertyName("rank");
            w.Write(detail.rank);
            w.WritePropertyName("is_offical_user");
            w.Write(detail.IsOfficialUser);

            w.WritePropertyName("deck");
            w.WriteArrayStart();
            foreach (Dictionary <string, object> item in detail.deck)
            {
                w.WriteObjectStart();
                w.WritePropertyName("idx");
                w.Write(item["idx"] as string);
                w.WritePropertyName("card_id");
                w.Write(item["card_id"] as string);
                w.WriteObjectEnd();
            }
            w.WriteArrayEnd();

            w.WritePropertyName("opponent_viewer_id");
            w.Write(detail.opponent_viewer_id);
            w.WritePropertyName("opponent_name");
            w.Write(detail.opponent_name);
            w.WritePropertyName("opponent_chara_id");
            w.Write(detail.opponent_chara_id);
            w.WritePropertyName("opponent_emblem_id");
            w.Write(detail.opponent_emblem_id);
            w.WritePropertyName("opponent_degree_id");
            w.Write(detail.opponent_degree_id);
            w.WritePropertyName("opponent_country_code");
            w.Write(detail.opponent_country_code);
            w.WritePropertyName("opponent_sleeve_id");
            w.Write(detail.opponent_sleeve_id);
            w.WritePropertyName("opponent_battle_point");
            w.Write(detail.opponent_battle_point);
            w.WritePropertyName("opponent_master_point");
            w.Write(detail.opponent_master_point);
            w.WritePropertyName("opponent_rank");
            w.Write(detail.opponent_rank);
            w.WritePropertyName("is_opponent_offical_user");
            w.Write(detail.IsOpponentOfficialUser);

            w.WritePropertyName("opponent_deck");
            w.WriteArrayStart();
            foreach (Dictionary <string, object> item in detail.opponent_deck)
            {
                w.WriteObjectStart();
                w.WritePropertyName("idx");
                w.Write(item["idx"] as string);
                w.WritePropertyName("card_id");
                w.Write(item["card_id"] as string);
                w.WriteObjectEnd();
            }
            w.WriteArrayEnd();

            w.WritePropertyName("is_two_pick");
            w.Write(detail.is_two_pick);
            w.WritePropertyName("is_win");
            w.Write(detail.is_win);

            w.WriteObjectEnd();

            return(new ReplayData
            {
                Data = JsonMapper.ToObject(w.ToString())
            });
        }
Exemple #8
0
        public async Task LoadRuneThumbnails(ReplayDetail replay)
        {
            _log.Information("Loading/downloading thumbnails for runes...");
            if (replay == null)
            {
                throw new ArgumentNullException(nameof(replay));
            }

            string dataVersion = await RequestManager.GetLatestDataDragonVersionAsync().ConfigureAwait(true);

            List <Rune> allRunes = new List <Rune>();
            List <Task> allTasks = new List <Task>();

            allRunes.AddRange(replay.AllPlayers.Select(x => x.KeystoneRune));
            allRunes.AddRange(replay.AllPlayers.SelectMany(x => x.Runes));
            allRunes.AddRange(replay.AllPlayers.SelectMany(x => x.StatsRunes));

            _log.Information($"Processing {allRunes.Count} rune thumbnail requests");
            foreach (Rune rune in allRunes)
            {
                RuneJson runeData = RuneHelper.GetRune(rune.RuneId);
                // If an item does not exist, set it to nothing!
                if (string.IsNullOrEmpty(runeData.Icon))
                {
                    Application.Current.Dispatcher.Invoke(delegate
                    {
                        rune.OverlayIcon = ResourceTools.GetObjectFromResource <Geometry>("ErrorPathIcon");
                    });
                    // move on to the next rune
                    continue;
                }

                // Set default item image, to be replaced
                Application.Current.Dispatcher.Invoke((Action) delegate
                {
                    rune.OverlayIcon = ResourceTools.GetObjectFromResource <Geometry>("DownloadPathIcon");
                });

                // make requests for images
                allTasks.Add(Task.Run(async() =>
                {
                    ResponseBase response = await RequestManager.MakeRequestAsync(new RuneRequest
                    {
                        DataDragonVersion = dataVersion,
                        RuneKey           = runeData.Key,
                        TargetPath        = runeData.Icon
                    }).ConfigureAwait(true);

                    if (response.IsFaulted)
                    {
                        _log.Warning($"Failed to load image for {(response.Request as RuneRequest).RuneKey}");
                        Application.Current.Dispatcher.Invoke(delegate
                        {
                            rune.OverlayIcon = ResourceTools.GetObjectFromResource <Geometry>("ErrorPathIcon");
                        });
                    }
                    else
                    {
                        if (response.FromCache) // load image from file
                        {
                            Application.Current.Dispatcher.Invoke(delegate
                            {
                                rune.OverlayIcon = null; // hide overlay icons, if any
                                rune.ImageSource = ResourceTools.GetImageSourceFromPath(response.ResponsePath);
                            });
                        }
                        else // load image straight from response if its not cachsed
                        {
                            Application.Current.Dispatcher.Invoke(delegate
                            {
                                rune.OverlayIcon = null; // hide overlay icons, if any
                                rune.ImageSource = response.ResponseBytes.ToBitmapImage();
                            });
                        }
                    }
                }));
            }

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