mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Fix fields references #987
This commit is contained in:
@@ -332,9 +332,40 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
||||
return this.iconsManager.getIcon(iconUuid)
|
||||
}
|
||||
|
||||
/**
|
||||
* To perform a search in entry custom data
|
||||
/*
|
||||
* Search methods
|
||||
*/
|
||||
|
||||
fun getEntryByTitle(title: String, recursionLevel: Int): EntryKDBX? {
|
||||
return this.entryIndexes.values.find { entry ->
|
||||
entry.decodeTitleKey(recursionLevel).equals(title, true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getEntryByUsername(username: String, recursionLevel: Int): EntryKDBX? {
|
||||
return this.entryIndexes.values.find { entry ->
|
||||
entry.decodeUsernameKey(recursionLevel).equals(username, true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getEntryByURL(url: String, recursionLevel: Int): EntryKDBX? {
|
||||
return this.entryIndexes.values.find { entry ->
|
||||
entry.decodeUrlKey(recursionLevel).equals(url, true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getEntryByPassword(password: String, recursionLevel: Int): EntryKDBX? {
|
||||
return this.entryIndexes.values.find { entry ->
|
||||
entry.decodePasswordKey(recursionLevel).equals(password, true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getEntryByNotes(notes: String, recursionLevel: Int): EntryKDBX? {
|
||||
return this.entryIndexes.values.find { entry ->
|
||||
entry.decodeNotesKey(recursionLevel).equals(notes, true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getEntryByCustomData(customDataValue: String): EntryKDBX? {
|
||||
return entryIndexes.values.find { entry ->
|
||||
entry.customData.containsItemWithValue(customDataValue)
|
||||
|
||||
@@ -271,26 +271,6 @@ abstract class DatabaseVersioned<
|
||||
return this.entryIndexes[id]
|
||||
}
|
||||
|
||||
fun getEntryByTitle(title: String): Entry? {
|
||||
return this.entryIndexes.values.find { entry -> entry.title.equals(title, true) }
|
||||
}
|
||||
|
||||
fun getEntryByUsername(username: String): Entry? {
|
||||
return this.entryIndexes.values.find { entry -> entry.username.equals(username, true) }
|
||||
}
|
||||
|
||||
fun getEntryByURL(url: String): Entry? {
|
||||
return this.entryIndexes.values.find { entry -> entry.url.equals(url, true) }
|
||||
}
|
||||
|
||||
fun getEntryByPassword(password: String): Entry? {
|
||||
return this.entryIndexes.values.find { entry -> entry.password.equals(password, true) }
|
||||
}
|
||||
|
||||
fun getEntryByNotes(notes: String): Entry? {
|
||||
return this.entryIndexes.values.find { entry -> entry.notes.equals(notes, true) }
|
||||
}
|
||||
|
||||
fun addEntryIndex(entry: Entry) {
|
||||
val entryId = entry.nodeId
|
||||
if (entryIndexes.containsKey(entryId)) {
|
||||
|
||||
@@ -68,9 +68,9 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) {
|
||||
val fullReference = "$STR_REF_START$reference$STR_REF_END"
|
||||
|
||||
if (!refsCache.containsKey(fullReference)) {
|
||||
val result = findReferenceTarget(reference)
|
||||
val entryFound = result.entry
|
||||
val newRecursionLevel = recursionLevel + 1
|
||||
val result = findReferenceTarget(reference, newRecursionLevel)
|
||||
val entryFound = result.entry
|
||||
val data: String? = when (result.wanted) {
|
||||
'T' -> entryFound?.decodeTitleKey(newRecursionLevel)
|
||||
'U' -> entryFound?.decodeUsernameKey(newRecursionLevel)
|
||||
@@ -98,7 +98,7 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) {
|
||||
return newText
|
||||
}
|
||||
|
||||
private fun findReferenceTarget(reference: String): TargetResult {
|
||||
private fun findReferenceTarget(reference: String, recursionLevel: Int): TargetResult {
|
||||
|
||||
val targetResult = TargetResult(null, 'J')
|
||||
|
||||
@@ -116,11 +116,11 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) {
|
||||
val searchIn = Character.toUpperCase(reference[2])
|
||||
val searchQuery = reference.substring(4)
|
||||
targetResult.entry = when (searchIn) {
|
||||
'T' -> mDatabase.getEntryByTitle(searchQuery)
|
||||
'U' -> mDatabase.getEntryByUsername(searchQuery)
|
||||
'A' -> mDatabase.getEntryByURL(searchQuery)
|
||||
'P' -> mDatabase.getEntryByPassword(searchQuery)
|
||||
'N' -> mDatabase.getEntryByNotes(searchQuery)
|
||||
'T' -> mDatabase.getEntryByTitle(searchQuery, recursionLevel)
|
||||
'U' -> mDatabase.getEntryByUsername(searchQuery, recursionLevel)
|
||||
'A' -> mDatabase.getEntryByURL(searchQuery, recursionLevel)
|
||||
'P' -> mDatabase.getEntryByPassword(searchQuery, recursionLevel)
|
||||
'N' -> mDatabase.getEntryByNotes(searchQuery, recursionLevel)
|
||||
'I' -> {
|
||||
UuidUtil.fromHexString(searchQuery)?.let { uuid ->
|
||||
mDatabase.getEntryById(NodeIdUUID(uuid))
|
||||
|
||||
Reference in New Issue
Block a user