1 | <?php declare(strict_types=1); |
||
18 | class IteratePagesService implements ServiceInterface |
||
19 | { |
||
20 | /** |
||
21 | * @var RequestService |
||
22 | */ |
||
23 | private $requestService; |
||
24 | |||
25 | /** |
||
26 | * @param RequestService $requestService |
||
27 | */ |
||
28 | 1 | public function __construct(RequestService $requestService) |
|
29 | { |
||
30 | 1 | $this->requestService = $requestService; |
|
31 | 1 | } |
|
32 | |||
33 | 1 | public function handle(string $path = null): CancellablePromiseInterface |
|
34 | { |
||
35 | return resolve(Observable::create(function ( |
||
36 | ObserverInterface $observer, |
||
37 | SchedulerInterface $scheduler |
||
|
|||
38 | ) use ($path) { |
||
39 | 1 | $promise = $this->requestService-> |
|
40 | 1 | handle(new Request('GET', $path))-> |
|
41 | 1 | then( |
|
42 | function ($response) use ($observer) { |
||
43 | 1 | return $this->handleResponse($response, $observer); |
|
44 | 1 | }, |
|
45 | function ($error) use ($observer) { |
||
46 | $observer->onError($error); |
||
47 | 1 | } |
|
48 | ) |
||
49 | ; |
||
50 | |||
51 | return new CallbackDisposable(function () use ($promise) { |
||
52 | //$promise->cancel(); |
||
53 | 1 | }); |
|
54 | 1 | })); |
|
55 | } |
||
56 | |||
57 | 1 | private function handleResponse( |
|
58 | ResponseInterface $response, |
||
59 | ObserverInterface $observer |
||
60 | ): CancellablePromiseInterface { |
||
61 | 1 | if (!$response->hasHeader('link')) { |
|
62 | return $this->handleResponseContentsComplete($response, $observer); |
||
63 | } |
||
64 | |||
65 | $links = [ |
||
66 | 1 | 'next' => false, |
|
67 | 'last' => false, |
||
68 | ]; |
||
69 | 1 | foreach (explode(', ', $response->getHeader('link')[0]) as $link) { |
|
70 | 1 | list($url, $rel) = explode('>; rel="', ltrim(rtrim($link, '"'), '<')); |
|
71 | 1 | if (isset($links[$rel])) { |
|
72 | 1 | $links[$rel] = $url; |
|
73 | } |
||
74 | } |
||
75 | |||
76 | 1 | if ($links['next'] === false || $links['last'] === false) { |
|
77 | 1 | return $this->handleResponseContentsComplete($response, $observer); |
|
78 | } |
||
79 | |||
80 | 1 | $promises = []; |
|
81 | |||
82 | 1 | $promises[] = $this->requestService-> |
|
83 | 1 | handle(new Request('GET', $links['next']))-> |
|
84 | then(function (ResponseInterface $response) use ($observer) { |
||
85 | 1 | return $this->handleResponse($response, $observer); |
|
86 | 1 | }) |
|
87 | ; |
||
88 | |||
89 | 1 | $promises[] = $this->handleResponseContents($response, $observer); |
|
90 | |||
91 | return all($promises); |
||
92 | } |
||
93 | |||
94 | private function handleResponseContentsComplete( |
||
106 | |||
107 | 1 | private function handleResponseContents( |
|
108 | ResponseInterface $response, |
||
109 | ObserverInterface $observer |
||
114 | } |
||
115 |
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.