134 lines
2.8 KiB
PHP
134 lines
2.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace OCA\RePod\Core\EpisodeAction;
|
|
|
|
use OCA\GPodderSync\Core\EpisodeAction\EpisodeAction;
|
|
|
|
/**
|
|
* Base: https://github.com/pbek/nextcloud-nextpod/blob/main/lib/Core/EpisodeAction/EpisodeActionExtraData.php.
|
|
* Specs: https://github.com/Podcast-Standards-Project/PSP-1-Podcast-RSS-Specification/blob/main/README.md#required-item-elements.
|
|
*
|
|
* @psalm-import-type EpisodeActionType from EpisodeAction
|
|
*
|
|
* @psalm-type EpisodeActionExtraDataType = array{
|
|
* podcast: string,
|
|
* url: ?string,
|
|
* name: string,
|
|
* link: ?string,
|
|
* image: ?string,
|
|
* description: ?string,
|
|
* fetchedAtUnix: int,
|
|
* guid: string,
|
|
* type: ?string,
|
|
* size: ?int,
|
|
* pubDate: ?\DateTime,
|
|
* duration: ?int,
|
|
* action: ?EpisodeActionType
|
|
* }
|
|
*/
|
|
class EpisodeActionExtraData implements \JsonSerializable
|
|
{
|
|
public function __construct(
|
|
private string $podcast,
|
|
private ?string $url,
|
|
private string $name,
|
|
private ?string $link,
|
|
private ?string $image,
|
|
private ?string $description,
|
|
private int $fetchedAtUnix,
|
|
private string $guid,
|
|
private ?string $type,
|
|
private ?int $size,
|
|
private ?\DateTime $pubDate,
|
|
private ?int $duration,
|
|
private ?EpisodeAction $action
|
|
) {}
|
|
|
|
public function __toString(): string {
|
|
return $this->url ?? '/no episodeUrl/';
|
|
}
|
|
|
|
public function getPodcast(): string {
|
|
return $this->podcast;
|
|
}
|
|
|
|
public function getUrl(): ?string {
|
|
return $this->url;
|
|
}
|
|
|
|
public function getName(): string {
|
|
return $this->name;
|
|
}
|
|
|
|
public function getLink(): ?string {
|
|
return $this->link;
|
|
}
|
|
|
|
public function getImage(): ?string {
|
|
return $this->image;
|
|
}
|
|
|
|
public function getDescription(): ?string {
|
|
return $this->description;
|
|
}
|
|
|
|
public function getFetchedAtUnix(): int {
|
|
return $this->fetchedAtUnix;
|
|
}
|
|
|
|
public function getGuid(): string {
|
|
return $this->guid;
|
|
}
|
|
|
|
public function getType(): ?string {
|
|
return $this->type;
|
|
}
|
|
|
|
public function getSize(): ?int {
|
|
return $this->size;
|
|
}
|
|
|
|
public function getPubDate(): ?\DateTime {
|
|
return $this->pubDate;
|
|
}
|
|
|
|
public function getDuration(): ?int {
|
|
return $this->duration;
|
|
}
|
|
|
|
public function getAction(): ?EpisodeAction {
|
|
return $this->action;
|
|
}
|
|
|
|
/**
|
|
* @return EpisodeActionExtraDataType
|
|
*/
|
|
public function toArray(): array {
|
|
return
|
|
[
|
|
'podcast' => $this->podcast,
|
|
'url' => $this->url,
|
|
'name' => $this->name,
|
|
'link' => $this->link,
|
|
'image' => $this->image,
|
|
'description' => $this->description,
|
|
'fetchedAtUnix' => $this->fetchedAtUnix,
|
|
'guid' => $this->guid,
|
|
'type' => $this->type,
|
|
'size' => $this->size,
|
|
'pubDate' => $this->pubDate,
|
|
'duration' => $this->duration,
|
|
'action' => $this->action ? $this->action->toArray() : null,
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return EpisodeActionExtraDataType
|
|
*/
|
|
public function jsonSerialize(): mixed {
|
|
return $this->toArray();
|
|
}
|
|
}
|