mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-30 19:54:16 -04:00
Fix simkl requests body and episode identification
This commit is contained in:
parent
fe9aa865f9
commit
2df874e786
@ -2,10 +2,16 @@ from typing import Literal
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from dataclasses_json import dataclass_json, LetterCase
|
from dataclasses_json import dataclass_json, LetterCase
|
||||||
|
|
||||||
|
from autosync.models.show import Show
|
||||||
|
|
||||||
from .metadataid import MetadataID
|
from .metadataid import MetadataID
|
||||||
|
|
||||||
@dataclass_json(letter_case=LetterCase.CAMEL)
|
@dataclass_json(letter_case=LetterCase.CAMEL)
|
||||||
@dataclass
|
@dataclass
|
||||||
class Episode:
|
class Episode:
|
||||||
external_id: dict[str, MetadataID]
|
external_id: dict[str, MetadataID]
|
||||||
|
show: Show
|
||||||
|
season_number: int
|
||||||
|
episode_number: int
|
||||||
|
absolute_number: int
|
||||||
kind: Literal["episode"]
|
kind: Literal["episode"]
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import requests
|
import requests
|
||||||
import logging
|
import logging
|
||||||
|
from autosync.models.metadataid import MetadataID
|
||||||
|
|
||||||
from autosync.services.service import Service
|
from autosync.services.service import Service
|
||||||
from ..models.user import User
|
from ..models.user import User
|
||||||
@ -31,16 +32,24 @@ class Simkl(Service):
|
|||||||
if resource.kind == "episode":
|
if resource.kind == "episode":
|
||||||
if status.status != Status.COMPLETED:
|
if status.status != Status.COMPLETED:
|
||||||
return
|
return
|
||||||
|
|
||||||
resp = requests.post(
|
resp = requests.post(
|
||||||
"https://api.simkl.com/sync/history",
|
"https://api.simkl.com/sync/history",
|
||||||
json={
|
json={
|
||||||
"episodes": {
|
"shows": [
|
||||||
"watched_at": watch_date.isoformat(),
|
{
|
||||||
"ids": {
|
"watched_at": watch_date.isoformat(),
|
||||||
service: id.data_id
|
"title": resource.show.name,
|
||||||
for service, id in resource.external_id.items()
|
"year": resource.show.year,
|
||||||
},
|
"ids": self._map_external_ids(resource.show.external_id),
|
||||||
}
|
"seasons": [
|
||||||
|
{
|
||||||
|
"number": resource.season_number,
|
||||||
|
"episodes": [{"number": resource.episode_number}],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
headers={
|
headers={
|
||||||
"Authorization": f"Bearer {user.external_id["simkl"].token.access_token}",
|
"Authorization": f"Bearer {user.external_id["simkl"].token.access_token}",
|
||||||
@ -52,25 +61,24 @@ class Simkl(Service):
|
|||||||
|
|
||||||
category = "movies" if resource.kind == "movie" else "shows"
|
category = "movies" if resource.kind == "movie" else "shows"
|
||||||
|
|
||||||
simkl_status = self._to_simkl_status(status.status)
|
simkl_status = self._map_status(status.status)
|
||||||
if simkl_status is None:
|
if simkl_status is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
resp = requests.post(
|
resp = requests.post(
|
||||||
"https://api.simkl.com/sync/add-to-list",
|
"https://api.simkl.com/sync/add-to-list",
|
||||||
json={
|
json={
|
||||||
category: {
|
category: [
|
||||||
"to": simkl_status,
|
{
|
||||||
"watched_at": watch_date
|
"to": simkl_status,
|
||||||
if status.status == Status.COMPLETED
|
"watched_at": watch_date.isoformat()
|
||||||
else None,
|
if status.status == Status.COMPLETED
|
||||||
"title": resource.name,
|
else None,
|
||||||
"year": resource.year,
|
"title": resource.name,
|
||||||
"ids": {
|
"year": resource.year,
|
||||||
service: id.data_id
|
"ids": self._map_external_ids(resource.external_id),
|
||||||
for service, id in resource.external_id.items()
|
}
|
||||||
},
|
]
|
||||||
}
|
|
||||||
},
|
},
|
||||||
headers={
|
headers={
|
||||||
"Authorization": f"Bearer {user.external_id["simkl"].token.access_token}",
|
"Authorization": f"Bearer {user.external_id["simkl"].token.access_token}",
|
||||||
@ -79,7 +87,7 @@ class Simkl(Service):
|
|||||||
)
|
)
|
||||||
logging.info("Simkl response: %s %s", resp.status_code, resp.text)
|
logging.info("Simkl response: %s %s", resp.status_code, resp.text)
|
||||||
|
|
||||||
def _to_simkl_status(self, status: Status):
|
def _map_status(self, status: Status):
|
||||||
match status:
|
match status:
|
||||||
case Status.COMPLETED:
|
case Status.COMPLETED:
|
||||||
return "completed"
|
return "completed"
|
||||||
@ -94,3 +102,15 @@ class Simkl(Service):
|
|||||||
return None
|
return None
|
||||||
case _:
|
case _:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _map_external_ids(self, ids: dict[str, MetadataID]):
|
||||||
|
return {
|
||||||
|
# "simkl": int(ids["simkl"].data_id) if "simkl" in ids else None,
|
||||||
|
# "mal": int(ids["mal"].data_id) if "mal" in ids else None,
|
||||||
|
# "tvdb": int(ids["tvdb"].data_id) if "tvdb" in ids else None,
|
||||||
|
"imdb": ids["imdb"].data_id if "imdb" in ids else None,
|
||||||
|
# "anidb": int(ids["anidb"].data_id) if "anidb" in ids else None,
|
||||||
|
"tmdb": int(ids["themoviedatabase"].data_id)
|
||||||
|
if "themoviedatabase" in ids
|
||||||
|
else None,
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user