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