private void SetAvailableSessions(IOpenWindowViewModel openWindowViewModel, IReadOnlyCollection <SessionInfoDto> recentSessionInfos, IReadOnlyCollection <SessionInfoDto> archivedSessionInfoDtos, Func <SessionInfoDto, Task> openByDoubleClickCommand)
        {
            openWindowViewModel.ArchiveSessionsInfos = archivedSessionInfoDtos.OrderByDescending(x => x.SessionRunDateTime).Select(x =>
            {
                IOpenWindowSessionInformationViewModel newViewModel = _viewModelFactory.Create <IOpenWindowSessionInformationViewModel>();
                newViewModel.FromModel(x);
                newViewModel.IsArchiveIconVisible     = false;
                newViewModel.SelectThisSessionCommand = new AsyncCommand(() => openByDoubleClickCommand(x));
                newViewModel.OpenSessionFolderCommand = new AsyncCommand(() => OpenSessionFolder(x));
                newViewModel.DeleteSessionCommand     = new RelayCommand(() => DeleteSession(x, openWindowViewModel));
                return(newViewModel);
            }).ToList();

            openWindowViewModel.RecentSessionsInfos = recentSessionInfos.OrderByDescending(x => x.SessionRunDateTime).Select(x =>
            {
                IOpenWindowSessionInformationViewModel newViewModel = _viewModelFactory.Create <IOpenWindowSessionInformationViewModel>();
                newViewModel.FromModel(x);
                newViewModel.ArchiveCommand           = new AsyncCommand(() => ArchiveSession(openWindowViewModel, x));
                newViewModel.SelectThisSessionCommand = new AsyncCommand(() => openByDoubleClickCommand(x));
                newViewModel.OpenSessionFolderCommand = new AsyncCommand(() => OpenSessionFolder(x));
                newViewModel.DeleteSessionCommand     = new RelayCommand(() => DeleteSession(x, openWindowViewModel));
                newViewModel.IsArchiveIconVisible     = archivedSessionInfoDtos.FirstOrDefault(y => x.Id == y.Id) == null;
                return(newViewModel);
            }).ToList();
        }
        private async Task RefreshAllAvailableSession(IOpenWindowViewModel openWindowViewModel)
        {
            openWindowViewModel.IsBusy = true;
            Task <IReadOnlyCollection <SessionInfoDto> > recentSessionsTask  = _telemetryLoadController.GetAllRecentSessionInfoAsync();
            Task <IReadOnlyCollection <SessionInfoDto> > archiveSessionsTask = _telemetryLoadController.GetAllArchivedSessionInfoAsync();

            await Task.WhenAll(recentSessionsTask, archiveSessionsTask);

            SetAvailableSessions(openWindowViewModel, recentSessionsTask.Result, archiveSessionsTask.Result, OpenSession);
            openWindowViewModel.IsBusy = false;
        }
        private void DeleteSession(SessionInfoDto sessionInfoDto, IOpenWindowViewModel openWindowViewModel)
        {
            if (_loadedSessions.FirstOrDefault(x => x.Id == sessionInfoDto.Id) != null)
            {
                MessageBox.Show("Sessions is currently opened. Unable to delete opened session.", "Session Opened", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            _telemetryLoadController.DeleteSession(sessionInfoDto);
            openWindowViewModel.RefreshRecentCommand.Execute(null);
        }
 public OpenWindowController(IMainWindowViewModel mainWindowViewModel, ITelemetryLoadController telemetryLoadController, IViewModelFactory viewModelFactory, ITelemetryViewsSynchronization telemetryViewsSynchronization)
 {
     _loadedSessions                = new List <SessionInfoDto>();
     _mainWindowViewModel           = mainWindowViewModel;
     _telemetryLoadController       = telemetryLoadController;
     _viewModelFactory              = viewModelFactory;
     _telemetryViewsSynchronization = telemetryViewsSynchronization;
     _openWindowViewModel           = viewModelFactory.Create <IOpenWindowViewModel>();
     _addWindowViewModel            = viewModelFactory.Create <IOpenWindowViewModel>();
     _mainWindowViewModel.LapSelectionViewModel.OpenWindowViewModel = _openWindowViewModel;
     _mainWindowViewModel.LapSelectionViewModel.AddWindowViewModel  = _addWindowViewModel;
     BindCommands();
 }
Пример #5
0
        private void AddButton_OnClick(object sender, RoutedEventArgs e)
        {
            IOpenWindowViewModel openWindowViewModel = ((ILapSelectionViewModel)DataContext).AddWindowViewModel;

            if (_addWindow == null)
            {
                openWindowViewModel.IsOpenWindowVisible = true;
                _addWindow = new OpenWindow {
                    WindowStartupLocation = WindowStartupLocation.CenterScreen, Owner = Window.GetWindow(this), DataContext = openWindowViewModel
                };
                _addWindow.Closed += AddWindowOnClosed;
                openWindowViewModel.RefreshRecentCommand.Execute(null);
                _addWindow.Show();
                return;
            }
            openWindowViewModel.RefreshRecentCommand.Execute(null);
            openWindowViewModel.IsOpenWindowVisible = true;
            _openWindow.Focus();
        }
        private async Task RefreshAvailableSessionThatMatchTrack(IOpenWindowViewModel openWindowViewModel)
        {
            openWindowViewModel.IsBusy = true;
            Task <IReadOnlyCollection <SessionInfoDto> > recentSessionsTask  = _telemetryLoadController.GetAllRecentSessionInfoAsync();
            Task <IReadOnlyCollection <SessionInfoDto> > archiveSessionsTask = _telemetryLoadController.GetAllArchivedSessionInfoAsync();

            await Task.WhenAll(recentSessionsTask, archiveSessionsTask);

            IReadOnlyCollection <SessionInfoDto> recentSessionInfos   = recentSessionsTask.Result;
            IReadOnlyCollection <SessionInfoDto> archivedSessionsInfo = archiveSessionsTask.Result;

            if (_lastOpenedSession != null)
            {
                recentSessionInfos   = recentSessionInfos.Where(x => x.TrackName == _lastOpenedSession.TrackName && x.LayoutName == _lastOpenedSession.LayoutName && x.Simulator == _lastOpenedSession.Simulator && _loadedSessions.FirstOrDefault(y => y.Id == x.Id) == null).ToList();
                archivedSessionsInfo = archivedSessionsInfo.Where(x => x.TrackName == _lastOpenedSession.TrackName && x.LayoutName == _lastOpenedSession.LayoutName && x.Simulator == _lastOpenedSession.Simulator && _loadedSessions.FirstOrDefault(y => y.Id == x.Id) == null).ToList();
            }
            SetAvailableSessions(openWindowViewModel, recentSessionInfos, archivedSessionsInfo, AddSession);
            openWindowViewModel.IsBusy = false;
        }
        private async Task ArchiveSession(IOpenWindowViewModel openWindowViewModel, SessionInfoDto sessionInfoDto)
        {
            try
            {
                openWindowViewModel.IsBusy = true;
                await _telemetryLoadController.ArchiveSession(sessionInfoDto);

                openWindowViewModel.RefreshRecentCommand.Execute(null);
                MessageBox.Show("Session Archived", "Success", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "Error while archiving session");
                MessageBox.Show("Session Archivation failed", "Failure", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            finally
            {
                openWindowViewModel.IsBusy = false;
            }
        }
 private void CancelAndCloseOpenWindow(IOpenWindowViewModel openWindowViewModel)
 {
     openWindowViewModel.IsOpenWindowVisible = false;
 }