mirror of
https://github.com/ad-aures/castopod.git
synced 2026-04-15 12:37:46 +02:00
feat: add transcript display to episode page
+ fix transcript parser closes #411
This commit is contained in:
parent
88851b0226
commit
4d141fceae
9 changed files with 274 additions and 23 deletions
|
|
@ -167,7 +167,7 @@ class EpisodeController extends BaseController
|
|||
return $cachedView;
|
||||
}
|
||||
|
||||
public function chapters(): String
|
||||
public function chapters(): string
|
||||
{
|
||||
// Prevent analytics hit when authenticated
|
||||
if (! auth()->loggedIn()) {
|
||||
|
|
@ -228,6 +228,72 @@ class EpisodeController extends BaseController
|
|||
return $cachedView;
|
||||
}
|
||||
|
||||
public function transcript(): string
|
||||
{
|
||||
// Prevent analytics hit when authenticated
|
||||
if (! auth()->loggedIn()) {
|
||||
$this->registerPodcastWebpageHit($this->episode->podcast_id);
|
||||
}
|
||||
|
||||
$cacheName = implode(
|
||||
'_',
|
||||
array_filter([
|
||||
'page',
|
||||
"podcast#{$this->podcast->id}",
|
||||
"episode#{$this->episode->id}",
|
||||
'transcript',
|
||||
service('request')
|
||||
->getLocale(),
|
||||
is_unlocked($this->podcast->handle) ? 'unlocked' : null,
|
||||
auth()
|
||||
->loggedIn() ? 'authenticated' : null,
|
||||
]),
|
||||
);
|
||||
|
||||
if (! ($cachedView = cache($cacheName))) {
|
||||
// get transcript from json file
|
||||
$data = [
|
||||
'metatags' => get_episode_metatags($this->episode),
|
||||
'podcast' => $this->podcast,
|
||||
'episode' => $this->episode,
|
||||
];
|
||||
|
||||
if ($this->episode->transcript !== null) {
|
||||
$data['transcript'] = $this->episode->transcript;
|
||||
|
||||
if ($this->episode->transcript->json_key !== null) {
|
||||
/** @var FileManagerInterface $fileManager */
|
||||
$fileManager = service('file_manager');
|
||||
$transcriptJsonString = (string) $fileManager->getFileContents(
|
||||
$this->episode->transcript->json_key
|
||||
);
|
||||
|
||||
$data['captions'] = json_decode($transcriptJsonString, true);
|
||||
}
|
||||
}
|
||||
|
||||
$secondsToNextUnpublishedEpisode = (new EpisodeModel())->getSecondsToNextUnpublishedEpisode(
|
||||
$this->podcast->id,
|
||||
);
|
||||
|
||||
if (auth()->loggedIn()) {
|
||||
helper('form');
|
||||
|
||||
return view('episode/transcript', $data);
|
||||
}
|
||||
|
||||
// The page cache is set to a decade so it is deleted manually upon podcast update
|
||||
return view('episode/transcript', $data, [
|
||||
'cache' => $secondsToNextUnpublishedEpisode
|
||||
? $secondsToNextUnpublishedEpisode
|
||||
: DECADE,
|
||||
'cache_name' => $cacheName,
|
||||
]);
|
||||
}
|
||||
|
||||
return $cachedView;
|
||||
}
|
||||
|
||||
public function embed(string $theme = 'light-transparent'): string
|
||||
{
|
||||
header('Content-Security-Policy: frame-ancestors http://*:* https://*:*');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue