3 namespace Wallabag\CoreBundle\Event\Subscriber
;
5 use Doctrine\ORM\EntityManager
;
6 use Psr\Log\LoggerInterface
;
7 use Symfony\Component\EventDispatcher\EventSubscriberInterface
;
8 use Wallabag\CoreBundle\Entity\Entry
;
9 use Wallabag\CoreBundle\Event\EntryDeletedEvent
;
10 use Wallabag\CoreBundle\Event\EntrySavedEvent
;
11 use Wallabag\CoreBundle\Helper\DownloadImages
;
13 class DownloadImagesSubscriber
implements EventSubscriberInterface
16 private $downloadImages;
20 public function __construct(EntityManager
$em, DownloadImages
$downloadImages, $enabled, LoggerInterface
$logger)
23 $this->downloadImages
= $downloadImages;
24 $this->enabled
= $enabled;
25 $this->logger
= $logger;
28 public static function getSubscribedEvents()
31 EntrySavedEvent
::NAME
=> 'onEntrySaved',
32 EntryDeletedEvent
::NAME
=> 'onEntryDeleted',
37 * Download images and updated the data into the entry.
39 public function onEntrySaved(EntrySavedEvent
$event)
41 if (!$this->enabled
) {
42 $this->logger
->debug('DownloadImagesSubscriber: disabled.');
47 $entry = $event->getEntry();
49 $html = $this->downloadImages($entry);
50 if (false !== $html) {
51 $this->logger
->debug('DownloadImagesSubscriber: updated html.');
53 $entry->setContent($html);
56 // update preview picture
57 $previewPicture = $this->downloadPreviewImage($entry);
58 if (false !== $previewPicture) {
59 $this->logger
->debug('DownloadImagesSubscriber: update preview picture.');
61 $entry->setPreviewPicture($previewPicture);
64 $this->em
->persist($entry);
69 * Remove images related to the entry.
71 public function onEntryDeleted(EntryDeletedEvent
$event)
73 if (!$this->enabled
) {
74 $this->logger
->debug('DownloadImagesSubscriber: disabled.');
79 $this->downloadImages
->removeImages($event->getEntry()->getId());
83 * Download all images from the html.
85 * @todo If we want to add async download, it should be done in that method
87 * @return string|false False in case of async
89 private function downloadImages(Entry
$entry)
91 return $this->downloadImages
->processHtml(
99 * Download the preview picture.
101 * @todo If we want to add async download, it should be done in that method
103 * @return string|false False in case of async
105 private function downloadPreviewImage(Entry
$entry)
107 return $this->downloadImages
->processSingleImage(
109 $entry->getPreviewPicture(),