Skip to content

Commit 3c4f163

Browse files
committed
feat: support head requests for episodes
1 parent 2c27010 commit 3c4f163

File tree

9 files changed

+120
-84
lines changed

9 files changed

+120
-84
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,4 @@
4949
"npm run build"
5050
]
5151
}
52-
}
52+
}

composer.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.js

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugin/routes.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
],
3939
[
4040
'pattern' => '(:all)/' . option('mauricerenck.podcaster.downloadTriggerPath', 'download') . '/(:any)',
41+
'method' => 'GET|HEAD',
4142
'action' => function ($slug) {
4243
$podcast = new Podcast();
4344

@@ -69,10 +70,17 @@
6970
$this->next();
7071
}
7172

73+
$audio = $podcast->getAudioFile($episode);
74+
75+
// Check if the request method is HEAD
76+
if (kirby()->request()->method() === 'HEAD') {
77+
// Send headers only, no body
78+
return $audio->header(false);
79+
}
80+
7281
$stats->trackEpisode($feed, $episode, $userAgent);
73-
// $stats->calculateCarbonEmissions($feed, $episode);
7482

75-
return $podcast->getAudioFile($episode);
83+
return $audio;
7684
},
7785
],
7886
[

tests/PodcastTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -204,18 +204,18 @@ public function testPodloveEpisodeJson()
204204
'title' => 'Test Podcast',
205205
'subtitle' => 'Podcast Subtitle',
206206
'summary' =>
207-
'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
208-
'poster' => '/media/pages/phpunit/podcast-seasons/feed/d32a8154c7-1674840090/cover.png',
207+
'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
208+
'poster' => '/media/pages/phpunit/podcast-seasons/feed/2b6f862a69-1752141852/cover.png',
209209
'link' => 'https://erzaehl.es',
210210
],
211211

212212
'title' => 'Episode Title',
213213
'subtitle' => 'Episode subtitle',
214214
'summary' =>
215-
'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
216-
'publicationDate' => '2021-01-06T21:45:00+00:00',
215+
'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
216+
'publicationDate' => '2021-01-06T21:45:00+01:00',
217217
'duration' => '00:00:15',
218-
'poster' => '/media/pages/phpunit/podcast-seasons/feed/d32a8154c7-1674840090/cover.png',
218+
'poster' => '/media/pages/phpunit/podcast-seasons/feed/2b6f862a69-1752141852/cover.png',
219219
'link' => $pageMock->url(),
220220

221221
'audio' => [
@@ -242,7 +242,7 @@ public function testPodloveEpisodeJson()
242242
'title' => 'Chapter Title',
243243
'href' => 'https://chapter.tld',
244244
'image' =>
245-
'/media/pages/phpunit/podcast-seasons/season01/episode-1/87a0931e55-1674840090/cover.png',
245+
'/media/pages/phpunit/podcast-seasons/season01/episode-1/b6bd54d3b2-1752141852/cover.png',
246246
],
247247
[
248248
'start' => '00:20:00.000',
@@ -275,7 +275,7 @@ public function testPodloveEpisodeJson()
275275
],
276276
],
277277
],
278-
'transcripts' => '/media/pages/phpunit/podcast-seasons/season01/episode-1/eeb0786efc-1706716589/test.vtt',
278+
'transcripts' => '/media/pages/phpunit/podcast-seasons/season01/episode-1/df30ca4d51-1752141852/test.vtt',
279279
];
280280

281281
$podcast = new Podcast();

vendor/autoload.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@
1414
echo $err;
1515
}
1616
}
17-
trigger_error(
18-
$err,
19-
E_USER_ERROR
20-
);
17+
throw new RuntimeException($err);
2118
}
2219

2320
require_once __DIR__ . '/composer/autoload_real.php';

vendor/composer/ClassLoader.php

Lines changed: 45 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -45,66 +45,63 @@ class ClassLoader
4545
/** @var \Closure(string):void */
4646
private static $includeFile;
4747

48-
/** @var ?string */
48+
/** @var string|null */
4949
private $vendorDir;
5050

5151
// PSR-4
5252
/**
53-
* @var array[]
54-
* @psalm-var array<string, array<string, int>>
53+
* @var array<string, array<string, int>>
5554
*/
5655
private $prefixLengthsPsr4 = array();
5756
/**
58-
* @var array[]
59-
* @psalm-var array<string, array<int, string>>
57+
* @var array<string, list<string>>
6058
*/
6159
private $prefixDirsPsr4 = array();
6260
/**
63-
* @var array[]
64-
* @psalm-var array<string, string>
61+
* @var list<string>
6562
*/
6663
private $fallbackDirsPsr4 = array();
6764

