pyicloud/pyicloud/services/reminders.py
Quentame ababe3cdf3
Back is black (#259)
* Back is black

* Format with black
2020-03-24 14:54:43 +01:00

124 lines
3.9 KiB
Python

"""Reminders service."""
from __future__ import absolute_import
from datetime import datetime
import time
import uuid
import json
from tzlocal import get_localzone
class RemindersService(object):
"""The 'Reminders' iCloud service."""
def __init__(self, service_root, session, params):
self.session = session
self._params = params
self._service_root = service_root
self.lists = {}
self.collections = {}
self.refresh()
def refresh(self):
"""Refresh data."""
params_reminders = dict(self._params)
params_reminders.update(
{"clientVersion": "4.0", "lang": "en-us", "usertz": get_localzone().zone}
)
# Open reminders
req = self.session.get(
self._service_root + "/rd/startup", params=params_reminders
)
data = req.json()
self.lists = {}
self.collections = {}
for collection in data["Collections"]:
temp = []
self.collections[collection["title"]] = {
"guid": collection["guid"],
"ctag": collection["ctag"],
}
for reminder in data["Reminders"]:
if reminder["pGuid"] != collection["guid"]:
continue
if reminder.get("dueDate"):
due = datetime(
reminder["dueDate"][1],
reminder["dueDate"][2],
reminder["dueDate"][3],
reminder["dueDate"][4],
reminder["dueDate"][5],
)
else:
due = None
temp.append(
{
"title": reminder["title"],
"desc": reminder.get("description"),
"due": due,
}
)
self.lists[collection["title"]] = temp
def post(self, title, description="", collection=None, due_date=None):
"""Adds a new reminder."""
pguid = "tasks"
if collection:
if collection in self.collections:
pguid = self.collections[collection]["guid"]
params_reminders = dict(self._params)
params_reminders.update(
{"clientVersion": "4.0", "lang": "en-us", "usertz": get_localzone().zone}
)
due_dates = None
if due_date:
due_dates = [
int(str(due_date.year) + str(due_date.month) + str(due_date.day)),
due_date.year,
due_date.month,
due_date.day,
due_date.hour,
due_date.minute,
]
req = self.session.post(
self._service_root + "/rd/reminders/tasks",
data=json.dumps(
{
"Reminders": {
"title": title,
"description": description,
"pGuid": pguid,
"etag": None,
"order": None,
"priority": 0,
"recurrence": None,
"alarms": [],
"startDate": None,
"startDateTz": None,
"startDateIsAllDay": False,
"completedDate": None,
"dueDate": due_dates,
"dueDateIsAllDay": False,
"lastModifiedDate": None,
"createdDate": None,
"isFamily": None,
"createdDateExtended": int(time.time() * 1000),
"guid": str(uuid.uuid4()),
},
"ClientState": {"Collections": list(self.collections.values())},
}
),
params=params_reminders,
)
return req.ok