private FileIntegrity CheckFile(AppContentSummaryFile file)
        {
            if (!File.Exists(_localDirectory.Path.PathCombine(file.Path)))
            {
                return(new FileIntegrity(file.Path, FileIntegrityStatus.MissingData));
            }

            if (!_localMetaData.IsEntryRegistered(file.Path))
            {
                return(new FileIntegrity(file.Path, FileIntegrityStatus.MissingMetaData));
            }

            if (_localMetaData.GetEntryVersionId(file.Path) != _versionId)
            {
                return(new FileIntegrity(file.Path, FileIntegrityStatus.InvalidVersion));
            }

            string hash = HashCalculator.ComputeFileHash(_localDirectory.Path.PathCombine(file.Path));

            if (hash != file.Hash)
            {
                return(new FileIntegrity(file.Path, FileIntegrityStatus.InvalidHash));
            }

            // TODO: Check file size (always).

            return(new FileIntegrity(file.Path, FileIntegrityStatus.Ok));
        }
        private FileIntegrity CheckFile(AppContentSummaryFile file)
        {
            Action onVerificationFailed = () =>
            {
                PatcherStatistics.DispatchSendEvent(PatcherStatistics.Event.FileVerificationFailed, new PatcherStatistics.OptionalParams
                {
                    FileName = file.Path,
                    Size     = file.Size,
                });
            };

            string localPath = _localDirectory.Path.PathCombine(file.Path);

            if (!File.Exists(localPath))
            {
                onVerificationFailed();
                return(new FileIntegrity(file.Path, FileIntegrityStatus.MissingData));
            }

            if (!_localMetaData.IsEntryRegistered(file.Path))
            {
                onVerificationFailed();
                return(new FileIntegrity(file.Path, FileIntegrityStatus.MissingMetaData));
            }

            int actualVersionId = _localMetaData.GetEntryVersionId(file.Path);

            if (actualVersionId != _versionId)
            {
                onVerificationFailed();
                return(FileIntegrity.InvalidVersion(_versionId, actualVersionId, file.Path));
            }

            if (_isCheckingSize)
            {
                long actualSize = new FileInfo(localPath).Length;
                if (actualSize != file.Size)
                {
                    onVerificationFailed();
                    return(FileIntegrity.InvalidSize(file.Size, actualSize, file.Path));
                }
            }

            if (_isCheckingHash)
            {
                string actualFileHash = HashCalculator.ComputeFileHash(localPath);
                if (actualFileHash != file.Hash)
                {
                    onVerificationFailed();
                    return(FileIntegrity.InvalidHash(file.Hash, actualFileHash, file.Path));
                }
            }

            return(new FileIntegrity(file.Path, FileIntegrityStatus.Ok));
        }
        private FileIntegrity CheckFile(AppContentSummaryFile file)
        {
            string localPath = _localDirectory.Path.PathCombine(file.Path);

            if (!File.Exists(localPath))
            {
                return(new FileIntegrity(file.Path, FileIntegrityStatus.MissingData));
            }

            if (!_localMetaData.IsEntryRegistered(file.Path))
            {
                return(new FileIntegrity(file.Path, FileIntegrityStatus.MissingMetaData));
            }

            if (_localMetaData.GetEntryVersionId(file.Path) != _versionId)
            {
                return(new FileIntegrity(file.Path, FileIntegrityStatus.InvalidVersion));
            }

            if (_isCheckingSize)
            {
                long size = new FileInfo(localPath).Length;
                if (size != file.Size)
                {
                    return(new FileIntegrity(file.Path, FileIntegrityStatus.InvalidSize));
                }
            }

            if (_isCheckingHash)
            {
                string hash = HashCalculator.ComputeFileHash(localPath);
                if (hash != file.Hash)
                {
                    return(new FileIntegrity(file.Path, FileIntegrityStatus.InvalidHash));
                }
            }

            return(new FileIntegrity(file.Path, FileIntegrityStatus.Ok));
        }