diff --git a/src/main/java/org/cryptomator/common/locationpresets/OneDriveWindowsLocationPresetsProvider.java b/src/main/java/org/cryptomator/common/locationpresets/OneDriveWindowsLocationPresetsProvider.java index 07e253fb0..ab14a483e 100644 --- a/src/main/java/org/cryptomator/common/locationpresets/OneDriveWindowsLocationPresetsProvider.java +++ b/src/main/java/org/cryptomator/common/locationpresets/OneDriveWindowsLocationPresetsProvider.java @@ -1,7 +1,11 @@ package org.cryptomator.common.locationpresets; import org.cryptomator.integrations.common.OperatingSystem; +import org.cryptomator.integrations.locationpresets.LocationPreset; +import org.cryptomator.integrations.locationpresets.LocationPresetsProvider; import org.jetbrains.annotations.Blocking; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -19,22 +23,22 @@ import static org.cryptomator.integrations.common.OperatingSystem.Value.WINDOWS; @OperatingSystem(WINDOWS) public final class OneDriveWindowsLocationPresetsProvider implements LocationPresetsProvider { + private static final Logger LOG = LoggerFactory.getLogger(OneDriveWindowsLocationPresetsProvider.class); private static final String REGSTR_TOKEN = "REG_SZ"; private static final String REG_ONEDRIVE_ACCOUNTS = "HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\\Accounts\\"; @Override public Stream getLocations() { try { - - var accounts = queryRegistry(REG_ONEDRIVE_ACCOUNTS, List.of(), l -> l.startsWith(REG_ONEDRIVE_ACCOUNTS)).toList(); + var accountRegKeys = queryRegistry(REG_ONEDRIVE_ACCOUNTS, List.of(), l -> l.startsWith(REG_ONEDRIVE_ACCOUNTS)).toList(); var cloudLocations = new ArrayList(); - for (var account : accounts) { - var path = queryRegistry(REG_ONEDRIVE_ACCOUNTS + account, List.of("/v", "UserFolder"), l -> l.contains("UserFolder")).map(result -> result.substring(result.indexOf(REGSTR_TOKEN) + REGSTR_TOKEN.length()).trim()) // + for (var accountRegKey : accountRegKeys) { + var path = queryRegistry(accountRegKey, List.of("/v", "UserFolder"), l -> l.contains("UserFolder")).map(result -> result.substring(result.indexOf(REGSTR_TOKEN) + REGSTR_TOKEN.length()).trim()) // .map(Path::of) // .findFirst().orElseThrow(); var name = "OneDrive"; //we assume personal oneDrive account by default - if (!account.equals("Personal")) { - name = queryRegistry(REG_ONEDRIVE_ACCOUNTS + account, List.of("/v", "DisplayName"), l -> l.contains("DisplayName")).map(result -> result.substring(result.indexOf(REGSTR_TOKEN) + REGSTR_TOKEN.length()).trim()) // + if (!accountRegKey.endsWith("Personal")) { + name = queryRegistry(accountRegKey, List.of("/v", "DisplayName"), l -> l.contains("DisplayName")).map(result -> result.substring(result.indexOf(REGSTR_TOKEN) + REGSTR_TOKEN.length()).trim()) // .map("OneDrive - "::concat).findFirst().orElseThrow(); } cloudLocations.add(new LocationPreset(name, path));