6865
// PSR-0
6966
/**
70-
* @var array[]
71-
* @psalm-var array<string, array<string, string[]>>
67+
* List of PSR-0 prefixes
68+
*
69+
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
70+
*
71+
* @var array<string, array<string, list<string>>>
7272
*/
7373
private $prefixesPsr0 = array();
7474
/**
75-
* @var array[]
76-
* @psalm-var array<string, string>
75+
* @var list<string>
7776
*/
7877
private $fallbackDirsPsr0 = array();
7978

8079
/** @var bool */
8180
private $useIncludePath = false;
8281

8382
/**
84-
* @var string[]
85-
* @psalm-var array<string, string>
83+
* @var array<string, string>
8684
*/
8785
private $classMap = array();
8886

8987
/** @var bool */
9088
private $classMapAuthoritative = false;
9189

9290
/**
93-
* @var bool[]
94-
* @psalm-var array<string, bool>
91+
* @var array<string, bool>
9592
*/
9693
private $missingClasses = array();
9794

98-
/** @var ?string */
95+
/** @var string|null */
9996
private $apcuPrefix;
10097

10198
/**
102-
* @var self[]
99+
* @var array<string, self>
103100
*/
104101
private static $registeredLoaders = array();
105102

106103
/**
107-
* @param ?string $vendorDir
104+
* @param string|null $vendorDir
108105
*/
109106
public function __construct($vendorDir = null)
110107
{
@@ -113,7 +110,7 @@ public function __construct($vendorDir = null)
113110
}
114111

115112
/**
116-
* @return string[]
113+
* @return array<string, list<string>>
117114
*/
118115
public function getPrefixes()
119116
{
@@ -125,44 +122,39 @@ public function getPrefixes()
125122
}
126123

127124
/**
128-
* @return array[]
129-
* @psalm-return array<string, array<int, string>>
125+
* @return array<string, list<string>>
130126
*/
131127
public function getPrefixesPsr4()
132128
{
133129
return $this->prefixDirsPsr4;
134130
}
135131

136132
/**
137-
* @return array[]
138-
* @psalm-return array<string, string>
133+
* @return list<string>
139134
*/
140135
public function getFallbackDirs()
141136
{
142137
return $this->fallbackDirsPsr0;
143138
}
144139

145140
/**
146-
* @return array[]
147-
* @psalm-return array<string, string>
141+
* @return list<string>
148142
*/
149143
public function getFallbackDirsPsr4()
150144
{
151145
return $this->fallbackDirsPsr4;
152146
}
153147

154148
/**
155-
* @return string[] Array of classname => path
156-
* @psalm-return array<string, string>
149+
* @return array<string, string> Array of classname => path
157150
*/
158151
public function getClassMap()
159152
{
160153
return $this->classMap;
161154
}
162155

