<?php
namespace App\Subscriber\User\Webcam;
use App\Entity\Member;
use App\Event\RedisEventManager;
use App\Event\User\AbstractLivecamEvent;
use App\Event\User\LivecamOfflineEvent;
use App\Event\User\LivecamOnlineEvent;
use App\Service\Media\MemberMediaService;
use App\Subscriber\AbstractRedisEventManagerSubscriber;
use Frivol\Common\Service\Notification\WebcamNotification;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Routing\RouterInterface;
class NotificationSubscriber extends AbstractRedisEventManagerSubscriber implements EventSubscriberInterface
{
/**
* @var MemberMediaService
*/
protected $memberMediaService;
/**
* NotificationSubscriber constructor.
*/
public function __construct(MemberMediaService $memberMediaService, RedisEventManager $redisEventManager,
RouterInterface $router)
{
$this->memberMediaService = $memberMediaService;
parent::__construct($redisEventManager, $router);
}
public static function getSubscribedEvents(): array
{
return [
LivecamOnlineEvent::class => [
['sendNotification', 0],
],
LivecamOfflineEvent::class => [
['sendNotification', 0],
],
];
}
public function sendNotification(AbstractLivecamEvent $event)
{
$member = $event->getMember();
if (!$member->getIsAmateur()) {
return;
}
$notification = new WebcamNotification();
$notification->setData([
'username' => $member->getUsername(),
'sex' => $member->getSex(),
'id' => $member->getId(),
'status' => $event->getStatus(),
'image' => $this->getMediaUrl($member, false),
]);
$notification->setFromUsername($member->getUsername());
$notification->setFromMemberId($member->getId());
$this->getRedisEventManager()->publishToAll($member, $notification);
}
public function getMediaUrl(Member $member, bool $blur): ?string
{
if (!$media = $member->getMainPhoto()) {
return null;
}
return $this->memberMediaService->getUrlForMemberMedia($media, false, '100x100');
}
}