/// <summary>
        /// Renames a given replay and refreshes the list
        /// </summary>
        /// <param name="preview"></param>
        /// <param name="newText"></param>
        /// <returns></returns>
        public async Task <string> RenameFile(ReplayPreview preview, string newText)
        {
            if (preview == null)
            {
                throw new ArgumentNullException(nameof(preview));
            }

            // Get the full replay object, it contains more information
            var replay = FileResults[preview.Location];

            // Ask the file manager to rename the replay
            var error = _fileManager.RenameReplay(replay, newText);

            // If the request returned nothing, it worked
            if (error == null)
            {
                await ReloadReplayList().ConfigureAwait(false);
            } // User entered nothing, change message
            else if (error == "{EMPTY ERROR}")
            {
                error = Application.Current.TryFindResource("RenameFlyoutEmptyError") as string;
            }
            else if (error == "{NOT FOUND ERROR}")
            {
                error = Application.Current.TryFindResource("RenameFlyoutNotFoundError") as string;
            }
            // Return error
            return(error);
        }
        /// <summary>
        /// Renames a given replay and refreshes the list
        /// </summary>
        /// <param name="preview"></param>
        /// <param name="newText"></param>
        /// <returns></returns>
        public string RenameFile(ReplayPreview preview, string newText)
        {
            if (preview == null)
            {
                throw new ArgumentNullException(nameof(preview));
            }

            // Get the full replay object, it contains more information
            var replay = FileResults[preview.Location];

            // Ask the file manager to rename the replay
            var error = _fileManager.RenameReplay(replay, newText);

            // User entered nothing, change message
            if (error == "{EMPTY ERROR}")
            {
                error = Application.Current.TryFindResource("RenameFlyoutEmptyError") as string;
            }
            else if (error == "{NOT FOUND ERROR}")
            {
                error = Application.Current.TryFindResource("RenameFlyoutNotFoundError") as string;
            }
            else // Success
            {
                // Change the displayed data to the new name
                preview.DisplayName = newText;
            }

            return(error);
        }
        public ReplayPreview CreateReplayPreview(FileResult file)
        {
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }

            ReplayPreview previewModel = new ReplayPreview(file.ReplayFile,
                                                           file.FileInfo.CreationTime,
                                                           SettingsManager.Settings.PlayerMarkerStyle,
                                                           SettingsManager.Settings.RenameAction,
                                                           file.IsNewFile);

            previewModel.IsSupported = SettingsManager.Executables.DoesVersionExist(previewModel.GameVersion);

            foreach (var bluePlayer in previewModel.BluePreviewPlayers)
            {
                bluePlayer.Marker = KnownPlayers.FirstOrDefault(x => x.Name.Equals(bluePlayer.PlayerName, StringComparison.OrdinalIgnoreCase));
            }

            foreach (var redPlayer in previewModel.RedPreviewPlayers)
            {
                redPlayer.Marker = KnownPlayers.FirstOrDefault(x => x.Name.Equals(redPlayer.PlayerName, StringComparison.OrdinalIgnoreCase));
            }

            return(previewModel);
        }
Exemple #4
0
        public MainWindow(RiZhi log, SettingsManager settingsManager, RequestManager requests, FileManager files, ReplayPlayer player)
        {
            InitializeComponent();

            _log             = log;
            _settingsManager = settingsManager;
            _requests        = requests;
            _files           = files;
            _player          = player;

            _lastSelection = null;

            Dispatcher.UnhandledException += (object sender, DispatcherUnhandledExceptionEventArgs e) =>
            {
                _log.Error(e.Exception.ToString());
                _log.WriteLog();
            };

            var context = new MainWindowViewModel(_files, _requests, _settingsManager, _player, _log);

            this.DataContext = context;

            // Decide to show welcome window
            context.ShowWelcomeWindow();
            context.ShowMissingReplayFoldersMessageBox();
        }
        public async Task DeleteReplayFile(ReplayPreview preview)
        {
            if (preview == null)
            {
                throw new ArgumentNullException(nameof(preview));
            }

            _fileManager.DeleteFile(FileResults[preview.Location]);

            await ReloadReplayList().ConfigureAwait(false);
        }
