public static async Task LoadDriveAsync(bool IsRefresh = false) { if (Interlocked.Exchange(ref LoadDriveLockResource, 1) == 0) { try { if (!IsDriveLoaded || IsRefresh) { IsDriveLoaded = true; foreach (DriveInfo Drive in DriveInfo.GetDrives().Where((Drives) => Drives.DriveType == DriveType.Fixed || Drives.DriveType == DriveType.Removable || Drives.DriveType == DriveType.Network) .Where((NewItem) => DriveList.All((Item) => !Item.Path.Equals(NewItem.RootDirectory.FullName, StringComparison.OrdinalIgnoreCase)))) { try { StorageFolder Folder = await StorageFolder.GetFolderFromPathAsync(Drive.RootDirectory.FullName); if (DriveList.All((Item) => (string.IsNullOrEmpty(Item.Path) || string.IsNullOrEmpty(Folder.Path)) ? !Item.Name.Equals(Folder.Name, StringComparison.OrdinalIgnoreCase) : !Item.Path.Equals(Folder.Path, StringComparison.OrdinalIgnoreCase))) { DriveList.Add(await DriveDataBase.CreateAsync(Folder, Drive.DriveType)); } } catch (Exception ex) { LogTracer.Log(ex, $"Hide the device \"{Drive.RootDirectory.FullName}\" for error"); } } foreach (DeviceInformation Drive in await DeviceInformation.FindAllAsync(StorageDevice.GetDeviceSelector())) { try { StorageFolder Folder = StorageDevice.FromId(Drive.Id); if (DriveList.All((Item) => (string.IsNullOrEmpty(Item.Path) || string.IsNullOrEmpty(Folder.Path)) ? !Item.Name.Equals(Folder.Name, StringComparison.OrdinalIgnoreCase) : !Item.Path.Equals(Folder.Path, StringComparison.OrdinalIgnoreCase))) { DriveList.Add(await DriveDataBase.CreateAsync(Folder, DriveType.Removable)); } } catch (Exception ex) { LogTracer.Log(ex, $"Hide the device for error"); } } foreach (StorageFolder Folder in await GetWslDriveAsync()) { try { if (DriveList.All((Item) => (string.IsNullOrEmpty(Item.Path) || string.IsNullOrEmpty(Folder.Path)) ? !Item.Name.Equals(Folder.Name, StringComparison.OrdinalIgnoreCase) : !Item.Path.Equals(Folder.Path, StringComparison.OrdinalIgnoreCase))) { DriveList.Add(await DriveDataBase.CreateAsync(Folder, DriveType.Network)); } } catch (Exception ex) { LogTracer.Log(ex, $"Hide the device \"{Folder.Name}\" for error"); } } switch (PortalDeviceWatcher.Status) { case DeviceWatcherStatus.Created: case DeviceWatcherStatus.Aborted: case DeviceWatcherStatus.Stopped: { PortalDeviceWatcher.Start(); break; } } if (!NetworkDriveCheckTimer.IsEnabled) { NetworkDriveCheckTimer.Start(); } } } catch (Exception ex) { LogTracer.Log(ex, $"An exception was threw in {nameof(LoadDriveAsync)}"); } finally { _ = Interlocked.Exchange(ref LoadDriveLockResource, 0); } } }
public DriveChangeDeferredEventArgs(DriveDataBase Data) { this.Data = Data; }
public static async Task <DriveChangeDeferredEventArgs> CreateAsync(DriveDataBase Data) { FileSystemStorageItemBase Item = await FileSystemStorageItemBase.CreateFromStorageItemAsync(Data.DriveFolder); return(new DriveChangeDeferredEventArgs(Item as FileSystemStorageFolder)); }