Example #1
0
        public CompareHashViewModel(
            IImageHashSimilarityCalculator calculator,
            FileHashViewModel fileA,
            FileHashViewModel fileB)
        {
            if (calculator == null)
            {
                throw new ArgumentNullException(nameof(calculator));
            }

            this.fileA = fileA ?? throw new ArgumentNullException(nameof(fileA));
            this.fileB = fileB ?? throw new ArgumentNullException(nameof(fileB));

            CalculateCommand = new CapturingExceptionAsyncCommand(
                async() =>
            {
                Busy = true;

                try
                {
                    var a1      = fileA.AverageHash;
                    var a2      = fileB.AverageHash;
                    AverageHash = await Task.Run(() => calculator.Calculate(a1, a2));

                    var d1         = fileA.DifferenceHash;
                    var d2         = fileB.DifferenceHash;
                    DifferenceHash = await Task.Run(() => calculator.Calculate(d1, d2));

                    var p1         = fileA.PerceptualHash;
                    var p2         = fileB.PerceptualHash;
                    PerceptualHash = await Task.Run(() => calculator.Calculate(p1, p2));
                }
                finally
                {
                    Busy = false;
                }
            },
                () => fileA.Loaded && fileB.Loaded && !Busy);

            PropertyChanged       += OnPropertyChanged;
            fileA.PropertyChanged += OnPropertyChanged;
            fileB.PropertyChanged += OnPropertyChanged;
        }
Example #2
0
        public DemoViewModel(
            IFileSystem fileSystem,
            IDemoImageHash imageHash,
            IImageHashSimilarityCalculator calculator)
        {
            if (fileSystem == null)
            {
                throw new ArgumentNullException(nameof(fileSystem));
            }

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

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

            FileA   = new FileHashViewModel(imageHash, fileSystem);
            FileB   = new FileHashViewModel(imageHash, fileSystem);
            Compare = new CompareHashViewModel(calculator, FileA, FileB);
        }