163156
/**
164-
* @param string[] $classMap Class to filename map
165-
* @psalm-param array<string, string> $classMap
157+
* @param array<string, string> $classMap Class to filename map
166158
*
167159
* @return void
168160
*/
@@ -179,24 +171,25 @@ public function addClassMap(array $classMap)
179171
* Registers a set of PSR-0 directories for a given prefix, either
180172
* appending or prepending to the ones previously set for this prefix.
181173
*
182-
* @param string $prefix The prefix
183-
* @param string[]|string $paths The PSR-0 root directories
184-
* @param bool $prepend Whether to prepend the directories
174+
* @param string $prefix The prefix
175+
* @param list<string>|string $paths The PSR-0 root directories
176+
* @param bool $prepend Whether to prepend the directories
185177
*
186178
* @return void
187179
*/
188180
public function add($prefix, $paths, $prepend = false)
189181
{
182+
$paths = (array) $paths;
190183
if (!$prefix) {
191184
if ($prepend) {
192185
$this->fallbackDirsPsr0 = array_merge(
193-
(array) $paths,
186+
$paths,
194187
$this->fallbackDirsPsr0
195188
);
196189
} else {
197190
$this->fallbackDirsPsr0 = array_merge(
198191
$this->fallbackDirsPsr0,
199-
(array) $paths
192+
$paths
200193
);
201194
}
202195

@@ -205,19 +198,19 @@ public function add($prefix, $paths, $prepend = false)
205198

206199
$first = $prefix[0];
207200
if (!isset($this->prefixesPsr0[$first][$prefix])) {
208-
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
201+
$this->prefixesPsr0[$first][$prefix] = $paths;
209202

210203
return;
211204
}
212205
if ($prepend) {
213206
$this->prefixesPsr0[$first][$prefix] = array_merge(
214-
(array) $paths,
207+
$paths,
215208
$this->prefixesPsr0[$first][$prefix]
216209
);
217210
} else {
218211
$this->prefixesPsr0[$first][$prefix] = array_merge(
219212
$this->prefixesPsr0[$first][$prefix],
220-
(array) $paths
213+
$paths
221214
);
222215
}
223216
}
@@ -226,27 +219,28 @@ public function add($prefix, $paths, $prepend = false)
226219
* Registers a set of PSR-4 directories for a given namespace, either
227220
* appending or prepending to the ones previously set for this namespace.
228221
*
229-
* @param string $prefix The prefix/namespace, with trailing '\\'
230-
* @param string[]|string $paths The PSR-4 base directories
231-
* @param bool $prepend Whether to prepend the directories
222+
* @param string $prefix The prefix/namespace, with trailing '\\'
223+
* @param list<string>|string $paths The PSR-4 base directories
224+
* @param bool $prepend Whether to prepend the directories
232225
*
233226
* @throws \InvalidArgumentException
234227
*
235228
* @return void
236229
*/
237230
public function addPsr4($prefix, $paths, $prepend = false)
238231
{
232+
$paths = (array) $paths;
239233
if (!$prefix) {
240234
// Register directories for the root namespace.
241235
if ($prepend) {
242236
$this->fallbackDirsPsr4 = array_merge(
243-
(array) $paths,
237+
$paths,
244238
$this->fallbackDirsPsr4
245239
);
246240
} else {
247241
$this->fallbackDirsPsr4 = array_merge(
248242
$this->fallbackDirsPsr4,
249-
(array) $paths
243+
$paths
250244
);
251245
}
252246
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
@@ -256,18 +250,18 @@ public function addPsr4($prefix, $paths, $prepend = false)
256250
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
257251
}
258252
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
259-
$this->prefixDirsPsr4[$prefix] = (array) $paths;
253+
$this->prefixDirsPsr4[$prefix] = $paths;
260254
} elseif ($prepend) {
261255
// Prepend directories for an already registered namespace.
262256
$this->prefixDirsPsr4[$prefix] = array_merge(
263-
(array) $paths,
257+
$paths,
264258
$this->prefixDirsPsr4[$prefix]
265259
);
266260
} else {
267261
// Append directories for an already registered namespace.
268262
$this->prefixDirsPsr4[$prefix] = array_merge(
269263
$this->prefixDirsPsr4[$prefix],
270-
(array) $paths
264+
$paths
271265
);
272266
}
273267
}
@@ -276,8 +270,8 @@ public function addPsr4($prefix, $paths, $prepend = false)
276270
* Registers a set of PSR-0 directories for a given prefix,
277271
* replacing any others previously set for this prefix.
278272
*
279-
* @param string $prefix The prefix
280-
* @param string[]|string $paths The PSR-0 base directories
273+
* @param string $prefix The prefix
274+
* @param list<string>|string $paths The PSR-0 base directories
281275
*
282276
* @return void
283277
*/
@@ -294,8 +288,8 @@ public function set($prefix, $paths)
294288
* Registers a set of PSR-4 directories for a given namespace,
295289
* replacing any others previously set for this namespace.
296290
*
297-
* @param string $prefix The prefix/namespace, with trailing '\\'
298-
* @param string[]|string $paths The PSR-4 base directories
291+
* @param string $prefix The prefix/namespace, with trailing '\\'
292+
* @param list<string>|string $paths The PSR-4 base directories
299293
*
300294
* @throws \InvalidArgumentException
301295
*
@@ -481,9 +475,9 @@ public function findFile($class)
481475
}
482476

483477
/**
484-
* Returns the currently registered loaders indexed by their corresponding vendor directories.
478+
* Returns the currently registered loaders keyed by their corresponding vendor directories.
485479
*
486-
* @return self[]
480+
* @return array<string, self>
487481
*/
488482
public static function getRegisteredLoaders()
489483
{

0 commit comments

Comments
 (0)