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(); 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 }
private async static void HardDeviceList_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low, async() => { switch (e.Action) { case System.Collections.Specialized.NotifyCollectionChangedAction.Add: { if (DriveAdded != null) { foreach (DriveDataBase Drive in e.NewItems) { await DriveAdded.InvokeAsync(null, await DriveChangeDeferredEventArgs.CreateAsync(Drive)); } } break; } case System.Collections.Specialized.NotifyCollectionChangedAction.Remove: { if (DriveRemoved != null) { foreach (DriveDataBase Drive in e.OldItems) { await DriveRemoved.InvokeAsync(null, await DriveChangeDeferredEventArgs.CreateAsync(Drive)); } } break; } } }); }
public async void StartListening() { if (_isListening) { return; } _drives = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable).ToList(); _isListening = true; await Task.Run(() => { while (_isListening) { var drives = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Removable).ToList(); if (drives.Count > _drives.Count) { var addedDrive = drives.First(d => _drives.All(d2 => d2.RootDirectory.Name != d.RootDirectory.Name)); _drives = drives; DriveAdded?.Invoke(this, addedDrive); } if (drives.Count < _drives.Count) { _drives = drives; } } }); }
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)); } }