Version 5.1 - All the GraphQL #32
@ -22,9 +22,7 @@ use Aura\Session\SessionFactory;
|
||||
use Aviat\AnimeClient\API\{
|
||||
Anilist,
|
||||
Kitsu,
|
||||
MAL,
|
||||
Kitsu\KitsuRequestBuilder,
|
||||
MAL\MALRequestBuilder
|
||||
Kitsu\KitsuRequestBuilder
|
||||
};
|
||||
use Aviat\AnimeClient\Model;
|
||||
use Aviat\Banker\Pool;
|
||||
@ -50,12 +48,9 @@ return function (array $configArray = []) {
|
||||
$anilistRequestLogger->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/anilist_request.log', Logger::NOTICE));
|
||||
$kitsuRequestLogger = new Logger('kitsu-request');
|
||||
$kitsuRequestLogger->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/kitsu_request.log', Logger::NOTICE));
|
||||
$malRequestLogger = new Logger('mal-request');
|
||||
$malRequestLogger->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/mal_request.log', Logger::NOTICE));
|
||||
$container->setLogger($appLogger);
|
||||
$container->setLogger($anilistRequestLogger, 'anilist-request');
|
||||
$container->setLogger($kitsuRequestLogger, 'kitsu-request');
|
||||
$container->setLogger($malRequestLogger, 'mal-request');
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Injected Objects
|
||||
@ -131,19 +126,6 @@ return function (array $configArray = []) {
|
||||
$model->setCache($cache);
|
||||
return $model;
|
||||
});
|
||||
$container->set('mal-model', function($container) {
|
||||
$requestBuilder = new MALRequestBuilder();
|
||||
$requestBuilder->setLogger($container->getLogger('mal-request'));
|
||||
|
||||
$listItem = new MAL\ListItem();
|
||||
$listItem->setContainer($container);
|
||||
$listItem->setRequestBuilder($requestBuilder);
|
||||
|
||||
$model = new MAL\Model($listItem);
|
||||
$model->setContainer($container);
|
||||
$model->setRequestBuilder($requestBuilder);
|
||||
return $model;
|
||||
});
|
||||
$container->set('anilist-model', function($container) {
|
||||
$requestBuilder = new Anilist\AnilistRequestBuilder();
|
||||
$requestBuilder->setLogger($container->getLogger('anilist-request'));
|
||||
|
@ -1,30 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Enum\AnimeWatchingStatus;
|
||||
|
||||
use Aviat\Ion\Enum;
|
||||
|
||||
/**
|
||||
* Possible values for watching status for the current anime
|
||||
*/
|
||||
final class MAL extends Enum {
|
||||
const WATCHING = 1;
|
||||
const COMPLETED = 2;
|
||||
const ON_HOLD = 3;
|
||||
const DROPPED = 4;
|
||||
const PLAN_TO_WATCH = 6;
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Enum\MangaReadingStatus;
|
||||
|
||||
use Aviat\Ion\Enum;
|
||||
|
||||
/**
|
||||
* Possible values for watching status for the current anime
|
||||
*/
|
||||
final class MAL extends Enum {
|
||||
const READING = 'reading';
|
||||
const COMPLETED = 'completed';
|
||||
const ON_HOLD = 'onhold';
|
||||
const DROPPED = 'dropped';
|
||||
const PLAN_TO_READ = 'plantoread';
|
||||
}
|
@ -33,7 +33,7 @@ use Aviat\Ion\JsonException;
|
||||
trait KitsuTrait {
|
||||
|
||||
/**
|
||||
* The request builder for the MAL API
|
||||
* The request builder for the Kitsu API
|
||||
* @var KitsuRequestBuilder
|
||||
*/
|
||||
protected $requestBuilder;
|
||||
|
@ -1,82 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API;
|
||||
|
||||
use Aviat\AnimeClient\API\Enum\{
|
||||
AnimeWatchingStatus\Kitsu as KAWS,
|
||||
MangaReadingStatus\Kitsu as KMRS
|
||||
};
|
||||
use Aviat\AnimeClient\API\Enum\{
|
||||
AnimeWatchingStatus\MAL as AnimeWatchingStatus,
|
||||
MangaReadingStatus\MAL as MangaReadingStatus
|
||||
};
|
||||
|
||||
/**
|
||||
* Constants and mappings for the My Anime List API
|
||||
*/
|
||||
final class MAL {
|
||||
const AUTH_URL = 'https://myanimelist.net/api/account/verify_credentials.xml';
|
||||
const BASE_URL = 'https://myanimelist.net/api/';
|
||||
|
||||
const KITSU_MAL_WATCHING_STATUS_MAP = [
|
||||
KAWS::WATCHING => AnimeWatchingStatus::WATCHING,
|
||||
KAWS::COMPLETED => AnimeWatchingStatus::COMPLETED,
|
||||
KAWS::ON_HOLD => AnimeWatchingStatus::ON_HOLD,
|
||||
KAWS::DROPPED => AnimeWatchingStatus::DROPPED,
|
||||
KAWS::PLAN_TO_WATCH => AnimeWatchingStatus::PLAN_TO_WATCH
|
||||
];
|
||||
|
||||
const MAL_KITSU_WATCHING_STATUS_MAP = [
|
||||
1 => KAWS::WATCHING,
|
||||
2 => KAWS::COMPLETED,
|
||||
3 => KAWS::ON_HOLD,
|
||||
4 => KAWS::DROPPED,
|
||||
6 => KAWS::PLAN_TO_WATCH
|
||||
];
|
||||
|
||||
public static function getIdToWatchingStatusMap()
|
||||
{
|
||||
return [
|
||||
1 => AnimeWatchingStatus::WATCHING,
|
||||
2 => AnimeWatchingStatus::COMPLETED,
|
||||
3 => AnimeWatchingStatus::ON_HOLD,
|
||||
4 => AnimeWatchingStatus::DROPPED,
|
||||
6 => AnimeWatchingStatus::PLAN_TO_WATCH,
|
||||
'watching' => AnimeWatchingStatus::WATCHING,
|
||||
'completed' => AnimeWatchingStatus::COMPLETED,
|
||||
'onhold' => AnimeWatchingStatus::ON_HOLD,
|
||||
'dropped' => AnimeWatchingStatus::DROPPED,
|
||||
'plantowatch' => AnimeWatchingStatus::PLAN_TO_WATCH
|
||||
];
|
||||
}
|
||||
|
||||
public static function getIdToReadingStatusMap()
|
||||
{
|
||||
return [
|
||||
1 => MangaReadingStatus::READING,
|
||||
2 => MangaReadingStatus::COMPLETED,
|
||||
3 => MangaReadingStatus::ON_HOLD,
|
||||
4 => MangaReadingStatus::DROPPED,
|
||||
6 => MangaReadingStatus::PLAN_TO_READ,
|
||||
'reading' => MangaReadingStatus::READING,
|
||||
'completed' => MangaReadingStatus::COMPLETED,
|
||||
'onhold' => MangaReadingStatus::ON_HOLD,
|
||||
'dropped' => MangaReadingStatus::DROPPED,
|
||||
'plantoread' => MangaReadingStatus::PLAN_TO_READ
|
||||
];
|
||||
}
|
||||
}
|
@ -1,109 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\MAL;
|
||||
|
||||
use Amp\Artax\{FormBody, Request};
|
||||
use Aviat\AnimeClient\API\{
|
||||
XML
|
||||
};
|
||||
use Aviat\AnimeClient\Types\AbstractType;
|
||||
use Aviat\Ion\Di\ContainerAware;
|
||||
|
||||
/**
|
||||
* CRUD operations for MAL list items
|
||||
*/
|
||||
final class ListItem {
|
||||
use ContainerAware;
|
||||
use MALTrait;
|
||||
|
||||
/**
|
||||
* Create a list item
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $type
|
||||
* @return Request
|
||||
*/
|
||||
public function create(array $data, string $type = 'anime'): Request
|
||||
{
|
||||
$id = $data['id'];
|
||||
$createData = [
|
||||
'id' => $id,
|
||||
'data' => XML::toXML([
|
||||
'entry' => $data['data']
|
||||
])
|
||||
];
|
||||
|
||||
$config = $this->container->get('config');
|
||||
|
||||
return $this->requestBuilder->newRequest('POST', "{$type}list/add/{$id}.xml")
|
||||
->setFormFields($createData)
|
||||
->setBasicAuth($config->get(['mal','username']), $config->get(['mal', 'password']))
|
||||
->getFullRequest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a list item
|
||||
*
|
||||
* @param string $id
|
||||
* @param string $type
|
||||
* @return Request
|
||||
*/
|
||||
public function delete(string $id, string $type = 'anime'): Request
|
||||
{
|
||||
$config = $this->container->get('config');
|
||||
|
||||
return $this->requestBuilder->newRequest('DELETE', "{$type}list/delete/{$id}.xml")
|
||||
->setFormFields([
|
||||
'id' => $id
|
||||
])
|
||||
->setBasicAuth($config->get(['mal','username']), $config->get(['mal', 'password']))
|
||||
->getFullRequest();
|
||||
|
||||
// return $response->getBody() === 'Deleted'
|
||||
}
|
||||
|
||||
public function get(string $id): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a list item
|
||||
*
|
||||
* @param string $id
|
||||
* @param array $data
|
||||
* @param string $type
|
||||
* @return Request
|
||||
*/
|
||||
public function update(string $id, array $data, string $type = 'anime'): Request
|
||||
{
|
||||
$config = $this->container->get('config');
|
||||
|
||||
$xml = XML::toXML(['entry' => $data]);
|
||||
$body = new FormBody();
|
||||
$body->addField('id', $id);
|
||||
$body->addField('data', $xml);
|
||||
|
||||
return $this->requestBuilder->newRequest('POST', "{$type}list/update/{$id}.xml")
|
||||
->setFormFields([
|
||||
'id' => $id,
|
||||
'data' => $xml
|
||||
])
|
||||
->setBasicAuth($config->get(['mal','username']), $config->get(['mal', 'password']))
|
||||
->getFullRequest();
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\MAL;
|
||||
|
||||
use const Aviat\AnimeClient\USER_AGENT;
|
||||
|
||||
use Aviat\AnimeClient\API\{
|
||||
APIRequestBuilder,
|
||||
MAL as M
|
||||
};
|
||||
|
||||
final class MALRequestBuilder extends APIRequestBuilder {
|
||||
|
||||
/**
|
||||
* The base url for api requests
|
||||
* @var string $base_url
|
||||
*/
|
||||
protected $baseUrl = M::BASE_URL;
|
||||
|
||||
/**
|
||||
* HTTP headers to send with every request
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $defaultHeaders = [
|
||||
'Accept' => 'text/xml',
|
||||
'Accept-Encoding' => 'gzip',
|
||||
'Content-type' => 'application/x-www-form-urlencoded',
|
||||
'User-Agent' => USER_AGENT,
|
||||
];
|
||||
|
||||
/**
|
||||
* Valid HTTP request methos
|
||||
* @var array
|
||||
*/
|
||||
protected $validMethods = ['GET', 'POST', 'DELETE'];
|
||||
}
|
@ -1,191 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\MAL;
|
||||
|
||||
use function Amp\Promise\wait;
|
||||
|
||||
use Aviat\AnimeClient\API\{
|
||||
HummingbirdClient,
|
||||
MAL as M,
|
||||
XML
|
||||
};
|
||||
|
||||
trait MALTrait {
|
||||
|
||||
/**
|
||||
* The request builder for the MAL API
|
||||
* @var MALRequestBuilder
|
||||
*/
|
||||
protected $requestBuilder;
|
||||
|
||||
/**
|
||||
* The base url for api requests
|
||||
* @var string $base_url
|
||||
*/
|
||||
protected $baseUrl = M::BASE_URL;
|
||||
|
||||
/**
|
||||
* HTTP headers to send with every request
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $defaultHeaders = [
|
||||
'Accept' => 'text/xml',
|
||||
'Accept-Encoding' => 'gzip',
|
||||
'Content-type' => 'application/x-www-form-urlencoded',
|
||||
'User-Agent' => "Tim's Anime Client/4.0"
|
||||
];
|
||||
|
||||
/**
|
||||
* Set the request builder object
|
||||
*
|
||||
* @param MALRequestBuilder $requestBuilder
|
||||
* @return self
|
||||
*/
|
||||
public function setRequestBuilder($requestBuilder): self
|
||||
{
|
||||
$this->requestBuilder = $requestBuilder;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a request object
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $url
|
||||
* @param array $options
|
||||
* @return \Amp\Artax\Response
|
||||
*/
|
||||
public function setUpRequest(string $type, string $url, array $options = [])
|
||||
{
|
||||
$config = $this->container->get('config');
|
||||
|
||||
$request = $this->requestBuilder
|
||||
->newRequest($type, $url)
|
||||
->setBasicAuth($config->get(['mal','username']), $config->get(['mal','password']));
|
||||
|
||||
if (array_key_exists('query', $options))
|
||||
{
|
||||
$request = $request->setQuery($options['query']);
|
||||
}
|
||||
|
||||
if (array_key_exists('body', $options))
|
||||
{
|
||||
$request = $request->setBody($options['body']);
|
||||
}
|
||||
|
||||
return $request->getFullRequest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a request
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $url
|
||||
* @param array $options
|
||||
* @return \Amp\Artax\Response
|
||||
*/
|
||||
private function getResponse(string $type, string $url, array $options = [])
|
||||
{
|
||||
$logger = NULL;
|
||||
if ($this->getContainer())
|
||||
{
|
||||
$logger = $this->container->getLogger('mal-request');
|
||||
}
|
||||
|
||||
$request = $this->setUpRequest($type, $url, $options);
|
||||
$response = wait((new HummingbirdClient)->request($request));
|
||||
|
||||
$logger->debug('MAL api response', [
|
||||
'status' => $response->getStatus(),
|
||||
'reason' => $response->getReason(),
|
||||
'body' => $response->getBody(),
|
||||
'headers' => $response->getHeaders(),
|
||||
'requestHeaders' => $request->getHeaders(),
|
||||
]);
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a request
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $url
|
||||
* @param array $options
|
||||
* @return array
|
||||
*/
|
||||
private function request(string $type, string $url, array $options = []): array
|
||||
{
|
||||
$logger = NULL;
|
||||
if ($this->getContainer())
|
||||
{
|
||||
$logger = $this->container->getLogger('mal-request');
|
||||
}
|
||||
|
||||
$response = $this->getResponse($type, $url, $options);
|
||||
|
||||
if ((int) $response->getStatus() > 299 OR (int) $response->getStatus() < 200)
|
||||
{
|
||||
if ($logger)
|
||||
{
|
||||
$logger->warning('Non 200 response for api call', (array)$response->getBody());
|
||||
}
|
||||
}
|
||||
|
||||
return XML::toArray(wait($response->getBody()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove some boilerplate for get requests
|
||||
*
|
||||
* @param mixed ...$args
|
||||
* @return array
|
||||
*/
|
||||
protected function getRequest(...$args): array
|
||||
{
|
||||
return $this->request('GET', ...$args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove some boilerplate for post requests
|
||||
*
|
||||
* @param mixed ...$args
|
||||
* @return array
|
||||
*/
|
||||
protected function postRequest(...$args): array
|
||||
{
|
||||
$logger = NULL;
|
||||
if ($this->getContainer())
|
||||
{
|
||||
$logger = $this->container->getLogger('mal-request');
|
||||
}
|
||||
|
||||
$response = $this->getResponse('POST', ...$args);
|
||||
$validResponseCodes = [200, 201];
|
||||
|
||||
if ( ! \in_array((int) $response->getStatus(), $validResponseCodes, TRUE))
|
||||
{
|
||||
if ($logger)
|
||||
{
|
||||
$logger->warning('Non 201 response for POST api call', (array)$response->getBody());
|
||||
}
|
||||
}
|
||||
|
||||
return XML::toArray($response->getBody());
|
||||
}
|
||||
}
|
@ -1,182 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\MAL;
|
||||
|
||||
use Amp\Artax\Request;
|
||||
use Aviat\AnimeClient\API\MAL\{
|
||||
ListItem,
|
||||
Transformer\AnimeListTransformer,
|
||||
Transformer\MangaListTransformer
|
||||
};
|
||||
use Aviat\AnimeClient\API\XML;
|
||||
use Aviat\AnimeClient\API\Mapping\{AnimeWatchingStatus, MangaReadingStatus};
|
||||
use Aviat\AnimeClient\Types\{Anime, FormItem};
|
||||
use Aviat\Ion\Di\ContainerAware;
|
||||
|
||||
/**
|
||||
* MyAnimeList API Model
|
||||
*/
|
||||
final class Model {
|
||||
use ContainerAware;
|
||||
use MALTrait;
|
||||
|
||||
/**
|
||||
* @var AnimeListTransformer
|
||||
*/
|
||||
protected $animeListTransformer;
|
||||
|
||||
/**
|
||||
* @var MangaListTransformer
|
||||
*/
|
||||
protected $mangaListTransformer;
|
||||
|
||||
/**
|
||||
* @var ListItem
|
||||
*/
|
||||
protected $listItem;
|
||||
|
||||
/**
|
||||
* MAL Model constructor.
|
||||
*
|
||||
* @param ListItem $listItem
|
||||
*/
|
||||
public function __construct(ListItem $listItem)
|
||||
{
|
||||
$this->animeListTransformer = new AnimeListTransformer();
|
||||
$this->mangaListTransformer = new MangaListTransformer();
|
||||
$this->listItem = $listItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a list item on MAL
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $type "anime" or "manga"
|
||||
* @return Request
|
||||
*/
|
||||
public function createFullListItem(array $data, string $type = 'anime'): Request
|
||||
{
|
||||
return $this->listItem->create($data, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a list item on MAL from a Kitsu list item
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $type "anime" or "manga"
|
||||
* @return Request
|
||||
*/
|
||||
public function createListItem(array $data, string $type = 'anime'): Request
|
||||
{
|
||||
$createData = [];
|
||||
|
||||
if ($type === 'anime')
|
||||
{
|
||||
$createData = [
|
||||
'id' => $data['id'],
|
||||
'data' => [
|
||||
'status' => AnimeWatchingStatus::KITSU_TO_MAL[$data['status']]
|
||||
]
|
||||
];
|
||||
}
|
||||
elseif ($type === 'manga')
|
||||
{
|
||||
$createData = [
|
||||
'id' => $data['id'],
|
||||
'data' => [
|
||||
'status' => MangaReadingStatus::KITSU_TO_MAL[$data['status']]
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
return $this->listItem->create($createData, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get list info
|
||||
*
|
||||
* @param string $type "anime" or "manga"
|
||||
* @return array
|
||||
*/
|
||||
public function getList(string $type = "anime"): array
|
||||
{
|
||||
$config = $this->container->get('config');
|
||||
$userName = $config->get(['mal', 'username']);
|
||||
$list = $this->getRequest('https://myanimelist.net/malappinfo.php', [
|
||||
'headers' => [
|
||||
'Accept' => 'text/xml'
|
||||
],
|
||||
'query' => [
|
||||
'u' => $userName,
|
||||
'status' => 'all',
|
||||
'type' => $type
|
||||
]
|
||||
]);
|
||||
|
||||
return array_key_exists($type, $list['myanimelist'])
|
||||
? $list['myanimelist'][$type]
|
||||
: [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a list item
|
||||
*
|
||||
* Does not apply to MAL
|
||||
*
|
||||
* @param string $listId
|
||||
* @return array
|
||||
*/
|
||||
public function getListItem(string $listId): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a list item
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $type "anime" or "manga"
|
||||
* @return Request
|
||||
*/
|
||||
public function updateListItem($data, string $type = 'anime'): Request
|
||||
{
|
||||
$updateData = [];
|
||||
|
||||
if ($type === 'anime')
|
||||
{
|
||||
$updateData = $this->animeListTransformer->untransform($data);
|
||||
}
|
||||
else if ($type === 'manga')
|
||||
{
|
||||
$updateData = $this->mangaListTransformer->untransform($data);
|
||||
}
|
||||
|
||||
return $this->listItem->update($updateData['id'], $updateData['data'], $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a list item
|
||||
*
|
||||
* @param string $id
|
||||
* @param string $type "anime" or "manga"
|
||||
* @return Request
|
||||
*/
|
||||
public function deleteListItem(string $id, string $type = 'anime'): Request
|
||||
{
|
||||
return $this->listItem->delete($id, $type);
|
||||
}
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\MAL\Transformer;
|
||||
|
||||
use Aviat\AnimeClient\API\Mapping\AnimeWatchingStatus;
|
||||
use Aviat\AnimeClient\Types\AnimeFormItem;
|
||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
|
||||
/**
|
||||
* Transformer for updating MAL List
|
||||
*/
|
||||
final class AnimeListTransformer extends AbstractTransformer {
|
||||
/**
|
||||
* Identity transformation
|
||||
*
|
||||
* @param array $item
|
||||
* @return array
|
||||
*/
|
||||
public function transform($item)
|
||||
{
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform Kitsu episode data to MAL episode data
|
||||
*
|
||||
* @param mixed $item
|
||||
* @return array
|
||||
*/
|
||||
public function untransform($item): array
|
||||
{
|
||||
$map = [
|
||||
'id' => $item['mal_id'],
|
||||
'data' => [],
|
||||
];
|
||||
|
||||
foreach($item['data'] as $key => $value)
|
||||
{
|
||||
switch($key)
|
||||
{
|
||||
case 'progress':
|
||||
$map['data']['episode'] = $value;
|
||||
break;
|
||||
|
||||
case 'notes':
|
||||
$map['data']['comments'] = $value;
|
||||
break;
|
||||
|
||||
case 'rating':
|
||||
$map['data']['score'] = $value * 2;
|
||||
break;
|
||||
|
||||
case 'reconsuming':
|
||||
$map['data']['enable_rewatching'] = (bool) $value;
|
||||
break;
|
||||
|
||||
case 'reconsumeCount':
|
||||
$map['data']['times_rewatched'] = $value;
|
||||
break;
|
||||
|
||||
case 'status':
|
||||
$map['data']['status'] = AnimeWatchingStatus::KITSU_TO_MAL[$value];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $map;
|
||||
}
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\MAL\Transformer;
|
||||
|
||||
use Aviat\AnimeClient\API\Mapping\MangaReadingStatus;
|
||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
|
||||
/**
|
||||
* Transformer for updating MAL List
|
||||
*/
|
||||
final class MangaListTransformer extends AbstractTransformer {
|
||||
/**
|
||||
* Identity transformation
|
||||
*
|
||||
* @param array $item
|
||||
* @return array
|
||||
*/
|
||||
public function transform($item)
|
||||
{
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform Kitsu data to MAL data
|
||||
*
|
||||
* @param mixed $item
|
||||
* @return
|
||||
*/
|
||||
public function untransform($item): array
|
||||
{
|
||||
$map = [
|
||||
'id' => $item['mal_id'] ?? $item['malId'],
|
||||
'data' => []
|
||||
];
|
||||
|
||||
foreach($item['data'] as $key => $value)
|
||||
{
|
||||
switch($key)
|
||||
{
|
||||
case 'progress':
|
||||
$map['data']['chapter'] = $value;
|
||||
break;
|
||||
|
||||
case 'notes':
|
||||
$map['data']['comments'] = $value;
|
||||
break;
|
||||
|
||||
case 'rating':
|
||||
$map['data']['score'] = $value * 2;
|
||||
break;
|
||||
|
||||
case 'reconsuming':
|
||||
$map['data']['enable_rereading'] = (bool) $value;
|
||||
break;
|
||||
|
||||
case 'reconsumeCount':
|
||||
$map['data']['times_reread'] = $value;
|
||||
break;
|
||||
|
||||
case 'status':
|
||||
$map['data']['status'] = MangaReadingStatus::KITSU_TO_MAL[$value];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $map;
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@
|
||||
|
||||
namespace Aviat\AnimeClient\API\Mapping;
|
||||
|
||||
use Aviat\AnimeClient\API\Enum\AnimeWatchingStatus\{Anilist, Kitsu, MAL, Route, Title};
|
||||
use Aviat\AnimeClient\API\Enum\AnimeWatchingStatus\{Anilist, Kitsu, Route, Title};
|
||||
use Aviat\Ion\Enum;
|
||||
|
||||
/**
|
||||
@ -40,14 +40,6 @@ final class AnimeWatchingStatus extends Enum {
|
||||
Kitsu::DROPPED => Anilist::DROPPED
|
||||
];
|
||||
|
||||
const KITSU_TO_MAL = [
|
||||
Kitsu::WATCHING => MAL::WATCHING,
|
||||
Kitsu::PLAN_TO_WATCH => MAL::PLAN_TO_WATCH,
|
||||
Kitsu::COMPLETED => MAL::COMPLETED,
|
||||
Kitsu::ON_HOLD => MAL::ON_HOLD,
|
||||
Kitsu::DROPPED => MAL::DROPPED
|
||||
];
|
||||
|
||||
const KITSU_TO_TITLE = [
|
||||
Kitsu::WATCHING => Title::WATCHING,
|
||||
Kitsu::PLAN_TO_WATCH => Title::PLAN_TO_WATCH,
|
||||
@ -56,14 +48,6 @@ final class AnimeWatchingStatus extends Enum {
|
||||
Kitsu::COMPLETED => Title::COMPLETED
|
||||
];
|
||||
|
||||
const MAL_TO_KITSU = [
|
||||
MAL::WATCHING => Kitsu::WATCHING,
|
||||
MAL::PLAN_TO_WATCH => Kitsu::PLAN_TO_WATCH,
|
||||
MAL::COMPLETED => Kitsu::COMPLETED,
|
||||
MAL::ON_HOLD => Kitsu::ON_HOLD,
|
||||
MAL::DROPPED => Kitsu::DROPPED
|
||||
];
|
||||
|
||||
const ROUTE_TO_KITSU = [
|
||||
Route::WATCHING => Kitsu::WATCHING,
|
||||
Route::PLAN_TO_WATCH => Kitsu::PLAN_TO_WATCH,
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
namespace Aviat\AnimeClient\API\Mapping;
|
||||
|
||||
use Aviat\AnimeClient\API\Enum\MangaReadingStatus\{Anilist, Kitsu, MAL, Title, Route};
|
||||
use Aviat\AnimeClient\API\Enum\MangaReadingStatus\{Anilist, Kitsu, Title, Route};
|
||||
use Aviat\Ion\Enum;
|
||||
|
||||
/**
|
||||
@ -40,28 +40,6 @@ final class MangaReadingStatus extends Enum {
|
||||
Kitsu::DROPPED => Anilist::DROPPED
|
||||
];
|
||||
|
||||
|
||||
const KITSU_TO_MAL = [
|
||||
Kitsu::READING => MAL::READING,
|
||||
Kitsu::PLAN_TO_READ => MAL::PLAN_TO_READ,
|
||||
Kitsu::COMPLETED => MAL::COMPLETED,
|
||||
Kitsu::ON_HOLD => MAL::ON_HOLD,
|
||||
Kitsu::DROPPED => MAL::DROPPED
|
||||
];
|
||||
|
||||
const MAL_TO_KITSU = [
|
||||
'1' => Kitsu::READING,
|
||||
'2' => Kitsu::COMPLETED,
|
||||
'3' => Kitsu::ON_HOLD,
|
||||
'4' => Kitsu::DROPPED,
|
||||
'6' => Kitsu::PLAN_TO_READ,
|
||||
MAL::READING => Kitsu::READING,
|
||||
MAL::COMPLETED => Kitsu::COMPLETED,
|
||||
MAL::ON_HOLD => Kitsu::ON_HOLD,
|
||||
MAL::DROPPED => Kitsu::DROPPED,
|
||||
MAL::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
|
||||
];
|
||||
|
||||
const KITSU_TO_TITLE = [
|
||||
Kitsu::READING => Title::READING,
|
||||
Kitsu::PLAN_TO_READ => Title::PLAN_TO_READ,
|
||||
|
@ -21,9 +21,8 @@ use function Aviat\AnimeClient\loadToml;
|
||||
use Aura\Session\SessionFactory;
|
||||
use Aviat\AnimeClient\Util;
|
||||
use Aviat\AnimeClient\API\CacheTrait;
|
||||
use Aviat\AnimeClient\API\{Kitsu, MAL};
|
||||
use Aviat\AnimeClient\API\Kitsu;
|
||||
use Aviat\AnimeClient\API\Kitsu\KitsuRequestBuilder;
|
||||
use Aviat\AnimeClient\API\MAL\MALRequestBuilder;
|
||||
use Aviat\Banker\Pool;
|
||||
use Aviat\Ion\Config;
|
||||
use Aviat\Ion\Di\{Container, ContainerAware};
|
||||
@ -86,11 +85,8 @@ class BaseCommand extends Command {
|
||||
$app_logger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/app-cli.log', Logger::NOTICE));
|
||||
$kitsu_request_logger = new Logger('kitsu-request');
|
||||
$kitsu_request_logger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/kitsu_request-cli.log', Logger::NOTICE));
|
||||
$mal_request_logger = new Logger('mal-request');
|
||||
$mal_request_logger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/mal_request-cli.log', Logger::NOTICE));
|
||||
$container->setLogger($app_logger);
|
||||
$container->setLogger($kitsu_request_logger, 'kitsu-request');
|
||||
$container->setLogger($mal_request_logger, 'mal-request');
|
||||
|
||||
// Create Config Object
|
||||
$container->set('config', function() use ($config_array) {
|
||||
@ -126,19 +122,6 @@ class BaseCommand extends Command {
|
||||
$model->setCache($cache);
|
||||
return $model;
|
||||
});
|
||||
$container->set('mal-model', function($container) {
|
||||
$requestBuilder = new MALRequestBuilder();
|
||||
$requestBuilder->setLogger($container->getLogger('mal-request'));
|
||||
|
||||
$listItem = new MAL\ListItem();
|
||||
$listItem->setContainer($container);
|
||||
$listItem->setRequestBuilder($requestBuilder);
|
||||
|
||||
$model = new MAL\Model($listItem);
|
||||
$model->setContainer($container);
|
||||
$model->setRequestBuilder($requestBuilder);
|
||||
return $model;
|
||||
});
|
||||
|
||||
$container->set('util', function($container) {
|
||||
return new Util($container);
|
||||
|
@ -19,12 +19,7 @@ namespace Aviat\AnimeClient\Command;
|
||||
use Aviat\AnimeClient\API\{
|
||||
FailedResponseException,
|
||||
JsonAPI,
|
||||
ParallelAPIRequest,
|
||||
Mapping\AnimeWatchingStatus,
|
||||
Mapping\MangaReadingStatus
|
||||
};
|
||||
use Aviat\AnimeClient\API\MAL\Transformer\{
|
||||
AnimeListTransformer as ALT
|
||||
ParallelAPIRequest
|
||||
};
|
||||
use Aviat\Ion\Json;
|
||||
use DateTime;
|
||||
@ -40,12 +35,6 @@ final class SyncLists extends BaseCommand {
|
||||
*/
|
||||
protected $kitsuModel;
|
||||
|
||||
/**
|
||||
* Model for making requests to MAL API
|
||||
* @var \Aviat\AnimeClient\API\MAL\Model
|
||||
*/
|
||||
protected $malModel;
|
||||
|
||||
/**
|
||||
* Run the Kitsu <=> MAL sync script
|
||||
*
|
||||
@ -60,7 +49,6 @@ final class SyncLists extends BaseCommand {
|
||||
$this->setContainer($this->setupContainer());
|
||||
$this->setCache($this->container->get('cache'));
|
||||
$this->kitsuModel = $this->container->get('kitsu-model');
|
||||
$this->malModel = $this->container->get('mal-model');
|
||||
|
||||
$this->sync('anime');
|
||||
$this->sync('manga');
|
||||
@ -78,7 +66,7 @@ final class SyncLists extends BaseCommand {
|
||||
|
||||
// Do a little check to make sure you don't have immediate issues
|
||||
// if you have 0 or 1 items in a list on MAL.
|
||||
$malList = $this->malModel->getList($type);
|
||||
/* $malList = $this->malModel->getList($type);
|
||||
$malCount = 0;
|
||||
if ( ! empty($malList))
|
||||
{
|
||||
@ -86,7 +74,7 @@ final class SyncLists extends BaseCommand {
|
||||
? $malList
|
||||
: [$malList]
|
||||
);
|
||||
}
|
||||
} */
|
||||
|
||||
$kitsuCount = 0;
|
||||
try
|
||||
@ -99,12 +87,12 @@ final class SyncLists extends BaseCommand {
|
||||
}
|
||||
|
||||
|
||||
$this->echoBox("Number of MAL {$type} list items: {$malCount}");
|
||||
// $this->echoBox("Number of MAL {$type} list items: {$malCount}");
|
||||
$this->echoBox("Number of Kitsu {$type} list items: {$kitsuCount}");
|
||||
|
||||
$data = $this->diffLists($type);
|
||||
|
||||
if ( ! empty($data['addToMAL']))
|
||||
/* if ( ! empty($data['addToMAL']))
|
||||
{
|
||||
$count = count($data['addToMAL']);
|
||||
$this->echoBox("Adding {$count} missing {$type} list items to MAL");
|
||||
@ -116,7 +104,7 @@ final class SyncLists extends BaseCommand {
|
||||
$count = count($data['updateMAL']);
|
||||
$this->echoBox("Updating {$count} outdated MAL {$type} list items");
|
||||
$this->updateMALListItems($data['updateMAL'], 'update', $type);
|
||||
}
|
||||
} */
|
||||
|
||||
if ( ! empty($data['addToKitsu']))
|
||||
{
|
||||
@ -161,19 +149,19 @@ final class SyncLists extends BaseCommand {
|
||||
* @param string $type
|
||||
* @return array
|
||||
*/
|
||||
protected function formatMALList(string $type): array
|
||||
/* protected function formatMALList(string $type): array
|
||||
{
|
||||
$type = ucfirst($type);
|
||||
$method = "formatMAL{$type}List";
|
||||
return $this->$method();
|
||||
}
|
||||
} */
|
||||
|
||||
/**
|
||||
* Format a MAL anime list for comparison
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function formatMALAnimeList(): array
|
||||
/* protected function formatMALAnimeList(): array
|
||||
{
|
||||
$orig = $this->malModel->getList('anime');
|
||||
$output = [];
|
||||
@ -210,14 +198,14 @@ final class SyncLists extends BaseCommand {
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
} */
|
||||
|
||||
/**
|
||||
* Format a MAL manga list for comparison
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function formatMALMangaList(): array
|
||||
/* protected function formatMALMangaList(): array
|
||||
{
|
||||
$orig = $this->malModel->getList('manga');
|
||||
$output = [];
|
||||
@ -256,7 +244,7 @@ final class SyncLists extends BaseCommand {
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
} */
|
||||
|
||||
/**
|
||||
* Format a kitsu list for the sake of comparision
|
||||
@ -322,26 +310,26 @@ final class SyncLists extends BaseCommand {
|
||||
$kitsuList = $this->formatKitsuList($type);
|
||||
|
||||
// Get MAL list data
|
||||
$malList = $this->formatMALList($type);
|
||||
// $malList = $this->formatMALList($type);
|
||||
|
||||
$itemsToAddToMAL = [];
|
||||
$itemsToAddToKitsu = [];
|
||||
$malUpdateItems = [];
|
||||
$kitsuUpdateItems = [];
|
||||
|
||||
$malIds = array_column($malList, 'id');
|
||||
$kitsuMalIds = array_column($kitsuList, 'malId');
|
||||
$missingMalIds = array_diff($malIds, $kitsuMalIds);
|
||||
// $malIds = array_column($malList, 'id');
|
||||
// $kitsuMalIds = array_column($kitsuList, 'malId');
|
||||
// $missingMalIds = array_diff($malIds, $kitsuMalIds);
|
||||
|
||||
foreach($missingMalIds as $mid)
|
||||
/* foreach($missingMalIds as $mid)
|
||||
{
|
||||
$itemsToAddToKitsu[] = array_merge($malList[$mid]['data'], [
|
||||
'id' => $this->kitsuModel->getKitsuIdFromMALId($mid, $type),
|
||||
'type' => $type
|
||||
]);
|
||||
}
|
||||
} */
|
||||
|
||||
foreach($kitsuList as $kitsuItem)
|
||||
/* foreach($kitsuList as $kitsuItem)
|
||||
{
|
||||
if (\in_array($kitsuItem['malId'], $malIds, TRUE))
|
||||
{
|
||||
@ -371,11 +359,11 @@ final class SyncLists extends BaseCommand {
|
||||
'data' => $kitsuItem['data']
|
||||
];
|
||||
|
||||
}
|
||||
} */
|
||||
|
||||
return [
|
||||
'addToMAL' => $itemsToAddToMAL,
|
||||
'updateMAL' => $malUpdateItems,
|
||||
// 'addToMAL' => $itemsToAddToMAL,
|
||||
// 'updateMAL' => $malUpdateItems,
|
||||
'addToKitsu' => $itemsToAddToKitsu,
|
||||
'updateKitsu' => $kitsuUpdateItems
|
||||
];
|
||||
@ -555,7 +543,7 @@ final class SyncLists extends BaseCommand {
|
||||
* @param string $action
|
||||
* @param string $type
|
||||
*/
|
||||
protected function updateMALListItems(array$itemsToUpdate, string $action = 'update', string $type = 'anime'): void
|
||||
/* protected function updateMALListItems(array$itemsToUpdate, string $action = 'update', string $type = 'anime'): void
|
||||
{
|
||||
$transformer = new ALT();
|
||||
$requester = new ParallelAPIRequest();
|
||||
@ -593,5 +581,5 @@ final class SyncLists extends BaseCommand {
|
||||
$this->echoBox("Failed to {$verb} MAL {$type} list item with id: {$id}");
|
||||
}
|
||||
}
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
@ -24,13 +24,6 @@ use Aviat\Ion\StringWrapper;
|
||||
class API {
|
||||
use StringWrapper;
|
||||
|
||||
/**
|
||||
* Whether to use the MAL api
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $useMALAPI;
|
||||
|
||||
/**
|
||||
* Sort the list entries by their title
|
||||
*
|
||||
|
@ -37,13 +37,6 @@ class Anime extends API {
|
||||
*/
|
||||
protected $kitsuModel;
|
||||
|
||||
/**
|
||||
* Model for making requests to MAL API
|
||||
*
|
||||
* @var \Aviat\AnimeClient\API\MAL\Model
|
||||
*/
|
||||
protected $malModel;
|
||||
|
||||
/**
|
||||
* Anime constructor.
|
||||
*
|
||||
@ -52,10 +45,6 @@ class Anime extends API {
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
$this->kitsuModel = $container->get('kitsu-model');
|
||||
$this->malModel = $container->get('mal-model');
|
||||
|
||||
$config = $container->get('config');
|
||||
$this->useMALAPI = $config->get(['use_mal_api']) === TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -148,19 +137,6 @@ class Anime extends API {
|
||||
public function createLibraryItem(array $data): bool
|
||||
{
|
||||
$requester = new ParallelAPIRequest();
|
||||
|
||||
if ($this->useMALAPI)
|
||||
{
|
||||
$malData = $data;
|
||||
$malId = $this->kitsuModel->getMalIdForAnime($malData['id']);
|
||||
|
||||
if ($malId !== NULL)
|
||||
{
|
||||
$malData['id'] = $malId;
|
||||
$requester->addRequest($this->malModel->createListItem($malData), 'mal');
|
||||
}
|
||||
}
|
||||
|
||||
$requester->addRequest($this->kitsuModel->createListItem($data), 'kitsu');
|
||||
|
||||
$results = $requester->makeRequests();
|
||||
@ -177,12 +153,6 @@ class Anime extends API {
|
||||
public function updateLibraryItem(AnimeFormItem $data): array
|
||||
{
|
||||
$requester = new ParallelAPIRequest();
|
||||
|
||||
if ($this->useMALAPI)
|
||||
{
|
||||
$requester->addRequest($this->malModel->updateListItem($data), 'mal');
|
||||
}
|
||||
|
||||
$requester->addRequest($this->kitsuModel->updateListItem($data), 'kitsu');
|
||||
|
||||
$results = $requester->makeRequests();
|
||||
@ -205,12 +175,6 @@ class Anime extends API {
|
||||
public function deleteLibraryItem(string $id, string $malId = NULL): bool
|
||||
{
|
||||
$requester = new ParallelAPIRequest();
|
||||
|
||||
if ($this->useMALAPI && $malId !== NULL)
|
||||
{
|
||||
$requester->addRequest($this->malModel->deleteListItem($malId), 'MAL');
|
||||
}
|
||||
|
||||
$requester->addRequest($this->kitsuModel->deleteListItem($id), 'kitsu');
|
||||
|
||||
$results = $requester->makeRequests();
|
||||
|
@ -39,12 +39,6 @@ class Manga extends API {
|
||||
*/
|
||||
protected $kitsuModel;
|
||||
|
||||
/**
|
||||
* Model for making requests to MAL API
|
||||
* @var \Aviat\AnimeClient\API\MAL\Model
|
||||
*/
|
||||
protected $malModel;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@ -55,10 +49,6 @@ class Manga extends API {
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
$this->kitsuModel = $container->get('kitsu-model');
|
||||
$this->malModel = $container->get('mal-model');
|
||||
|
||||
$config = $container->get('config');
|
||||
$this->useMALAPI = $config->get(['use_mal_api']) === TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -129,19 +119,6 @@ class Manga extends API {
|
||||
public function createLibraryItem(array $data): bool
|
||||
{
|
||||
$requester = new ParallelAPIRequest();
|
||||
|
||||
if ($this->useMALAPI)
|
||||
{
|
||||
$malData = $data;
|
||||
$malId = $this->kitsuModel->getMalIdForManga($malData['id']);
|
||||
|
||||
if ($malId !== NULL)
|
||||
{
|
||||
$malData['id'] = $malId;
|
||||
$requester->addRequest($this->malModel->createListItem($malData, 'manga'), 'mal');
|
||||
}
|
||||
}
|
||||
|
||||
$requester->addRequest($this->kitsuModel->createListItem($data), 'kitsu');
|
||||
|
||||
$results = $requester->makeRequests();
|
||||
@ -158,12 +135,6 @@ class Manga extends API {
|
||||
public function updateLibraryItem(MangaFormItem $data): array
|
||||
{
|
||||
$requester = new ParallelAPIRequest();
|
||||
|
||||
if ($this->useMALAPI)
|
||||
{
|
||||
$requester->addRequest($this->malModel->updateListItem($data, 'manga'), 'mal');
|
||||
}
|
||||
|
||||
$requester->addRequest($this->kitsuModel->updateListItem($data), 'kitsu');
|
||||
|
||||
$results = $requester->makeRequests();
|
||||
@ -186,12 +157,6 @@ class Manga extends API {
|
||||
public function deleteLibraryItem(string $id, string $malId = NULL): bool
|
||||
{
|
||||
$requester = new ParallelAPIRequest();
|
||||
|
||||
if ($this->useMALAPI && $malId !== NULL)
|
||||
{
|
||||
$requester->addRequest($this->malModel->deleteListItem($malId, 'manga'), 'MAL');
|
||||
}
|
||||
|
||||
$requester->addRequest($this->kitsuModel->deleteListItem($id), 'kitsu');
|
||||
|
||||
$results = $requester->makeRequests();
|
||||
|
@ -1,40 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\Tests\API\MAL;
|
||||
|
||||
use Aviat\AnimeClient\API\MAL\ListItem;
|
||||
use Aviat\AnimeClient\API\MAL\MALRequestBuilder;
|
||||
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
|
||||
use Aviat\Ion\Di\ContainerAware;
|
||||
|
||||
class ListItemTest extends AnimeClientTestCase {
|
||||
|
||||
protected $listItem;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->listItem = new ListItem();
|
||||
$this->listItem->setContainer($this->container);
|
||||
$this->listItem->setRequestBuilder(new MALRequestBuilder());
|
||||
}
|
||||
|
||||
public function testGet()
|
||||
{
|
||||
$this->assertEquals([], $this->listItem->get('foo'));
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\Tests\API\MAL;
|
||||
|
||||
use Aviat\AnimeClient\API\MAL\MALRequestBuilder;
|
||||
use Aviat\AnimeClient\API\MAL\MALTrait;
|
||||
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
|
||||
use Aviat\Ion\Di\ContainerAware;
|
||||
|
||||
class MALTraitTest extends AnimeClientTestCase {
|
||||
|
||||
protected $obj;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->obj = new class {
|
||||
use ContainerAware;
|
||||
use MALTrait;
|
||||
};
|
||||
$this->obj->setContainer($this->container);
|
||||
$this->obj->setRequestBuilder(new MALRequestBuilder());
|
||||
}
|
||||
|
||||
public function testSetupRequest()
|
||||
{
|
||||
$request = $this->obj->setUpRequest('GET', 'foo', [
|
||||
'query' => [
|
||||
'foo' => 'bar'
|
||||
],
|
||||
'body' => ''
|
||||
]);
|
||||
$this->assertInstanceOf(\Amp\Artax\Request::class, $request);
|
||||
$this->assertEquals($request->getUri(), 'https://myanimelist.net/api/foo?foo=bar');
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\Tests\API\MAL;
|
||||
|
||||
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
|
||||
|
||||
class ModelTest extends AnimeClientTestCase {
|
||||
|
||||
protected $model;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->model = $this->container->get('mal-model');
|
||||
}
|
||||
|
||||
public function testGetListItem()
|
||||
{
|
||||
$this->assertEquals([], $this->model->getListItem('foo'));
|
||||
}
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\Tests\API\MAL\Transformer;
|
||||
|
||||
use Aviat\AnimeClient\API\MAL\Transformer\AnimeListTransformer;
|
||||
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
|
||||
use Aviat\Ion\Friend;
|
||||
use Aviat\Ion\Json;
|
||||
|
||||
class AnimeListTransformerTest extends AnimeClientTestCase {
|
||||
|
||||
protected $transformer;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->transformer = new AnimeListTransformer();
|
||||
}
|
||||
|
||||
public function testTransform()
|
||||
{
|
||||
$this->assertEquals([], $this->transformer->transform([]));
|
||||
}
|
||||
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Hummingbird Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package HummingbirdAnimeClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2018 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\Tests\API\MAL\Transformer;
|
||||
|
||||
use Aviat\AnimeClient\API\MAL\Transformer\MangaListTransformer;
|
||||
use Aviat\AnimeClient\Tests\AnimeClientTestCase;
|
||||
use Aviat\Ion\Friend;
|
||||
use Aviat\Ion\Json;
|
||||
|
||||
class MangaListTransformerTest extends AnimeClientTestCase {
|
||||
|
||||
protected $transformer;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->transformer = new MangaListTransformer();
|
||||
}
|
||||
|
||||
public function testTransform()
|
||||
{
|
||||
$this->assertEquals([], $this->transformer->transform([]));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user