| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System;
- using System.Collections.ObjectModel;
- using System.IO;
- using System.Linq;
- using System.Reactive.Disposables;
- using System.Reactive.Linq;
- using Avalonia.Controls.Platform;
- namespace Avalonia.Win32
- {
- internal class WindowsMountedVolumeInfoListener : IDisposable
- {
- private readonly CompositeDisposable _disposables;
- private bool _beenDisposed = false;
- private ObservableCollection<MountedVolumeInfo> mountedDrives;
- public WindowsMountedVolumeInfoListener(ObservableCollection<MountedVolumeInfo> mountedDrives)
- {
- this.mountedDrives = mountedDrives;
- _disposables = new CompositeDisposable();
- var pollTimer = Observable.Interval(TimeSpan.FromSeconds(1))
- .Subscribe(Poll);
- _disposables.Add(pollTimer);
- Poll(0);
- }
- private void Poll(long _)
- {
- var allDrives = DriveInfo.GetDrives();
- var mountVolInfos = allDrives
- .Select(p => new MountedVolumeInfo()
- {
- VolumeLabel = p.VolumeLabel,
- VolumePath = p.RootDirectory.FullName,
- VolumeSizeBytes = (ulong)p.TotalSize
- })
- .ToArray();
- if (mountedDrives.SequenceEqual(mountVolInfos))
- return;
- else
- {
- mountedDrives.Clear();
- foreach (var i in mountVolInfos)
- mountedDrives.Add(i);
- }
- }
- protected virtual void Dispose(bool disposing)
- {
- if (!_beenDisposed)
- {
- if (disposing)
- {
- }
- _beenDisposed = true;
- }
- }
- public void Dispose()
- {
- Dispose(true);
- }
- }
- }
|