From b787a7757ea73b9d10c14cb21758feb07dfc5885 Mon Sep 17 00:00:00 2001 From: Jeremy Benoist Date: Mon, 28 Mar 2016 16:43:33 +0200 Subject: Refacto wallabag import Use an abstract class to store all common action from wallabag vX import. Move specificity in v1 & v2 import. --- .../ImportBundle/Import/WallabagV1Import.php | 177 +++------------------ 1 file changed, 20 insertions(+), 157 deletions(-) (limited to 'src/Wallabag/ImportBundle/Import/WallabagV1Import.php') diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php index 82160bae..6cf3467a 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php @@ -2,49 +2,8 @@ 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; - -class WallabagV1Import implements ImportInterface +class WallabagV1Import extends WallabagImport { - protected $user; - protected $em; - protected $logger; - protected $contentProxy; - protected $skippedEntries = 0; - protected $importedEntries = 0; - protected $filepath; - protected $markAsRead; - - public function __construct(EntityManager $em, ContentProxy $contentProxy) - { - $this->em = $em; - $this->logger = new NullLogger(); - $this->contentProxy = $contentProxy; - } - - public function setLogger(LoggerInterface $logger) - { - $this->logger = $logger; - } - - /** - * We define the user in a custom call because on the import command there is no logged in user. - * So we can't retrieve user from the `security.token_storage` service. - * - * @param User $user - */ - public function setUser(User $user) - { - $this->user = $user; - - return $this; - } - /** * {@inheritdoc} */ @@ -72,125 +31,29 @@ class WallabagV1Import implements ImportInterface /** * {@inheritdoc} */ - public function import() - { - if (!$this->user) { - $this->logger->error('WallabagImport: user is not defined'); - - return false; - } - - if (!file_exists($this->filepath) || !is_readable($this->filepath)) { - $this->logger->error('WallabagImport: unable to read file', array('filepath' => $this->filepath)); - - return false; - } - - $data = json_decode(file_get_contents($this->filepath), true); - - if (empty($data)) { - return false; - } - - $this->parseEntries($data); - - return true; - } - - /** - * {@inheritdoc} - */ - public function getSummary() - { - return [ - 'skipped' => $this->skippedEntries, - 'imported' => $this->importedEntries, + protected function prepareEntry($entry = [], $markAsRead = false) + { + $data = [ + 'title' => $entry['title'], + 'html' => $entry['content'], + 'url' => $entry['url'], + 'content_type' => '', + 'language' => '', + 'is_archived' => $entry['is_read'] || $markAsRead, + 'is_starred' => $entry['is_fav'], + 'tags' => '', ]; - } - - /** - * Set file path to the json file. - * - * @param string $filepath - */ - public function setFilepath($filepath) - { - $this->filepath = $filepath; - - return $this; - } - - /** - * Set whether articles must be all marked as read. - * - * @param bool $markAsRead - */ - public function setMarkAsRead($markAsRead) - { - $this->markAsRead = $markAsRead; - - return $this; - } - - /** - * @param $entries - */ - protected function parseEntries($entries) - { - $i = 1; - - //Untitled in all languages from v1. This should never have been translated - $untitled = array('Untitled', 'Sans titre', 'podle nadpisu', 'Sin título', 'با عنوان', 'per titolo', 'Sem título', 'Без названия', 'po naslovu', 'Без назви', 'No title found', ''); - - foreach ($entries as $importedEntry) { - $existingEntry = $this->em - ->getRepository('WallabagCoreBundle:Entry') - ->findByUrlAndUserId($importedEntry['url'], $this->user->getId()); - if (false !== $existingEntry) { - ++$this->skippedEntries; - continue; - } - - $data = [ - 'title' => $importedEntry['title'], - 'html' => $importedEntry['content'], - 'url' => $importedEntry['url'], - 'content_type' => '', - 'language' => '', - ]; - - // force content to be refreshed in case on bad fetch in the v1 installation - if (in_array($importedEntry['title'], $untitled)) { - $data = []; - } - - $entry = $this->contentProxy->updateEntry( - new Entry($this->user), - $importedEntry['url'], - $data - ); - - if (array_key_exists('tags', $importedEntry) && $importedEntry['tags'] != '') { - $this->contentProxy->assignTagsToEntry( - $entry, - $importedEntry['tags'] - ); - } - - $entry->setArchived($importedEntry['is_read'] || $this->markAsRead); - $entry->setStarred($importedEntry['is_fav']); - - $this->em->persist($entry); - ++$this->importedEntries; + // force content to be refreshed in case on bad fetch in the v1 installation + if (in_array($entry['title'], $this->untitled)) { + $data['title'] = ''; + $data['html'] = ''; + } - // flush every 20 entries - if (($i % 20) === 0) { - $this->em->flush(); - } - ++$i; + if (array_key_exists('tags', $entry) && $entry['tags'] != '') { + $data['tags'] = $entry['tags']; } - $this->em->flush(); + return $data; } } -- cgit v1.2.3