Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 19 additions & 17 deletions src/Files.App/Utils/Cloud/CloudDrivesDetector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -190,14 +190,14 @@ private static Task<IEnumerable<ICloudProvider>> DetectSharepoint()
var sharepointAccounts = new List<ICloudProvider>();
foreach (var account in oneDriveAccountsKey.GetSubKeyNames())
{
var accountKeyName = @$"{oneDriveAccountsKey.Name}\{account}";
var displayName = (string)Registry.GetValue(accountKeyName, "DisplayName", null);
var userFolderToExcludeFromResults = (string)Registry.GetValue(accountKeyName, "UserFolder", null);
var accountName = string.IsNullOrWhiteSpace(displayName) ? "SharePoint" : $"SharePoint - {displayName}";
var accountKey = oneDriveAccountsKey.OpenSubKey(account);
if (accountKey is null)
continue;

var sharePointSyncFolders = new List<string>();
var mountPointKeyName = @$"SOFTWARE\Microsoft\OneDrive\Accounts\{account}\ScopeIdToMountPointPathCache";
using (var mountPointsKey = Registry.CurrentUser.OpenSubKey(mountPointKeyName))
var userFolderToExcludeFromResults = (string)accountKey.GetValue("UserFolder", "");

var sharePointParentFolders = new List<DirectoryInfo>();
using (var mountPointsKey = accountKey.OpenSubKey("ScopeIdToMountPointPathCache"))
{
if (mountPointsKey is null)
{
Expand All @@ -207,25 +207,27 @@ private static Task<IEnumerable<ICloudProvider>> DetectSharepoint()
var valueNames = mountPointsKey.GetValueNames();
foreach (var valueName in valueNames)
{
var value = (string)Registry.GetValue(@$"HKEY_CURRENT_USER\{mountPointKeyName}", valueName, null);
if (!string.Equals(value, userFolderToExcludeFromResults, StringComparison.OrdinalIgnoreCase))
var directory = (string?)mountPointsKey.GetValue(valueName, null);
if (directory != null && !string.Equals(directory, userFolderToExcludeFromResults, StringComparison.OrdinalIgnoreCase))
{
sharePointSyncFolders.Add(value);
var parentFolder = Directory.GetParent(directory);
if (parentFolder != null)
sharePointParentFolders.Add(parentFolder);
}
}
}

sharePointSyncFolders.Sort(StringComparer.Ordinal);
foreach (var sharePointSyncFolder in sharePointSyncFolders)
sharePointParentFolders.Sort((left, right) => left.FullName.CompareTo(right.FullName));

foreach (var sharePointParentFolder in sharePointParentFolders)
{
var parentFolder = Directory.GetParent(sharePointSyncFolder)?.FullName ?? string.Empty;
if (!sharepointAccounts.Any(acc =>
string.Equals(acc.Name, accountName, StringComparison.OrdinalIgnoreCase)) && !string.IsNullOrWhiteSpace(parentFolder))
string name = $"SharePoint - {sharePointParentFolder.Name}";
if (!sharepointAccounts.Any(acc => string.Equals(acc.Name, name, StringComparison.OrdinalIgnoreCase)))
{
sharepointAccounts.Add(new CloudProvider(CloudProviders.OneDriveCommercial)
{
Name = accountName,
SyncFolder = parentFolder,
Name = name,
SyncFolder = sharePointParentFolder.FullName,
});
}
}
Expand Down