private async void OnConnect(object obj) { if (GoldDrives.Count == 0 || string.IsNullOrEmpty(SelectedDrive.Host)) { if (SelectedDrive != null) { var drive = FreeDrives.ToList().Find(x => x.Name == SelectedDrive.Name); if (drive == null) { FreeDrives.Add(SelectedDrive); } SelectedFreeDrive = SelectedDrive; } CurrentPage = Page.Host; return; } if (ConnectButtonText == "Connect") { ConnectAsync(SelectedDrive); } else { WorkStart("Disconnecting..."); ReturnBox r = await Task.Run(() => _mountService.Unmount(SelectedDrive)); WorkDone(r); } }
private void UpdateObservableDrives(Drive selected) { GoldDrives.Clear(); FreeDrives.Clear(); _mountService.GoldDrives.ForEach(GoldDrives.Add); _mountService.FreeDrives.ForEach(FreeDrives.Add); if (selected != null) { var d1 = GoldDrives.ToList().Find(x => x.Name == selected.Name); if (d1 != null) { SelectedDrive = d1; } } else { if (GoldDrives.Count > 0) { SelectedDrive = GoldDrives[0]; } } if (FreeDrives.Count > 0) { SelectedFreeDrive = FreeDrives[0]; } }
//public string GetVolumeName(string letter) //{ // var r = RunLocal($"vol {letter}:"); // foreach (var line in r.Output.Split('\n')) // { // try // { // Match match = Regex.Match(line, $@"^\s*Volume in drive {letter} is ([^ ]+)"); // if (match.Success) // return match.Groups[1].Value.Trim(); // } // catch (Exception ex) // { // } // } // return ""; //} public ReturnBox CheckDriveStatus(Drive drive) { ReturnBox r = new ReturnBox { MountStatus = MountStatus.OK }; if (drive == null || (drive.Letter.ToCharArray()[0] < 'G' || drive.Letter.ToCharArray()[0] > 'Z')) { r.DriveStatus = DriveStatus.NOT_SUPPORTED; } else { Settings settings = LoadSettings(); UpdateDrives(settings); var free = FreeDrives.Find(x => x.Letter == drive.Letter) != null; var isGold = GoldDrives.Find(x => x.Letter == drive.Letter) != null; var disconnected = GoldDrives.Find(x => x.Letter == drive.Letter && x.Status == DriveStatus.DISCONNECTED) != null; var pathUsed = GoldDrives.Find(x => x.Letter != drive.Letter && x.MountPoint == drive.MountPoint && (x.Status != DriveStatus.DISCONNECTED && x.Status != DriveStatus.FREE)) != null; if (pathUsed) { r.MountStatus = MountStatus.BAD_DRIVE; r.DriveStatus = DriveStatus.MOUNTPOINT_IN_USE; r.Error = "Mount point in use"; } else if (free) { r.DriveStatus = DriveStatus.DISCONNECTED; } else if (disconnected) { r.DriveStatus = DriveStatus.DISCONNECTED; } else if (!isGold) { r.MountStatus = MountStatus.BAD_DRIVE; r.DriveStatus = DriveStatus.IN_USE; r.Error = "Drive in use"; } else if (!CheckIfDriveWorks(drive)) { r.MountStatus = MountStatus.BAD_DRIVE; r.DriveStatus = DriveStatus.BROKEN; r.Error = "Drive is broken"; } else { r.DriveStatus = DriveStatus.CONNECTED; } } r.Drive = drive; return(r); }