diff --git a/pykeepass/baseelement.py b/pykeepass/baseelement.py index 048e5cf6..917721b2 100644 --- a/pykeepass/baseelement.py +++ b/pykeepass/baseelement.py @@ -78,7 +78,12 @@ def uuid(self, uuid): @property def icon(self): - return self._get_subelement_text('IconID') + """`str`: get or set entry icon. See `icons`""" + value = self._get_subelement_text('IconID') + if not int(value): + uuid = self._get_subelement_text('CustomIconUUID') + value = uuid if uuid is not None else value + return value @icon.setter def icon(self, value): diff --git a/pykeepass/entry.py b/pykeepass/entry.py index 3ef7e4ed..ffc641a7 100644 --- a/pykeepass/entry.py +++ b/pykeepass/entry.py @@ -16,6 +16,7 @@ 'URL', 'Tags', 'IconID', + 'CustomIconUUID', 'Times', 'History', 'Notes', @@ -238,7 +239,11 @@ def notes(self, value): @property def icon(self): """`str`: get or set entry icon. See `icons`""" - return self._get_subelement_text('IconID') + value = self._get_subelement_text('IconID') + if not int(value): + uuid = self._get_subelement_text('CustomIconUUID') + value = uuid if uuid is not None else value + return value @icon.setter def icon(self, value): diff --git a/pykeepass/pykeepass.py b/pykeepass/pykeepass.py index ec8b506d..4475e0d3 100644 --- a/pykeepass/pykeepass.py +++ b/pykeepass/pykeepass.py @@ -872,6 +872,18 @@ def delete_binary(self, id): for reference in binaries_gt: reference.id = reference.id - 1 + @property + def customIcons(self): + """`dictionary` of `uuid(str):png(bytes)`: all attached custom icons in database.""" + icons = {} + counter = 0 + for elem in self._xpath('/KeePassFile/Meta/CustomIcons/Icon'): + if elem.text is not None: + counter+=1 + else: + icons[elem.find('UUID').text] = base64.b64decode(elem.find('Data').text) + return icons + # ---------- Misc ---------- def deref(self, value):