Set up a proper formatter for more consistent code style
This commit is contained in:
parent
9b945ca0a5
commit
047ee4cb37
4
.gitignore
vendored
4
.gitignore
vendored
@ -152,4 +152,6 @@ public/mal_mappings.json
|
||||
|
||||
tmp
|
||||
tools/vendor/
|
||||
tools/phinx/vendor/
|
||||
tools/phinx/vendor/
|
||||
/.php-cs-fixer.php
|
||||
/.php-cs-fixer.cache
|
551
.php-cs-fixer.dist.php
Normal file
551
.php-cs-fixer.dist.php
Normal file
@ -0,0 +1,551 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
use Nexus\CsConfig\Factory;
|
||||
use PhpCsFixer\{Config, Finder};
|
||||
|
||||
$finder = Finder::create()
|
||||
->in([
|
||||
__DIR__,
|
||||
__DIR__ . '/tools',
|
||||
// __DIR__ . '/app'
|
||||
])
|
||||
->exclude([
|
||||
'apidocs',
|
||||
'build',
|
||||
'coverage',
|
||||
'frontEndSrc',
|
||||
'phinx',
|
||||
'public',
|
||||
'tools',
|
||||
'tmp',
|
||||
'vendor'
|
||||
]);
|
||||
|
||||
$srcFinder = Finder::create()->in(__DIR__ . '/src');
|
||||
|
||||
return (new Config())
|
||||
->setRiskyAllowed(TRUE)
|
||||
->setFinder($srcFinder)
|
||||
->setIndent(' ')
|
||||
->setRules([
|
||||
'align_multiline_comment' => false,
|
||||
'array_indentation' => true,
|
||||
'array_push' => true,
|
||||
'array_syntax' => ['syntax' => 'short'],
|
||||
'assign_null_coalescing_to_coalesce_equal' => true,
|
||||
'backtick_to_shell_exec' => true,
|
||||
'binary_operator_spaces' => [
|
||||
'default' => 'single_space',
|
||||
'operators' => [
|
||||
'=' => NULL,
|
||||
'&' => NULL,
|
||||
]
|
||||
],
|
||||
'blank_line_after_namespace' => true,
|
||||
'blank_line_after_opening_tag' => false,
|
||||
'blank_line_before_statement' => [
|
||||
'statements' => [
|
||||
'case',
|
||||
'continue',
|
||||
'declare',
|
||||
'default',
|
||||
'do',
|
||||
'exit',
|
||||
'for',
|
||||
'foreach',
|
||||
'goto',
|
||||
'return',
|
||||
'switch',
|
||||
'throw',
|
||||
'try',
|
||||
'while',
|
||||
'yield',
|
||||
'yield_from',
|
||||
],
|
||||
],
|
||||
'braces' => [
|
||||
'allow_single_line_anonymous_class_with_empty_body' => true,
|
||||
'allow_single_line_closure' => true,
|
||||
'position_after_anonymous_constructs' => 'same',
|
||||
'position_after_control_structures' => 'next',
|
||||
'position_after_functions_and_oop_constructs' => 'next',
|
||||
],
|
||||
'cast_spaces' => ['space' => 'single'],
|
||||
'class_attributes_separation' => [
|
||||
'elements' => [
|
||||
'const' => 'none',
|
||||
'property' => 'none',
|
||||
'method' => 'one',
|
||||
'trait_import' => 'none',
|
||||
],
|
||||
],
|
||||
'class_definition' => [
|
||||
'multi_line_extends_each_single_line' => true,
|
||||
'single_item_single_line' => true,
|
||||
'single_line' => true,
|
||||
'space_before_parenthesis' => true,
|
||||
],
|
||||
'class_reference_name_casing' => true,
|
||||
'clean_namespace' => true,
|
||||
'combine_consecutive_issets' => true,
|
||||
'combine_consecutive_unsets' => true,
|
||||
'combine_nested_dirname' => true,
|
||||
'comment_to_phpdoc' => [
|
||||
'ignored_tags' => [
|
||||
'todo',
|
||||
'codeCoverageIgnore',
|
||||
'codeCoverageIgnoreStart',
|
||||
'codeCoverageIgnoreEnd',
|
||||
'phpstan-ignore-line',
|
||||
'phpstan-ignore-next-line',
|
||||
],
|
||||
],
|
||||
'compact_nullable_typehint' => true,
|
||||
'concat_space' => ['spacing' => 'one'],
|
||||
'constant_case' => ['case' => 'upper'],
|
||||
'control_structure_continuation_position' => ['position' => 'next_line'],
|
||||
'date_time_immutable' => false,
|
||||
'declare_equal_normalize' => ['space' => 'none'],
|
||||
'declare_parentheses' => true,
|
||||
'declare_strict_types' => true,
|
||||
'dir_constant' => true,
|
||||
'doctrine_annotation_array_assignment' => false,
|
||||
'doctrine_annotation_braces' => false,
|
||||
'doctrine_annotation_indentation' => false,
|
||||
'doctrine_annotation_spaces' => false,
|
||||
'echo_tag_syntax' => [
|
||||
'format' => 'short',
|
||||
'long_function' => 'echo',
|
||||
'shorten_simple_statements_only' => false,
|
||||
],
|
||||
'elseif' => true,
|
||||
'empty_loop_body' => ['style' => 'braces'],
|
||||
'empty_loop_condition' => ['style' => 'while'],
|
||||
'encoding' => true,
|
||||
'ereg_to_preg' => true,
|
||||
'error_suppression' => [
|
||||
'mute_deprecation_error' => true,
|
||||
'noise_remaining_usages' => false,
|
||||
'noise_remaining_usages_exclude' => [],
|
||||
],
|
||||
'escape_implicit_backslashes' => [
|
||||
'double_quoted' => true,
|
||||
'heredoc_syntax' => true,
|
||||
'single_quoted' => false,
|
||||
],
|
||||
'explicit_indirect_variable' => true,
|
||||
'explicit_string_variable' => true,
|
||||
'final_class' => false,
|
||||
'final_internal_class' => [
|
||||
'annotation_exclude' => ['@no-final'],
|
||||
'annotation_include' => ['@internal'],
|
||||
'consider_absent_docblock_as_internal_class' => false,
|
||||
],
|
||||
'final_public_method_for_abstract_class' => false,
|
||||
'fopen_flag_order' => true,
|
||||
'fopen_flags' => ['b_mode' => true],
|
||||
'full_opening_tag' => true,
|
||||
'fully_qualified_strict_types' => true,
|
||||
'function_declaration' => ['closure_function_spacing' => 'one'],
|
||||
'function_to_constant' => [
|
||||
'functions' => [
|
||||
'get_called_class',
|
||||
'get_class',
|
||||
'get_class_this',
|
||||
'php_sapi_name',
|
||||
'phpversion',
|
||||
'pi',
|
||||
],
|
||||
],
|
||||
'function_typehint_space' => true,
|
||||
'general_phpdoc_annotation_remove' => false,
|
||||
'general_phpdoc_tag_rename' => false,
|
||||
'get_class_to_class_keyword' => false,
|
||||
'global_namespace_import' => [
|
||||
'import_constants' => true,
|
||||
'import_functions' => true,
|
||||
'import_classes' => true,
|
||||
],
|
||||
'group_import' => true,
|
||||
'header_comment' => false, // false by default
|
||||
'heredoc_indentation' => ['indentation' => 'start_plus_one'],
|
||||
'heredoc_to_nowdoc' => true,
|
||||
'implode_call' => true,
|
||||
'include' => true,
|
||||
'increment_style' => ['style' => 'post'],
|
||||
'indentation_type' => true,
|
||||
'integer_literal_case' => true,
|
||||
'is_null' => true,
|
||||
'lambda_not_used_import' => true,
|
||||
'line_ending' => true,
|
||||
'linebreak_after_opening_tag' => false,
|
||||
'list_syntax' => ['syntax' => 'short'],
|
||||
'logical_operators' => true,
|
||||
'lowercase_cast' => true,
|
||||
'lowercase_keywords' => true,
|
||||
'lowercase_static_reference' => true,
|
||||
'magic_constant_casing' => true,
|
||||
'magic_method_casing' => true,
|
||||
'mb_str_functions' => false,
|
||||
'method_argument_space' => [
|
||||
'after_heredoc' => false,
|
||||
'keep_multiple_spaces_after_comma' => false,
|
||||
'on_multiline' => 'ensure_fully_multiline',
|
||||
],
|
||||
'method_chaining_indentation' => true,
|
||||
'modernize_strpos' => false, // requires 8.0+
|
||||
'modernize_types_casting' => true,
|
||||
'multiline_comment_opening_closing' => true,
|
||||
'multiline_whitespace_before_semicolons' => ['strategy' => 'no_multi_line'],
|
||||
'native_constant_invocation' => false,
|
||||
'native_function_casing' => true,
|
||||
'native_function_invocation' => false,
|
||||
'native_function_type_declaration_casing' => true,
|
||||
'new_with_braces' => true,
|
||||
'no_alias_functions' => ['sets' => ['@all']],
|
||||
'no_alias_language_construct_call' => true,
|
||||
'no_alternative_syntax' => ['fix_non_monolithic_code' => false],
|
||||
'no_binary_string' => true,
|
||||
'no_blank_lines_after_class_opening' => true,
|
||||
'no_blank_lines_after_phpdoc' => true,
|
||||
'no_blank_lines_before_namespace' => false, // conflicts with `single_blank_line_before_namespace`
|
||||
'no_break_comment' => ['comment_text' => 'no break'],
|
||||
'no_closing_tag' => true,
|
||||
'no_empty_comment' => true,
|
||||
'no_empty_phpdoc' => true,
|
||||
'no_empty_statement' => true,
|
||||
'no_extra_blank_lines' => ['tokens' => ['extra']],
|
||||
'no_homoglyph_names' => true,
|
||||
'no_leading_import_slash' => true,
|
||||
'no_leading_namespace_whitespace' => true,
|
||||
'no_mixed_echo_print' => ['use' => 'echo'],
|
||||
'no_multiline_whitespace_around_double_arrow' => true,
|
||||
'no_null_property_initialization' => true,
|
||||
// 'no_php4_constructor' => true,
|
||||
'no_short_bool_cast' => true,
|
||||
'no_singleline_whitespace_before_semicolons' => true,
|
||||
'no_space_around_double_colon' => true,
|
||||
'no_spaces_after_function_name' => true,
|
||||
'no_spaces_around_offset' => ['positions' => ['inside', 'outside']],
|
||||
'no_spaces_inside_parenthesis' => true,
|
||||
'no_superfluous_elseif' => true,
|
||||
'no_superfluous_phpdoc_tags' => [
|
||||
'allow_mixed' => true,
|
||||
'allow_unused_params' => true,
|
||||
'remove_inheritdoc' => false,
|
||||
],
|
||||
'no_trailing_comma_in_list_call' => true,
|
||||
'no_trailing_comma_in_singleline_array' => true,
|
||||
'no_trailing_whitespace' => true,
|
||||
'no_trailing_whitespace_in_comment' => true,
|
||||
'no_trailing_whitespace_in_string' => true,
|
||||
'no_unneeded_control_parentheses' => [
|
||||
'statements' => [
|
||||
'break',
|
||||
'clone',
|
||||
'continue',
|
||||
'echo_print',
|
||||
'return',
|
||||
'switch_case',
|
||||
'yield',
|
||||
],
|
||||
],
|
||||
'no_unneeded_curly_braces' => ['namespaces' => true],
|
||||
'no_unneeded_final_method' => ['private_methods' => true],
|
||||
'no_unneeded_import_alias' => true,
|
||||
'no_unreachable_default_argument_value' => true,
|
||||
'no_unset_cast' => true,
|
||||
'no_unset_on_property' => false,
|
||||
'no_unused_imports' => true,
|
||||
'no_useless_else' => true,
|
||||
'no_useless_return' => true,
|
||||
'no_useless_sprintf' => true,
|
||||
'no_whitespace_before_comma_in_array' => ['after_heredoc' => true],
|
||||
'no_whitespace_in_blank_line' => true,
|
||||
'non_printable_character' => ['use_escape_sequences_in_strings' => true],
|
||||
'normalize_index_brace' => true,
|
||||
'not_operator_with_space' => true,
|
||||
'not_operator_with_successor_space' => true,
|
||||
'nullable_type_declaration_for_default_null_value' => ['use_nullable_type_declaration' => true],
|
||||
'object_operator_without_whitespace' => true,
|
||||
// 'octal_notation' => false, // requires 8.1+
|
||||
'operator_linebreak' => ['only_booleans' => true, 'position' => 'beginning'],
|
||||
'ordered_class_elements' => [
|
||||
'order' => [
|
||||
'use_trait',
|
||||
'constant',
|
||||
'property',
|
||||
'method',
|
||||
],
|
||||
'sort_algorithm' => 'none',
|
||||
],
|
||||
'ordered_imports' => [
|
||||
'sort_algorithm' => 'alpha',
|
||||
'imports_order' => ['class', 'function', 'const'],
|
||||
],
|
||||
'ordered_interfaces' => false,
|
||||
'ordered_traits' => false,
|
||||
'php_unit_construct' => [
|
||||
'assertions' => [
|
||||
'assertSame',
|
||||
'assertEquals',
|
||||
'assertNotEquals',
|
||||
'assertNotSame',
|
||||
],
|
||||
],
|
||||
'php_unit_dedicate_assert' => ['target' => 'newest'],
|
||||
'php_unit_dedicate_assert_internal_type' => ['target' => 'newest'],
|
||||
'php_unit_expectation' => ['target' => 'newest'],
|
||||
'php_unit_fqcn_annotation' => true,
|
||||
'php_unit_internal_class' => ['types' => ['normal', 'final']],
|
||||
'php_unit_method_casing' => ['case' => 'camel_case'],
|
||||
'php_unit_mock' => ['target' => 'newest'],
|
||||
'php_unit_mock_short_will_return' => true,
|
||||
'php_unit_namespaced' => ['target' => 'newest'],
|
||||
'php_unit_no_expectation_annotation' => [
|
||||
'target' => 'newest',
|
||||
'use_class_const' => true,
|
||||
],
|
||||
'php_unit_set_up_tear_down_visibility' => true,
|
||||
'php_unit_size_class' => false,
|
||||
'php_unit_strict' => [
|
||||
'assertions' => [
|
||||
'assertAttributeEquals',
|
||||
'assertAttributeNotEquals',
|
||||
'assertEquals',
|
||||
'assertNotEquals',
|
||||
],
|
||||
],
|
||||
'php_unit_test_annotation' => ['style' => 'prefix'],
|
||||
'php_unit_test_case_static_method_calls' => [
|
||||
'call_type' => 'this',
|
||||
'methods' => [],
|
||||
],
|
||||
'php_unit_test_class_requires_covers' => false,
|
||||
'phpdoc_add_missing_param_annotation' => ['only_untyped' => true],
|
||||
'phpdoc_align' => [
|
||||
'align' => 'left'
|
||||
],
|
||||
// 'phpdoc_align' => [
|
||||
// 'align' => 'vertical',
|
||||
// 'tags' => [
|
||||
// 'method',
|
||||
// 'param',
|
||||
// 'property',
|
||||
// 'return',
|
||||
// 'throws',
|
||||
// 'type',
|
||||
// 'var',
|
||||
// ],
|
||||
// ],
|
||||
'phpdoc_annotation_without_dot' => false,
|
||||
'phpdoc_indent' => true,
|
||||
'phpdoc_inline_tag_normalizer' => [
|
||||
'tags' => [
|
||||
'example',
|
||||
'id',
|
||||
'internal',
|
||||
'inheritdoc',
|
||||
'inheritdocs',
|
||||
'link',
|
||||
'source',
|
||||
'toc',
|
||||
'tutorial',
|
||||
],
|
||||
],
|
||||
'phpdoc_line_span' => [
|
||||
'const' => 'multi',
|
||||
'method' => 'multi',
|
||||
'property' => 'multi',
|
||||
],
|
||||
'phpdoc_no_access' => true,
|
||||
// 'phpdoc_no_alias_tag' => [
|
||||
// 'replacements' => [
|
||||
// 'property-read' => 'property',
|
||||
// 'property-write' => 'property',
|
||||
// 'type' => 'var',
|
||||
// 'link' => 'see',
|
||||
// ],
|
||||
// ],
|
||||
'phpdoc_no_empty_return' => false,
|
||||
'phpdoc_no_package' => false,
|
||||
'phpdoc_no_useless_inheritdoc' => true,
|
||||
'phpdoc_order' => true,
|
||||
'phpdoc_order_by_value' => [
|
||||
'annotations' => [
|
||||
'author',
|
||||
'covers',
|
||||
'coversNothing',
|
||||
'dataProvider',
|
||||
'depends',
|
||||
'group',
|
||||
'internal',
|
||||
'method',
|
||||
'property',
|
||||
'property-read',
|
||||
'property-write',
|
||||
'requires',
|
||||
'throws',
|
||||
'uses',
|
||||
],
|
||||
],
|
||||
'phpdoc_return_self_reference' => [
|
||||
'replacements' => [
|
||||
'this' => '$this',
|
||||
'@this' => '$this',
|
||||
'$self' => 'self',
|
||||
'@self' => 'self',
|
||||
'$static' => 'static',
|
||||
'@static' => 'static',
|
||||
],
|
||||
],
|
||||
'phpdoc_scalar' => [
|
||||
'types' => [
|
||||
'boolean',
|
||||
'callback',
|
||||
'double',
|
||||
'integer',
|
||||
'real',
|
||||
'str',
|
||||
],
|
||||
],
|
||||
'phpdoc_separation' => false,
|
||||
'phpdoc_single_line_var_spacing' => true,
|
||||
'phpdoc_summary' => false,
|
||||
'phpdoc_tag_casing' => ['tags' => ['inheritDoc']],
|
||||
'phpdoc_tag_type' => ['tags' => ['inheritDoc' => 'inline']],
|
||||
'phpdoc_to_comment' => false,
|
||||
'phpdoc_to_param_type' => false,
|
||||
'phpdoc_to_property_type' => false,
|
||||
'phpdoc_to_return_type' => false,
|
||||
'phpdoc_trim' => true,
|
||||
'phpdoc_trim_consecutive_blank_line_separation' => true,
|
||||
'phpdoc_types' => ['groups' => ['simple', 'alias', 'meta']],
|
||||
'phpdoc_types_order' => [
|
||||
'null_adjustment' => 'always_last',
|
||||
'sort_algorithm' => 'alpha',
|
||||
],
|
||||
'phpdoc_var_annotation_correct_order' => true,
|
||||
'phpdoc_var_without_name' => true,
|
||||
'pow_to_exponentiation' => true,
|
||||
'protected_to_private' => true,
|
||||
'psr_autoloading' => ['dir' => null],
|
||||
'random_api_migration' => [
|
||||
'replacements' => [
|
||||
'getrandmax' => 'mt_getrandmax',
|
||||
'rand' => 'mt_rand',
|
||||
'srand' => 'mt_srand',
|
||||
],
|
||||
],
|
||||
'regular_callable_call' => true,
|
||||
'return_assignment' => true,
|
||||
'return_type_declaration' => ['space_before' => 'none'],
|
||||
'self_accessor' => false,
|
||||
'self_static_accessor' => true,
|
||||
'semicolon_after_instruction' => false,
|
||||
'set_type_to_cast' => true,
|
||||
'short_scalar_cast' => true,
|
||||
'simple_to_complex_string_variable' => true,
|
||||
'simplified_if_return' => true,
|
||||
'simplified_null_return' => false,
|
||||
'single_blank_line_at_eof' => true,
|
||||
'single_blank_line_before_namespace' => true,
|
||||
'single_class_element_per_statement' => ['elements' => ['const', 'property']],
|
||||
'single_import_per_statement' => false,
|
||||
'single_line_after_imports' => true,
|
||||
'single_line_comment_style' => ['comment_types' => ['asterisk', 'hash']],
|
||||
'single_line_throw' => false,
|
||||
'single_quote' => ['strings_containing_single_quote_chars' => false],
|
||||
'single_space_after_construct' => [
|
||||
'constructs' => [
|
||||
'abstract',
|
||||
'as',
|
||||
'attribute',
|
||||
'break',
|
||||
'case',
|
||||
'catch',
|
||||
'class',
|
||||
'clone',
|
||||
'comment',
|
||||
'const',
|
||||
'const_import',
|
||||
'continue',
|
||||
'do',
|
||||
'echo',
|
||||
'else',
|
||||
'elseif',
|
||||
'extends',
|
||||
'final',
|
||||
'finally',
|
||||
'for',
|
||||
'foreach',
|
||||
'function',
|
||||
'function_import',
|
||||
'global',
|
||||
'goto',
|
||||
'if',
|
||||
'implements',
|
||||
'include',
|
||||
'include_once',
|
||||
'instanceof',
|
||||
'insteadof',
|
||||
'interface',
|
||||
'match',
|
||||
'named_argument',
|
||||
'new',
|
||||
'open_tag_with_echo',
|
||||
'php_doc',
|
||||
'php_open',
|
||||
'print',
|
||||
'private',
|
||||
'protected',
|
||||
'public',
|
||||
'require',
|
||||
'require_once',
|
||||
'return',
|
||||
'static',
|
||||
'throw',
|
||||
'trait',
|
||||
'try',
|
||||
'use',
|
||||
'use_lambda',
|
||||
'use_trait',
|
||||
'var',
|
||||
'while',
|
||||
'yield',
|
||||
'yield_from',
|
||||
],
|
||||
],
|
||||
'single_trait_insert_per_statement' => true,
|
||||
'space_after_semicolon' => ['remove_in_empty_for_expressions' => true],
|
||||
'standardize_increment' => true,
|
||||
'standardize_not_equals' => true,
|
||||
'static_lambda' => true,
|
||||
'strict_comparison' => true,
|
||||
'strict_param' => true,
|
||||
'string_length_to_empty' => true,
|
||||
'string_line_ending' => true,
|
||||
'switch_case_semicolon_to_colon' => true,
|
||||
'switch_case_space' => true,
|
||||
'switch_continue_to_break' => true,
|
||||
'ternary_operator_spaces' => true,
|
||||
'ternary_to_elvis_operator' => true,
|
||||
'ternary_to_null_coalescing' => true,
|
||||
'trailing_comma_in_multiline' => [
|
||||
'after_heredoc' => true,
|
||||
'elements' => ['arrays'],
|
||||
],
|
||||
'trim_array_spaces' => true,
|
||||
'types_spaces' => ['space' => 'none'],
|
||||
'unary_operator_spaces' => false,
|
||||
'use_arrow_functions' => true,
|
||||
'visibility_required' => ['elements' => ['const', 'method', 'property']],
|
||||
'void_return' => false, // changes method signature
|
||||
'whitespace_after_comma_in_array' => true,
|
||||
'yoda_style' => [
|
||||
'equal' => false,
|
||||
'identical' => null,
|
||||
'less_and_greater' => false,
|
||||
'always_move_variable' => false,
|
||||
],
|
||||
]);
|
31
justfile
Normal file
31
justfile
Normal file
@ -0,0 +1,31 @@
|
||||
# Lists the available actions
|
||||
default:
|
||||
@just --list
|
||||
|
||||
# Runs rector, showing what changes will be make
|
||||
rector-dry-run:
|
||||
tools/vendor/bin/rector process --config=tools/rector.php --dry-run src
|
||||
|
||||
# Runs rector, and updates the files
|
||||
rector:
|
||||
tools/vendor/bin/rector process --config=tools/rector.php src
|
||||
|
||||
# Check code formatting
|
||||
check-fmt:
|
||||
tools/vendor/bin/php-cs-fixer fix --dry-run --verbose
|
||||
|
||||
# Fix code formatting
|
||||
fmt:
|
||||
tools/vendor/bin/php-cs-fixer fix --verbose
|
||||
|
||||
# Run tests
|
||||
test:
|
||||
composer run-script test
|
||||
|
||||
# Run tests, update snapshots
|
||||
test-update:
|
||||
composer run-script test-update
|
||||
|
||||
# Run unit tests and generate test-coverage report
|
||||
coverage:
|
||||
composer run-script coverage
|
@ -16,21 +16,25 @@
|
||||
|
||||
namespace Aviat\AnimeClient\API;
|
||||
|
||||
use const Aviat\AnimeClient\USER_AGENT;
|
||||
|
||||
use function Amp\Promise\wait;
|
||||
use function Aviat\AnimeClient\getResponse;
|
||||
use Amp\Http\Client\Body\FormBody;
|
||||
|
||||
use Amp\Http\Client\Request;
|
||||
use Amp\Http\Client\Body\FormBody;
|
||||
use Aviat\Ion\Json;
|
||||
|
||||
use Error;
|
||||
use InvalidArgumentException;
|
||||
use Psr\Log\LoggerAwareTrait;
|
||||
use Throwable;
|
||||
use TypeError;
|
||||
use function Amp\Promise\wait;
|
||||
use function Aviat\AnimeClient\getResponse;
|
||||
use const Aviat\AnimeClient\USER_AGENT;
|
||||
|
||||
/**
|
||||
* Wrapper around Http\Client to make it easier to build API requests
|
||||
*/
|
||||
abstract class APIRequestBuilder {
|
||||
abstract class APIRequestBuilder
|
||||
{
|
||||
use LoggerAwareTrait;
|
||||
|
||||
/**
|
||||
@ -101,6 +105,7 @@ abstract class APIRequestBuilder {
|
||||
public function setBasicAuth(string $username, string $password): self
|
||||
{
|
||||
$this->setAuth('basic', base64_encode($username . ':' . $password));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@ -110,6 +115,7 @@ abstract class APIRequestBuilder {
|
||||
public function setBody(FormBody|string $body): self
|
||||
{
|
||||
$this->request->setBody($body);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@ -132,15 +138,14 @@ abstract class APIRequestBuilder {
|
||||
public function unsetHeader(string $name): self
|
||||
{
|
||||
$this->request->removeHeader($name);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a request header
|
||||
*
|
||||
* @param string|null $value
|
||||
*/
|
||||
public function setHeader(string $name, string $value = NULL): self
|
||||
public function setHeader(string $name, ?string $value = NULL): self
|
||||
{
|
||||
if (NULL === $value)
|
||||
{
|
||||
@ -158,8 +163,6 @@ abstract class APIRequestBuilder {
|
||||
* Set multiple request headers
|
||||
*
|
||||
* name => value
|
||||
*
|
||||
* @param array $headers
|
||||
*/
|
||||
public function setHeaders(array $headers): self
|
||||
{
|
||||
@ -176,7 +179,7 @@ abstract class APIRequestBuilder {
|
||||
*/
|
||||
public function setJsonBody(mixed $body): self
|
||||
{
|
||||
$requestBody = ( is_string($body))
|
||||
$requestBody = (is_string($body))
|
||||
? $body
|
||||
: Json::encode($body);
|
||||
|
||||
@ -189,13 +192,14 @@ abstract class APIRequestBuilder {
|
||||
public function setQuery(array $params): self
|
||||
{
|
||||
$this->query = http_build_query($params);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the promise for the current request
|
||||
*
|
||||
* @throws \Throwable
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function getFullRequest(): Request
|
||||
{
|
||||
@ -210,7 +214,7 @@ abstract class APIRequestBuilder {
|
||||
$this->request->getBody()
|
||||
->createBodyStream()
|
||||
->read()
|
||||
)
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
@ -220,14 +224,15 @@ abstract class APIRequestBuilder {
|
||||
/**
|
||||
* Get the data from the response of the passed request
|
||||
*
|
||||
* @throws Error
|
||||
* @throws Throwable
|
||||
* @throws TypeError
|
||||
* @return mixed
|
||||
* @throws \Error
|
||||
* @throws \Throwable
|
||||
* @throws \TypeError
|
||||
*/
|
||||
public function getResponseData(Request $request)
|
||||
{
|
||||
$response = getResponse($request);
|
||||
|
||||
return wait($response->getBody()->buffer());
|
||||
}
|
||||
|
||||
@ -295,4 +300,4 @@ abstract class APIRequestBuilder {
|
||||
$this->request->setTcpConnectTimeout(300000);
|
||||
$this->request->setTransferTimeout(300000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,8 +22,8 @@ use Aviat\AnimeClient\Types\FormItemData;
|
||||
/**
|
||||
* Common interface for anime and manga list item CRUD
|
||||
*/
|
||||
abstract class AbstractListItem {
|
||||
|
||||
abstract class AbstractListItem
|
||||
{
|
||||
/**
|
||||
* Create a list item
|
||||
*
|
||||
@ -62,5 +62,5 @@ abstract class AbstractListItem {
|
||||
*
|
||||
* @param string $id - The id of the list item to delete
|
||||
*/
|
||||
abstract public function delete(string $id):?Request;
|
||||
}
|
||||
abstract public function delete(string $id): ?Request;
|
||||
}
|
||||
|
@ -26,7 +26,8 @@ use Aviat\AnimeClient\Types\FormItemData;
|
||||
/**
|
||||
* CRUD operations for MAL list items
|
||||
*/
|
||||
final class ListItem extends AbstractListItem {
|
||||
final class ListItem extends AbstractListItem
|
||||
{
|
||||
use RequestBuilderTrait;
|
||||
|
||||
/**
|
||||
@ -35,6 +36,7 @@ final class ListItem extends AbstractListItem {
|
||||
public function create(array $data): Request
|
||||
{
|
||||
$checkedData = Types\MediaListEntry::check($data);
|
||||
|
||||
return $this->requestBuilder->mutateRequest('CreateMediaListEntry', $checkedData ?? []);
|
||||
}
|
||||
|
||||
@ -44,6 +46,7 @@ final class ListItem extends AbstractListItem {
|
||||
public function createFull(array $data): Request
|
||||
{
|
||||
$checkedData = Types\MediaListEntry::check($data);
|
||||
|
||||
return $this->requestBuilder->mutateRequest('CreateFullMediaListEntry', $checkedData ?? []);
|
||||
}
|
||||
|
||||
@ -82,23 +85,23 @@ final class ListItem extends AbstractListItem {
|
||||
public function update(string $id, FormItemData $data): Request
|
||||
{
|
||||
$notes = $data->notes ?? '';
|
||||
$progress = (int)$data->progress;
|
||||
$private = (bool)$data->private;
|
||||
$progress = (int) $data->progress;
|
||||
$private = (bool) $data->private;
|
||||
$rating = $data->ratingTwenty;
|
||||
$status = ($data->reconsuming === TRUE)
|
||||
? AnilistStatus::REPEATING
|
||||
: AnimeWatchingStatus::KITSU_TO_ANILIST[$data->status];
|
||||
|
||||
$updateData = Types\MediaListEntry::check([
|
||||
'id' => (int)$id,
|
||||
'id' => (int) $id,
|
||||
'status' => $status,
|
||||
'score' => $rating * 5,
|
||||
'progress' => $progress,
|
||||
'repeat' => (int)$data['reconsumeCount'],
|
||||
'repeat' => (int) $data['reconsumeCount'],
|
||||
'private' => $private,
|
||||
'notes' => $notes,
|
||||
]);
|
||||
|
||||
return $this->requestBuilder->mutateRequest('UpdateMediaListEntry', $updateData ?? []);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,4 +18,6 @@ namespace Aviat\AnimeClient\API\Anilist;
|
||||
|
||||
use InvalidArgumentException;
|
||||
|
||||
class MissingIdException extends InvalidArgumentException {}
|
||||
class MissingIdException extends InvalidArgumentException
|
||||
{
|
||||
}
|
||||
|
@ -16,19 +16,17 @@
|
||||
|
||||
namespace Aviat\AnimeClient\API\Anilist;
|
||||
|
||||
use function Amp\Promise\wait;
|
||||
|
||||
use InvalidArgumentException;
|
||||
|
||||
use Amp\Http\Client\Request;
|
||||
|
||||
use Aviat\AnimeClient\Anilist;
|
||||
|
||||
use Aviat\AnimeClient\API\Mapping\{AnimeWatchingStatus, MangaReadingStatus};
|
||||
use Aviat\AnimeClient\Types\FormItem;
|
||||
use Aviat\Ion\Di\Exception\{ContainerException, NotFoundException};
|
||||
use Aviat\Ion\Json;
|
||||
use Aviat\Ion\Di\Exception\ContainerException;
|
||||
use Aviat\Ion\Di\Exception\NotFoundException;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use Throwable;
|
||||
use function Amp\Promise\wait;
|
||||
|
||||
/**
|
||||
* Anilist API Model
|
||||
@ -179,7 +177,7 @@ final class Model
|
||||
|
||||
$data = $this->listItem->get($id)['data'];
|
||||
|
||||
return ($data !== null)
|
||||
return ($data !== NULL)
|
||||
? $data['MediaList']
|
||||
: [];
|
||||
}
|
||||
@ -270,7 +268,7 @@ final class Model
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (string)$info['data']['MediaList']['id'];
|
||||
return (string) $info['data']['MediaList']['id'];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -293,6 +291,6 @@ final class Model
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (string)$info['data']['Media']['id'];
|
||||
return (string) $info['data']['Media']['id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,24 +16,22 @@
|
||||
|
||||
namespace Aviat\AnimeClient\API\Anilist;
|
||||
|
||||
use Amp\Http\Client\Request;
|
||||
use Amp\Http\Client\Response;
|
||||
use Amp\Http\Client\{Request, Response};
|
||||
use Aviat\AnimeClient\Anilist;
|
||||
use Aviat\Ion\Di\ContainerAware;
|
||||
use Aviat\Ion\Di\ContainerInterface;
|
||||
use Aviat\Ion\Json;
|
||||
|
||||
use Aviat\Ion\JsonException;
|
||||
use function Amp\Promise\wait;
|
||||
use function Aviat\AnimeClient\getResponse;
|
||||
use const Aviat\AnimeClient\USER_AGENT;
|
||||
|
||||
use Aviat\AnimeClient\API\APIRequestBuilder;
|
||||
|
||||
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
||||
use Aviat\Ion\{Json, JsonException};
|
||||
use LogicException;
|
||||
use Throwable;
|
||||
|
||||
final class RequestBuilder extends APIRequestBuilder {
|
||||
use function Amp\Promise\wait;
|
||||
|
||||
use function Aviat\AnimeClient\getResponse;
|
||||
use function in_array;
|
||||
use const Aviat\AnimeClient\USER_AGENT;
|
||||
|
||||
final class RequestBuilder extends APIRequestBuilder
|
||||
{
|
||||
use ContainerAware;
|
||||
|
||||
/**
|
||||
@ -115,27 +113,28 @@ final class RequestBuilder extends APIRequestBuilder {
|
||||
|
||||
$query = file_get_contents($file);
|
||||
$body = [
|
||||
'query' => $query
|
||||
'query' => $query,
|
||||
];
|
||||
|
||||
if ( ! empty($variables))
|
||||
{
|
||||
$body['variables'] = [];
|
||||
foreach($variables as $key => $val)
|
||||
|
||||
foreach ($variables as $key => $val)
|
||||
{
|
||||
$body['variables'][$key] = $val;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->postRequest([
|
||||
'body' => $body
|
||||
'body' => $body,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function mutateRequest (string $name, array $variables = []): Request
|
||||
public function mutateRequest(string $name, array $variables = []): Request
|
||||
{
|
||||
$file = __DIR__ . "/Mutations/{$name}.graphql";
|
||||
if ( ! file_exists($file))
|
||||
@ -146,11 +145,13 @@ final class RequestBuilder extends APIRequestBuilder {
|
||||
$query = file_get_contents($file);
|
||||
|
||||
$body = [
|
||||
'query' => $query
|
||||
'query' => $query,
|
||||
];
|
||||
|
||||
if (!empty($variables)) {
|
||||
if ( ! empty($variables))
|
||||
{
|
||||
$body['variables'] = [];
|
||||
|
||||
foreach ($variables as $key => $val)
|
||||
{
|
||||
$body['variables'][$key] = $val;
|
||||
@ -166,7 +167,7 @@ final class RequestBuilder extends APIRequestBuilder {
|
||||
* @throws Throwable
|
||||
* @return mixed[]
|
||||
*/
|
||||
public function mutate (string $name, array $variables = []): array
|
||||
public function mutate(string $name, array $variables = []): array
|
||||
{
|
||||
$request = $this->mutateRequest($name, $variables);
|
||||
$response = $this->getResponseFromRequest($request);
|
||||
@ -242,13 +243,13 @@ final class RequestBuilder extends APIRequestBuilder {
|
||||
//'requestHeaders' => $request->getHeaders(),
|
||||
]);
|
||||
|
||||
|
||||
if ( ! \in_array($response->getStatus(), $validResponseCodes, TRUE))
|
||||
if ( ! in_array($response->getStatus(), $validResponseCodes, TRUE))
|
||||
{
|
||||
$logger?->warning('Non 200 response for POST api call', (array)$response->getBody());
|
||||
$logger?->warning('Non 200 response for POST api call', (array) $response->getBody());
|
||||
}
|
||||
|
||||
$rawBody = wait($response->getBody()->buffer());
|
||||
|
||||
try
|
||||
{
|
||||
return Json::decode($rawBody);
|
||||
@ -257,7 +258,8 @@ final class RequestBuilder extends APIRequestBuilder {
|
||||
{
|
||||
dump($e);
|
||||
dump($rawBody);
|
||||
die();
|
||||
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,8 @@ namespace Aviat\AnimeClient\API\Anilist;
|
||||
|
||||
use Aviat\Ion\Di\ContainerAware;
|
||||
|
||||
trait RequestBuilderTrait {
|
||||
trait RequestBuilderTrait
|
||||
{
|
||||
use ContainerAware;
|
||||
|
||||
/**
|
||||
@ -32,6 +33,7 @@ trait RequestBuilderTrait {
|
||||
public function setRequestBuilder(RequestBuilder $requestBuilder): self
|
||||
{
|
||||
$this->requestBuilder = $requestBuilder;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,9 +16,7 @@
|
||||
|
||||
namespace Aviat\AnimeClient\API\Anilist\Transformer;
|
||||
|
||||
use Aviat\AnimeClient\API\Enum\AnimeWatchingStatus\Anilist as AnilistStatus;
|
||||
use Aviat\AnimeClient\API\Enum\AnimeWatchingStatus\Kitsu as KitsuStatus;
|
||||
use Aviat\AnimeClient\API\Mapping\AnimeWatchingStatus;
|
||||
use Aviat\AnimeClient\API\{Enum, Mapping};
|
||||
use Aviat\AnimeClient\Types\{AnimeListItem, FormItem};
|
||||
|
||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
@ -26,8 +24,8 @@ use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
use DateTime;
|
||||
use DateTimeInterface;
|
||||
|
||||
class AnimeListTransformer extends AbstractTransformer {
|
||||
|
||||
class AnimeListTransformer extends AbstractTransformer
|
||||
{
|
||||
public function transform(array|object $item): AnimeListItem
|
||||
{
|
||||
return AnimeListItem::from([]);
|
||||
@ -35,12 +33,10 @@ class AnimeListTransformer extends AbstractTransformer {
|
||||
|
||||
/**
|
||||
* Transform Anilist list item to Kitsu form update format
|
||||
*
|
||||
* @return FormItem
|
||||
*/
|
||||
public function untransform(array $item): FormItem
|
||||
{
|
||||
$reconsuming = $item['status'] === AnilistStatus::REPEATING;
|
||||
$reconsuming = $item['status'] === Enum\AnimeWatchingStatus\Anilist::REPEATING;
|
||||
|
||||
return FormItem::from([
|
||||
'id' => $item['id'],
|
||||
@ -53,12 +49,12 @@ class AnimeListTransformer extends AbstractTransformer {
|
||||
'reconsumeCount' => $item['repeat'],
|
||||
'reconsuming' => $reconsuming,
|
||||
'status' => $reconsuming
|
||||
? KitsuStatus::WATCHING
|
||||
: AnimeWatchingStatus::ANILIST_TO_KITSU[$item['status']],
|
||||
? Enum\AnimeWatchingStatus\Kitsu::WATCHING
|
||||
: Mapping\AnimeWatchingStatus::ANILIST_TO_KITSU[$item['status']],
|
||||
'updatedAt' => (new DateTime())
|
||||
->setTimestamp($item['updatedAt'])
|
||||
->format(DateTimeInterface::W3C)
|
||||
->format(DateTimeInterface::W3C),
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,19 +16,15 @@
|
||||
|
||||
namespace Aviat\AnimeClient\API\Anilist\Transformer;
|
||||
|
||||
use Aviat\AnimeClient\API\Enum\MangaReadingStatus\Anilist as AnilistStatus;
|
||||
use Aviat\AnimeClient\API\Enum\MangaReadingStatus\Kitsu as KitsuStatus;
|
||||
use Aviat\AnimeClient\API\Mapping\MangaReadingStatus;
|
||||
use Aviat\AnimeClient\Types\MangaListItem;
|
||||
use Aviat\AnimeClient\Types\FormItem;
|
||||
|
||||
use Aviat\AnimeClient\API\{Enum, Mapping};
|
||||
use Aviat\AnimeClient\Types\{FormItem, MangaListItem};
|
||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeInterface;
|
||||
|
||||
class MangaListTransformer extends AbstractTransformer {
|
||||
|
||||
class MangaListTransformer extends AbstractTransformer
|
||||
{
|
||||
public function transform(array|object $item): MangaListItem
|
||||
{
|
||||
return MangaListItem::from([]);
|
||||
@ -39,7 +35,7 @@ class MangaListTransformer extends AbstractTransformer {
|
||||
*/
|
||||
public function untransform(array $item): FormItem
|
||||
{
|
||||
$reconsuming = $item['status'] === AnilistStatus::REPEATING;
|
||||
$reconsuming = $item['status'] === Enum\MangaReadingStatus\Anilist::REPEATING;
|
||||
|
||||
return FormItem::from([
|
||||
'id' => $item['id'],
|
||||
@ -52,12 +48,12 @@ class MangaListTransformer extends AbstractTransformer {
|
||||
'reconsumeCount' => $item['repeat'],
|
||||
'reconsuming' => $reconsuming,
|
||||
'status' => $reconsuming
|
||||
? KitsuStatus::READING
|
||||
: MangaReadingStatus::ANILIST_TO_KITSU[$item['status']],
|
||||
? Enum\MangaReadingStatus\Kitsu::READING
|
||||
: Mapping\MangaReadingStatus::ANILIST_TO_KITSU[$item['status']],
|
||||
'updatedAt' => (new DateTime())
|
||||
->setTimestamp($item['updatedAt'])
|
||||
->format(DateTimeInterface::W3C),
|
||||
]
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,19 +18,13 @@ namespace Aviat\AnimeClient\API\Anilist\Types;
|
||||
|
||||
use Aviat\AnimeClient\Types\AbstractType;
|
||||
|
||||
class MediaListEntry extends AbstractType {
|
||||
|
||||
class MediaListEntry extends AbstractType
|
||||
{
|
||||
public int|string $id;
|
||||
|
||||
public ?string $notes;
|
||||
|
||||
public ?bool $private;
|
||||
|
||||
public int $progress;
|
||||
|
||||
public ?int $repeat;
|
||||
|
||||
public string $status;
|
||||
|
||||
public ?int $score;
|
||||
}
|
||||
}
|
||||
|
@ -21,8 +21,8 @@ use Psr\SimpleCache\CacheInterface;
|
||||
/**
|
||||
* Helper methods for dealing with the Cache
|
||||
*/
|
||||
trait CacheTrait {
|
||||
|
||||
trait CacheTrait
|
||||
{
|
||||
protected CacheInterface $cache;
|
||||
|
||||
/**
|
||||
@ -31,6 +31,7 @@ trait CacheTrait {
|
||||
public function setCache(CacheInterface $cache): self
|
||||
{
|
||||
$this->cache = $cache;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@ -64,4 +65,4 @@ trait CacheTrait {
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,11 +21,12 @@ use Aviat\Ion\Enum;
|
||||
/**
|
||||
* Possible values for watching status for the current anime
|
||||
*/
|
||||
final class Anilist extends Enum {
|
||||
final class Anilist extends Enum
|
||||
{
|
||||
public const WATCHING = 'CURRENT';
|
||||
public const COMPLETED = 'COMPLETED';
|
||||
public const ON_HOLD = 'PAUSED';
|
||||
public const DROPPED = 'DROPPED';
|
||||
public const PLAN_TO_WATCH = 'PLANNING';
|
||||
public const REPEATING = 'REPEATING';
|
||||
}
|
||||
}
|
||||
|
@ -21,10 +21,11 @@ use Aviat\Ion\Enum;
|
||||
/**
|
||||
* Possible values for watching status for the current anime
|
||||
*/
|
||||
final class Kitsu extends Enum {
|
||||
final class Kitsu extends Enum
|
||||
{
|
||||
public const WATCHING = 'current';
|
||||
public const PLAN_TO_WATCH = 'planned';
|
||||
public const ON_HOLD = 'on_hold';
|
||||
public const DROPPED = 'dropped';
|
||||
public const COMPLETED = 'completed';
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,8 @@ use Aviat\Ion\Enum;
|
||||
/**
|
||||
* Possible values for current watching status of anime
|
||||
*/
|
||||
final class Route extends Enum {
|
||||
final class Route extends Enum
|
||||
{
|
||||
public const ALL = 'all';
|
||||
public const WATCHING = 'watching';
|
||||
public const PLAN_TO_WATCH = 'plan_to_watch';
|
||||
|
@ -21,7 +21,8 @@ use Aviat\Ion\Enum;
|
||||
/**
|
||||
* Possible values for current watching status of anime
|
||||
*/
|
||||
final class Title extends Enum {
|
||||
final class Title extends Enum
|
||||
{
|
||||
public const ALL = 'All';
|
||||
public const WATCHING = 'Currently Watching';
|
||||
public const PLAN_TO_WATCH = 'Plan to Watch';
|
||||
|
@ -21,11 +21,12 @@ use Aviat\Ion\Enum;
|
||||
/**
|
||||
* Possible values for watching status for the current anime
|
||||
*/
|
||||
final class Anilist extends Enum {
|
||||
final class Anilist extends Enum
|
||||
{
|
||||
public const READING = 'CURRENT';
|
||||
public const COMPLETED = 'COMPLETED';
|
||||
public const ON_HOLD = 'PAUSED';
|
||||
public const DROPPED = 'DROPPED';
|
||||
public const PLAN_TO_READ = 'PLANNING';
|
||||
public const REPEATING = 'REPEATING';
|
||||
}
|
||||
}
|
||||
|
@ -21,10 +21,11 @@ use Aviat\Ion\Enum;
|
||||
/**
|
||||
* Possible values for current reading status of manga
|
||||
*/
|
||||
final class Kitsu extends Enum {
|
||||
final class Kitsu extends Enum
|
||||
{
|
||||
public const READING = 'current';
|
||||
public const PLAN_TO_READ = 'planned';
|
||||
public const DROPPED = 'dropped';
|
||||
public const ON_HOLD = 'on_hold';
|
||||
public const COMPLETED = 'completed';
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,8 @@ use Aviat\Ion\Enum;
|
||||
/**
|
||||
* Possible values for current reading status of manga
|
||||
*/
|
||||
final class Route extends Enum {
|
||||
final class Route extends Enum
|
||||
{
|
||||
public const ALL = 'all';
|
||||
public const READING = 'reading';
|
||||
public const PLAN_TO_READ = 'plan_to_read';
|
||||
|
@ -21,7 +21,8 @@ use Aviat\Ion\Enum;
|
||||
/**
|
||||
* Possible values for current reading status of manga
|
||||
*/
|
||||
final class Title extends Enum {
|
||||
final class Title extends Enum
|
||||
{
|
||||
public const ALL = 'All';
|
||||
public const READING = 'Currently Reading';
|
||||
public const PLAN_TO_READ = 'Plan to Read';
|
||||
|
@ -21,6 +21,6 @@ use UnexpectedValueException;
|
||||
/**
|
||||
* Exception for an API Request that fails validation
|
||||
*/
|
||||
class FailedResponseException extends UnexpectedValueException {
|
||||
|
||||
}
|
||||
class FailedResponseException extends UnexpectedValueException
|
||||
{
|
||||
}
|
||||
|
@ -18,17 +18,18 @@ namespace Aviat\AnimeClient\API\Kitsu;
|
||||
|
||||
use Aura\Session\Segment;
|
||||
|
||||
use const Aviat\AnimeClient\SESSION_SEGMENT;
|
||||
use Aviat\AnimeClient\API\CacheTrait;
|
||||
|
||||
use Aviat\AnimeClient\Kitsu as K;
|
||||
use Aviat\AnimeClient\API\CacheTrait;
|
||||
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
||||
use Aviat\Ion\Event;
|
||||
use const Aviat\AnimeClient\SESSION_SEGMENT;
|
||||
|
||||
/**
|
||||
* Kitsu API Authentication
|
||||
*/
|
||||
final class Auth {
|
||||
final class Auth
|
||||
{
|
||||
use CacheTrait;
|
||||
use ContainerAware;
|
||||
|
||||
@ -44,8 +45,6 @@ final class Auth {
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param ContainerInterface $container
|
||||
*/
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
@ -94,7 +93,7 @@ final class Auth {
|
||||
*/
|
||||
public function isAuthenticated(): bool
|
||||
{
|
||||
return ($this->getAuthToken() !== NULL);
|
||||
return $this->getAuthToken() !== NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -136,7 +135,7 @@ final class Auth {
|
||||
/**
|
||||
* Save the new authentication information
|
||||
*/
|
||||
private function storeAuth(array|false $auth): bool
|
||||
private function storeAuth(array|FALSE $auth): bool
|
||||
{
|
||||
if (FALSE !== $auth)
|
||||
{
|
||||
@ -157,6 +156,7 @@ final class Auth {
|
||||
$this->segment->set('auth_token', $auth['access_token']);
|
||||
$this->segment->set('auth_token_expires', $expire_time);
|
||||
$this->segment->set('refresh_token', $auth['refresh_token']);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@ -165,4 +165,4 @@ final class Auth {
|
||||
}
|
||||
}
|
||||
|
||||
// End of KitsuAuth.php
|
||||
// End of KitsuAuth.php
|
||||
|