@@ -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