private static void ExecuteMethod(object parameter) { if (!(parameter is MainViewModel)) { throw new ArgumentException("Parameter must be the correct view model type.", nameof(parameter)); } var source = GetFolderPath("Select source folder"); if (string.IsNullOrWhiteSpace(source)) { return; } var destination = GetFolderPath("Select destination folder"); if (string.IsNullOrWhiteSpace(destination)) { return; } var settings = new Settings { DestinationFolder = destination, SourceFolder = source }; var library = PhotoLibraryConverter.Convert(settings); using var context = PhotoSyncContextFactory.Make(library.DestinationFullPath, true); context.Settings.Add(settings); context.SaveChanges(); (parameter as MainViewModel).SetLibrary(library); }
private static void ExecuteMethod(object parameter) { if (!(parameter is MainViewModel)) { throw new ArgumentException("Parameter must be the correct view model type.", nameof(parameter)); } var dialog = new OpenFileDialog { Title = "Open Library", Filter = "db files (*.db)|*.db|All Files (*.*)|*.*", InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), Multiselect = false }; var result = dialog.ShowDialog(); if (result == DialogResult.OK) { var path = dialog.FileName; if (!string.IsNullOrEmpty(path) && File.Exists(path)) { using var context = PhotoSyncContextFactory.Make(path); var settings = context.Settings.Single(); var library = PhotoLibraryConverter.Convert(settings); library.FileName = Path.GetFileName(path); (parameter as MainViewModel).SetLibrary(library); } } }
public IEnumerable <PhotoRecord> Run(PhotoLibrary library) { var files = new GetPhotoFilesQuery().Run(library); var sourcePathLength = library.SourceFolder.Length; var records = new ConcurrentBag <PhotoRecord>(); var exceptions = new ConcurrentBag <Exception>(); Parallel.ForEach(files, file => { try { var relativePath = file.FullName.Remove(0, sourcePathLength).TrimStart(new[] { '\\' }); using var context = PhotoSyncContextFactory.Make(library.DestinationFullPath); var excludedFolders = context.ExcludeFolders.Select(x => x.RelativePath); if (!this.IsInExcludedFolder(excludedFolders, relativePath)) { if (context.Photos.Any(x => x.RelativePath == relativePath)) { var photo = context.Photos.FirstOrDefault(x => x.RelativePath == relativePath); if (photo != null) { var sourceFilePath = Path.Combine(library.SourceFolder, relativePath); if (!File.Exists(sourceFilePath)) { context.Photos.Remove(photo); context.SaveChanges(); } else { records.Add(this.MakeRecord(photo, file)); } } } else { var photo = new Photo { RelativePath = relativePath }; context.Photos.Add(photo); context.SaveChanges(); records.Add(this.MakeRecord(photo, file)); } } } catch (Exception ex) { exceptions.Add(ex); } }); return(exceptions.IsEmpty ? records : throw new AggregateException(exceptions)); }
public ExcludedFoldersViewModel(MainViewModel mainViewModel) { this.MainViewModel = mainViewModel; var library = AppState.Instance.Library; if (library is null) { this.Folders = new ObservableCollection <ExcludeFolder>(); } else { using var context = PhotoSyncContextFactory.Make(library.DestinationFullPath); this.Folders = new ObservableCollection <ExcludeFolder>(context.ExcludeFolders.ToArray()); } }
private static void ExecuteMethod(object parameter) { if (!(parameter is ExcludedFoldersViewModel)) { throw new ArgumentException("Parameter must be the correct view model type.", nameof(parameter)); } var library = AppState.Instance.Library; var viewModel = parameter as ExcludedFoldersViewModel; using var context = PhotoSyncContextFactory.Make(library.DestinationFullPath); context.ExcludeFolders.RemoveRange(context.ExcludeFolders.ToArray()); foreach (var folder in viewModel.Folders) { context.ExcludeFolders.Add(folder); } context.SaveChanges(); viewModel.MainViewModel.ProcessLibrary(library); var window = Application.Current.Windows.OfType <ExcludedFoldersWindow>().SingleOrDefault(x => x.IsActive); window.Close(); }