Exemple #6
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 void ShowExportReplayDataWindow(ReplayPreview preview)
        {
            _log.Information($"Showing Export Dialog...");

            if (preview == null)
            {
                throw new ArgumentNullException(nameof(preview));
            }

            var exportContext = new ExportContext()
            {
                Replays = new ReplayFile[] { FileResults[preview.Location].ReplayFile },
                Markers = KnownPlayers.ToList()
            };

            var exportDialog = new ExportReplayDataWindow()
            {
                Top         = App.Current.MainWindow.Top + 50,
                Left        = App.Current.MainWindow.Left + 50,
                DataContext = exportContext,
            };

            exportDialog.ShowDialog();
        }
        public async Task <Process> PlayReplay(ReplayPreview preview)
        {
            _log.Information($"Playing replay...");

            if (preview == null)
            {
                throw new ArgumentNullException(nameof(preview));
            }

            var process = await _player.PlayReplay(preview.Location).ConfigureAwait(true);

            // if process is null, replay failed to play for whatever reason
            if (process != null)
            {
                preview.IsPlaying = true;
                // add event handler for when the replay stops
                process.Exited += (object processSender, System.EventArgs processEventArgs) =>
                {
                    preview.IsPlaying = false;
                };
            }

            return(process);
        }
        public async Task LoadSinglePreviewPlayerThumbnails(ReplayPreview replay)
        {
            if (replay == null)
            {
                throw new ArgumentNullException(nameof(replay));
            }

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

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

                    if (response.IsFaulted)
                    {
                        _log.Warning($"Failed to load image for {(response.Request as ChampionRequest).ChampionName}");
                        Application.Current.Dispatcher.Invoke((Action) delegate
                        {
                            request.Player.OverlayIcon = ResourceTools.GetObjectFromResource <Geometry>("ErrorPathIcon");
                        });
                    }

                    if (response.FromCache)
                    {
                        Application.Current.Dispatcher.Invoke((Action) delegate
                        {
                            request.Player.OverlayIcon = null; // hide overlay icons, if any
                            request.Player.ImageSource = ResourceTools.GetImageSourceFromPath(response.ResponsePath);
                        });
                    }
                    else
                    {
                        Application.Current.Dispatcher.Invoke((Action) delegate
                        {
                            request.Player.OverlayIcon = null; // hide overlay icons, if any
                            request.Player.ImageSource = response.ResponseBytes.ToBitmapImage();
                        });
                    }
                }));
            }

            await Task.WhenAll(allTasks).ConfigureAwait(true);
        }
Exemple #10
0
 public void SelectReplayItem(ReplayPreview replay)
 {
     ReplayListView.SelectedItem = replay;
 }
        public void PlayReplay(ReplayPreview preview)
        {
            _log.Information($"Playing replay...");

            if (preview == null)
            {
                throw new ArgumentNullException(nameof(preview));
            }

            var replay = FileResults[preview.Location];

            var executables = SettingsManager.Executables.GetExecutablesByPatch(preview.GameVersion);

            if (!executables.Any())
            {
                _log.Information($"No executables found to play replay");

                // No executable found that can be used to play
                MessageBox.Show
                (
                    Application.Current.TryFindResource("ExecutableNotFoundErrorText") as String + " " + preview.GameVersion,
                    Application.Current.TryFindResource("ExecutableNotFoundErrorTitle") as String,
                    MessageBoxButton.OK,
                    MessageBoxImage.Error
                );
                return;
            }

            LeagueExecutable target;

            if (executables.Count > 1)
            {
                _log.Information($"More than one possible executable, asking user...");
                // More than one?????
                target = ShowChooseReplayDialog(executables);
                if (target == null)
                {
                    return;
                }
            }
            else
            {
                target = executables.First();
            }

            if (SettingsManager.Settings.PlayConfirmation)
            {
                _log.Information($"Asking user for confirmation");
                // Show confirmation dialog
                var msgResult = MessageBox.Show
                                (
                    Application.Current.TryFindResource("ReplayPlayConfirmationText") as String,
                    Application.Current.TryFindResource("ReplayPlayConfirmationText") as String,
                    MessageBoxButton.OKCancel,
                    MessageBoxImage.Question
                                );

                if (msgResult != MessageBoxResult.OK)
                {
                    return;
                }
            }

            _log.Information($"Using {target.Name} to play replay {replay.FileInfo.Path}");
            ReplayPlayer.Play(target, replay.FileInfo.Path);
        }
        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);
        }