diff --git a/jrnl/DayOneJournal.py b/jrnl/DayOneJournal.py index 96d21ac7..17b8329f 100644 --- a/jrnl/DayOneJournal.py +++ b/jrnl/DayOneJournal.py @@ -3,6 +3,8 @@ from . import Entry from . import Journal from . import time as jrnl_time +from . import __title__ # 'jrnl' +from . import __version__ import os import re from datetime import datetime @@ -14,6 +16,8 @@ import pytz import uuid import tzlocal from xml.parsers.expat import ExpatError +import socket +import platform class DayOne(Journal.Journal): @@ -70,6 +74,35 @@ class DayOne(Journal.Journal): for tag in dict_entry.get("Tags", []) ] + """Extended DayOne attributes""" + try: + entry.creator_device_agent = dict_entry['Creator']['Device Agent'] + except: + pass + try: + entry.creator_generation_date = dict_entry['Creator']['Generation Date'] + except: + entry.creator_generation_date = date + try: + entry.creator_host_name = dict_entry['Creator']['Host Name'] + except: + pass + try: + entry.creator_os_agent = dict_entry['Creator']['OS Agent'] + except: + pass + try: + entry.creator_software_agent = dict_entry['Creator']['Software Agent'] + except: + pass + try: + entry.location = dict_entry['Location'] + except: + pass + try: + entry.weather = dict_entry['Weather'] + except: + pass self.entries.append(entry) self.sort() return self @@ -84,6 +117,16 @@ class DayOne(Journal.Journal): if not hasattr(entry, "uuid"): entry.uuid = uuid.uuid1().hex + if not hasattr(entry, "creator_device_agent"): + entry.creator_device_agent = '' # iPhone/iPhone5,3 + if not hasattr(entry, "creator_generation_date"): + entry.creator_generation_date = utc_time + if not hasattr(entry, "creator_host_name"): + entry.creator_host_name = socket.gethostname() + if not hasattr(entry, "creator_os_agent"): + entry.creator_os_agent = '{}/{}'.format(platform.system(), platform.release()) + if not hasattr(entry, "creator_software_agent"): + entry.creator_software_agent = '{}/{}'.format(__title__, __version__) fn = ( Path(self.config["journal"]) @@ -101,10 +144,21 @@ class DayOne(Journal.Journal): tag.strip(self.config["tagsymbols"]).replace("_", " ") for tag in entry.tags ], + 'Creator': {'Device Agent': entry.creator_device_agent, + 'Generation Date': entry.creator_generation_date, + 'Host Name': entry.creator_host_name, + 'OS Agent': entry.creator_os_agent, + 'Software Agent': entry.creator_software_agent} } + if hasattr(entry, 'location'): + entry_plist['Location'] = entry.location + if hasattr(entry, 'weather'): + entry_plist['Weather'] = entry.weather + # plistlib expects a binary object with fn.open(mode="wb") as f: plistlib.dump(entry_plist, f, fmt=plistlib.FMT_XML, sort_keys=False) + for entry in self._deleted_entries: filename = os.path.join( self.config["journal"], "entries", entry.uuid + ".doentry"