Пример #1
0
        public void ReloadMountedDrives()
        {
            var oldRoots = _mountedDrives.Select(d => d.RootDirectory).ToHashSet();

            var drives   = GetMountedDrives();
            var newRoots = drives.Select(d => d.RootDirectory).ToHashSet();

            var addedDrives = drives
                              .Where(dm => !oldRoots.Contains(dm.RootDirectory))
                              .ToArray();
            var removedDrives = MountedDrives
                                .Where(dm => !newRoots.Contains(dm.RootDirectory))
                                .ToArray();

            foreach (var driveModel in addedDrives)
            {
                _mountedDrives.Add(driveModel);

                DriveAdded.Raise(this, CreateFrom(driveModel));
            }

            foreach (var driveModel in removedDrives)
            {
                _mountedDrives.Remove(driveModel);

                DriveRemoved.Raise(this, CreateFrom(driveModel));
            }

            // TODO: updated drives
        }
        public async Task ReloadUnmountedDrivesAsync()
        {
            var unmountedDrives = await GetUnmountedDrivesAsync();

            var oldRoots = _unmountedDrives.Select(d => d.FullName).ToHashSet();
            var newRoots = unmountedDrives.Select(d => d.FullName).ToHashSet();

            var addedDrives = unmountedDrives
                              .Where(udm => !oldRoots.Contains(udm.FullName))
                              .ToArray();
            var removedDrives = UnmountedDrives
                                .Where(udm => !newRoots.Contains(udm.FullName))
                                .ToArray();

            foreach (var unmountedDriveModel in addedDrives)
            {
                _unmountedDrives.Add(unmountedDriveModel);

                DriveAdded.Raise(this, CreateFrom(unmountedDriveModel));
            }

            foreach (var unmountedDriveModel in removedDrives)
            {
                _unmountedDrives.Remove(unmountedDriveModel);

                DriveRemoved.Raise(this, CreateFrom(unmountedDriveModel));
            }
        }
Пример #3
0
        public void ReloadMountedDrives()
        {
            var oldRoots = _mountedDrives.Select(d => d.RootDirectory).ToHashSet();

            var drives   = GetMountedDrives();
            var newRoots = drives.Select(d => d.RootDirectory).ToHashSet();

            var addedDrives = drives
                              .Where(dm => !oldRoots.Contains(dm.RootDirectory))
                              .ToArray();
            var removedDrives = MountedDrives
                                .Where(dm => !newRoots.Contains(dm.RootDirectory))
                                .ToArray();
            var updatedDrives = _mountedDrives.Except(removedDrives).ToArray();

            foreach (var driveModel in updatedDrives)
            {
                var newDriveModel = drives.Single(d => d.RootDirectory == driveModel.RootDirectory);
                if (!CheckIfDiffer(driveModel, newDriveModel))
                {
                    continue;
                }

                Update(driveModel, newDriveModel);

                DriveUpdated.Raise(this, CreateFrom(driveModel));
            }

            foreach (var driveModel in addedDrives)
            {
                _mountedDrives.Add(driveModel);

                DriveAdded.Raise(this, CreateFrom(driveModel));
            }

            foreach (var driveModel in removedDrives)
            {
                _mountedDrives.Remove(driveModel);

                DriveRemoved.Raise(this, CreateFrom(driveModel));
            }
        }