Version 5.1 - All the GraphQL #32
46
RoboFile.php
46
RoboFile.php
@ -1,4 +1,7 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
use Robo\Tasks;
|
||||
|
||||
if ( ! function_exists('glob_recursive'))
|
||||
{
|
||||
// Does not support flag GLOB_BRACE
|
||||
@ -20,7 +23,7 @@ if ( ! function_exists('glob_recursive'))
|
||||
*
|
||||
* @see http://robo.li/
|
||||
*/
|
||||
class RoboFile extends \Robo\Tasks {
|
||||
class RoboFile extends Tasks {
|
||||
|
||||
/**
|
||||
* Directories used by analysis tools
|
||||
@ -102,10 +105,11 @@ class RoboFile extends \Robo\Tasks {
|
||||
*/
|
||||
public function coverage()
|
||||
{
|
||||
$this->taskPhpUnit()
|
||||
$this->_run(['vendor/bin/phpunit -c build']);
|
||||
/* $this->taskPhpUnit()
|
||||
->configFile('build/phpunit.xml')
|
||||
->printed(true)
|
||||
->run();
|
||||
->run(); */
|
||||
}
|
||||
|
||||
/**
|
||||
@ -128,7 +132,7 @@ class RoboFile extends \Robo\Tasks {
|
||||
{
|
||||
$files = $this->getAllSourceFiles();
|
||||
|
||||
$chunks = array_chunk($files, 6);
|
||||
$chunks = array_chunk($files, 12);
|
||||
|
||||
foreach($chunks as $chunk)
|
||||
{
|
||||
@ -136,29 +140,6 @@ class RoboFile extends \Robo\Tasks {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Run mutation tests with humbug
|
||||
*
|
||||
* @param bool $stats - if true, generates stats rather than running mutation tests
|
||||
*/
|
||||
public function mutate($stats = FALSE)
|
||||
{
|
||||
$test_parts = [
|
||||
'vendor/bin/humbug'
|
||||
];
|
||||
|
||||
$stat_parts = [
|
||||
'vendor/bin/humbug',
|
||||
'--skip-killed=yes',
|
||||
'-v',
|
||||
'./build/humbug.json'
|
||||
];
|
||||
|
||||
$cmd_parts = ($stats) ? $stat_parts : $test_parts;
|
||||
$this->_run($cmd_parts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the phpcs tool
|
||||
*
|
||||
@ -226,10 +207,13 @@ class RoboFile extends \Robo\Tasks {
|
||||
public function test()
|
||||
{
|
||||
$this->lint();
|
||||
$this->taskPHPUnit()
|
||||
|
||||
$this->_run(['phpunit']);
|
||||
|
||||
/*$this->taskPHPUnit()
|
||||
->configFile('phpunit.xml')
|
||||
->printed(true)
|
||||
->run();
|
||||
->run();*/
|
||||
}
|
||||
|
||||
/**
|
||||
@ -275,7 +259,9 @@ class RoboFile extends \Robo\Tasks {
|
||||
$files = array_merge(
|
||||
glob_recursive('build/*.php'),
|
||||
glob_recursive('src/*.php'),
|
||||
glob_recursive('src/**/*.php'),
|
||||
glob_recursive('tests/*.php'),
|
||||
glob_recursive('tests/**/*.php'),
|
||||
glob('*.php')
|
||||
);
|
||||
|
||||
|
@ -28,7 +28,13 @@
|
||||
<?php if ($auth->isAuthenticated()): ?>
|
||||
<div class="row">
|
||||
<span class="edit">
|
||||
<a class="bracketed" title="Edit information about this anime" href="<?= $urlGenerator->url("anime/edit/{$item['id']}/{$item['watching_status']}") ?>">Edit</a>
|
||||
<a class="bracketed" title="Edit information about this anime" href="<?=
|
||||
$url->generate('edit', [
|
||||
'controller' => 'anime',
|
||||
'id' => $item['id'],
|
||||
'status' => $item['watching_status']
|
||||
]);
|
||||
?>">Edit</a>
|
||||
</span>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
@ -6,8 +6,8 @@
|
||||
<meta http-equiv="cache-control" content="no-store" />
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0" />
|
||||
<link rel="icon" href="favicon.ico" />
|
||||
<link rel="stylesheet" href="<?= $urlGenerator->assetUrl('css.php/g/base') ?>" />
|
||||
<link rel="icon" href="<?= $urlGenerator->assetUrl('favicon.ico') ?>" />
|
||||
<link rel="stylesheet" href="<?= $urlGenerator->assetUrl('css.php/g/base/debug') ?>" />
|
||||
<script defer="defer" src="<?= $urlGenerator->assetUrl('js.php/g/base') ?>"></script>
|
||||
</head>
|
||||
<body class="<?= $escape->attr($url_type) ?> list">
|
||||
@ -16,7 +16,7 @@
|
||||
<?php if(isset($message) && is_array($message)):
|
||||
foreach($message as $m)
|
||||
{
|
||||
extract($message);
|
||||
extract($m);
|
||||
include 'message.php';
|
||||
}
|
||||
endif ?>
|
||||
|
@ -34,7 +34,7 @@
|
||||
"require-dev": {
|
||||
"pdepend/pdepend": "^2.2",
|
||||
"sebastian/phpcpd": "^3.0",
|
||||
"theseer/phpdox": "^0.9.0",
|
||||
"theseer/phpdox": "*",
|
||||
"phploc/phploc": "^3.0",
|
||||
"phpmd/phpmd": "^2.4",
|
||||
"phpunit/phpunit": "^6.0",
|
||||
@ -46,6 +46,8 @@
|
||||
},
|
||||
"scripts": {
|
||||
"build:css": "cd public && npm run build && cd ..",
|
||||
"watch:css": "cd public && npm run watch"
|
||||
"coverage": "vendor/bin/phpunit -c build",
|
||||
"watch:css": "cd public && npm run watch",
|
||||
"test": "vendor/bin/phpunit"
|
||||
}
|
||||
}
|
@ -1044,6 +1044,7 @@ a:hover, a:active {
|
||||
.medium_metadata > div,
|
||||
.row {
|
||||
text-shadow:1px 2px 1px rgba(0, 0, 0, .85);
|
||||
background:#000;
|
||||
background:rgba(0, 0, 0, .45);
|
||||
color:#ffffff;
|
||||
padding:0.25em 0.125em;
|
||||
@ -1127,6 +1128,7 @@ a:hover, a:active {
|
||||
|
||||
.anime .row, .manga .row {
|
||||
width:100%;
|
||||
background:#000;
|
||||
background:rgba(0, 0, 0, .45);
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
|
@ -4,6 +4,7 @@
|
||||
--link-shadow: 1px 1px 1px #000;
|
||||
--shadow: 1px 2px 1px rgba(0, 0, 0, 0.85);
|
||||
--title-overlay: rgba(0, 0, 0, 0.45);
|
||||
--title-overlay-fallback: #000;
|
||||
--text-color: #ffffff;
|
||||
--normal-padding: 0.25em 0.125em;
|
||||
--link-hover-color: #7d12db;
|
||||
@ -315,6 +316,7 @@ a:hover, a:active {
|
||||
.medium_metadata > div,
|
||||
.row {
|
||||
text-shadow: var(--shadow);
|
||||
background: var(--title-overlay-fallback);
|
||||
background: var(--title-overlay);
|
||||
color: var(--text-color);
|
||||
padding: var(--normal-padding);
|
||||
@ -398,6 +400,7 @@ a:hover, a:active {
|
||||
|
||||
.anime .row, .manga .row {
|
||||
width:100%;
|
||||
background: var(--title-overlay-fallback);
|
||||
background: var(--title-overlay);
|
||||
display: flex;
|
||||
align-content: space-around;
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
83
src/API/ParallelAPIRequest.php
Normal file
83
src/API/ParallelAPIRequest.php
Normal file
@ -0,0 +1,83 @@
|
||||
<?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 - 2017 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API;
|
||||
|
||||
use function Amp\{all, some, wait};
|
||||
|
||||
use Amp\Artax\Client;
|
||||
|
||||
/**
|
||||
* Class to simplify making and validating simultaneous requests
|
||||
*/
|
||||
class ParallelAPIRequest {
|
||||
|
||||
/**
|
||||
* Set of requests to make in parallel
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $requests = [];
|
||||
|
||||
/**
|
||||
* Add a request
|
||||
*
|
||||
* @param string|Request $request
|
||||
* @param string|number $key
|
||||
* @return self
|
||||
*/
|
||||
public function addRequest($request, $key = null): self
|
||||
{
|
||||
if ( ! is_null($key))
|
||||
{
|
||||
$this->requests[$key] = $request;
|
||||
return $this;
|
||||
}
|
||||
|
||||
$this->requests[] = $request;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add multiple requests
|
||||
*
|
||||
* @param string[]|Request[] $requests
|
||||
* @return self
|
||||
*/
|
||||
public function addRequests(array $requests): self
|
||||
{
|
||||
array_walk($requests, [$this, 'addRequest']);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Actually make the requests
|
||||
*
|
||||
* @param bool $allowFailingRequests
|
||||
* @return array
|
||||
*/
|
||||
public function makeRequests(bool $allowFailingRequests = FALSE): array
|
||||
{
|
||||
$client = new Client();
|
||||
$promises = $client->requestMulti($this->requests);
|
||||
|
||||
$func = ($allowFailingRequests) ? 'some' : 'all';
|
||||
|
||||
$results = wait($func($promises));
|
||||
|
||||
return $results;
|
||||
}
|
||||
}
|
@ -97,10 +97,14 @@ class Controller {
|
||||
$this->config = $container->get('config');
|
||||
$this->request = $container->get('request');
|
||||
$this->response = $container->get('response');
|
||||
$this->baseData['url'] = $auraUrlGenerator;
|
||||
$this->baseData['urlGenerator'] = $urlGenerator;
|
||||
$this->baseData['auth'] = $container->get('auth');
|
||||
$this->baseData['config'] = $this->config;
|
||||
|
||||
$this->baseData = array_merge((array)$this->baseData, [
|
||||
'url' => $auraUrlGenerator,
|
||||
'urlGenerator' => $urlGenerator,
|
||||
'auth' => $container->get('auth'),
|
||||
'config' => $this->config
|
||||
]);
|
||||
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
|
||||
$session = $container->get('session');
|
||||
|
@ -158,12 +158,12 @@ class Anime extends BaseController {
|
||||
|
||||
if ($result)
|
||||
{
|
||||
$this->set_flash_message('Added new anime to list', 'success');
|
||||
$this->setFlashMessage('Added new anime to list', 'success');
|
||||
$this->cache->clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->set_flash_message('Failed to add new anime to list', 'error');
|
||||
$this->setFlashMessage('Failed to add new anime to list', 'error');
|
||||
}
|
||||
|
||||
$this->sessionRedirect();
|
||||
@ -232,12 +232,12 @@ class Anime extends BaseController {
|
||||
|
||||
if ($fullResult['statusCode'] === 200)
|
||||
{
|
||||
$this->set_flash_message("Successfully updated.", 'success');
|
||||
$this->setFlashMessage("Successfully updated.", 'success');
|
||||
$this->cache->clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->set_flash_message('Failed to update anime.', 'error');
|
||||
$this->setFlashMessage('Failed to update anime.', 'error');
|
||||
}
|
||||
|
||||
$this->sessionRedirect();
|
||||
@ -277,12 +277,12 @@ class Anime extends BaseController {
|
||||
|
||||
if ((bool)$response === TRUE)
|
||||
{
|
||||
$this->set_flash_message("Successfully deleted anime.", 'success');
|
||||
$this->setFlashMessage("Successfully deleted anime.", 'success');
|
||||
$this->cache->clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->set_flash_message('Failed to delete anime.', 'error');
|
||||
$this->setFlashMessage('Failed to delete anime.', 'error');
|
||||
}
|
||||
|
||||
$this->sessionRedirect();
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
namespace Aviat\AnimeClient\Model;
|
||||
|
||||
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
||||
use Aviat\Ion\Model;
|
||||
|
||||
/**
|
||||
@ -24,31 +23,6 @@ use Aviat\Ion\Model;
|
||||
*/
|
||||
class API extends Model {
|
||||
|
||||
use ContainerAware;
|
||||
|
||||
/**
|
||||
* Config manager
|
||||
* @var ConfigInterface
|
||||
*/
|
||||
protected $config;
|
||||
|
||||
/**
|
||||
* Cache manager
|
||||
* @var \Psr\Cache\CacheItemPoolInterface
|
||||
*/
|
||||
protected $cache;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param ContainerInterface $container
|
||||
*/
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
$this->container = $container;
|
||||
$this->config = $container->get('config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the list entries by their title
|
||||
*
|
||||
|
@ -18,6 +18,7 @@ namespace Aviat\AnimeClient\Model;
|
||||
|
||||
use function Amp\some;
|
||||
use function Amp\wait;
|
||||
|
||||
use Amp\Artax\Client;
|
||||
use Aviat\AnimeClient\API\Kitsu\Enum\AnimeWatchingStatus;
|
||||
use Aviat\Ion\Di\ContainerInterface;
|
||||
@ -58,8 +59,6 @@ class Anime extends API {
|
||||
* @param ContainerInterface $container
|
||||
*/
|
||||
public function __construct(ContainerInterface $container) {
|
||||
parent::__construct($container);
|
||||
|
||||
$config = $container->get('config');
|
||||
$this->kitsuModel = $container->get('kitsu-model');
|
||||
$this->malModel = $container->get('mal-model');
|
||||
|
@ -36,7 +36,7 @@ class Manga extends API
|
||||
* Map API constants to display constants
|
||||
* @var array
|
||||
*/
|
||||
protected $const_map = [
|
||||
protected $constMap = [
|
||||
MangaReadingStatus::READING => self::READING,
|
||||
MangaReadingStatus::PLAN_TO_READ => self::PLAN_TO_READ,
|
||||
MangaReadingStatus::ON_HOLD => self::ON_HOLD,
|
||||
@ -44,7 +44,7 @@ class Manga extends API
|
||||
MangaReadingStatus::COMPLETED => self::COMPLETED
|
||||
];
|
||||
|
||||
protected $status_map = [
|
||||
protected $statusMap = [
|
||||
'current' => self::READING,
|
||||
'planned' => self::PLAN_TO_READ,
|
||||
'completed' => self::COMPLETED,
|
||||
@ -59,8 +59,6 @@ class Manga extends API
|
||||
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
parent::__construct($container);
|
||||
|
||||
$this->kitsuModel = $container->get('kitsu-model');
|
||||
}
|
||||
|
||||
@ -72,7 +70,7 @@ class Manga extends API
|
||||
*/
|
||||
public function getList($status)
|
||||
{
|
||||
$APIstatus = array_flip($this->const_map)[$status];
|
||||
$APIstatus = array_flip($this->constMap)[$status];
|
||||
$data = $this->kitsuModel->getMangaList($APIstatus);
|
||||
return $this->mapByStatus($data)[$status];
|
||||
}
|
||||
@ -161,7 +159,7 @@ class Manga extends API
|
||||
];
|
||||
|
||||
foreach ($data as &$entry) {
|
||||
$key = $this->status_map[$entry['reading_status']];
|
||||
$key = $this->statusMap[$entry['reading_status']];
|
||||
$output[$key][] = $entry;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user