[scrobblers] Use udpated_at key for Todoist scrobbles

This commit is contained in:
2024-10-20 13:27:40 -04:00
parent 218c68dee0
commit f2bbb7f5d0
2 changed files with 32 additions and 12 deletions

View File

@ -339,6 +339,7 @@ def todoist_scrobble_task(todoist_task: dict, user_id: int) -> Scrobble:
task = Task.find_or_create(title) task = Task.find_or_create(title)
timestamp = pendulum.parse(todoist_task.get("updated_at", timezone.now()))
in_progress_scrobble = Scrobble.objects.filter( in_progress_scrobble = Scrobble.objects.filter(
in_progress=True, in_progress=True,
log__todoist_id=todoist_task.get("todoist_id"), log__todoist_id=todoist_task.get("todoist_id"),
@ -347,9 +348,10 @@ def todoist_scrobble_task(todoist_task: dict, user_id: int) -> Scrobble:
in_progress_in_todoist = ( in_progress_in_todoist = (
"inprogress" in todoist_task["todoist_label_list"] "inprogress" in todoist_task["todoist_label_list"]
) )
# We need either an in-progress scrobble OR an in-progress todoist task
if not in_progress_scrobble and not in_progress_in_todoist: if not in_progress_scrobble and not in_progress_in_todoist:
logger.info( logger.info(
"[todoist_scrobble_task] no task in progress, and no inprogress label found", "[todoist_scrobble_task] noop",
extra={ extra={
"todoist_type": todoist_task["todoist_type"], "todoist_type": todoist_task["todoist_type"],
"todoist_event": todoist_task["todoist_event"], "todoist_event": todoist_task["todoist_event"],
@ -358,24 +360,43 @@ def todoist_scrobble_task(todoist_task: dict, user_id: int) -> Scrobble:
) )
return return
# Finish an in-progress scrobble
if in_progress_scrobble and not in_progress_in_todoist: if in_progress_scrobble and not in_progress_in_todoist:
scrobble = todoist_scrobble_task_finish(todoist_task, user_id) logger.info(
"[todoist_scrobble_task] finishing",
extra={
"todoist_type": todoist_task["todoist_type"],
"todoist_event": todoist_task["todoist_event"],
"todoist_id": todoist_task["todoist_id"],
},
)
return todoist_scrobble_task_finish(todoist_task, user_id)
# TODO this logic probably belongs in create_or_update # Ignore an already in progress scrobble
if in_progress_scrobble: if in_progress_scrobble:
return scrobble logger.info(
"[todoist_scrobble_task] continuing",
extra={
"todoist_type": todoist_task["todoist_type"],
"todoist_event": todoist_task["todoist_event"],
"todoist_id": todoist_task["todoist_id"],
"scrobble_id": in_progress_scrobble.id,
},
)
return in_progress_scrobble
# Default to create new scrobble "if not in_progress_scrobble and in_progress_in_todoist"
# TODO Should use updated_at from TOdoist, but parsing isn't working # TODO Should use updated_at from TOdoist, but parsing isn't working
scrobble_dict = { scrobble_dict = {
"user_id": user_id, "user_id": user_id,
"timestamp": timezone.now(), "timestamp": timestamp,
"playback_position_seconds": 0, "playback_position_seconds": 0,
"source": "Todoist", "source": "Todoist",
"log": todoist_task, "log": todoist_task,
} }
logger.info( logger.info(
"[todoist_scrobble_task] task scrobble request received", "[todoist_scrobble_task] creating",
extra={ extra={
"task_id": task.id, "task_id": task.id,
"user_id": user_id, "user_id": user_id,

View File

@ -31,17 +31,16 @@ def todoist_webhook(request):
"todoist_label_list": event_data.get("labels"), "todoist_label_list": event_data.get("labels"),
"todoist_type": todoist_type, "todoist_type": todoist_type,
"todoist_event": todoist_event, "todoist_event": todoist_event,
"updated_at": event_data.get("updated_at"),
"todoist_project_id": event_data.get("project_id"), "todoist_project_id": event_data.get("project_id"),
"description": event_data.get("content"), "description": event_data.get("content"),
"details": event_data.get("description"), "details": event_data.get("description"),
} }
if todoist_task["todoist_type"] != "item" or todoist_task[ is_not_item_type = todoist_task["todoist_type"] != "item"
"todoist_event" is_not_updated = todoist_task["todoist_event"] not in ["updated"]
] not in [
"updated", if is_not_item_type or is_not_updated:
"completed",
]:
logger.info( logger.info(
"[todoist_webhook] ignoring wrong todoist type or event", "[todoist_webhook] ignoring wrong todoist type or event",
extra={ extra={