3 namespace Wallabag\ImportBundle\Consumer
;
6 use Doctrine\ORM\EntityManager
;
7 use Wallabag\ImportBundle\Import\AbstractImport
;
8 use Wallabag\UserBundle\Repository\UserRepository
;
9 use Wallabag\CoreBundle\Entity\Entry
;
10 use Wallabag\CoreBundle\Entity\Tag
;
11 use Psr\Log\LoggerInterface
;
12 use Psr\Log\NullLogger
;
14 class RedisEntryConsumer
implements Job
17 private $userRepository;
21 public function __construct(EntityManager
$em, UserRepository
$userRepository, AbstractImport
$import, LoggerInterface
$logger = null)
24 $this->userRepository
= $userRepository;
25 $this->import
= $import;
26 $this->logger
= $logger ?: new NullLogger();
30 * Handle one message by one message.
32 * @param string $job Content of the message (directly from Redis)
36 public function manage($job)
38 $storedEntry = json_decode($job, true);
40 $user = $this->userRepository
->find($storedEntry['userId']);
42 // no user? Drop message
44 $this->logger
->warning('Unable to retrieve user', ['entry' => $storedEntry]);
49 $this->import
->setUser($user);
51 $entry = $this->import
->parseEntry($storedEntry);
53 if (null === $entry) {
54 $this->logger
->warning('Unable to parse entry', ['entry' => $storedEntry]);
62 // clear only affected entities
63 $this->em
->clear(Entry
::class);
64 $this->em
->clear(Tag
::class);
65 } catch (\Exception
$e) {
66 $this->logger
->warning('Unable to save entry', ['entry' => $storedEntry, 'exception' => $e]);
71 $this->logger
->info('Content with url ('.$entry->getUrl().') imported !');
77 * Should tell if the given job will kill the worker.
78 * We don't want to stop it :).
80 public function isStopJob($job)