Build default templates if setting enable #1062

This commit is contained in:
J-Jamet
2021-08-29 13:56:41 +02:00
parent 9935826877
commit 6680039de7
4 changed files with 30 additions and 35 deletions

View File

@@ -450,8 +450,8 @@ class Database {
val isTemplatesEnabled: Boolean val isTemplatesEnabled: Boolean
get() = mDatabaseKDBX?.isTemplatesGroupEnabled() ?: false get() = mDatabaseKDBX?.isTemplatesGroupEnabled() ?: false
fun enableTemplates(enable: Boolean, resources: Resources) { fun enableTemplates(enable: Boolean, templatesGroupName: String) {
mDatabaseKDBX?.enableTemplatesGroup(enable, resources) mDatabaseKDBX?.enableTemplatesGroup(enable, templatesGroupName)
} }
val templatesGroup: Group? val templatesGroup: Group?

View File

@@ -46,7 +46,6 @@ import com.kunzisoft.keepass.database.element.node.NodeIdUUID
import com.kunzisoft.keepass.database.element.node.NodeVersioned import com.kunzisoft.keepass.database.element.node.NodeVersioned
import com.kunzisoft.keepass.database.element.security.MemoryProtectionConfig import com.kunzisoft.keepass.database.element.security.MemoryProtectionConfig
import com.kunzisoft.keepass.database.element.template.Template import com.kunzisoft.keepass.database.element.template.Template
import com.kunzisoft.keepass.database.element.template.TemplateEngine
import com.kunzisoft.keepass.database.element.template.TemplateEngineCompatible import com.kunzisoft.keepass.database.element.template.TemplateEngineCompatible
import com.kunzisoft.keepass.database.exception.UnknownKDF import com.kunzisoft.keepass.database.exception.UnknownKDF
import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX.Companion.FILE_VERSION_31 import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX.Companion.FILE_VERSION_31
@@ -134,7 +133,7 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
*/ */
constructor(databaseName: String, constructor(databaseName: String,
rootName: String, rootName: String,
templateGroupName: String? = null) { templatesGroupName: String? = null) {
name = databaseName name = databaseName
kdbxVersion = FILE_VERSION_31 kdbxVersion = FILE_VERSION_31
val group = createGroup().apply { val group = createGroup().apply {
@@ -142,20 +141,10 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
icon.standard = getStandardIcon(IconImageStandard.FOLDER_ID) icon.standard = getStandardIcon(IconImageStandard.FOLDER_ID)
} }
rootGroup = group rootGroup = group
if (templateGroupName != null) { if (templatesGroupName != null) {
val templateGroup = createGroup().apply { val templatesGroup = mTemplateEngine.createNewTemplatesGroup(templatesGroupName)
title = templateGroupName entryTemplatesGroup = templatesGroup.id
icon.standard = getStandardIcon(IconImageStandard.BUILD_ID) entryTemplatesGroupChanged = templatesGroup.lastModificationTime
}
addGroupTo(templateGroup, rootGroup)
entryTemplatesGroup = templateGroup.id
// Build default templates
TemplateEngine.getDefaults().forEach { defaultTemplate ->
mTemplateEngine.createTemplateEntry(defaultTemplate).also {
addEntryTo(it, templateGroup)
}
}
} }
} }
@@ -357,21 +346,16 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
return entryTemplatesGroup != UUID_ZERO return entryTemplatesGroup != UUID_ZERO
} }
fun enableTemplatesGroup(enable: Boolean, resources: Resources) { fun enableTemplatesGroup(enable: Boolean, templatesGroupName: String) {
// Create templates group only if a group with a valid name don't already exists // Create templates group only if a group with a valid name don't already exists
val firstGroupWithValidName = getGroupIndexes().firstOrNull { val firstGroupWithValidName = getGroupIndexes().firstOrNull {
it.title == TemplateEngine.getDefaultTemplateGroupName(resources) it.title == templatesGroupName
} }
if (enable) { if (enable) {
val uuidTemplatesGroup = if (firstGroupWithValidName == null) { val templatesGroup = firstGroupWithValidName
val newUuidTemplatesGroup = mTemplateEngine.createNewTemplatesGroup(resources) ?: mTemplateEngine.createNewTemplatesGroup(templatesGroupName)
addGroupTo(newUuidTemplatesGroup, rootGroup) entryTemplatesGroup = templatesGroup.id
newUuidTemplatesGroup entryTemplatesGroupChanged = templatesGroup.lastModificationTime
} else {
firstGroupWithValidName
}
entryTemplatesGroup = uuidTemplatesGroup.id
entryTemplatesGroupChanged = uuidTemplatesGroup.lastModificationTime
} else { } else {
removeTemplatesGroup() removeTemplatesGroup()
} }

View File

@@ -42,14 +42,22 @@ abstract class TemplateEngine(private val mDatabase: DatabaseKDBX) {
return Template(CREATION) return Template(CREATION)
} }
fun createNewTemplatesGroup(resources: Resources): GroupKDBX { fun createNewTemplatesGroup(templatesGroupName: String): GroupKDBX {
return mDatabase.createGroup().apply { val newTemplatesGroup = mDatabase.createGroup().apply {
title = getDefaultTemplateGroupName(resources) title = templatesGroupName
icon.standard = mDatabase.getStandardIcon(IconImageStandard.FOLDER_ID) icon.standard = mDatabase.getStandardIcon(IconImageStandard.BUILD_ID)
enableAutoType = false enableAutoType = false
enableSearching = false enableSearching = false
isExpanded = false isExpanded = false
} }
mDatabase.addGroupTo(newTemplatesGroup, mDatabase.rootGroup)
// Build default templates
getDefaults().forEach { defaultTemplate ->
createTemplateEntry(defaultTemplate).also {
mDatabase.addEntryTo(it, newTemplatesGroup)
}
}
return newTemplatesGroup
} }
fun clearCache() { fun clearCache() {

View File

@@ -38,6 +38,7 @@ import com.kunzisoft.keepass.database.crypto.kdf.KdfEngine
import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.element.Group import com.kunzisoft.keepass.database.element.Group
import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm
import com.kunzisoft.keepass.database.element.template.TemplateEngine
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService import com.kunzisoft.keepass.services.DatabaseTaskNotificationService
import com.kunzisoft.keepass.settings.preference.* import com.kunzisoft.keepass.settings.preference.*
import com.kunzisoft.keepass.settings.preferencedialogfragment.* import com.kunzisoft.keepass.settings.preferencedialogfragment.*
@@ -247,7 +248,9 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
isEnabled = if (!mDatabaseReadOnly) { isEnabled = if (!mDatabaseReadOnly) {
setOnPreferenceChangeListener { _, newValue -> setOnPreferenceChangeListener { _, newValue ->
val templatesEnabled = newValue as Boolean val templatesEnabled = newValue as Boolean
database.enableTemplates(templatesEnabled, resources) database.enableTemplates(templatesEnabled,
TemplateEngine.getDefaultTemplateGroupName(resources)
)
refreshTemplatesGroup(database) refreshTemplatesGroup(database)
// Save the database if not in readonly mode // Save the database if not in readonly mode
saveDatabase(mDatabaseAutoSaveEnabled) saveDatabase(mDatabaseAutoSaveEnabled)
@@ -258,7 +261,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
false false
} }
} }
// Recycle Bin group // Refresh templates group
refreshTemplatesGroup(database) refreshTemplatesGroup(database)
} else { } else {
templatesGroupPrefCategory?.isVisible = false templatesGroupPrefCategory?.isVisible = false