private void ExecuteCloneFilesets(IEnumerable <FilesetViewModel> filesets)
        {
            foreach (var filesetViewModel in filesets.ToArray())
            {
                FilesetViewModel model = filesetViewModel;

                _filesetService.Add().ContinueWith(task =>
                {
                    if (task.IsFaulted)
                    {
                        Trace.WriteLine(task.Exception);
                    }
                    else
                    {
                        var clone      = task.Result;
                        clone.Name     = model.Name + " [Clone]";
                        clone.Category = model.Category;
                        clone.Includes.AddRange(model.Includes);
                        clone.Excludes.AddRange(model.Excludes);
                        clone.KillLockingProcess = model.KillLockingProcess;
                        clone.DestinationPath    = model.DestinationPath;
                        clone.SourcePath         = model.SourcePath;
                        clone.IsEnabled          = false;
                    }
                });
            }
        }
        private void ExecuteRemoveFileset(FilesetViewModel model)
        {
            var fs = _filesetService.Filesets.FirstOrDefault(f => f.Id == model.Id);

            if (fs != null)
            {
                _filesetService
                .Remove(fs)
                .ContinueWith(task =>
                {
                    Trace.WriteLineIf(task.IsFaulted, task.Exception);
                });
            }
        }
        void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
        {
            _navigationService = navigationContext.NavigationService;

            foreach (var fileset in _filesetService.Filesets)
            {
                var viewModel = new FilesetViewModel(fileset);
                viewModel.PropertyChanged += OnFilesetPropertyChanged;
                _filesets.Add(viewModel);
            }

            _filesetAdded = _filesetService
                            .FilesetAdded
                            .ObserveOnDispatcher()
                            .Subscribe(fileset =>
            {
                var viewModel              = new FilesetViewModel(fileset);
                viewModel.PropertyChanged += OnFilesetPropertyChanged;
                _filesets.Add(viewModel);
                Filesets.MoveCurrentTo(viewModel);
            });

            _filesetRemoved = _filesetService
                              .FilesetRemoved
                              .ObserveOnDispatcher()
                              .Subscribe(fileset =>
            {
                var fs = _filesets.FirstOrDefault(fvm => fvm.Id == fileset.Id);

                if (fs != null)
                {
                    fs.PropertyChanged -= OnFilesetPropertyChanged;
                    _filesets.Remove(fs);
                }

                if (Filesets.IsEmpty)
                {
                    _navigationService.Region.RegionManager.Regions[AppRegions.MainRegion]
                    .RequestNavigate(typeof(IWelcomeView).Name);
                }
            });

            Filesets = CollectionViewSource.GetDefaultView(_filesets);
            Filesets.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
            Filesets.SortDescriptions.Add(new SortDescription("Category", ListSortDirection.Ascending));
            Filesets.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
            Filesets.CurrentChanged += CurrentFilesetChanged;
            Filesets.MoveCurrentTo(null);
            Filesets.MoveCurrentToFirst();
        }
        void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
        {
            var id = navigationContext.Parameters["id"];

            if (!string.IsNullOrEmpty(id))
            {
                var fileset = _filesetService.Filesets.FirstOrDefault(fs => fs.Id.ToString() == id);

                if (fileset != null)
                {
                    Fileset     = new FilesetViewModel(fileset);
                    ActivityLog = _activityLogService.GetEvents(fileset.Id);
                }

                _filesetService.Filesets.Select(fs => fs.Category)
                .Distinct()
                .Where(c => !string.IsNullOrEmpty(c))
                .ForEach(_categories.Add);
            }
        }
        private void ExecuteExportFileset(FilesetViewModel fileset)
        {
            var dialog = new SaveFileDialog();

            dialog.Title    = "Select location to export the fileset";
            dialog.FileName = fileset.Id + ".fis";

            if (dialog.ShowDialog() == true)
            {
                var fs = _filesetService.Filesets.FirstOrDefault(fvm => fvm.Id == fileset.Id);

                if (fs != null)
                {
                    _filesetService
                    .Save(fs, () => new FileStream(dialog.FileName, FileMode.Create))
                    .ContinueWith(task =>
                    {
                        Trace.WriteLineIf(task.IsFaulted, task);
                    });
                }
            }
        }
 private bool CanExecuteRemoveFileset(FilesetViewModel model)
 {
     return(model != null);
 }
 private bool CanExecuteExportFileset(FilesetViewModel fileset)
 {
     return(fileset != null);
 }