From dc6670ab9669ae32d1c75f83e4750996780c13c7 Mon Sep 17 00:00:00 2001 From: Radek Davidek Date: Sun, 8 Mar 2026 15:07:15 +0100 Subject: [PATCH] fixed show mapped drives in windows --- .../cz/kamma/kfmanager/ui/DriveSelector.java | 33 ++++++++++++++++--- .../java/cz/kamma/kfmanager/ui/FilePanel.java | 19 +++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/cz/kamma/kfmanager/ui/DriveSelector.java b/src/main/java/cz/kamma/kfmanager/ui/DriveSelector.java index bcc5d99..dc88716 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/DriveSelector.java +++ b/src/main/java/cz/kamma/kfmanager/ui/DriveSelector.java @@ -25,11 +25,36 @@ public class DriveSelector extends JDialog { ((JComponent) getContentPane()).setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // Get list of available drives - File[] roots = File.listRoots(); - List drives = new ArrayList<>(); + java.util.Set driveSet = new java.util.LinkedHashSet<>(); - for (File root : roots) { - drives.add(new DriveInfo(root)); + File[] roots = File.listRoots(); + if (roots != null) { + for (File r : roots) { + driveSet.add(r); + } + } + + // On Windows, additionally add mapped network drives if missed by listRoots + if (cz.kamma.kfmanager.MainApp.CURRENT_OS == cz.kamma.kfmanager.MainApp.OS.WINDOWS) { + javax.swing.filechooser.FileSystemView fsv = javax.swing.filechooser.FileSystemView.getFileSystemView(); + File[] fsvRoots = fsv.getRoots(); + if (fsvRoots != null) { + for (File r : fsvRoots) { + File[] devices = fsv.getFiles(r, false); + if (devices != null) { + for (File d : devices) { + if (fsv.isDrive(d) || fsv.isFileSystemRoot(d)) { + driveSet.add(d); + } + } + } + } + } + } + + List drives = new ArrayList<>(); + for (File drive : driveSet) { + drives.add(new DriveInfo(drive)); } // List of drives diff --git a/src/main/java/cz/kamma/kfmanager/ui/FilePanel.java b/src/main/java/cz/kamma/kfmanager/ui/FilePanel.java index 86f8bba..6ec3abf 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/FilePanel.java +++ b/src/main/java/cz/kamma/kfmanager/ui/FilePanel.java @@ -491,6 +491,25 @@ public class FilePanel extends JPanel { driveSet.add(r); } } + + // On Windows, additionally add mapped network drives if missed by listRoots + if (MainApp.CURRENT_OS == MainApp.OS.WINDOWS) { + javax.swing.filechooser.FileSystemView fsv = javax.swing.filechooser.FileSystemView.getFileSystemView(); + File[] fsvRoots = fsv.getRoots(); + if (fsvRoots != null) { + for (File r : fsvRoots) { + // This usually returns "Desktop". We need to look into it or other FSV methods. + File[] devices = fsv.getFiles(r, false); + if (devices != null) { + for (File d : devices) { + if (fsv.isDrive(d) || fsv.isFileSystemRoot(d)) { + driveSet.add(d); + } + } + } + } + } + } // Add home directory driveSet.add(new File(System.getProperty("user.home")));