예제 #1
0
        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();
            }
        }
예제 #2
0
 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];
     }
 }
예제 #3
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);
        }
예제 #4
0
 private void Closing(object obj)
 {
     if (GoldDrives != null)
     {
         Settings settings = new Settings
         {
             Args     = GlobalArgs,
             Selected = Selected,
         };
         settings.AddDrives(GoldDrives.ToList());
         _mountService.SaveSettings(settings);
     }
 }
예제 #5
0
        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);
        }