nextcloud-gpodder/lib/Core/PodcastData/PodcastMetrics.php
2022-10-28 09:50:44 +02:00

81 lines
1.6 KiB
PHP

<?php
declare(strict_types=1);
namespace OCA\GPodderSync\Core\PodcastData;
use JsonSerializable;
class PodcastMetrics implements JsonSerializable {
private string $url;
private int $listenedSeconds;
private PodcastActionCounts $actionCounts;
private ?PodcastData $podcastData;
public function __construct(
string $url,
int $listenedSeconds = 0,
?PodcastActionCounts $actionCounts = null,
?PodcastData $podcastData = null,
) {
$this->url = $url;
$this->actionCounts = $actionCounts ?? new PodcastActionCounts;
$this->listenedSeconds = $listenedSeconds;
$this->podcastData = $podcastData;
}
/**
* @return string
*/
public function getUrl(): string {
return $this->url;
}
/**
* @return PodcastActionCounts
*/
public function getActionCounts(): PodcastActionCounts {
return $this->actionCounts;
}
/**
* @return int
*/
public function getListenedSeconds(): int {
return $this->listenedSeconds;
}
/**
* @param int $seconds
*/
public function addListenedSeconds(int $seconds): void {
$this->listenedSeconds += $seconds;
}
/**
* @return PodcastData|null
*/
public function getPodcastData(): ?PodcastData {
return $this->podcastData;
}
/**
* @return array<string,mixed>
*/
public function toArray(): array {
return
[
'url' => $this->url,
'listenedSeconds' => $this->listenedSeconds,
'actionCounts' => $this->actionCounts->toArray(),
'podcastData' => $this->podcastData->toArray(),
];
}
/**
* @return array<string,mixed>
*/
public function jsonSerialize(): mixed {
return $this->toArray();
}
}