public void SimulateDriveArrival(string uuid) { if (AllDrives.TryGetValue(uuid, out var existingDrive)) { if (existingDrive.Monitored) { existingDrive.ExecuteCommand(); } return; } var drive = AllDrives.AddOrUpdate( uuid, new UsbDrive(uuid) { Monitored = true, VolumeName = "test", ConsoleCommand = "explorer.exe", DriveLetter = "X" }, (key, connectedDrive) => { Debug.WriteLine("Drive already known"); connectedDrive.DriveLetter = "X"; connectedDrive.VolumeName = "test"; if (connectedDrive.Monitored) { connectedDrive.ExecuteCommand(); } return(connectedDrive); } ); DriveArrived?.Invoke(this, new DriveConnectionEventArgs(drive)); }
private void VolumeChangeHandler(object sender, EventArrivedEventArgs e) { var uuid = e.NewEvent.GetQualifierValue("UUID").ToString(); var eventType = e.NewEvent.Properties["EventType"].Value.ToString(); if (eventType == "3") //"Remove" event { if (AllDrives.TryGetValue(uuid, out var removedDrive) && !removedDrive.Monitored && AllDrives.TryRemove(uuid, out _)) { DriveRemoved?.Invoke(this, new DriveConnectionEventArgs(removedDrive)); } return; } var volume = e.NewEvent.GetPropertyValue("DriveName").ToString(); var volumeLabel = new DriveInfo(volume.Substring(0, 1)).VolumeLabel; Debug.WriteLine($"Drive connected. UUID={uuid}, volume={volume}, volumeLabel={volumeLabel}"); var drive = AllDrives.GetOrAdd( uuid, key => new UsbDrive(key) { DriveLetter = volume, VolumeName = volumeLabel } ); drive.DriveLetter = volume; drive.VolumeName = volumeLabel; if (drive.Monitored) { drive.ExecuteCommand(); } DriveArrived?.Invoke(this, new DriveConnectionEventArgs(drive)); }