|
|
|
@ -32,10 +32,12 @@ use OCA\UserStatus\Db\UserStatusMapper;
|
|
|
|
|
use OCA\UserStatus\Service\StatusService;
|
|
|
|
|
use OCP\AppFramework\Db\DoesNotExistException;
|
|
|
|
|
use OCP\AppFramework\Utility\ITimeFactory;
|
|
|
|
|
use OCP\DB\Exception;
|
|
|
|
|
use OCP\EventDispatcher\Event;
|
|
|
|
|
use OCP\EventDispatcher\IEventListener;
|
|
|
|
|
use OCP\User\Events\UserLiveStatusEvent;
|
|
|
|
|
use OCP\UserStatus\IUserStatus;
|
|
|
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Class UserDeletedListener
|
|
|
|
@ -50,7 +52,8 @@ class UserLiveStatusListener implements IEventListener {
|
|
|
|
|
public function __construct(UserStatusMapper $mapper,
|
|
|
|
|
StatusService $statusService,
|
|
|
|
|
ITimeFactory $timeFactory,
|
|
|
|
|
private CalendarStatusService $calendarStatusService) {
|
|
|
|
|
private CalendarStatusService $calendarStatusService,
|
|
|
|
|
private LoggerInterface $logger) {
|
|
|
|
|
$this->mapper = $mapper;
|
|
|
|
|
$this->statusService = $statusService;
|
|
|
|
|
$this->timeFactory = $timeFactory;
|
|
|
|
@ -110,7 +113,19 @@ class UserLiveStatusListener implements IEventListener {
|
|
|
|
|
$userStatus->setIsUserDefined(false);
|
|
|
|
|
|
|
|
|
|
if ($userStatus->getId() === null) {
|
|
|
|
|
$this->mapper->insert($userStatus);
|
|
|
|
|
try {
|
|
|
|
|
$this->mapper->insert($userStatus);
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
if ($e->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) {
|
|
|
|
|
// A different process might have written another status
|
|
|
|
|
// update to the DB while we're processing our stuff.
|
|
|
|
|
// We can safely ignore it as we're only changing between AWAY and ONLINE
|
|
|
|
|
// and not doing anything with the message or icon.
|
|
|
|
|
$this->logger->debug('Unique constraint violation for live user status', ['exception' => $e]);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
throw $e;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$this->mapper->update($userStatus);
|
|
|
|
|
}
|
|
|
|
|