Use MAL and Anlist IDs to do simultaneous updates and syncing. Resolves #39
All checks were successful
timw4mail/HummingBirdAnimeClient/pipeline/head This commit looks good
All checks were successful
timw4mail/HummingBirdAnimeClient/pipeline/head This commit looks good
This commit is contained in:
parent
c6ce8237ec
commit
cb33329a21
@ -102,8 +102,6 @@ final class Model
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a list item
|
* Create a list item
|
||||||
*
|
|
||||||
* @return Request
|
|
||||||
*/
|
*/
|
||||||
public function createListItem(array $data, string $type = 'anime'): ?Request
|
public function createListItem(array $data, string $type = 'anime'): ?Request
|
||||||
{
|
{
|
||||||
@ -151,29 +149,6 @@ final class Model
|
|||||||
return $this->listItem->createFull($createData);
|
return $this->listItem->createFull($createData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the data for a specific list item, generally for editing
|
|
||||||
*
|
|
||||||
* @param string $malId - The unique identifier of that list item
|
|
||||||
* @param string $type - Them media type (anime/manga)
|
|
||||||
*
|
|
||||||
* @return mixed[]
|
|
||||||
*/
|
|
||||||
public function getListItem(string $malId, string $type): array
|
|
||||||
{
|
|
||||||
$id = $this->getListIdFromMalId($malId, $type);
|
|
||||||
if ($id === NULL)
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = $this->listItem->get($id)['data'];
|
|
||||||
|
|
||||||
return ($data !== NULL)
|
|
||||||
? $data['MediaList']
|
|
||||||
: [];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increase the watch count for the current list item
|
* Increase the watch count for the current list item
|
||||||
*
|
*
|
||||||
@ -206,23 +181,6 @@ final class Model
|
|||||||
return $this->listItem->update($id, $data['data']);
|
return $this->listItem->update($id, $data['data']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove a list item
|
|
||||||
*
|
|
||||||
* @param string $malId - The id of the list item to remove
|
|
||||||
* @param string $type - Them media type (anime/manga)
|
|
||||||
*/
|
|
||||||
// public function deleteListItem(string $malId, string $type): ?Request
|
|
||||||
// {
|
|
||||||
// $id = $this->getListIdFromMalId($malId, $type);
|
|
||||||
// if ($id === NULL)
|
|
||||||
// {
|
|
||||||
// return NULL;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return $this->listItem->delete($id);
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a list item
|
* Remove a list item
|
||||||
*
|
*
|
||||||
@ -285,10 +243,6 @@ final class Model
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the id to update by
|
* Find the id to update by
|
||||||
*
|
|
||||||
* @param array $data
|
|
||||||
* @param string $type
|
|
||||||
* @return string|null
|
|
||||||
*/
|
*/
|
||||||
private function getMediaId (array $data, string $type = 'ANIME'): ?string
|
private function getMediaId (array $data, string $type = 'ANIME'): ?string
|
||||||
{
|
{
|
||||||
@ -297,12 +251,9 @@ final class Model
|
|||||||
return $data['anilist_id'];
|
return $data['anilist_id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($data['mal_id']))
|
return (isset($data['mal_id']))
|
||||||
{
|
? $this->getMediaIdFromMalId($data['mal_id'], mb_strtoupper($type))
|
||||||
return $this->getMediaIdFromMalId($data['mal_id'], mb_strtoupper($type));
|
: NULL;
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,11 +49,6 @@ final class SyncLists extends BaseCommand
|
|||||||
*/
|
*/
|
||||||
private API\Kitsu\Model $kitsuModel;
|
private API\Kitsu\Model $kitsuModel;
|
||||||
|
|
||||||
/**
|
|
||||||
* Does the Kitsu API have valid authentication?
|
|
||||||
*/
|
|
||||||
private bool $isKitsuAuthenticated = FALSE;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sync Kitsu <=> Anilist
|
* Sync Kitsu <=> Anilist
|
||||||
*
|
*
|
||||||
@ -63,7 +58,12 @@ final class SyncLists extends BaseCommand
|
|||||||
*/
|
*/
|
||||||
public function execute(array $args, array $options = []): void
|
public function execute(array $args, array $options = []): void
|
||||||
{
|
{
|
||||||
$this->init();
|
$canRun = $this->init();
|
||||||
|
|
||||||
|
if ( ! $canRun)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
foreach ([MediaType::MANGA, MediaType::ANIME] as $type)
|
foreach ([MediaType::MANGA, MediaType::ANIME] as $type)
|
||||||
{
|
{
|
||||||
@ -86,7 +86,7 @@ final class SyncLists extends BaseCommand
|
|||||||
* @throws ContainerException
|
* @throws ContainerException
|
||||||
* @throws NotFoundException
|
* @throws NotFoundException
|
||||||
*/
|
*/
|
||||||
protected function init(): void
|
protected function init(): bool
|
||||||
{
|
{
|
||||||
$this->setContainer($this->setupContainer());
|
$this->setContainer($this->setupContainer());
|
||||||
$this->setCache($this->container->get('cache'));
|
$this->setCache($this->container->get('cache'));
|
||||||
@ -98,19 +98,21 @@ final class SyncLists extends BaseCommand
|
|||||||
if ( ! $anilistEnabled)
|
if ( ! $anilistEnabled)
|
||||||
{
|
{
|
||||||
$this->echoErrorBox('Anlist API is not enabled. Can not sync.');
|
$this->echoErrorBox('Anlist API is not enabled. Can not sync.');
|
||||||
|
return false;
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Authentication is required to update Kitsu
|
// Authentication is required to update Kitsu
|
||||||
$this->isKitsuAuthenticated = $this->container->get('auth')->isAuthenticated();
|
$isKitsuAuthenticated = $this->container->get('auth')->isAuthenticated();
|
||||||
if ( ! $this->isKitsuAuthenticated)
|
if ( !$isKitsuAuthenticated)
|
||||||
{
|
{
|
||||||
$this->echoWarningBox('Kitsu is not authenticated. Kitsu list can not be updated.');
|
$this->echoErrorBox('Kitsu is not authenticated. Kitsu list can not be updated.');
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->anilistModel = $this->container->get('anilist-model');
|
$this->anilistModel = $this->container->get('anilist-model');
|
||||||
$this->kitsuModel = $this->container->get('kitsu-model');
|
$this->kitsuModel = $this->container->get('kitsu-model');
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -118,7 +120,10 @@ final class SyncLists extends BaseCommand
|
|||||||
*/
|
*/
|
||||||
protected function fetchCount(string $type): void
|
protected function fetchCount(string $type): void
|
||||||
{
|
{
|
||||||
$this->echo('Fetching List Counts');
|
// This pulls too much data from Anilist, so skipping this step should result
|
||||||
|
// in fewer instances of API throttling
|
||||||
|
|
||||||
|
/* $this->echo('Fetching List Counts');
|
||||||
$progress = new Widgets\ProgressBar($this->getConsole(), 2, 50, FALSE);
|
$progress = new Widgets\ProgressBar($this->getConsole(), 2, 50, FALSE);
|
||||||
|
|
||||||
$displayLines = [];
|
$displayLines = [];
|
||||||
@ -133,7 +138,7 @@ final class SyncLists extends BaseCommand
|
|||||||
|
|
||||||
$this->clearLine();
|
$this->clearLine();
|
||||||
|
|
||||||
$this->echoBox($displayLines);
|
$this->echoBox($displayLines); */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -143,7 +148,7 @@ final class SyncLists extends BaseCommand
|
|||||||
*/
|
*/
|
||||||
protected function fetch(string $type): array
|
protected function fetch(string $type): array
|
||||||
{
|
{
|
||||||
$this->echo('Fetching List Data');
|
$this->echo("Fetching $type List Data");
|
||||||
$progress = new Widgets\ProgressBar($this->getConsole(), 2, 50, FALSE);
|
$progress = new Widgets\ProgressBar($this->getConsole(), 2, 50, FALSE);
|
||||||
|
|
||||||
$anilist = $this->fetchAnilist($type);
|
$anilist = $this->fetchAnilist($type);
|
||||||
@ -217,25 +222,18 @@ final class SyncLists extends BaseCommand
|
|||||||
$this->updateAnilistListItems($data['updateAnilist'], SyncAction::UPDATE, $type);
|
$this->updateAnilistListItems($data['updateAnilist'], SyncAction::UPDATE, $type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->isKitsuAuthenticated)
|
if ( ! empty($data['addToKitsu']))
|
||||||
{
|
{
|
||||||
if ( ! empty($data['addToKitsu']))
|
$count = is_countable($data['addToKitsu']) ? count($data['addToKitsu']) : 0;
|
||||||
{
|
$this->echoBox("Adding {$count} missing {$type} list items to Kitsu");
|
||||||
$count = is_countable($data['addToKitsu']) ? count($data['addToKitsu']) : 0;
|
$this->updateKitsuListItems($data['addToKitsu'], SyncAction::CREATE, $type);
|
||||||
$this->echoBox("Adding {$count} missing {$type} list items to Kitsu");
|
|
||||||
$this->updateKitsuListItems($data['addToKitsu'], SyncAction::CREATE, $type);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! empty($data['updateKitsu']))
|
|
||||||
{
|
|
||||||
$count = is_countable($data['updateKitsu']) ? count($data['updateKitsu']) : 0;
|
|
||||||
$this->echoBox("Updating {$count} outdated Kitsu {$type} list items");
|
|
||||||
$this->updateKitsuListItems($data['updateKitsu'], SyncAction::UPDATE, $type);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if ( ! empty($data['updateKitsu']))
|
||||||
{
|
{
|
||||||
$this->echoErrorBox('Kitsu is not authenticated, so lists can not be updated');
|
$count = is_countable($data['updateKitsu']) ? count($data['updateKitsu']) : 0;
|
||||||
|
$this->echoBox("Updating {$count} outdated Kitsu {$type} list items");
|
||||||
|
$this->updateKitsuListItems($data['updateKitsu'], SyncAction::UPDATE, $type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -382,6 +382,11 @@ final class Kitsu
|
|||||||
'link' => TRUE,
|
'link' => TRUE,
|
||||||
'image' => 'streaming-logos/hulu.svg',
|
'image' => 'streaming-logos/hulu.svg',
|
||||||
],
|
],
|
||||||
|
'netflix.com' => [
|
||||||
|
'name' => 'Netflix',
|
||||||
|
'link' => FALSE,
|
||||||
|
'image' => 'streaming-logos/netflix.svg',
|
||||||
|
],
|
||||||
'tubitv.com' => [
|
'tubitv.com' => [
|
||||||
'name' => 'TubiTV',
|
'name' => 'TubiTV',
|
||||||
'link' => TRUE,
|
'link' => TRUE,
|
||||||
|
@ -95,7 +95,7 @@ trait MediaTrait
|
|||||||
|
|
||||||
$requester->addRequest($kitsuRequest, 'kitsu');
|
$requester->addRequest($kitsuRequest, 'kitsu');
|
||||||
|
|
||||||
if ($this->anilistEnabled && (isset($data['anilist_id']) || isset($data['mal_id'])))
|
if ($this->anilistEnabled)
|
||||||
{
|
{
|
||||||
// If can't map MAL id, this will be null
|
// If can't map MAL id, this will be null
|
||||||
$maybeRequest = $this->anilistModel->createListItem($data, strtoupper($this->type));
|
$maybeRequest = $this->anilistModel->createListItem($data, strtoupper($this->type));
|
||||||
@ -121,7 +121,7 @@ trait MediaTrait
|
|||||||
$requester = new ParallelAPIRequest();
|
$requester = new ParallelAPIRequest();
|
||||||
$requester->addRequest($this->kitsuModel->incrementListItem($data), 'kitsu');
|
$requester->addRequest($this->kitsuModel->incrementListItem($data), 'kitsu');
|
||||||
|
|
||||||
if ($this->anilistEnabled && (isset($data['anilist_id']) || isset($data['mal_id'])))
|
if ($this->anilistEnabled)
|
||||||
{
|
{
|
||||||
// If can't map MAL id, this will be null
|
// If can't map MAL id, this will be null
|
||||||
$maybeRequest = $this->anilistModel->incrementListItem($data, strtoupper($this->type));
|
$maybeRequest = $this->anilistModel->incrementListItem($data, strtoupper($this->type));
|
||||||
@ -153,7 +153,7 @@ trait MediaTrait
|
|||||||
$requester = new ParallelAPIRequest();
|
$requester = new ParallelAPIRequest();
|
||||||
$requester->addRequest($this->kitsuModel->updateListItem($data), 'kitsu');
|
$requester->addRequest($this->kitsuModel->updateListItem($data), 'kitsu');
|
||||||
|
|
||||||
if ($this->anilistEnabled && (isset($data['anilist_id']) || isset($data['mal_id'])))
|
if ($this->anilistEnabled)
|
||||||
{
|
{
|
||||||
// If can't map MAL id, this will be null
|
// If can't map MAL id, this will be null
|
||||||
$maybeRequest = $this->anilistModel->updateListItem($data, strtoupper($this->type));
|
$maybeRequest = $this->anilistModel->updateListItem($data, strtoupper($this->type));
|
||||||
@ -184,7 +184,7 @@ trait MediaTrait
|
|||||||
$requester = new ParallelAPIRequest();
|
$requester = new ParallelAPIRequest();
|
||||||
$requester->addRequest($this->kitsuModel->deleteItem($data), 'kitsu');
|
$requester->addRequest($this->kitsuModel->deleteItem($data), 'kitsu');
|
||||||
|
|
||||||
if ($this->anilistEnabled && (isset($data['anilist_id']) || isset($data['mal_id'])))
|
if ($this->anilistEnabled)
|
||||||
{
|
{
|
||||||
// If can't map MAL id, this will be null
|
// If can't map MAL id, this will be null
|
||||||
$maybeRequest = $this->anilistModel->deleteItem($data, strtoupper($this->type));
|
$maybeRequest = $this->anilistModel->deleteItem($data, strtoupper($this->type));
|
||||||
|
Loading…
Reference in New Issue
Block a user