diff --git a/remind.py b/remind.py index e172ab2..2cb81c3 100644 --- a/remind.py +++ b/remind.py @@ -85,6 +85,7 @@ def invoke_operation(args): print('argument to list command must be positive') return reminders = client.list_reminders(num_reminders=num_reminders) + reminders = filter(None, reminders) if reminders is not None: for r in sorted(reminders): print(r) diff --git a/reminder.py b/reminder.py index 48e2f26..91d5294 100644 --- a/reminder.py +++ b/reminder.py @@ -18,7 +18,9 @@ class Reminder: title: str dt: datetime creation_timestamp_msec: Optional[int] = None + done_timestamp_msec: Optional[int] = None done: bool = False + all_day: bool = False def __repr_title(self): """ diff --git a/reminders_client.py b/reminders_client.py index 352f0a6..196f246 100644 --- a/reminders_client.py +++ b/reminders_client.py @@ -8,7 +8,8 @@ 'create': 'https://reminders-pa.clients6.google.com/v1internalOP/reminders/create', 'delete': 'https://reminders-pa.clients6.google.com/v1internalOP/reminders/delete', 'get': 'https://reminders-pa.clients6.google.com/v1internalOP/reminders/get', - 'list': 'https://reminders-pa.clients6.google.com/v1internalOP/reminders/list' + 'list': 'https://reminders-pa.clients6.google.com/v1internalOP/reminders/list', + 'update': 'https://reminders-pa.clients6.google.com/v1internalOP/reminders/update' } HEADERS = { @@ -44,7 +45,24 @@ def create_reminder(self, reminder: Reminder) -> bool: else: self._report_error(response, content, 'create_reminder') return False - + + def update_reminder(self, reminder: Reminder) -> bool: + """ + send a 'update reminder' request. + returns True upon a successful update of a reminder + """ + response, content = self.auth_http.request( + uri=URIs['update'], + method='POST', + body=client_utils.update_req_body(reminder), + headers=HEADERS, + ) + if response.status == HTTP_OK: + return True + else: + self._report_error(response, content, 'update_reminder') + return False + def get_reminder(self, reminder_id: str) -> Optional[Reminder]: """ retrieve information about the reminder with the given id. None if an diff --git a/reminders_client_utils.py b/reminders_client_utils.py index 0dcfffd..d9ca536 100644 --- a/reminders_client_utils.py +++ b/reminders_client_utils.py @@ -73,6 +73,45 @@ def create_req_body(reminder: Reminder) -> str: return json.dumps(body) +def update_req_body(reminder: Reminder) -> str: + """ + returns the body of a update-reminder request + """ + body = { + '2': { + '2': reminder.id + }, + '4': { + '1': { + '2': reminder.id + }, + '3': reminder.title, + '5': { + '1': reminder.dt.year, + '2': reminder.dt.month, + '3': reminder.dt.day, + '4': { + '1': reminder.dt.hour, + '2': reminder.dt.minute, + '3': reminder.dt.second, + }, + '9': 1 if reminder.all_day else 0, + }, + '8': 1 if reminder.done else 0, + '11': str(int(datetime.utcnow().timestamp() * 1000)), + '18': str(reminder.creation_timestamp_msec) + }, + '7': { + '1': [ + 0, + 1, + 3, + 10, + ]}, + } + return json.dumps(body) + + def get_req_body(reminder_id: str) -> str: """ returns the body of a get-reminder request @@ -119,23 +158,42 @@ def build_reminder(reminder_dict: dict) -> Optional[Reminder]: try: id = r['1']['2'] title = r['3'] - year = r['5']['1'] - month = r['5']['2'] - day = r['5']['3'] - hour = r['5']['4']['1'] - minute = r['5']['4']['2'] - second = r['5']['4']['3'] + if '5' in r: + year = r['5']['1'] + month = r['5']['2'] + day = r['5']['3'] + if '4' in r['5']: + hour = r['5']['4']['1'] + minute = r['5']['4']['2'] + second = r['5']['4']['3'] + else: + hour = 0 + minute = 0 + second = 0 + all_day = '9' in r['5'] and r['5']['9'] == 1 + else: + now = datetime.now() + year = now.year + month = now.month + day = now.day + hour = 0 + minute = 0 + second = 0 + creation_timestamp_msec = int(r['18']) + done_timestamp_msec = int(r['11']) if '11' in r else None done = '8' in r and r['8'] == 1 - + return Reminder( id=id, title=title, dt=datetime(year, month, day, hour, minute, second), creation_timestamp_msec=creation_timestamp_msec, + done_timestamp_msec=done_timestamp_msec, done=done, + all_day = all_day ) - + except KeyError: print('build_reminder failed: unrecognized reminder dictionary format') return None