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