private void FillDriveList(bool isRefreshing = false) { var list = DriveInfo.GetDrives().Where(x => x.IsReady && (showAllDrives || (x.DriveType == DriveType.Removable && x.DriveFormat.StartsWith("FAT")))).ToArray(); if (isRefreshing) { if (DriveList.Select(x => x.Name).SequenceEqual(list.Select(x => x.Name))) { return; } DriveList.Clear(); } //fill drive list and try to find drive with gdemu contents foreach (DriveInfo drive in list) { DriveList.Add(drive); //look for GDEMU.ini file if (SelectedDrive == null && File.Exists(Path.Combine(drive.RootDirectory.FullName, Constants.MenuConfigTextFile))) { SelectedDrive = drive; } } //look for 01 folder if (SelectedDrive == null) { foreach (DriveInfo drive in list) { if (Directory.Exists(Path.Combine(drive.RootDirectory.FullName, "01"))) { SelectedDrive = drive; break; } } } if (!DriveList.Any()) { return; } if (SelectedDrive == null) { SelectedDrive = DriveList.LastOrDefault(); } }
public static async Task LoadDriveAsync(bool IsRefresh = false) { if (Interlocked.Exchange(ref LoadDriveLockResource, 1) == 0) { try { if (!IsDriveLoaded || IsRefresh) { IsDriveLoaded = true; if (IsRefresh) { DriveList.Clear(); } 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); } } }
private void FillDriveList(bool isRefreshing = false) { DriveInfo[] list; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { list = DriveInfo.GetDrives().Where(x => x.IsReady && (showAllDrives || (x.DriveType == DriveType.Removable && x.DriveFormat.StartsWith("FAT")))).ToArray(); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { list = DriveInfo.GetDrives().Where(x => x.IsReady && (showAllDrives || x.DriveType == DriveType.Removable || x.DriveType == DriveType.Fixed)).ToArray();//todo need to test } else//linux { list = DriveInfo.GetDrives().Where(x => x.IsReady && (showAllDrives || ((x.DriveType == DriveType.Removable || x.DriveType == DriveType.Fixed) && x.DriveFormat.Equals("msdos", StringComparison.InvariantCultureIgnoreCase) && x.Name.StartsWith("/media/", StringComparison.InvariantCultureIgnoreCase)))).ToArray(); } if (isRefreshing) { if (DriveList.Select(x => x.Name).SequenceEqual(list.Select(x => x.Name))) { return; } DriveList.Clear(); } //fill drive list and try to find drive with gdemu contents //look for GDEMU.ini file foreach (DriveInfo drive in list) { try { DriveList.Add(drive); if (SelectedDrive == null && File.Exists(Path.Combine(drive.RootDirectory.FullName, Constants.MenuConfigTextFile))) { SelectedDrive = drive; } } catch { } } //look for 01 folder if (SelectedDrive == null) { foreach (DriveInfo drive in list) { try { if (Directory.Exists(Path.Combine(drive.RootDirectory.FullName, "01"))) { SelectedDrive = drive; break; } } catch { } } } //look for /media mount if (SelectedDrive == null) { foreach (DriveInfo drive in list) { try { if (drive.Name.StartsWith("/media/", StringComparison.InvariantCultureIgnoreCase)) { SelectedDrive = drive; break; } } catch { } } } if (!DriveList.Any()) { return; } if (SelectedDrive == null) { SelectedDrive = DriveList.LastOrDefault(); } }