@@ -28,7 +28,6 @@ public protocol VaultManager {
28
28
func manualUnlockVault( withUID vaultUID: String , kek: [ UInt8 ] ) throws -> CloudProvider
29
29
func createVaultProvider( withUID vaultUID: String , masterkey: Masterkey ) throws -> CloudProvider
30
30
func removeVault( withUID vaultUID: String ) throws -> Promise < Void >
31
- func removeAllUnusedFileProviderDomains( ) -> Promise < Void >
32
31
func moveVault( account: VaultAccount , to targetVaultPath: CloudPath ) -> Promise < Void >
33
32
func changePassphrase( oldPassphrase: String , newPassphrase: String , forVaultUID vaultUID: String ) -> Promise < Void >
34
33
}
@@ -260,24 +259,6 @@ public class VaultDBManager: VaultManager {
260
259
}
261
260
}
262
261
263
- public func removeAllUnusedFileProviderDomains( ) -> Promise < Void > {
264
- let vaultUIDs : [ String ]
265
- do {
266
- let vaults = try vaultAccountManager. getAllAccounts ( )
267
- vaultUIDs = vaults. map { $0. vaultUID }
268
- } catch {
269
- return Promise ( error)
270
- }
271
- return NSFileProviderManager . getDomains ( ) . then { domains -> Promise < Void > in
272
- let unusedDomains = domains. filter { !vaultUIDs. contains ( $0. identifier. rawValue) }
273
- return self . removeDomainsFromFileProvider ( unusedDomains)
274
- } . then { _ in
275
- DDLogInfo ( " Removed all unused FileProviderDomains " )
276
- } . catch { error in
277
- DDLogError ( " Removing all unused FileProviderDomains failed with error: \( error) " )
278
- }
279
- }
280
-
281
262
func removeDomainsFromFileProvider( _ domains: [ NSFileProviderDomain ] ) -> Promise < Void > {
282
263
return Promise ( on: . global( ) ) { fulfill, _ in
283
264
for domain in domains {
@@ -369,6 +350,20 @@ public class VaultDBManager: VaultManager {
369
350
}
370
351
}
371
352
353
+ public func recoverMissingFileProviderDomains( ) -> Promise < Void > {
354
+ let vaults : [ VaultAccount ]
355
+ do {
356
+ vaults = try vaultAccountManager. getAllAccounts ( )
357
+ } catch {
358
+ return Promise ( error)
359
+ }
360
+ return NSFileProviderManager . getDomains ( ) . then { domains -> Promise < Void > in
361
+ let domainIdentifiers = domains. map { $0. identifier. rawValue }
362
+ let vaultsWithMissingDomains = vaults. filter { !domainIdentifiers. contains ( $0. vaultUID) }
363
+ return self . recoverFileProviderDomains ( for: vaultsWithMissingDomains)
364
+ }
365
+ }
366
+
372
367
// MARK: - Internal
373
368
374
369
func postProcessVaultCreation( cachedVault: CachedVault , password: String , storePasswordInKeychain: Bool ) throws {
@@ -427,6 +422,20 @@ public class VaultDBManager: VaultManager {
427
422
let domain = NSFileProviderDomain ( vaultUID: vaultUID, displayName: displayName)
428
423
return NSFileProviderManager . add ( domain)
429
424
}
425
+
426
+ private func recoverFileProviderDomains( for vaults: [ VaultAccount ] ) -> Promise < Void > {
427
+ return Promise ( on: . global( ) ) { fulfill, _ in
428
+ for vault in vaults {
429
+ do {
430
+ try awaitPromise ( self . addFileProviderDomain ( forVaultUID: vault. vaultUID, displayName: vault. vaultName) )
431
+ DDLogInfo ( " Successfully recovered FileProvider domain for vault: \( vault. vaultName) - \( vault. vaultUID) " )
432
+ } catch {
433
+ DDLogError ( " Recover FileProvider domain for vault: \( vault. vaultName) - \( vault. vaultUID) failed with error: \( error) " )
434
+ }
435
+ }
436
+ fulfill ( ( ) )
437
+ }
438
+ }
430
439
}
431
440
432
441
extension CloudProvider {
0 commit comments