diff --git a/app/views/character/details.php b/app/views/character/details.php
index 0a0977a7..9e0baa34 100644
--- a/app/views/character/details.php
+++ b/app/views/character/details.php
@@ -26,7 +26,7 @@ use Aviat\AnimeClient\Kitsu;
-
= str_replace("\n", '
', $data['description']) ?>
+
= nl2br($data['description']) ?>
diff --git a/app/views/person/details.php b/app/views/person/details.php
index b3c362c6..eb06775a 100644
--- a/app/views/person/details.php
+++ b/app/views/person/details.php
@@ -8,6 +8,9 @@
= $name ?>
+
+ = $data['birthday'] ?>
+
diff --git a/src/AnimeClient/API/Kitsu/Model.php b/src/AnimeClient/API/Kitsu/Model.php
index b4cf554f..018aea92 100644
--- a/src/AnimeClient/API/Kitsu/Model.php
+++ b/src/AnimeClient/API/Kitsu/Model.php
@@ -535,14 +535,14 @@ final class Model
* Get the data for a specific list item, generally for editing
*
* @param string $listId - The unique identifier of that list item
- * @return mixed
*/
- public function getListItem(string $listId)
+ public function getListItem(string $listId): AnimeListItem|MangaListItem|array
{
$baseData = $this->listItem->get($listId);
if ( ! isset($baseData['data']['findLibraryEntryById']))
{
- return [];
+ // We need to get the errors...
+ return $baseData;
}
return (new LibraryEntryTransformer())->transform($baseData['data']['findLibraryEntryById']);
diff --git a/src/AnimeClient/API/Kitsu/Queries/AnimeDetails.graphql b/src/AnimeClient/API/Kitsu/Queries/AnimeDetails.graphql
index 793028d7..ea57178c 100644
--- a/src/AnimeClient/API/Kitsu/Queries/AnimeDetails.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/AnimeDetails.graphql
@@ -19,7 +19,7 @@ query ($slug: String!) {
}
categories(first: 100) {
nodes {
- title
+ title(locales: "en")
}
}
characters(first: 100) {
@@ -29,7 +29,7 @@ query ($slug: String!) {
names {
alternatives
canonical
- localized
+ localized(locales: "*")
}
image {
original {
@@ -50,7 +50,7 @@ query ($slug: String!) {
startCursor
}
}
- description
+ description(locales: "en")
startDate
endDate
episodeCount
@@ -87,7 +87,7 @@ query ($slug: String!) {
names {
alternatives
canonical
- localized
+ localized(locales: "*")
}
slug
}
@@ -118,7 +118,7 @@ query ($slug: String!) {
alternatives
canonical
canonicalLocale
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
}
totalLength
youtubeTrailerVideoId
diff --git a/src/AnimeClient/API/Kitsu/Queries/AnimeDetailsById.graphql b/src/AnimeClient/API/Kitsu/Queries/AnimeDetailsById.graphql
index a3b2bc0d..e39e9a6d 100644
--- a/src/AnimeClient/API/Kitsu/Queries/AnimeDetailsById.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/AnimeDetailsById.graphql
@@ -19,7 +19,7 @@ query ($id: ID!) {
}
categories(first: 100) {
nodes {
- title
+ title(locales: "en")
}
}
characters(first: 100) {
@@ -29,7 +29,7 @@ query ($id: ID!) {
names {
alternatives
canonical
- localized
+ localized(locales: "*")
}
image {
original {
@@ -50,7 +50,7 @@ query ($id: ID!) {
startCursor
}
}
- description
+ description(locales: "en")
startDate
endDate
episodeCount
@@ -87,7 +87,7 @@ query ($id: ID!) {
names {
alternatives
canonical
- localized
+ localized(locales: "*")
}
slug
}
@@ -118,7 +118,7 @@ query ($id: ID!) {
alternatives
canonical
canonicalLocale
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
}
totalLength
youtubeTrailerVideoId
diff --git a/src/AnimeClient/API/Kitsu/Queries/CharacterDetails.graphql b/src/AnimeClient/API/Kitsu/Queries/CharacterDetails.graphql
index 587ae3c8..54768910 100644
--- a/src/AnimeClient/API/Kitsu/Queries/CharacterDetails.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/CharacterDetails.graphql
@@ -6,12 +6,12 @@ query ($slug: String!) {
url
}
}
- description
+ description(locales: "en")
names {
alternatives
canonical
canonicalLocale
- localized
+ localized(locales: "*")
},
media(first: 100) {
nodes {
@@ -22,7 +22,7 @@ query ($slug: String!) {
alternatives
canonical
canonicalLocale
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
}
posterImage {
original {
@@ -41,7 +41,7 @@ query ($slug: String!) {
type
}
role
- voices(first: 10) {
+ voices(first: 10, locale:"*", sort:{direction:ASCENDING, on: UPDATED_AT}) {
nodes {
id
locale
@@ -53,7 +53,7 @@ query ($slug: String!) {
alternatives
canonical
canonicalLocale
- localized
+ localized(locales: "*")
}
image {
original {
@@ -70,4 +70,4 @@ query ($slug: String!) {
}
slug
}
-}
\ No newline at end of file
+}
diff --git a/src/AnimeClient/API/Kitsu/Queries/GetLibrary.graphql b/src/AnimeClient/API/Kitsu/Queries/GetLibrary.graphql
index f2dd3bdd..8d34ccb1 100644
--- a/src/AnimeClient/API/Kitsu/Queries/GetLibrary.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/GetLibrary.graphql
@@ -57,7 +57,7 @@ query (
type
titles {
canonical
- localized
+ localized(locales: "*")
alternatives
}
...on Anime {
diff --git a/src/AnimeClient/API/Kitsu/Queries/GetLibraryItem.graphql b/src/AnimeClient/API/Kitsu/Queries/GetLibraryItem.graphql
index e970eeb5..0d96fb56 100644
--- a/src/AnimeClient/API/Kitsu/Queries/GetLibraryItem.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/GetLibraryItem.graphql
@@ -16,7 +16,7 @@ query($id: ID!) {
ageRating
categories(first: 100) {
nodes {
- title
+ title(locales: "*")
}
}
mappings(first: 10) {
@@ -41,7 +41,7 @@ query($id: ID!) {
endDate
titles {
canonical
- localized
+ localized(locales: "*")
canonicalLocale
}
type
diff --git a/src/AnimeClient/API/Kitsu/Queries/GetUserHistory.graphql b/src/AnimeClient/API/Kitsu/Queries/GetUserHistory.graphql
index 78eca809..9418c22a 100644
--- a/src/AnimeClient/API/Kitsu/Queries/GetUserHistory.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/GetUserHistory.graphql
@@ -33,7 +33,7 @@ query ($slug: String!) {
titles {
alternatives
canonical
- localized
+ localized(locales: "*")
}
...on Anime {
episodeCount
diff --git a/src/AnimeClient/API/Kitsu/Queries/MangaDetails.graphql b/src/AnimeClient/API/Kitsu/Queries/MangaDetails.graphql
index 9393aeff..7422c360 100644
--- a/src/AnimeClient/API/Kitsu/Queries/MangaDetails.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/MangaDetails.graphql
@@ -19,7 +19,7 @@ query ($slug: String!) {
}
categories(first: 100) {
nodes {
- title
+ title(locales: "*")
}
}
chapterCount
@@ -116,7 +116,7 @@ query ($slug: String!) {
titles {
canonical
canonicalLocale
- localized
+ localized(locales: "*")
}
}
}
diff --git a/src/AnimeClient/API/Kitsu/Queries/MangaDetailsById.graphql b/src/AnimeClient/API/Kitsu/Queries/MangaDetailsById.graphql
index 09a3aab6..6b8b129b 100644
--- a/src/AnimeClient/API/Kitsu/Queries/MangaDetailsById.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/MangaDetailsById.graphql
@@ -19,7 +19,7 @@ query ($id: ID!) {
}
categories(first: 100) {
nodes {
- title
+ title(locales: "*")
}
}
chapterCount
@@ -116,7 +116,7 @@ query ($id: ID!) {
titles {
canonical
canonicalLocale
- localized
+ localized(locales: "*")
}
}
}
diff --git a/src/AnimeClient/API/Kitsu/Queries/PersonDetails.graphql b/src/AnimeClient/API/Kitsu/Queries/PersonDetails.graphql
index 9830a947..9cd02d4b 100644
--- a/src/AnimeClient/API/Kitsu/Queries/PersonDetails.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/PersonDetails.graphql
@@ -1,7 +1,7 @@
query ($slug: String!) {
findPersonBySlug(slug: $slug) {
id
- description
+ description(locales: "en")
birthday
image {
original {
@@ -20,7 +20,7 @@ query ($slug: String!) {
names {
alternatives
canonical
- localized
+ localized(locales: "*")
}
mediaStaff(first: 100) {
nodes {
@@ -47,7 +47,7 @@ query ($slug: String!) {
titles {
alternatives
canonical
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
}
}
}
@@ -91,7 +91,7 @@ query ($slug: String!) {
}
titles {
canonical
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
}
}
}
diff --git a/src/AnimeClient/API/Kitsu/Queries/RandomMedia.graphql b/src/AnimeClient/API/Kitsu/Queries/RandomMedia.graphql
index 63e19476..c0194711 100644
--- a/src/AnimeClient/API/Kitsu/Queries/RandomMedia.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/RandomMedia.graphql
@@ -26,7 +26,7 @@ query ($type: MediaTypeEnum!) {
}
categories(first: 100) {
nodes {
- title
+ title(locales: "*")
}
}
characters(first: 100) {
@@ -36,7 +36,7 @@ query ($type: MediaTypeEnum!) {
names {
alternatives
canonical
- localized
+ localized(locales: "*")
}
image {
original {
@@ -90,7 +90,7 @@ query ($type: MediaTypeEnum!) {
names {
alternatives
canonical
- localized
+ localized(locales: "*")
}
slug
}
@@ -108,7 +108,7 @@ query ($type: MediaTypeEnum!) {
alternatives
canonical
canonicalLocale
- localized
+ localized(locales: "*")
}
...on Anime {
episodeCount
diff --git a/src/AnimeClient/API/Kitsu/Queries/SearchAnime.graphql b/src/AnimeClient/API/Kitsu/Queries/SearchAnime.graphql
index a91b6c6f..eda7a3d0 100644
--- a/src/AnimeClient/API/Kitsu/Queries/SearchAnime.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/SearchAnime.graphql
@@ -19,7 +19,7 @@ query ($query: String!) {
slug
titles {
canonical
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
alternatives
}
myLibraryEntry {
diff --git a/src/AnimeClient/API/Kitsu/Queries/SearchManga.graphql b/src/AnimeClient/API/Kitsu/Queries/SearchManga.graphql
index 0e4bb4c6..687b78c1 100644
--- a/src/AnimeClient/API/Kitsu/Queries/SearchManga.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/SearchManga.graphql
@@ -19,7 +19,7 @@ query ($query: String!) {
slug
titles {
canonical
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
alternatives
}
myLibraryEntry {
diff --git a/src/AnimeClient/API/Kitsu/Queries/UserDetails.graphql b/src/AnimeClient/API/Kitsu/Queries/UserDetails.graphql
index 492cb6a6..401cc12b 100644
--- a/src/AnimeClient/API/Kitsu/Queries/UserDetails.graphql
+++ b/src/AnimeClient/API/Kitsu/Queries/UserDetails.graphql
@@ -52,7 +52,7 @@ query ($slug: String!) {
}
titles {
canonical
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
}
}
...on Manga {
@@ -72,7 +72,7 @@ query ($slug: String!) {
}
titles {
canonical
- localized
+ localized(locales: ["en", "en-t-ja", "ja", "ja-jp"])
}
}
...on Person {
@@ -88,11 +88,12 @@ query ($slug: String!) {
width
}
}
+ name,
names {
alternatives
canonical
canonicalLocale
- localized
+ localized(locales: "*")
},
}
...on Character {
@@ -107,12 +108,12 @@ query ($slug: String!) {
height
width
}
- }
+ },
names {
alternatives
canonical
canonicalLocale
- localized
+ localized(locales: "*")
},
}
}
diff --git a/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php
index 24baa11a..6bfa2e91 100644
--- a/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php
+++ b/src/AnimeClient/API/Kitsu/Transformer/AnimeTransformer.php
@@ -36,7 +36,8 @@ final class AnimeTransformer extends AbstractTransformer
$characters = [];
$links = [];
$staff = [];
- $genres = array_map(static fn ($genre) => $genre['title']['en'], $base['categories']['nodes']);
+ $rawGenres = array_filter($base['categories']['nodes'], static fn ($c) => $c !== null);
+ $genres = array_map(static fn ($genre) => $genre['title']['en'], $rawGenres);
sort($genres);
diff --git a/src/AnimeClient/API/Kitsu/Transformer/PersonTransformer.php b/src/AnimeClient/API/Kitsu/Transformer/PersonTransformer.php
index ae966ebe..e8c8eadb 100644
--- a/src/AnimeClient/API/Kitsu/Transformer/PersonTransformer.php
+++ b/src/AnimeClient/API/Kitsu/Transformer/PersonTransformer.php
@@ -35,6 +35,7 @@ final class PersonTransformer extends AbstractTransformer
return Person::from([
'id' => $data['id'],
'name' => $canonicalName,
+ 'birthday' => $data['birthday'],
'image' => $data['image']['original']['url'],
'names' => array_diff($data['names']['localized'], [$canonicalName]),
'description' => $data['description']['en'] ?? '',
@@ -97,7 +98,12 @@ final class PersonTransformer extends AbstractTransformer
{
foreach ($data['voices']['nodes'] as $voicing)
{
- $character = $voicing['mediaCharacter']['character'];
+ if ($voicing === null)
+ {
+ continue;
+ }
+
+ $character = $voicing['mediaCharacter']['character'] ?? [];
$charId = $character['id'];
$rawMedia = $voicing['mediaCharacter']['media'];
$role = strtolower($voicing['mediaCharacter']['role']);
@@ -123,7 +129,7 @@ final class PersonTransformer extends AbstractTransformer
'character' => [
'id' => $character['id'],
'slug' => $character['slug'],
- 'image' => $character['image']['original']['url'],
+ 'image' => $character['image']['original']['url'] ?? '',
'canonicalName' => $character['names']['canonical'],
],
'media' => [
diff --git a/src/AnimeClient/Kitsu.php b/src/AnimeClient/Kitsu.php
index e249c68e..b3525936 100644
--- a/src/AnimeClient/Kitsu.php
+++ b/src/AnimeClient/Kitsu.php
@@ -305,7 +305,16 @@ final class Kitsu
{
// Really don't care about languages that aren't english
// or Japanese for titles
- if ( ! in_array($locale, ['en', 'en_us', 'en_jp', 'ja_jp'], TRUE))
+ if ( ! in_array($locale, [
+ 'en',
+ 'en-jp',
+ 'en-us',
+ 'en_jp',
+ 'en_us',
+ 'ja-jp',
+ 'ja_jp',
+ 'jp',
+ ], TRUE))
{
continue;
}
@@ -486,7 +495,7 @@ final class Kitsu
foreach ($existingTitles as $existing)
{
- $isSubset = mb_substr_count($existing, $title) > 0;
+ $isSubset = mb_substr_count(mb_strtolower($existing), mb_strtolower($title)) > 0;
$diff = levenshtein(mb_strtolower($existing), mb_strtolower($title));
if ($diff <= 4 || $isSubset || mb_strlen($title) > 45 || mb_strlen($existing) > 50)
diff --git a/src/AnimeClient/Model/MediaTrait.php b/src/AnimeClient/Model/MediaTrait.php
index 8e0d3177..cd2f8579 100644
--- a/src/AnimeClient/Model/MediaTrait.php
+++ b/src/AnimeClient/Model/MediaTrait.php
@@ -74,7 +74,7 @@ trait MediaTrait
* Get information about a specific list item
* for editing/updating that item
*/
- public function getItem(string $itemId): AnimeListItem|MangaListItem
+ public function getItem(string $itemId): AnimeListItem|MangaListItem|array
{
return $this->kitsuModel->getListItem($itemId);
}
diff --git a/src/AnimeClient/Types/Person.php b/src/AnimeClient/Types/Person.php
index 0b4f39a6..6038894f 100644
--- a/src/AnimeClient/Types/Person.php
+++ b/src/AnimeClient/Types/Person.php
@@ -21,6 +21,7 @@ final class Person extends AbstractType
{
public string $id;
public ?string $name;
+ public ?string $birthday;
public string $image;
public array $names = [];
public ?string $description;