예제 #1
0
        public void GoToPath(string pathToGo)
        {
            try
            {
                if (!pathToGo.Substring(0, 3).Equals(Drive.Path))
                {
                    Drive = (FolderShell)AllDrives[AllDrives.IndexOf(AllDrives.Where(item => item.Path.Equals(pathToGo.Substring(0, 3))).First())];
                }
                FileAttributes attr = File.GetAttributes(pathToGo);

                if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    Path = pathToGo;
                }
                else
                {
                    Path = pathToGo.Substring(0, pathToGo.LastIndexOf('\\'));
                }

                FolderShell        f   = new FolderShell(Path);
                List <ShellObject> obj = f.Folders.Concat(f.Files).ToList();
                AllObjects = new ReadOnlyObservableCollection <ShellObject>(new ObservableCollection <ShellObject>(obj));
            }
            catch (Exception e)
            {
                Path = Drive.Path;
                MessageWindow mw = new MessageWindow();
                MessageWindowViewModel.Instance.Message = e.Message;
                mw.ShowDialog();
            }
        }
예제 #2
0
        public void SimulateDriveArrival(string uuid)
        {
            if (AllDrives.TryGetValue(uuid, out var existingDrive))
            {
                if (existingDrive.Monitored)
                {
                    existingDrive.ExecuteCommand();
                }
                return;
            }
            var drive = AllDrives.AddOrUpdate(
                uuid,
                new UsbDrive(uuid)
            {
                Monitored      = true,
                VolumeName     = "test",
                ConsoleCommand = "explorer.exe",
                DriveLetter    = "X"
            },
                (key, connectedDrive) =>
            {
                Debug.WriteLine("Drive already known");
                connectedDrive.DriveLetter = "X";
                connectedDrive.VolumeName  = "test";
                if (connectedDrive.Monitored)
                {
                    connectedDrive.ExecuteCommand();
                }
                return(connectedDrive);
            }
                );

            DriveArrived?.Invoke(this, new DriveConnectionEventArgs(drive));
        }
예제 #3
0
        /// <summary>
        /// Сохранить настройки.
        /// </summary>
        /// <param name="storage">Хранилище настроек.</param>
        public void Save(SettingsStorage storage)
        {
            storage.SetValue("Drives", AllDrives.Select(s => s.SaveEntire(false)).ToArray());

            if (DefaultDrive != null)
            {
                storage.SetValue("DefaultDrive", DefaultDrive.Path);
            }
        }
예제 #4
0
        private void VolumeChangeHandler(object sender, EventArrivedEventArgs e)
        {
            var uuid = e.NewEvent.GetQualifierValue("UUID").ToString();

            var eventType = e.NewEvent.Properties["EventType"].Value.ToString();

            if (eventType == "3") //"Remove" event
            {
                if (AllDrives.TryGetValue(uuid, out var removedDrive) && !removedDrive.Monitored && AllDrives.TryRemove(uuid, out _))
                {
                    DriveRemoved?.Invoke(this, new DriveConnectionEventArgs(removedDrive));
                }
                return;
            }

            var volume      = e.NewEvent.GetPropertyValue("DriveName").ToString();
            var volumeLabel = new DriveInfo(volume.Substring(0, 1)).VolumeLabel;

            Debug.WriteLine($"Drive connected. UUID={uuid}, volume={volume}, volumeLabel={volumeLabel}");
            var drive = AllDrives.GetOrAdd(
                uuid,
                key => new UsbDrive(key)
            {
                DriveLetter = volume,
                VolumeName  = volumeLabel
            }
                );

            drive.DriveLetter = volume;
            drive.VolumeName  = volumeLabel;
            if (drive.Monitored)
            {
                drive.ExecuteCommand();
            }
            DriveArrived?.Invoke(this, new DriveConnectionEventArgs(drive));
        }
예제 #5
0
 /// <summary>
 /// Освободить занятые ресурсы.
 /// </summary>
 protected override void DisposeManaged()
 {
     AllDrives.ForEach(d => d.Dispose());
     base.DisposeManaged();
 }