Skip to content

Commit 49f2cf2

Browse files
authored
Feature: Added support for listing multiple SharePoint drives in the sidebar (#15070)
1 parent 2a1a427 commit 49f2cf2

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

src/Files.App/Utils/Cloud/CloudDrivesDetector.cs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,14 @@ private static Task<IEnumerable<ICloudProvider>> DetectSharepoint()
190190
var sharepointAccounts = new List<ICloudProvider>();
191191
foreach (var account in oneDriveAccountsKey.GetSubKeyNames())
192192
{
193-
var accountKeyName = @$"{oneDriveAccountsKey.Name}\{account}";
194-
var displayName = (string)Registry.GetValue(accountKeyName, "DisplayName", null);
195-
var userFolderToExcludeFromResults = (string)Registry.GetValue(accountKeyName, "UserFolder", null);
196-
var accountName = string.IsNullOrWhiteSpace(displayName) ? "SharePoint" : $"SharePoint - {displayName}";
193+
var accountKey = oneDriveAccountsKey.OpenSubKey(account);
194+
if (accountKey is null)
195+
continue;
197196

198-
var sharePointSyncFolders = new List<string>();
199-
var mountPointKeyName = @$"SOFTWARE\Microsoft\OneDrive\Accounts\{account}\ScopeIdToMountPointPathCache";
200-
using (var mountPointsKey = Registry.CurrentUser.OpenSubKey(mountPointKeyName))
197+
var userFolderToExcludeFromResults = (string)accountKey.GetValue("UserFolder", "");
198+
199+
var sharePointParentFolders = new List<DirectoryInfo>();
200+
using (var mountPointsKey = accountKey.OpenSubKey("ScopeIdToMountPointPathCache"))
201201
{
202202
if (mountPointsKey is null)
203203
{
@@ -207,25 +207,27 @@ private static Task<IEnumerable<ICloudProvider>> DetectSharepoint()
207207
var valueNames = mountPointsKey.GetValueNames();
208208
foreach (var valueName in valueNames)
209209
{
210-
var value = (string)Registry.GetValue(@$"HKEY_CURRENT_USER\{mountPointKeyName}", valueName, null);
211-
if (!string.Equals(value, userFolderToExcludeFromResults, StringComparison.OrdinalIgnoreCase))
210+
var directory = (string?)mountPointsKey.GetValue(valueName, null);
211+
if (directory != null && !string.Equals(directory, userFolderToExcludeFromResults, StringComparison.OrdinalIgnoreCase))
212212
{
213-
sharePointSyncFolders.Add(value);
213+
var parentFolder = Directory.GetParent(directory);
214+
if (parentFolder != null)
215+
sharePointParentFolders.Add(parentFolder);
214216
}
215217
}
216218
}
217219

218-
sharePointSyncFolders.Sort(StringComparer.Ordinal);
219-
foreach (var sharePointSyncFolder in sharePointSyncFolders)
220+
sharePointParentFolders.Sort((left, right) => left.FullName.CompareTo(right.FullName));
221+
222+
foreach (var sharePointParentFolder in sharePointParentFolders)
220223
{
221-
var parentFolder = Directory.GetParent(sharePointSyncFolder)?.FullName ?? string.Empty;
222-
if (!sharepointAccounts.Any(acc =>
223-
string.Equals(acc.Name, accountName, StringComparison.OrdinalIgnoreCase)) && !string.IsNullOrWhiteSpace(parentFolder))
224+
string name = $"SharePoint - {sharePointParentFolder.Name}";
225+
if (!sharepointAccounts.Any(acc => string.Equals(acc.Name, name, StringComparison.OrdinalIgnoreCase)))
224226
{
225227
sharepointAccounts.Add(new CloudProvider(CloudProviders.OneDriveCommercial)
226228
{
227-
Name = accountName,
228-
SyncFolder = parentFolder,
229+
Name = name,
230+
SyncFolder = sharePointParentFolder.FullName,
229231
});
230232
}
231233
}

0 commit comments

Comments
 (0)