Version 5.1 - All the GraphQL #32

Closed
timw4mail wants to merge 1160 commits from develop into master
3 changed files with 88 additions and 3 deletions
Showing only changes of commit a892d875fd - Show all commits

View File

@ -33,6 +33,8 @@ class ListItem extends AbstractListItem {
private function getAuthHeader() private function getAuthHeader()
{ {
$cache = $this->getContainer()->get('cache');
$cacheItem = $cache->getItem('kitsu-auth-token');
$sessionSegment = $this->getContainer() $sessionSegment = $this->getContainer()
->get('session') ->get('session')
->getSegment(SESSION_SEGMENT); ->getSegment(SESSION_SEGMENT);
@ -43,6 +45,12 @@ class ListItem extends AbstractListItem {
return "bearer {$token}"; return "bearer {$token}";
} }
if ($cacheItem->isHit())
{
$token = $cacheItem->get();
return "bearer {$token}";
}
return FALSE; return FALSE;
} }

View File

@ -223,6 +223,33 @@ class Model {
return $raw; return $raw;
} }
/**
* Find a media item on Kitsu by its associated MAL id
*
* @param string $malId
* @param string $type "anime" or "manga"
* @return string
*/
public function getKitsuIdFromMALId(string $malId, string $type="anime"): string
{
$options = [
'query' => [
'filter' => [
'external_site' => "myanimelist/{$type}",
'external_id' => $malId
],
'fields' => [
'media' => 'id,slug'
],
'include' => 'media'
]
];
$raw = $this->getRequest('mappings', $options);
return $raw['included'][0]['id'];
}
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// ! Anime-specific methods // ! Anime-specific methods
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------

View File

@ -62,13 +62,21 @@ class SyncKitsuWithMal extends BaseCommand {
$this->echoBox("Number of Kitsu list items: {$kitsuCount}"); $this->echoBox("Number of Kitsu list items: {$kitsuCount}");
$data = $this->diffAnimeLists(); $data = $this->diffAnimeLists();
$this->echoBox("Number of items that need to be added to MAL: " . count($data)); $this->echoBox("Number of items that need to be added to MAL: " . count($data['addToMAL']));
if ( ! empty($data['addToMAL'])) if ( ! empty($data['addToMAL']))
{ {
$this->echoBox("Adding missing list items to MAL"); $this->echoBox("Adding missing list items to MAL");
$this->createMALAnimeListItems($data['addToMAL']); $this->createMALAnimeListItems($data['addToMAL']);
} }
$this->echoBox('Number of items that need to be added to Kitsu: ' . count($data['addToKitsu']));
if ( ! empty($data['addToKitsu']))
{
$this->echoBox("Adding missing list items to Kitsu");
$this->createKitusAnimeListItems($data['addToKitsu']);
}
} }
public function getKitsuAnimeList() public function getKitsuAnimeList()
@ -137,7 +145,7 @@ class SyncKitsuWithMal extends BaseCommand {
? $item['times_rewatched'] ? $item['times_rewatched']
: 0, : 0,
// 'notes' => , // 'notes' => ,
'rating' => $item['my_score'], 'rating' => $item['my_score'] / 2,
'updatedAt' => (new \DateTime()) 'updatedAt' => (new \DateTime())
->setTimestamp((int)$item['my_last_updated']) ->setTimestamp((int)$item['my_last_updated'])
->format(\DateTime::W3C), ->format(\DateTime::W3C),
@ -201,10 +209,24 @@ class SyncKitsuWithMal extends BaseCommand {
$malList = $this->formatMALAnimeList(); $malList = $this->formatMALAnimeList();
$itemsToAddToMAL = []; $itemsToAddToMAL = [];
$itemsToAddToKitsu = [];
$malIds = array_column($malList, 'id');
$kitsuMalIds = array_column($kitsuList, 'malId');
$missingMalIds = array_diff($malIds, $kitsuMalIds);
foreach($missingMalIds as $mid)
{
// print_r($malList[$mid]);
$itemsToAddToKitsu[] = array_merge($malList[$mid]['data'], [
'id' => $this->kitsuModel->getKitsuIdFromMALId($mid),
'type' => 'anime'
]);
}
foreach($kitsuList as $kitsuItem) foreach($kitsuList as $kitsuItem)
{ {
if (array_key_exists($kitsuItem['malId'], $malList)) if (in_array($kitsuItem['malId'], $malIds))
{ {
// Eventually, compare the list entries, and determine which // Eventually, compare the list entries, and determine which
// needs to be updated // needs to be updated
@ -230,9 +252,37 @@ class SyncKitsuWithMal extends BaseCommand {
return [ return [
'addToMAL' => $itemsToAddToMAL, 'addToMAL' => $itemsToAddToMAL,
'addToKitsu' => $itemsToAddToKitsu
]; ];
} }
public function createKitusAnimeListItems($itemsToAdd)
{
$requests = [];
foreach($itemsToAdd as $item)
{
$requests[] = $this->kitsuModel->createListItem($item);
}
$promiseArray = (new Client())->requestMulti($requests);
$responses = wait(all($promiseArray));
foreach($responses as $key => $response)
{
$id = $itemsToAdd[$key]['id'];
if ($response->getStatus() === 201)
{
$this->echoBox("Successfully create list item with id: {$id}");
}
else
{
echo $response->getBody();
$this->echoBox("Failed to create list item with id: {$id}");
}
}
}
public function createMALAnimeListItems($itemsToAdd) public function createMALAnimeListItems($itemsToAdd)
{ {
$transformer = new ALT(); $transformer = new ALT();