diff --git a/app/src/main/java/com/yogeshpaliyal/keypass/importer/KeePassAccountImporter.kt b/app/src/main/java/com/yogeshpaliyal/keypass/importer/KeePassAccountImporter.kt index d2fc5568..02ab9190 100644 --- a/app/src/main/java/com/yogeshpaliyal/keypass/importer/KeePassAccountImporter.kt +++ b/app/src/main/java/com/yogeshpaliyal/keypass/importer/KeePassAccountImporter.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext import com.opencsv.CSVReader +import com.opencsv.exceptions.CsvMalformedLineException import com.yogeshpaliyal.common.data.AccountModel import com.yogeshpaliyal.keypass.R import com.yogeshpaliyal.keypass.ui.redux.actions.Action @@ -23,29 +24,33 @@ class KeePassAccountImporter : AccountsImporter { val context = LocalContext.current LaunchedEffect(key1 = file, block = { - val inputStream = context.contentResolver.openInputStream(file) - val reader = CSVReader(inputStream?.reader()) - val myEntries: List> = reader.readAll() - val headers = myEntries[0] - val result = myEntries.drop(1).map { data -> - headers.zip(data).toMap() - } - val listOfAccounts = ArrayList() - result.forEach { - listOfAccounts.add( - AccountModel( - title = it["Title"], - notes = it["Notes"], - password = it["Password"], - username = it["Username"], - site = it["URL"], - tags = it["Group"], - secret = if (it["TOTP"].isNullOrBlank()) null else it["TOTP"] + try { + val inputStream = context.contentResolver.openInputStream(file) + val reader = CSVReader(inputStream?.reader()) + val myEntries: List> = reader.readAll() + val headers = myEntries[0] + val result = myEntries.drop(1).map { data -> + headers.zip(data).toMap() + } + val listOfAccounts = ArrayList() + result.forEach { + listOfAccounts.add( + AccountModel( + title = it["Title"], + notes = it["Notes"], + password = it["Password"], + username = it["Username"], + site = it["URL"], + tags = it["Group"], + secret = if (it["TOTP"].isNullOrBlank()) null else it["TOTP"] + ) ) - ) + } + resolve(listOfAccounts) + onCompleteOrCancel(ToastAction(R.string.backup_restored)) + } catch (e: CsvMalformedLineException) { + onCompleteOrCancel(ToastAction(R.string.invalid_csv)) } - resolve(listOfAccounts) - onCompleteOrCancel(ToastAction(R.string.backup_restored)) }) LoadingDialog() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2271b3d6..e88eff96 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,6 +10,8 @@ Generate Password Backup Restored + Invalid CSV file + Invalid Keyphrase Backup Completed