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));
            }
        }
Esempio n. 2
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
        }
Esempio n. 3
0
        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;
                    }
                }
            });
        }
Esempio n. 4
0
        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;
                    }
                }
            });
        }
Esempio n. 5
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));
            }
        }