]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/ImportBundle/Import/BrowserImport.php
CS
[github/wallabag/wallabag.git] / src / Wallabag / ImportBundle / Import / BrowserImport.php
index ef7d6d955ef541c826d94b531fcdface43728be5..ef0eeb7e1fb2a80da654efa1770f8db3707cf23d 100644 (file)
@@ -2,12 +2,9 @@
 
 namespace Wallabag\ImportBundle\Import;
 
-use Psr\Log\LoggerInterface;
-use Psr\Log\NullLogger;
-use Doctrine\ORM\EntityManager;
 use Wallabag\CoreBundle\Entity\Entry;
 use Wallabag\UserBundle\Entity\User;
-use Wallabag\CoreBundle\Helper\ContentProxy;
+use Wallabag\CoreBundle\Event\EntrySavedEvent;
 
 abstract class BrowserImport extends AbstractImport
 {
@@ -34,13 +31,13 @@ abstract class BrowserImport extends AbstractImport
     public function import()
     {
         if (!$this->user) {
-            $this->logger->error('WallabagImport: user is not defined');
+            $this->logger->error('Wallabag Browser Import: user is not defined');
 
             return false;
         }
 
         if (!file_exists($this->filepath) || !is_readable($this->filepath)) {
-            $this->logger->error('WallabagImport: unable to read file', ['filepath' => $this->filepath]);
+            $this->logger->error('Wallabag Browser Import: unable to read file', ['filepath' => $this->filepath]);
 
             return false;
         }
@@ -48,6 +45,8 @@ abstract class BrowserImport extends AbstractImport
         $data = json_decode(file_get_contents($this->filepath), true);
 
         if (empty($data)) {
+            $this->logger->error('Wallabag Browser: no entries in imported file');
+
             return false;
         }
 
@@ -82,6 +81,7 @@ abstract class BrowserImport extends AbstractImport
     protected function parseEntries($entries)
     {
         $i = 1;
+        $entryToBeFlushed = [];
 
         foreach ($entries as $importedEntry) {
             if ((array) $importedEntry !== $importedEntry) {
@@ -94,18 +94,29 @@ abstract class BrowserImport extends AbstractImport
                 continue;
             }
 
+            // @see AbstractImport
+            $entryToBeFlushed[] = $entry;
+
             // flush every 20 entries
             if (($i % 20) === 0) {
                 $this->em->flush();
 
-                // clear only affected entities
-                $this->em->clear(Entry::class);
-                $this->em->clear(Tag::class);
+                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));
+            }
+        }
     }
 
     /**
@@ -121,7 +132,6 @@ abstract class BrowserImport extends AbstractImport
     protected function parseEntriesForProducer(array $entries)
     {
         foreach ($entries as $importedEntry) {
-
             if ((array) $importedEntry !== $importedEntry) {
                 continue;
             }
@@ -144,26 +154,39 @@ abstract class BrowserImport extends AbstractImport
      */
     public function parseEntry(array $importedEntry)
     {
+        if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && is_array(reset($importedEntry))) {
+            if ($this->producer) {
+                $this->parseEntriesForProducer($importedEntry);
+
+                return;
+            }
 
-        if ((!key_exists('guid', $importedEntry) || (!key_exists('id', $importedEntry))) && is_array(reset($importedEntry))) {
             $this->parseEntries($importedEntry);
+
             return;
         }
 
-        if (key_exists('children', $importedEntry)) {
+        if (array_key_exists('children', $importedEntry)) {
+            if ($this->producer) {
+                $this->parseEntriesForProducer($importedEntry['children']);
+
+                return;
+            }
+
             $this->parseEntries($importedEntry['children']);
+
             return;
         }
 
-        if (!key_exists('uri', $importedEntry) && !key_exists('url', $importedEntry)) {
+        if (!array_key_exists('uri', $importedEntry) && !array_key_exists('url', $importedEntry)) {
             return;
         }
 
-        $firefox = key_exists('uri', $importedEntry);
+        $url = array_key_exists('uri', $importedEntry) ? $importedEntry['uri'] : $importedEntry['url'];
 
         $existingEntry = $this->em
             ->getRepository('WallabagCoreBundle:Entry')
-            ->findByUrlAndUserId(($firefox) ? $importedEntry['uri'] : $importedEntry['url'], $this->user->getId());
+            ->findByUrlAndUserId($url, $this->user->getId());
 
         if (false !== $existingEntry) {
             ++$this->skippedEntries;
@@ -181,7 +204,7 @@ abstract class BrowserImport extends AbstractImport
         $entry = $this->fetchContent($entry, $data['url'], $data);
 
         if (array_key_exists('tags', $data)) {
-            $this->contentProxy->assignTagsToEntry(
+            $this->tagsAssigner->assignTagsToEntry(
                 $entry,
                 $data['tags']
             );
@@ -191,7 +214,7 @@ abstract class BrowserImport extends AbstractImport
 
         if (!empty($data['created_at'])) {
             $dt = new \DateTime();
-            $entry->setCreatedAt($dt->setTimestamp($data['created_at']/1000));
+            $entry->setCreatedAt($dt->setTimestamp($data['created_at']));
         }
 
         $this->em->persist($entry);