Example #1
0
        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);
            }
        }
Example #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];
     }
 }
Example #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);
        }