private async void OnSettingsSave(object obj) { if (IsDriveNew) { Drive d = SelectedFreeDrive; await Task.Run(() => { Settings settings = _mountService.LoadSettings(); settings.Args = GlobalArgs; settings.AddDrive(d); _mountService.SaveSettings(settings); _mountService.UpdateDrives(settings); }); UpdateObservableDrives(d); IsDriveNew = false; } else { CurrentPage = Page.Main; Drive d = SelectedDrive; await Task.Run(() => { Settings settings = _mountService.LoadSettings(); settings.Args = GlobalArgs; settings.AddDrives(GoldDrives.ToList()); _mountService.SaveSettings(settings); _mountService.UpdateDrives(settings); }); UpdateObservableDrives(d); CheckDriveStatusAsync(); } }
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); }
private void Closing(object obj) { if (GoldDrives != null) { Settings settings = new Settings { Args = GlobalArgs, Selected = Selected, }; settings.AddDrives(GoldDrives.ToList()); _mountService.SaveSettings(settings); } }
private async void OnSettingsDelete(object obj) { Drive d = SelectedDrive; if (GoldDrives.Contains(d)) { GoldDrives.Remove(d); } await Task.Run(() => { if (d.Status == DriveStatus.CONNECTED) { _mountService.Unmount(d); } Settings settings = _mountService.LoadSettings(); settings.Args = GlobalArgs; settings.AddDrives(GoldDrives.ToList()); _mountService.SaveSettings(settings); _mountService.UpdateDrives(settings); }); UpdateObservableDrives(SelectedDrive); }