public void GoToPath(string pathToGo) { try { if (!pathToGo.Substring(0, 3).Equals(Drive.Path)) { Drive = (FolderShell)AllDrives[AllDrives.IndexOf(AllDrives.Where(item => item.Path.Equals(pathToGo.Substring(0, 3))).First())]; } FileAttributes attr = File.GetAttributes(pathToGo); if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { Path = pathToGo; } else { Path = pathToGo.Substring(0, pathToGo.LastIndexOf('\\')); } FolderShell f = new FolderShell(Path); List <ShellObject> obj = f.Folders.Concat(f.Files).ToList(); AllObjects = new ReadOnlyObservableCollection <ShellObject>(new ObservableCollection <ShellObject>(obj)); } catch (Exception e) { Path = Drive.Path; MessageWindow mw = new MessageWindow(); MessageWindowViewModel.Instance.Message = e.Message; mw.ShowDialog(); } }
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)); }
/// <summary> /// Сохранить настройки. /// </summary> /// <param name="storage">Хранилище настроек.</param> public void Save(SettingsStorage storage) { storage.SetValue("Drives", AllDrives.Select(s => s.SaveEntire(false)).ToArray()); if (DefaultDrive != null) { storage.SetValue("DefaultDrive", DefaultDrive.Path); } }
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)); }
/// <summary> /// Освободить занятые ресурсы. /// </summary> protected override void DisposeManaged() { AllDrives.ForEach(d => d.Dispose()); base.DisposeManaged(); }