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);
                }
            }
        }
Example #3
0
        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));
        }
Example #4
0
        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());
            }
        }
Example #5
0
        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();
        }