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