X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FImportBundle%2FImport%2FBrowserImport.php;h=4678ae0c5133cfc79e0e18f95a242cab6cea7f5e;hb=9f8f188d928b47503d39348c5990379a572b570a;hp=71e65e5916f04e4216da71c46a2fd272285c2e79;hpb=42708d1121fef12c84487247b170eb03083d5ffc;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/ImportBundle/Import/BrowserImport.php b/src/Wallabag/ImportBundle/Import/BrowserImport.php index 71e65e59..4678ae0c 100644 --- a/src/Wallabag/ImportBundle/Import/BrowserImport.php +++ b/src/Wallabag/ImportBundle/Import/BrowserImport.php @@ -3,7 +3,6 @@ namespace Wallabag\ImportBundle\Import; use Wallabag\CoreBundle\Entity\Entry; -use Wallabag\UserBundle\Entity\User; use Wallabag\CoreBundle\Event\EntrySavedEvent; abstract class BrowserImport extends AbstractImport @@ -73,88 +72,12 @@ abstract class BrowserImport extends AbstractImport return $this; } - /** - * Parse and insert all given entries. - * - * @param $entries - */ - protected function parseEntries($entries) - { - $i = 1; - $entryToBeFlushed = []; - - foreach ($entries as $importedEntry) { - if ((array) $importedEntry !== $importedEntry) { - continue; - } - - $entry = $this->parseEntry($importedEntry); - - if (null === $entry) { - continue; - } - - // @see AbstractImport - $entryToBeFlushed[] = $entry; - - // flush every 20 entries - if (($i % 20) === 0) { - $this->em->flush(); - - foreach ($entryToBeFlushed as $entry) { - $this->eventDispatcher->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry)); - } - - $entryToBeFlushed = []; - } - ++$i; - } - - $this->em->flush(); - - if (!empty($entryToBeFlushed)) { - foreach ($entryToBeFlushed as $entry) { - $this->eventDispatcher->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry)); - } - } - } - - /** - * Parse entries and send them to the queue. - * It should just be a simple loop on all item, no call to the database should be done - * to speedup queuing. - * - * Faster parse entries for Producer. - * We don't care to make check at this time. They'll be done by the consumer. - * - * @param array $entries - */ - protected function parseEntriesForProducer(array $entries) - { - foreach ($entries as $importedEntry) { - if ((array) $importedEntry !== $importedEntry) { - continue; - } - - // set userId for the producer (it won't know which user is connected) - $importedEntry['userId'] = $this->user->getId(); - - if ($this->markAsRead) { - $importedEntry = $this->setEntryAsRead($importedEntry); - } - - ++$this->queuedEntries; - - $this->producer->publish(json_encode($importedEntry)); - } - } - /** * {@inheritdoc} */ public function parseEntry(array $importedEntry) { - if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && is_array(reset($importedEntry))) { + if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && \is_array(reset($importedEntry))) { if ($this->producer) { $this->parseEntriesForProducer($importedEntry); @@ -223,6 +146,82 @@ abstract class BrowserImport extends AbstractImport return $entry; } + /** + * Parse and insert all given entries. + * + * @param array $entries + */ + protected function parseEntries(array $entries) + { + $i = 1; + $entryToBeFlushed = []; + + foreach ($entries as $importedEntry) { + if ((array) $importedEntry !== $importedEntry) { + continue; + } + + $entry = $this->parseEntry($importedEntry); + + if (null === $entry) { + continue; + } + + // @see AbstractImport + $entryToBeFlushed[] = $entry; + + // flush every 20 entries + if (0 === ($i % 20)) { + $this->em->flush(); + + foreach ($entryToBeFlushed as $entry) { + $this->eventDispatcher->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry)); + } + + $entryToBeFlushed = []; + } + ++$i; + } + + $this->em->flush(); + + if (!empty($entryToBeFlushed)) { + foreach ($entryToBeFlushed as $entry) { + $this->eventDispatcher->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry)); + } + } + } + + /** + * Parse entries and send them to the queue. + * It should just be a simple loop on all item, no call to the database should be done + * to speedup queuing. + * + * Faster parse entries for Producer. + * We don't care to make check at this time. They'll be done by the consumer. + * + * @param array $entries + */ + protected function parseEntriesForProducer(array $entries) + { + foreach ($entries as $importedEntry) { + if ((array) $importedEntry !== $importedEntry) { + continue; + } + + // set userId for the producer (it won't know which user is connected) + $importedEntry['userId'] = $this->user->getId(); + + if ($this->markAsRead) { + $importedEntry = $this->setEntryAsRead($importedEntry); + } + + ++$this->queuedEntries; + + $this->producer->publish(json_encode($importedEntry)); + } + } + /** * {@inheritdoc} */ @@ -232,4 +231,6 @@ abstract class BrowserImport extends AbstractImport return $importedEntry; } + + abstract protected function prepareEntry(array $entry = []); }