mirror of
https://github.com/ad-aures/castopod.git
synced 2026-04-04 23:36:44 +02:00
feat(media): add s3 to manage media files
Users may choose between filesystem (FS) or S3 to store and manage their media files
This commit is contained in:
parent
9fc49a7430
commit
d93fc98469
85 changed files with 2169 additions and 977 deletions
|
|
@ -1,109 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* Generates and renders a breadcrumb based on the current url segments
|
||||
*
|
||||
* @copyright 2022 Ad Aures
|
||||
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
|
||||
* @link https://castopod.org/
|
||||
*/
|
||||
|
||||
namespace App\Libraries;
|
||||
|
||||
use stdClass;
|
||||
|
||||
class TranscriptParser
|
||||
{
|
||||
protected string $transcriptContent;
|
||||
|
||||
public function loadString(string $content): self
|
||||
{
|
||||
$this->transcriptContent = $content;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adapted from: https://stackoverflow.com/a/11659306
|
||||
*/
|
||||
public function parseSrt(): string | false
|
||||
{
|
||||
if (! defined('SRT_STATE_SUBNUMBER')) {
|
||||
define('SRT_STATE_SUBNUMBER', 0);
|
||||
}
|
||||
|
||||
if (! defined('SRT_STATE_TIME')) {
|
||||
define('SRT_STATE_TIME', 1);
|
||||
}
|
||||
|
||||
if (! defined('SRT_STATE_TEXT')) {
|
||||
define('SRT_STATE_TEXT', 2);
|
||||
}
|
||||
|
||||
if (! defined('SRT_STATE_BLANK')) {
|
||||
define('SRT_STATE_BLANK', 3);
|
||||
}
|
||||
|
||||
$subs = [];
|
||||
$state = SRT_STATE_SUBNUMBER;
|
||||
$subNum = 0;
|
||||
$subText = '';
|
||||
$subTime = '';
|
||||
|
||||
$lines = explode(PHP_EOL, $this->transcriptContent);
|
||||
foreach ($lines as $line) {
|
||||
switch ($state) {
|
||||
case SRT_STATE_SUBNUMBER:
|
||||
$subNum = trim($line);
|
||||
$state = SRT_STATE_TIME;
|
||||
break;
|
||||
|
||||
case SRT_STATE_TIME:
|
||||
$subTime = trim($line);
|
||||
$state = SRT_STATE_TEXT;
|
||||
break;
|
||||
|
||||
case SRT_STATE_TEXT:
|
||||
if (trim($line) === '') {
|
||||
$sub = new stdClass();
|
||||
$sub->number = (int) $subNum;
|
||||
[$startTime, $endTime] = explode(' --> ', $subTime);
|
||||
$sub->startTime = $this->getSecondsFromTimeString($startTime);
|
||||
$sub->endTime = $this->getSecondsFromTimeString($endTime);
|
||||
$sub->text = trim($subText);
|
||||
$subText = '';
|
||||
$state = SRT_STATE_SUBNUMBER;
|
||||
|
||||
$subs[] = $sub;
|
||||
} else {
|
||||
if ($subText !== '') {
|
||||
$subText .= PHP_EOL . $line;
|
||||
}
|
||||
|
||||
$subText .= $line;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($state === SRT_STATE_TEXT) {
|
||||
// if file was missing the trailing newlines, we'll be in this
|
||||
// state here. Append the last read text and add the last sub.
|
||||
// @phpstan-ignore-next-line
|
||||
$sub->text = $subText;
|
||||
// @phpstan-ignore-next-line
|
||||
$subs[] = $sub;
|
||||
}
|
||||
|
||||
return json_encode($subs, JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
private function getSecondsFromTimeString(string $timeString): float
|
||||
{
|
||||
$timeString = explode(',', $timeString);
|
||||
return (strtotime($timeString[0]) - strtotime('TODAY')) + (float) "0.{$timeString[1]}";
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue