mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-18 18:51:26 +00:00
use correct registry keys for onedrive detection
This commit is contained in:
@@ -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<LocationPreset> 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<LocationPreset>();
|
||||
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));
|
||||
|
||||
Reference in New Issue
Block a user