1
- using Files . Shared ;
1
+ using Files . Shared . Cloud ;
2
2
using Files . Shared . Extensions ;
3
3
using Microsoft . Win32 ;
4
4
using System ;
@@ -13,9 +13,9 @@ namespace Files.FullTrust.Helpers
13
13
[ SupportedOSPlatform ( "Windows10.0.10240" ) ]
14
14
public class CloudDrivesDetector
15
15
{
16
- public static async Task < List < CloudProvider > > DetectCloudDrives ( )
16
+ public static async Task < IEnumerable < ICloudProvider > > DetectCloudDrives ( )
17
17
{
18
- var tasks = new Task < List < CloudProvider > > [ ]
18
+ var tasks = new Task < IEnumerable < ICloudProvider > > [ ]
19
19
{
20
20
SafetyExtensions . IgnoreExceptions ( DetectOneDrive , Program . Logger ) ,
21
21
SafetyExtensions . IgnoreExceptions ( DetectSharepoint , Program . Logger ) ,
@@ -25,39 +25,46 @@ public static async Task<List<CloudProvider>> DetectCloudDrives()
25
25
26
26
await Task . WhenAll ( tasks ) ;
27
27
28
- return tasks . Where ( o => o . Result != null ) . SelectMany ( o => o . Result ) . OrderBy ( o => o . ID . ToString ( ) ) . ThenBy ( o => o . Name ) . Distinct ( ) . ToList ( ) ;
28
+ return tasks
29
+ . Where ( o => o . Result is not null )
30
+ . SelectMany ( o => o . Result )
31
+ . OrderBy ( o => o . ID . ToString ( ) )
32
+ . ThenBy ( o => o . Name )
33
+ . Distinct ( ) ;
29
34
}
30
35
31
- private static Task < List < CloudProvider > > DetectYandexDisk ( )
36
+ private static Task < IEnumerable < ICloudProvider > > DetectYandexDisk ( )
32
37
{
33
- var results = new List < CloudProvider > ( ) ;
38
+ var results = new List < ICloudProvider > ( ) ;
34
39
using var yandexKey = Registry . CurrentUser . OpenSubKey ( @"SOFTWARE\Yandex\Yandex.Disk.2" ) ;
40
+
35
41
var syncedFolder = ( string ) yandexKey ? . GetValue ( "RootFolder" ) ;
36
- if ( syncedFolder != null )
42
+ if ( syncedFolder is not null )
37
43
{
38
- results . Add ( new CloudProvider ( )
44
+ results . Add ( new CloudProvider ( CloudProviders . Yandex )
39
45
{
40
- ID = CloudProviders . Yandex ,
41
46
Name = $ "Yandex Disk",
42
- SyncFolder = syncedFolder
47
+ SyncFolder = syncedFolder ,
43
48
} ) ;
44
49
}
45
- return Task . FromResult ( results ) ;
50
+
51
+ return Task . FromResult < IEnumerable < ICloudProvider > > ( results ) ;
46
52
}
47
53
48
- private static Task < List < CloudProvider > > DetectGenericCloudDrive ( )
54
+ private static Task < IEnumerable < ICloudProvider > > DetectGenericCloudDrive ( )
49
55
{
50
- var results = new List < CloudProvider > ( ) ;
56
+ var results = new List < ICloudProvider > ( ) ;
51
57
using var clsidKey = Registry . ClassesRoot . OpenSubKey ( @"CLSID" ) ;
52
58
using var namespaceKey = Registry . CurrentUser . OpenSubKey ( @"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace" ) ;
59
+
53
60
foreach ( var subKeyName in namespaceKey . GetSubKeyNames ( ) )
54
61
{
55
62
using var clsidSubKey = SafetyExtensions . IgnoreExceptions ( ( ) => clsidKey . OpenSubKey ( subKeyName ) ) ;
56
- if ( clsidSubKey != null && ( int ? ) clsidSubKey . GetValue ( "System.IsPinnedToNameSpaceTree" ) == 1 )
63
+ if ( clsidSubKey is not null && ( int ? ) clsidSubKey . GetValue ( "System.IsPinnedToNameSpaceTree" ) is 1 )
57
64
{
58
65
using var namespaceSubKey = namespaceKey . OpenSubKey ( subKeyName ) ;
59
- var driveType = ( string ) namespaceSubKey ? . GetValue ( "" ) ;
60
- if ( driveType == null )
66
+ var driveType = ( string ) namespaceSubKey ? . GetValue ( string . Empty ) ;
67
+ if ( driveType is null )
61
68
{
62
69
continue ;
63
70
}
@@ -71,7 +78,7 @@ private static Task<List<CloudProvider>> DetectGenericCloudDrive()
71
78
72
79
using var bagKey = clsidSubKey . OpenSubKey ( @"Instance\InitPropertyBag" ) ;
73
80
var syncedFolder = ( string ) bagKey ? . GetValue ( "TargetFolderPath" ) ;
74
- if ( syncedFolder == null )
81
+ if ( syncedFolder is null )
75
82
{
76
83
continue ;
77
84
}
@@ -83,71 +90,70 @@ private static Task<List<CloudProvider>> DetectGenericCloudDrive()
83
90
"Amazon Drive" => CloudProviders . AmazonDrive ,
84
91
"Nextcloud" => CloudProviders . Nextcloud ,
85
92
"Jottacloud" => CloudProviders . Jottacloud ,
86
- _ => null
93
+ _ => null ,
87
94
} ;
88
- if ( driveID == null )
95
+ if ( driveID is null )
89
96
{
90
97
continue ;
91
98
}
92
99
93
- results . Add ( new CloudProvider ( )
100
+ string nextCloudValue = ( string ) namespaceSubKey ? . GetValue ( string . Empty ) ;
101
+ results . Add ( new CloudProvider ( driveID . Value )
94
102
{
95
- ID = driveID . Value ,
96
103
Name = driveID switch
97
104
{
98
105
CloudProviders . Mega => $ "MEGA ({ Path . GetFileName ( syncedFolder . TrimEnd ( '\\ ' ) ) } )",
99
106
CloudProviders . AmazonDrive => $ "Amazon Drive",
100
- CloudProviders . Nextcloud => $ " { ( ! string . IsNullOrEmpty ( ( string ) namespaceSubKey ? . GetValue ( "" ) ) ? ( string ) namespaceSubKey ? . GetValue ( "" ) : "Nextcloud" ) } ",
107
+ CloudProviders . Nextcloud => ! string . IsNullOrEmpty ( nextCloudValue ) ? nextCloudValue : "Nextcloud" ,
101
108
CloudProviders . Jottacloud => $ "Jottacloud",
102
109
_ => null
103
110
} ,
104
- SyncFolder = syncedFolder
111
+ SyncFolder = syncedFolder ,
105
112
} ) ;
106
113
}
107
114
}
108
- return Task . FromResult ( results ) ;
115
+
116
+ return Task . FromResult < IEnumerable < ICloudProvider > > ( results ) ;
109
117
}
110
118
111
- private static Task < List < CloudProvider > > DetectOneDrive ( )
119
+ private static Task < IEnumerable < ICloudProvider > > DetectOneDrive ( )
112
120
{
113
121
using var oneDriveAccountsKey = Registry . CurrentUser . OpenSubKey ( @"SOFTWARE\Microsoft\OneDrive\Accounts" ) ;
114
-
115
- if ( oneDriveAccountsKey == null )
122
+ if ( oneDriveAccountsKey is null )
116
123
{
117
- return Task . FromResult < List < CloudProvider > > ( null ) ;
124
+ return Task . FromResult < IEnumerable < ICloudProvider > > ( null ) ;
118
125
}
119
126
120
- var oneDriveAccounts = new List < CloudProvider > ( ) ;
127
+ var oneDriveAccounts = new List < ICloudProvider > ( ) ;
121
128
foreach ( var account in oneDriveAccountsKey . GetSubKeyNames ( ) )
122
129
{
123
130
var accountKeyName = @$ "{ oneDriveAccountsKey . Name } \{ account } ";
124
131
var displayName = ( string ) Registry . GetValue ( accountKeyName , "DisplayName" , null ) ;
125
132
var userFolder = ( string ) Registry . GetValue ( accountKeyName , "UserFolder" , null ) ;
126
133
var accountName = string . IsNullOrWhiteSpace ( displayName ) ? "OneDrive" : $ "OneDrive - { displayName } ";
134
+
127
135
if ( ! string . IsNullOrWhiteSpace ( userFolder ) && ! oneDriveAccounts . Any ( x => x . Name == accountName ) )
128
136
{
129
- oneDriveAccounts . Add ( new CloudProvider ( )
137
+ oneDriveAccounts . Add ( new CloudProvider ( CloudProviders . OneDrive )
130
138
{
131
- ID = CloudProviders . OneDrive ,
132
139
Name = accountName ,
133
- SyncFolder = userFolder
140
+ SyncFolder = userFolder ,
134
141
} ) ;
135
142
}
136
143
}
137
- return Task . FromResult ( oneDriveAccounts ) ;
144
+
145
+ return Task . FromResult < IEnumerable < ICloudProvider > > ( oneDriveAccounts ) ;
138
146
}
139
147
140
- private static Task < List < CloudProvider > > DetectSharepoint ( )
148
+ private static Task < IEnumerable < ICloudProvider > > DetectSharepoint ( )
141
149
{
142
150
using var oneDriveAccountsKey = Registry . CurrentUser . OpenSubKey ( @"SOFTWARE\Microsoft\OneDrive\Accounts" ) ;
143
-
144
- if ( oneDriveAccountsKey == null )
151
+ if ( oneDriveAccountsKey is null )
145
152
{
146
- return Task . FromResult < List < CloudProvider > > ( null ) ;
153
+ return Task . FromResult < IEnumerable < ICloudProvider > > ( null ) ;
147
154
}
148
155
149
- var sharepointAccounts = new List < CloudProvider > ( ) ;
150
-
156
+ var sharepointAccounts = new List < ICloudProvider > ( ) ;
151
157
foreach ( var account in oneDriveAccountsKey . GetSubKeyNames ( ) )
152
158
{
153
159
var accountKeyName = @$ "{ oneDriveAccountsKey . Name } \{ account } ";
@@ -159,7 +165,7 @@ private static Task<List<CloudProvider>> DetectSharepoint()
159
165
var mountPointKeyName = @$ "SOFTWARE\Microsoft\OneDrive\Accounts\{ account } \ScopeIdToMountPointPathCache";
160
166
using ( var mountPointsKey = Registry . CurrentUser . OpenSubKey ( mountPointKeyName ) )
161
167
{
162
- if ( mountPointsKey == null )
168
+ if ( mountPointsKey is null )
163
169
{
164
170
continue ;
165
171
}
@@ -179,19 +185,19 @@ private static Task<List<CloudProvider>> DetectSharepoint()
179
185
foreach ( var sharePointSyncFolder in sharePointSyncFolders )
180
186
{
181
187
var parentFolder = Directory . GetParent ( sharePointSyncFolder ) ? . FullName ?? string . Empty ;
182
- if ( ! sharepointAccounts . Any ( acc => string . Equals ( acc . Name , accountName , StringComparison . OrdinalIgnoreCase ) ) && ! string . IsNullOrWhiteSpace ( parentFolder ) )
188
+ if ( ! sharepointAccounts . Any ( acc =>
189
+ string . Equals ( acc . Name , accountName , StringComparison . OrdinalIgnoreCase ) ) && ! string . IsNullOrWhiteSpace ( parentFolder ) )
183
190
{
184
- sharepointAccounts . Add ( new CloudProvider ( )
191
+ sharepointAccounts . Add ( new CloudProvider ( CloudProviders . OneDriveCommercial )
185
192
{
186
- ID = CloudProviders . OneDriveCommercial ,
187
193
Name = accountName ,
188
- SyncFolder = parentFolder
194
+ SyncFolder = parentFolder ,
189
195
} ) ;
190
196
}
191
197
}
192
198
}
193
199
194
- return Task . FromResult ( sharepointAccounts ) ;
200
+ return Task . FromResult < IEnumerable < ICloudProvider > > ( sharepointAccounts ) ;
195
201
}
196
202
}
197
203
}
0 commit comments