Better database creation runnable

This commit is contained in:
J-Jamet
2019-07-25 15:23:04 +02:00
parent 2d640dbe62
commit 9bbfeaba72
4 changed files with 32 additions and 32 deletions

View File

@@ -404,26 +404,21 @@ class FileDatabaseSelectActivity : StylishActivity(),
keyFileChecked: Boolean, keyFile: Uri?) {
try {
mDatabaseFileUri?.path?.let { databaseFilename ->
// Create the new database and start prof
UriUtil.parseUriFile(mDatabaseFileUri)?.let { databaseUri ->
// Create the new database
ProgressDialogThread(this@FileDatabaseSelectActivity,
{
CreateDatabaseRunnable(databaseFilename, App.currentDatabase) { database ->
UriUtil.parseUriFile(databaseFilename)?.let { databaseUri ->
// TODO store database created
AssignPasswordInDatabaseRunnable(
this@FileDatabaseSelectActivity,
database,
masterPasswordChecked,
masterPassword,
keyFileChecked,
keyFile,
true, // TODO get readonly
LaunchGroupActivityFinish(databaseUri)
)
}
}
CreateDatabaseRunnable(this@FileDatabaseSelectActivity,
databaseUri,
App.currentDatabase,
masterPasswordChecked,
masterPassword,
keyFileChecked,
keyFile,
true, // TODO get readonly
LaunchGroupActivityFinish(databaseUri)
)
},
R.string.progress_create)
.start()
@@ -435,7 +430,6 @@ class FileDatabaseSelectActivity : StylishActivity(),
// TODO remove
e.printStackTrace()
}
}
private inner class LaunchGroupActivityFinish internal constructor(private val fileURI: Uri) : ActionRunnable() {

View File

@@ -27,7 +27,7 @@ import com.kunzisoft.keepass.tasks.ActionRunnable
import com.kunzisoft.keepass.utils.UriUtil
import java.io.IOException
class AssignPasswordInDatabaseRunnable @JvmOverloads constructor(
open class AssignPasswordInDatabaseRunnable @JvmOverloads constructor(
context: Context,
database: Database,
withMasterPassword: Boolean,

View File

@@ -19,23 +19,31 @@
*/
package com.kunzisoft.keepass.database.action
import android.content.Context
import android.net.Uri
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.tasks.ActionRunnable
class CreateDatabaseRunnable(private val mFilename: String,
class CreateDatabaseRunnable(context: Context,
private val mDatabaseUri: Uri,
private val mDatabase: Database,
val onDatabaseCreate: (database: Database) -> ActionRunnable?)
: ActionRunnable() {
withMasterPassword: Boolean,
masterPassword: String?,
withKeyFile: Boolean,
keyFile: Uri?,
save: Boolean,
actionRunnable: ActionRunnable? = null)
: AssignPasswordInDatabaseRunnable(context, mDatabase, withMasterPassword, masterPassword, withKeyFile, keyFile, save, actionRunnable) {
override fun run() {
try {
// Create new database record
mDatabase.apply {
createData(mFilename)
createData(mDatabaseUri)
// Set Database state
loaded = true
// Commit changes
onDatabaseCreate(this)?.run()
super.run()
}
finishRun(true)

View File

@@ -188,8 +188,8 @@ class Database {
this.pwDatabaseV4 = pwDatabaseV4
}
private fun dbNameFromPath(dbPath: String): String {
val filename = URLUtil.guessFileName(dbPath, null, null)
private fun dbNameFromUri(databaseUri: Uri): String {
val filename = URLUtil.guessFileName(databaseUri.path, null, null)
if (filename == null || filename.isEmpty()) {
return "KeePass Database"
}
@@ -199,12 +199,10 @@ class Database {
} else filename.substring(0, lastExtDot)
}
fun createData(databasePath: String) {
fun createData(databaseUri: Uri) {
// Always create a new database with the last version
setDatabaseV4(PwDatabaseV4(dbNameFromPath(databasePath)))
UriUtil.parseUriFile(databasePath)?.let { uri ->
this.mUri = uri
}
setDatabaseV4(PwDatabaseV4(dbNameFromUri(databaseUri)))
this.mUri = databaseUri
}
@Throws(IOException::class, InvalidDBException::class)