setSong($song); $this->station = $station; } public function getStation(): Station { return $this->station; } public function getPlaylist(): ?StationPlaylist { return $this->playlist; } public function setPlaylist(StationPlaylist $playlist = null): void { $this->playlist = $playlist; } public function getStreamer(): ?StationStreamer { return $this->streamer; } public function setStreamer(?StationStreamer $streamer): void { $this->streamer = $streamer; } public function getMedia(): ?StationMedia { return $this->media; } public function setMedia(?StationMedia $media = null): void { $this->media = $media; if (null !== $media) { $this->setDuration($media->getCalculatedLength()); } } public function getRequest(): ?StationRequest { return $this->request; } public function setRequest(?StationRequest $request): void { $this->request = $request; } public function getTimestampStart(): int { return $this->timestamp_start; } public function setTimestampStart(int $timestamp_start): void { $this->timestamp_start = $timestamp_start; } public function getDuration(): ?int { return $this->duration; } public function setDuration(?int $duration): void { $this->duration = $duration; } public function getListenersStart(): ?int { return $this->listeners_start; } public function setListenersStart(?int $listeners_start): void { $this->listeners_start = $listeners_start; } public function getTimestampEnd(): int { return $this->timestamp_end; } public function setTimestampEnd(int $timestamp_end): void { $this->timestamp_end = $timestamp_end; if (!$this->duration) { $this->duration = $timestamp_end - $this->timestamp_start; } } public function getTimestamp(): int { return $this->timestamp_start; } public function getListenersEnd(): ?int { return $this->listeners_end; } public function setListenersEnd(?int $listeners_end): void { $this->listeners_end = $listeners_end; } public function getUniqueListeners(): ?int { return $this->unique_listeners; } public function setUniqueListeners(?int $unique_listeners): void { $this->unique_listeners = $unique_listeners; } public function getListeners(): int { return (int)$this->listeners_start; } public function getDeltaTotal(): int { return $this->delta_total; } public function setDeltaTotal(int $delta_total): void { $this->delta_total = $this->truncateSmallInt($delta_total); } public function getDeltaPositive(): int { return $this->delta_positive; } public function setDeltaPositive(int $delta_positive): void { $this->delta_positive = $this->truncateSmallInt($delta_positive); } public function getDeltaNegative(): int { return $this->delta_negative; } public function setDeltaNegative(int $delta_negative): void { $this->delta_negative = $this->truncateSmallInt($delta_negative); } public function getDeltaPoints(): mixed { return $this->delta_points; } public function addDeltaPoint(mixed $delta_point): void { $delta_points = (array)$this->delta_points; $delta_points[] = $delta_point; $this->delta_points = $delta_points; } /** * @return bool Whether the record should be shown in APIs (i.e. is not a jingle) */ public function showInApis(): bool { if ($this->playlist instanceof StationPlaylist) { return !$this->playlist->getIsJingle(); } return true; } public function __toString(): string { if ($this->media instanceof StationMedia) { return (string)$this->media; } return (string)(new Song($this)); } public static function fromQueue(StationQueue $queue): self { $sh = new self($queue->getStation(), $queue); $sh->setMedia($queue->getMedia()); $sh->setRequest($queue->getRequest()); $sh->setPlaylist($queue->getPlaylist()); $sh->setDuration($queue->getDuration()); return $sh; } }