diff options
Diffstat (limited to 'src/Wallabag/ImportBundle/Import/AbstractImport.php')
-rw-r--r-- | src/Wallabag/ImportBundle/Import/AbstractImport.php | 81 |
1 files changed, 49 insertions, 32 deletions
diff --git a/src/Wallabag/ImportBundle/Import/AbstractImport.php b/src/Wallabag/ImportBundle/Import/AbstractImport.php index 1d4a6e27..58a234f4 100644 --- a/src/Wallabag/ImportBundle/Import/AbstractImport.php +++ b/src/Wallabag/ImportBundle/Import/AbstractImport.php | |||
@@ -2,35 +2,39 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Import; | 3 | namespace Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Doctrine\ORM\EntityManager; | ||
6 | use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface; | ||
5 | use Psr\Log\LoggerInterface; | 7 | use Psr\Log\LoggerInterface; |
6 | use Psr\Log\NullLogger; | 8 | use Psr\Log\NullLogger; |
7 | use Doctrine\ORM\EntityManager; | 9 | use Symfony\Component\EventDispatcher\EventDispatcherInterface; |
8 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
9 | use Wallabag\CoreBundle\Entity\Entry; | 10 | use Wallabag\CoreBundle\Entity\Entry; |
10 | use Wallabag\CoreBundle\Entity\Tag; | 11 | use Wallabag\CoreBundle\Entity\Tag; |
11 | use Wallabag\UserBundle\Entity\User; | ||
12 | use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface; | ||
13 | use Symfony\Component\EventDispatcher\EventDispatcherInterface; | ||
14 | use Wallabag\CoreBundle\Event\EntrySavedEvent; | 12 | use Wallabag\CoreBundle\Event\EntrySavedEvent; |
13 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
14 | use Wallabag\CoreBundle\Helper\TagsAssigner; | ||
15 | use Wallabag\UserBundle\Entity\User; | ||
15 | 16 | ||
16 | abstract class AbstractImport implements ImportInterface | 17 | abstract class AbstractImport implements ImportInterface |
17 | { | 18 | { |
18 | protected $em; | 19 | protected $em; |
19 | protected $logger; | 20 | protected $logger; |
20 | protected $contentProxy; | 21 | protected $contentProxy; |
22 | protected $tagsAssigner; | ||
21 | protected $eventDispatcher; | 23 | protected $eventDispatcher; |
22 | protected $producer; | 24 | protected $producer; |
23 | protected $user; | 25 | protected $user; |
24 | protected $markAsRead; | 26 | protected $markAsRead; |
27 | protected $disableContentUpdate = false; | ||
25 | protected $skippedEntries = 0; | 28 | protected $skippedEntries = 0; |
26 | protected $importedEntries = 0; | 29 | protected $importedEntries = 0; |
27 | protected $queuedEntries = 0; | 30 | protected $queuedEntries = 0; |
28 | 31 | ||
29 | public function __construct(EntityManager $em, ContentProxy $contentProxy, EventDispatcherInterface $eventDispatcher) | 32 | public function __construct(EntityManager $em, ContentProxy $contentProxy, TagsAssigner $tagsAssigner, EventDispatcherInterface $eventDispatcher) |
30 | { | 33 | { |
31 | $this->em = $em; | 34 | $this->em = $em; |
32 | $this->logger = new NullLogger(); | 35 | $this->logger = new NullLogger(); |
33 | $this->contentProxy = $contentProxy; | 36 | $this->contentProxy = $contentProxy; |
37 | $this->tagsAssigner = $tagsAssigner; | ||
34 | $this->eventDispatcher = $eventDispatcher; | 38 | $this->eventDispatcher = $eventDispatcher; |
35 | } | 39 | } |
36 | 40 | ||
@@ -82,21 +86,55 @@ abstract class AbstractImport implements ImportInterface | |||
82 | } | 86 | } |
83 | 87 | ||
84 | /** | 88 | /** |
89 | * Set whether articles should be fetched for updated content. | ||
90 | * | ||
91 | * @param bool $disableContentUpdate | ||
92 | */ | ||
93 | public function setDisableContentUpdate($disableContentUpdate) | ||
94 | { | ||
95 | $this->disableContentUpdate = $disableContentUpdate; | ||
96 | |||
97 | return $this; | ||
98 | } | ||
99 | |||
100 | /** | ||
101 | * {@inheritdoc} | ||
102 | */ | ||
103 | public function getSummary() | ||
104 | { | ||
105 | return [ | ||
106 | 'skipped' => $this->skippedEntries, | ||
107 | 'imported' => $this->importedEntries, | ||
108 | 'queued' => $this->queuedEntries, | ||
109 | ]; | ||
110 | } | ||
111 | |||
112 | /** | ||
113 | * Parse one entry. | ||
114 | * | ||
115 | * @param array $importedEntry | ||
116 | * | ||
117 | * @return Entry | ||
118 | */ | ||
119 | abstract public function parseEntry(array $importedEntry); | ||
120 | |||
121 | /** | ||
85 | * Fetch content from the ContentProxy (using graby). | 122 | * Fetch content from the ContentProxy (using graby). |
86 | * If it fails return the given entry to be saved in all case (to avoid user to loose the content). | 123 | * If it fails return the given entry to be saved in all case (to avoid user to loose the content). |
87 | * | 124 | * |
88 | * @param Entry $entry Entry to update | 125 | * @param Entry $entry Entry to update |
89 | * @param string $url Url to grab content for | 126 | * @param string $url Url to grab content for |
90 | * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url | 127 | * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url |
91 | * | ||
92 | * @return Entry | ||
93 | */ | 128 | */ |
94 | protected function fetchContent(Entry $entry, $url, array $content = []) | 129 | protected function fetchContent(Entry $entry, $url, array $content = []) |
95 | { | 130 | { |
96 | try { | 131 | try { |
97 | return $this->contentProxy->updateEntry($entry, $url, $content); | 132 | $this->contentProxy->updateEntry($entry, $url, $content, $this->disableContentUpdate); |
98 | } catch (\Exception $e) { | 133 | } catch (\Exception $e) { |
99 | return $entry; | 134 | $this->logger->error('Error trying to import an entry.', [ |
135 | 'entry_url' => $url, | ||
136 | 'error_msg' => $e->getMessage(), | ||
137 | ]); | ||
100 | } | 138 | } |
101 | } | 139 | } |
102 | 140 | ||
@@ -127,7 +165,7 @@ abstract class AbstractImport implements ImportInterface | |||
127 | $entryToBeFlushed[] = $entry; | 165 | $entryToBeFlushed[] = $entry; |
128 | 166 | ||
129 | // flush every 20 entries | 167 | // flush every 20 entries |
130 | if (($i % 20) === 0) { | 168 | if (0 === ($i % 20)) { |
131 | $this->em->flush(); | 169 | $this->em->flush(); |
132 | 170 | ||
133 | foreach ($entryToBeFlushed as $entry) { | 171 | foreach ($entryToBeFlushed as $entry) { |
@@ -179,27 +217,6 @@ abstract class AbstractImport implements ImportInterface | |||
179 | } | 217 | } |
180 | 218 | ||
181 | /** | 219 | /** |
182 | * {@inheritdoc} | ||
183 | */ | ||
184 | public function getSummary() | ||
185 | { | ||
186 | return [ | ||
187 | 'skipped' => $this->skippedEntries, | ||
188 | 'imported' => $this->importedEntries, | ||
189 | 'queued' => $this->queuedEntries, | ||
190 | ]; | ||
191 | } | ||
192 | |||
193 | /** | ||
194 | * Parse one entry. | ||
195 | * | ||
196 | * @param array $importedEntry | ||
197 | * | ||
198 | * @return Entry | ||
199 | */ | ||
200 | abstract public function parseEntry(array $importedEntry); | ||
201 | |||
202 | /** | ||
203 | * Set current imported entry to archived / read. | 220 | * Set current imported entry to archived / read. |
204 | * Implementation is different accross all imports. | 221 | * Implementation is different accross all imports. |
205 | * | 222 | * |