private async void OnConnect(object obj)
        {
            if (IsWorking)
            {
                return;
            }

            Message = "";

            if (GoldDriveList.Count == 0 || string.IsNullOrEmpty(SelectedDrive.Host))
            {
                IsDriveNew    = true;
                SelectedDrive = FreeDriveList.First();
                CurrentPage   = Page.Host;
                return;
            }
            if (ConnectButtonText == "Connect")
            {
                ConnectAsync(SelectedDrive);
            }
            else
            {
                WorkStart("Disconnecting...");
                ReturnBox r = await Task.Run(() => _mountService.Unmount(SelectedDrive));

                WorkDone(r);
            }
        }
        public async void LoadDrivesAsync()
        {
            Loaded = false;
            WorkStart("Exploring local drives...");
            await Task.Run(() =>
            {
                Settings settings = _mountService.LoadSettings();
                if (_selectedDrive == null && settings.SelectedDrive != null)
                {
                    SelectedDrive = settings.SelectedDrive;
                }
                _mountService.UpdateDrives(settings);
            });

            UpdateObservableDrives();

            if (_mountService.GoldDrives.Count == 0)
            {
                CurrentPage = Page.Host;
                IsDriveNew  = true;
                OnFocusRequested(nameof(SelectedDrive.Host));
                SelectedDrive = FreeDriveList.First();
                WorkDone();
            }
            else
            {
                CheckDriveStatusAsync();
            }
            Loaded = true;
        }
        private void UpdateObservableDrives()
        {
            Drive old = null;

            if (SelectedDrive != null)
            {
                old = SelectedDrive;
            }
            GoldDriveList.Clear();
            FreeDriveList.Clear();
            _mountService.GoldDrives.ForEach(GoldDriveList.Add);
            _mountService.FreeDrives.ForEach(FreeDriveList.Add);
            if (old != null && SelectedDrive == null)
            {
                SelectedDrive = old;
            }

            if (SelectedDrive != null)
            {
                var d1 = _mountService.GoldDrives.ToList().Find(x => x.Name == SelectedDrive.Name);
                if (d1 != null)
                {
                    d1.Clone(SelectedDrive);
                    SelectedDrive = d1;
                }
                else
                {
                    var d2 = _mountService.FreeDrives.ToList().Find(x => x.Name == SelectedDrive.Name);
                    if (d2 != null)
                    {
                        d2.Clone(SelectedDrive);
                        SelectedDrive = d2;
                    }
                }
            }
            else
            {
                if (_mountService.GoldDrives.Count > 0)
                {
                    SelectedDrive = _mountService.GoldDrives.First();
                }
                else if (_mountService.FreeDrives.Count > 0)
                {
                    SelectedDrive = _mountService.FreeDrives.First();
                }
            }

            NotifyPropertyChanged("FreeDriveList");
            NotifyPropertyChanged("GoldDriveList");
        }
 private void OnSettingsNew(object obj)
 {
     OriginalDrive = new Drive(SelectedDrive);
     SelectedDrive = FreeDriveList.First();
     IsDriveNew    = true;
 }