@ -203,35 +203,31 @@ open class SavedLoginsStorageController(
loginsFragmentStore . dispatch ( LoginsAction . DuplicateLogin ( dupe ) )
loginsFragmentStore . dispatch ( LoginsAction . DuplicateLogin ( dupe ) )
}
}
fun fetchLoginDetails ( loginId : String ) {
fun fetchLoginDetails ( loginId : String ) = lifecycleScope . launch ( ioDispatcher ) {
var deferredLogin : Deferred < List < Login > > ? = null
val fetchedLogin = passwordsStorage . get ( loginId )
val fetchLoginJob = lifecycleScope . launch ( ioDispatcher ) {
withContext ( Dispatchers . Main ) {
deferredLogin = async {
if ( fetchedLogin != null ) {
passwordsStorage . list ( )
loginsFragmentStore . dispatch (
}
LoginsAction . UpdateCurrentLogin (
val fetchedLoginList = deferredLogin ?. await ( )
fetchedLogin . mapToSavedLogin ( )
fetchedLoginList ?. let {
withContext ( Dispatchers . Main ) {
val login = fetchedLoginList . filter {
it . guid == loginId
} . first ( )
loginsFragmentStore . dispatch (
LoginsAction . UpdateCurrentLogin (
login . mapToSavedLogin ( )
)
)
)
}
)
}
} else {
}
navController . popBackStack ( )
fetchLoginJob . invokeOnCompletion {
if ( it is CancellationException ) {
deferredLogin ?. cancel ( )
}
}
}
}
}
}
fun handleLoadAndMapLogins ( ) {
fun handleLoadAndMapLogins ( ) {
// Don't touch the store if we already have the logins loaded.
// This has a slight downside of possibly being out of date with the storage if, say, Sync
// ran in the meantime, but that's fairly unlikely and the speedy UI is worth it.
if ( loginsFragmentStore . state . loginList . isNotEmpty ( ) ) {
lifecycleScope . launch ( Dispatchers . Main ) {
loginsFragmentStore . dispatch ( LoginsAction . LoginsListUpToDate )
}
return
}
var deferredLogins : Deferred < List < Login > > ? = null
var deferredLogins : Deferred < List < Login > > ? = null
val fetchLoginsJob = lifecycleScope . launch ( ioDispatcher ) {
val fetchLoginsJob = lifecycleScope . launch ( ioDispatcher ) {
deferredLogins = async {
deferredLogins = async {