@@ -532,14 +532,36 @@ public class RustLogins: LoginsProtocol, KeyManager {
532532 }
533533 }
534534
535- public func hasSyncedLogins( ) -> Deferred < Maybe < Bool > > {
536- return listLogins ( ) . bind { result in
537- if let error = result. failureValue {
538- return deferMaybe ( error)
535+ public func hasLogins( completionHandler: @escaping ( Result < Bool , Error > ) -> Void ) {
536+ queue. async {
537+ guard self . isOpen else {
538+ let error = LoginsStoreError . UnexpectedLoginsApiError ( reason: " Database is closed " )
539+ completionHandler ( . failure( error) )
540+ return
541+ }
542+
543+ do {
544+ let isEmpty = try self . storage? . isEmpty ( ) ?? true
545+ completionHandler ( . success( !isEmpty) )
546+ } catch let error as NSError {
547+ completionHandler ( . failure( error) )
539548 }
549+ }
550+ }
540551
541- return deferMaybe ( ( result. successValue? . count ?? 0 ) > 0 )
552+ /// TODO(FXIOS-5603): We should remove this once we cleanup all deferred uses
553+ /// and use hasLogins instead
554+ public func hasSyncedLogins( ) -> Deferred < Maybe < Bool > > {
555+ let deferred = Deferred < Maybe < Bool > > ( )
556+ self . hasLogins { result in
557+ switch result {
558+ case . success( let hasLogins) :
559+ deferred. fill ( Maybe ( success: hasLogins) )
560+ case . failure( let error) :
561+ deferred. fill ( Maybe ( failure: error as MaybeErrorType ) )
562+ }
542563 }
564+ return deferred
543565 }
544566
545567 public func listLogins( ) -> Deferred < Maybe < [ Login ] > > {
@@ -586,6 +608,7 @@ public class RustLogins: LoginsProtocol, KeyManager {
586608 queue. async {
587609 guard self . isOpen else {
588610 let error = LoginsStoreError . UnexpectedLoginsApiError ( reason: " Database is closed " )
611+
589612 deferred. fill ( Maybe ( failure: error as MaybeErrorType ) )
590613 return
591614 }
0 commit comments