From e2aa61f580b66de4598885e87275652bdc545122 Mon Sep 17 00:00:00 2001 From: Timothy J Warren Date: Thu, 9 Feb 2017 20:10:13 -0500 Subject: [PATCH] Fix update requests broken by Artax conversion --- src/API/APIRequestBuilder.php | 9 ++++++--- src/API/Kitsu/Auth.php | 3 +-- src/API/Kitsu/KitsuTrait.php | 5 +++++ src/API/Kitsu/ListItem.php | 29 +++++++++++++++++++++-------- src/API/Kitsu/Model.php | 16 +--------------- src/API/MAL/ListItem.php | 2 +- src/Model/Anime.php | 15 +++++++++++++-- 7 files changed, 48 insertions(+), 31 deletions(-) diff --git a/src/API/APIRequestBuilder.php b/src/API/APIRequestBuilder.php index 0623fef7..4a96f63b 100644 --- a/src/API/APIRequestBuilder.php +++ b/src/API/APIRequestBuilder.php @@ -157,12 +157,15 @@ class APIRequestBuilder { /** * Set the request body * - * @param array|FormBody|string $body + * @param mixed $body * @return self */ - public function setJsonBody(array $body): self + public function setJsonBody($body): self { - $requestBody = Json::encode($body); + $requestBody = ( ! is_scalar($body)) + ? Json::encode($body) + : $body; + return $this->setBody($requestBody); } diff --git a/src/API/Kitsu/Auth.php b/src/API/Kitsu/Auth.php index 7e01e592..ecee237b 100644 --- a/src/API/Kitsu/Auth.php +++ b/src/API/Kitsu/Auth.php @@ -17,7 +17,6 @@ namespace Aviat\AnimeClient\API\Kitsu; use const Aviat\AnimeClient\SESSION_SEGMENT; -use const Aviat\AnimeClient\API\Kitsu\AUTH_TOKEN_CACHE_KEY; use Aviat\AnimeClient\AnimeClient; use Aviat\AnimeClient\API\{ @@ -87,7 +86,7 @@ class Auth { if (FALSE !== $auth) { // Set the token in the cache for command line operations - $cacheItem = $this->cache->getItem(AUTH_TOKEN_CACHE_KEY); + $cacheItem = $this->cache->getItem(K::AUTH_TOKEN_CACHE_KEY); $cacheItem->set($auth['access_token']); $cacheItem->save(); diff --git a/src/API/Kitsu/KitsuTrait.php b/src/API/Kitsu/KitsuTrait.php index 75b9e554..171d0817 100644 --- a/src/API/Kitsu/KitsuTrait.php +++ b/src/API/Kitsu/KitsuTrait.php @@ -71,6 +71,11 @@ trait KitsuTrait { $request = $request->setAuth('bearer', $token); // $defaultOptions['headers']['Authorization'] = "bearer {$token}"; } + + if (array_key_exists('form_params', $options)) + { + $request->setFormFields($options['form_params']); + } if (array_key_exists('query', $options)) { diff --git a/src/API/Kitsu/ListItem.php b/src/API/Kitsu/ListItem.php index c57d6d3e..509fab80 100644 --- a/src/API/Kitsu/ListItem.php +++ b/src/API/Kitsu/ListItem.php @@ -104,11 +104,19 @@ class ListItem extends AbstractListItem { public function get(string $id): array { + $authHeader = $this->getAuthHeader(); + $request = $this->requestBuilder->newRequest('GET', "library-entries/{$id}") ->setQuery([ 'include' => 'media,media.genres,media.mappings' - ]) - ->getFullRequest(); + ]); + + if ($authHeader !== FALSE) + { + $request = $request->setHeader('Authorization', $authHeader); + } + + $request = $request->getFullRequest(); $response = \Amp\wait((new \Amp\Artax\Client)->request($request)); return Json::decode($response->getBody()); @@ -116,6 +124,7 @@ class ListItem extends AbstractListItem { public function update(string $id, array $data): Request { + $authHeader = $this->getAuthHeader(); $requestData = [ 'data' => [ 'id' => $id, @@ -123,11 +132,15 @@ class ListItem extends AbstractListItem { 'attributes' => $data ] ]; - - $response = $this->getResponse('PATCH', "library-entries/{$id}", [ - 'body' => JSON::encode($requestData) - ]); - - return $response; + + $request = $this->requestBuilder->newRequest('PATCH', "library-entries/{$id}") + ->setJsonBody($requestData); + + if ($authHeader !== FALSE) + { + $request = $request->setHeader('Authorization', $authHeader); + } + + return $request->getFullRequest(); } } \ No newline at end of file diff --git a/src/API/Kitsu/Model.php b/src/API/Kitsu/Model.php index 1a401b1c..cd87a4cf 100644 --- a/src/API/Kitsu/Model.php +++ b/src/API/Kitsu/Model.php @@ -398,21 +398,7 @@ class Model { */ public function updateListItem(array $data): Request { - try - { - $response = $this->listItem->update($data['id'], $data['data']); - return [ - 'statusCode' => $response->getStatus(), - 'body' => $response->getBody(), - ]; - } - catch(ClientException $e) - { - return [ - 'statusCode' => $e->getResponse()->getStatus(), - 'body' => Json::decode((string)$e->getResponse()->getBody()) - ]; - } + return $this->listItem->update($data['id'], $data['data']); } /** diff --git a/src/API/MAL/ListItem.php b/src/API/MAL/ListItem.php index d1d16dfd..ca2d9086 100644 --- a/src/API/MAL/ListItem.php +++ b/src/API/MAL/ListItem.php @@ -16,7 +16,7 @@ namespace Aviat\AnimeClient\API\MAL; -use Amp\Artax\Request; +use Amp\Artax\{FormBody, Request}; use Aviat\AnimeClient\API\{ AbstractListItem, XML diff --git a/src/Model/Anime.php b/src/Model/Anime.php index 328c8819..4064bbb3 100644 --- a/src/Model/Anime.php +++ b/src/Model/Anime.php @@ -168,12 +168,23 @@ class Anime extends API { */ public function updateLibraryItem(array $data): array { + $requests = []; + if ($this->useMALAPI) { - $this->malModel->updateListItem($data); + $requests['mal'] = $this->malModel->updateListItem($data); } - return $this->kitsuModel->updateListItem($data); + $requests['kitsu'] = $this->kitsuModel->updateListItem($data); + + $promises = (new Client)->requestMulti($requests); + + $results = wait(some($promises)); + + return [ + 'body' => Json::decode($results[1]['kitsu']->getBody()), + 'statusCode' => $results[1]['kitsu']->getStatus() + ]; } /**