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;
        }