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
get() = mDatabaseKDBX?.isTemplatesGroupEnabled() ?: false
fun enableTemplates(enable: Boolean, resources: Resources) {
mDatabaseKDBX?.enableTemplatesGroup(enable, resources)
fun enableTemplates(enable: Boolean, templatesGroupName: String) {
mDatabaseKDBX?.enableTemplatesGroup(enable, templatesGroupName)
}
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.security.MemoryProtectionConfig
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.exception.UnknownKDF
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,
rootName: String,
templateGroupName: String? = null) {
templatesGroupName: String? = null) {
name = databaseName
kdbxVersion = FILE_VERSION_31
val group = createGroup().apply {
@@ -142,20 +141,10 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
icon.standard = getStandardIcon(IconImageStandard.FOLDER_ID)
}
rootGroup = group
if (templateGroupName != null) {
val templateGroup = createGroup().apply {
title = templateGroupName
icon.standard = getStandardIcon(IconImageStandard.BUILD_ID)
}
addGroupTo(templateGroup, rootGroup)
entryTemplatesGroup = templateGroup.id
// Build default templates
TemplateEngine.getDefaults().forEach { defaultTemplate ->
mTemplateEngine.createTemplateEntry(defaultTemplate).also {
addEntryTo(it, templateGroup)
}
}
if (templatesGroupName != null) {
val templatesGroup = mTemplateEngine.createNewTemplatesGroup(templatesGroupName)
entryTemplatesGroup = templatesGroup.id
entryTemplatesGroupChanged = templatesGroup.lastModificationTime
}
}
@@ -357,21 +346,16 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
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
val firstGroupWithValidName = getGroupIndexes().firstOrNull {
it.title == TemplateEngine.getDefaultTemplateGroupName(resources)
it.title == templatesGroupName
}
if (enable) {
val uuidTemplatesGroup = if (firstGroupWithValidName == null) {
val newUuidTemplatesGroup = mTemplateEngine.createNewTemplatesGroup(resources)
addGroupTo(newUuidTemplatesGroup, rootGroup)
newUuidTemplatesGroup
} else {
firstGroupWithValidName
}
entryTemplatesGroup = uuidTemplatesGroup.id
entryTemplatesGroupChanged = uuidTemplatesGroup.lastModificationTime
val templatesGroup = firstGroupWithValidName
?: mTemplateEngine.createNewTemplatesGroup(templatesGroupName)
entryTemplatesGroup = templatesGroup.id
entryTemplatesGroupChanged = templatesGroup.lastModificationTime
} else {
removeTemplatesGroup()
}

View File

@@ -42,14 +42,22 @@ abstract class TemplateEngine(private val mDatabase: DatabaseKDBX) {
return Template(CREATION)
}
fun createNewTemplatesGroup(resources: Resources): GroupKDBX {
return mDatabase.createGroup().apply {
title = getDefaultTemplateGroupName(resources)
icon.standard = mDatabase.getStandardIcon(IconImageStandard.FOLDER_ID)
fun createNewTemplatesGroup(templatesGroupName: String): GroupKDBX {
val newTemplatesGroup = mDatabase.createGroup().apply {
title = templatesGroupName
icon.standard = mDatabase.getStandardIcon(IconImageStandard.BUILD_ID)
enableAutoType = false
enableSearching = 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() {

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