]>
Commit | Line | Data |
---|---|---|
ef75e122 JB |
1 | <?php |
2 | ||
b3437d58 | 3 | namespace Wallabag\ImportBundle\Consumer; |
ef75e122 JB |
4 | |
5 | use Doctrine\ORM\EntityManager; | |
6 | use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface; | |
7 | use PhpAmqpLib\Message\AMQPMessage; | |
c98db1b6 | 8 | use Wallabag\ImportBundle\Import\AbstractImport; |
ef75e122 | 9 | use Wallabag\UserBundle\Repository\UserRepository; |
8664069e JB |
10 | use Wallabag\CoreBundle\Entity\Entry; |
11 | use Wallabag\CoreBundle\Entity\Tag; | |
ef75e122 JB |
12 | use Psr\Log\LoggerInterface; |
13 | use Psr\Log\NullLogger; | |
14 | ||
b3437d58 | 15 | class AMPQEntryConsumer implements ConsumerInterface |
ef75e122 JB |
16 | { |
17 | private $em; | |
18 | private $userRepository; | |
c98db1b6 | 19 | private $import; |
ef75e122 JB |
20 | private $logger; |
21 | ||
c98db1b6 | 22 | public function __construct(EntityManager $em, UserRepository $userRepository, AbstractImport $import, LoggerInterface $logger = null) |
ef75e122 JB |
23 | { |
24 | $this->em = $em; | |
25 | $this->userRepository = $userRepository; | |
c98db1b6 | 26 | $this->import = $import; |
ef75e122 JB |
27 | $this->logger = $logger ?: new NullLogger(); |
28 | } | |
29 | ||
30 | /** | |
31 | * {@inheritdoc} | |
32 | */ | |
33 | public function execute(AMQPMessage $msg) | |
34 | { | |
35 | $storedEntry = json_decode($msg->body, true); | |
36 | ||
37 | $user = $this->userRepository->find($storedEntry['userId']); | |
38 | ||
39 | // no user? Drop message | |
40 | if (null === $user) { | |
41 | $this->logger->warning('Unable to retrieve user', ['entry' => $storedEntry]); | |
42 | ||
43 | return; | |
44 | } | |
45 | ||
c98db1b6 | 46 | $this->import->setUser($user); |
ef75e122 | 47 | |
c98db1b6 | 48 | $entry = $this->import->parseEntry($storedEntry); |
ef75e122 JB |
49 | |
50 | if (null === $entry) { | |
51 | $this->logger->warning('Unable to parse entry', ['entry' => $storedEntry]); | |
52 | ||
53 | return; | |
54 | } | |
55 | ||
56 | try { | |
57 | $this->em->flush(); | |
8664069e JB |
58 | |
59 | // clear only affected entities | |
60 | $this->em->clear(Entry::class); | |
61 | $this->em->clear(Tag::class); | |
ef75e122 JB |
62 | } catch (\Exception $e) { |
63 | $this->logger->warning('Unable to save entry', ['entry' => $storedEntry, 'exception' => $e]); | |
64 | ||
65 | return; | |
66 | } | |
b3437d58 JB |
67 | |
68 | $this->logger->info('Content with url ('.$entry->getUrl().') imported !'); | |
ef75e122 JB |
69 | } |
70 | } |