From ea8a4b6f6c5db1182663bbb89f776ddd821905d3 Mon Sep 17 00:00:00 2001 From: Yogesh Choudhary Paliyal Date: Sun, 16 Jun 2024 18:26:58 +0530 Subject: [PATCH] Better exception handling (#890) * feat: Crash Fix for invalid secret key * feat: add exception handling * feat: spotless fixes --- .../keypass/importer/ChromeAccountImporter.kt | 46 +++++++++++-------- app/src/main/res/values/strings.xml | 2 + 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/yogeshpaliyal/keypass/importer/ChromeAccountImporter.kt b/app/src/main/java/com/yogeshpaliyal/keypass/importer/ChromeAccountImporter.kt index 13e5ee98..52a7336d 100644 --- a/app/src/main/java/com/yogeshpaliyal/keypass/importer/ChromeAccountImporter.kt +++ b/app/src/main/java/com/yogeshpaliyal/keypass/importer/ChromeAccountImporter.kt @@ -21,10 +21,12 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog 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 import com.yogeshpaliyal.keypass.ui.redux.actions.ToastAction +import java.io.FileNotFoundException class ChromeAccountImporter : AccountsImporter { override fun getImporterTitle(): Int = R.string.google_backup @@ -39,27 +41,33 @@ class ChromeAccountImporter : 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["name"], - notes = it["note"], - password = it["password"], - username = it["username"], - site = it["url"] + 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["name"], + notes = it["note"], + password = it["password"], + username = it["username"], + site = it["url"] + ) ) - ) + } + resolve(listOfAccounts) + onCompleteOrCancel(ToastAction(R.string.backup_restored)) + } catch (e: CsvMalformedLineException) { + onCompleteOrCancel(ToastAction(R.string.invalid_csv_file)) + } catch (e: FileNotFoundException) { + onCompleteOrCancel(ToastAction(R.string.file_not_found)) } - 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 520dd205..2cd06983 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -111,5 +111,7 @@ Choose KeePass CSV file to import Export Invalid secret key format + Invalid CSV File + File not found (please try again)