mirror of
https://github.com/wallabag/wallabag.git
synced 2024-10-31 22:28:54 +00:00
fix #1502 avoid duplicate entry and store pocket url in config
This commit is contained in:
parent
87f23b005c
commit
dda57bb944
7 changed files with 87 additions and 36 deletions
|
@ -33,6 +33,14 @@ wallabag_core:
|
|||
import:
|
||||
allow_mimetypes: ['application/octet-stream', 'application/json', 'text/plain']
|
||||
|
||||
wallabag_import:
|
||||
importers:
|
||||
pocket_urls:
|
||||
oauth_request: https://getpocket.com/v3/oauth/request
|
||||
auth_authorize: https://getpocket.com/auth/authorize
|
||||
oauth_authorize: https://getpocket.com/v3/oauth/authorize
|
||||
get: https://getpocket.com/v3/get
|
||||
|
||||
# Twig Configuration
|
||||
twig:
|
||||
debug: "%kernel.debug%"
|
||||
|
|
|
@ -41,6 +41,7 @@ class EntryController extends Controller
|
|||
*/
|
||||
public function addEntryFormAction(Request $request)
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$entry = new Entry($this->getUser());
|
||||
|
||||
$form = $this->createForm(new NewEntryType(), $entry);
|
||||
|
@ -48,6 +49,19 @@ class EntryController extends Controller
|
|||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isValid()) {
|
||||
$existingEntry = $em
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneByUrl($entry->getUrl());
|
||||
|
||||
if (!is_null($existingEntry)) {
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
'notice',
|
||||
'Entry already saved on '.$existingEntry->getCreatedAt()->format('d-m-Y')
|
||||
);
|
||||
|
||||
return $this->redirect($this->generateUrl('view', array('id' => $existingEntry->getId())));
|
||||
}
|
||||
|
||||
$this->updateEntry($entry);
|
||||
$this->get('session')->getFlashBag()->add(
|
||||
'notice',
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace Wallabag\ImportBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
use Symfony\Component\Config\Definition\ConfigurationInterface;
|
||||
|
||||
|
@ -12,6 +13,22 @@ class Configuration implements ConfigurationInterface
|
|||
$treeBuilder = new TreeBuilder();
|
||||
$rootNode = $treeBuilder->root('wallabag_import');
|
||||
|
||||
$rootNode
|
||||
->children()
|
||||
->arrayNode('importers')
|
||||
->append($this->getURLs())
|
||||
->end()
|
||||
->end()
|
||||
;
|
||||
|
||||
return $treeBuilder;
|
||||
}
|
||||
|
||||
private function getURLs()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('pocket_urls');
|
||||
$node->prototype('scalar')->end();
|
||||
|
||||
return $node;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ class WallabagImportExtension extends Extension
|
|||
{
|
||||
$configuration = new Configuration();
|
||||
$config = $this->processConfiguration($configuration, $configs);
|
||||
$container->setParameter('wallabag_import.pocket', $config['importers']['pocket_urls']);
|
||||
|
||||
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
|
||||
$loader->load('services.yml');
|
||||
|
|
|
@ -15,13 +15,19 @@ class PocketImport implements ImportInterface
|
|||
private $session;
|
||||
private $em;
|
||||
private $consumerKey;
|
||||
private $skippedEntries;
|
||||
private $importedEntries;
|
||||
private $pocketURL;
|
||||
|
||||
public function __construct($tokenStorage, Session $session, EntityManager $em, $consumerKey)
|
||||
public function __construct($tokenStorage, Session $session, EntityManager $em, $consumerKey, $pocketURL)
|
||||
{
|
||||
$this->user = $tokenStorage->getToken()->getUser();
|
||||
$this->session = $session;
|
||||
$this->em = $em;
|
||||
$this->consumerKey = $consumerKey;
|
||||
$this->skippedEntries = 0;
|
||||
$this->importedEntries = 0;
|
||||
$this->pocketURL = $pocketURL;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
|
@ -64,9 +70,25 @@ class PocketImport implements ImportInterface
|
|||
return $pocketEntry['resolved_title'];
|
||||
} elseif (isset($pocketEntry['given_title']) && $pocketEntry['given_title'] != '') {
|
||||
return $pocketEntry['given_title'];
|
||||
} else {
|
||||
return 'Untitled';
|
||||
}
|
||||
|
||||
return 'Untitled';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the good URL for current entry.
|
||||
*
|
||||
* @param $pocketEntry
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function guessURL($pocketEntry)
|
||||
{
|
||||
if (isset($pocketEntry['resolved_url']) && $pocketEntry['resolved_url'] != '') {
|
||||
return $pocketEntry['resolved_url'];
|
||||
}
|
||||
|
||||
return $pocketEntry['given_url'];
|
||||
}
|
||||
|
||||
private function assignTagsToEntry(Entry $entry, $tags)
|
||||
|
@ -95,7 +117,20 @@ class PocketImport implements ImportInterface
|
|||
{
|
||||
foreach ($entries as $pocketEntry) {
|
||||
$entry = new Entry($this->user);
|
||||
$entry->setUrl($pocketEntry['given_url']);
|
||||
$url = $this->guessURL($pocketEntry);
|
||||
|
||||
$existingEntry = $this->em
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneByUrl($url);
|
||||
|
||||
if (!is_null($existingEntry)) {
|
||||
++$this->skippedEntries;
|
||||
continue;
|
||||
}
|
||||
|
||||
$entry->setUrl($url);
|
||||
$entry->setDomainName(parse_url($url, PHP_URL_HOST));
|
||||
|
||||
if ($pocketEntry['status'] == 1) {
|
||||
$entry->setArchived(true);
|
||||
}
|
||||
|
@ -118,20 +153,20 @@ class PocketImport implements ImportInterface
|
|||
}
|
||||
|
||||
if (!empty($pocketEntry['tags'])) {
|
||||
$this->assignTagsToEntry($entry, $pocketEntry['tags']);
|
||||
// $this->assignTagsToEntry($entry, $pocketEntry['tags']);
|
||||
}
|
||||
|
||||
$this->em->persist($entry);
|
||||
++$this->importedEntries;
|
||||
}
|
||||
|
||||
$this->user->setLastPocketImport(new \DateTime());
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
public function oAuthRequest($redirectUri, $callbackUri)
|
||||
{
|
||||
$client = $this->createClient();
|
||||
$request = $client->createRequest('POST', 'https://getpocket.com/v3/oauth/request',
|
||||
$request = $client->createRequest('POST', $this->pocketURL['oauth_request'],
|
||||
[
|
||||
'body' => json_encode([
|
||||
'consumer_key' => $this->consumerKey,
|
||||
|
@ -146,14 +181,14 @@ class PocketImport implements ImportInterface
|
|||
// store code in session for callback method
|
||||
$this->session->set('pocketCode', $values['code']);
|
||||
|
||||
return 'https://getpocket.com/auth/authorize?request_token='.$values['code'].'&redirect_uri='.$callbackUri;
|
||||
return $this->pocketURL['auth_authorize'].'?request_token='.$values['code'].'&redirect_uri='.$callbackUri;
|
||||
}
|
||||
|
||||
public function oAuthAuthorize()
|
||||
{
|
||||
$client = $this->createClient();
|
||||
|
||||
$request = $client->createRequest('POST', 'https://getpocket.com/v3/oauth/authorize',
|
||||
$request = $client->createRequest('POST', $this->pocketURL['oauth_authorize'],
|
||||
[
|
||||
'body' => json_encode([
|
||||
'consumer_key' => $this->consumerKey,
|
||||
|
@ -170,9 +205,8 @@ class PocketImport implements ImportInterface
|
|||
public function import($accessToken)
|
||||
{
|
||||
$client = $this->createClient();
|
||||
$since = (!is_null($this->user->getLastPocketImport()) ? $this->user->getLastPocketImport()->getTimestamp() : '');
|
||||
|
||||
$request = $client->createRequest('POST', 'https://getpocket.com/v3/get',
|
||||
$request = $client->createRequest('POST', $this->pocketURL['get'],
|
||||
[
|
||||
'body' => json_encode([
|
||||
'consumer_key' => $this->consumerKey,
|
||||
|
@ -180,7 +214,6 @@ class PocketImport implements ImportInterface
|
|||
'detailType' => 'complete',
|
||||
'state' => 'all',
|
||||
'sort' => 'oldest',
|
||||
'since' => $since,
|
||||
]),
|
||||
]
|
||||
);
|
||||
|
@ -192,7 +225,7 @@ class PocketImport implements ImportInterface
|
|||
|
||||
$this->session->getFlashBag()->add(
|
||||
'notice',
|
||||
count($entries['list']).' entries imported'
|
||||
$this->importedEntries.' entries imported, '.$this->skippedEntries.' already saved.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,3 +6,4 @@ services:
|
|||
- @session
|
||||
- @doctrine.orm.entity_manager
|
||||
- %pocket_consumer_key%
|
||||
- %wallabag_import.pocket%
|
||||
|
|
|
@ -84,13 +84,6 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
|
|||
*/
|
||||
private $trusted;
|
||||
|
||||
/**
|
||||
* @var date
|
||||
*
|
||||
* @ORM\Column(name="last_pocket_import", type="datetime", nullable=true)
|
||||
*/
|
||||
private $lastPocketImport;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
@ -247,20 +240,4 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return date
|
||||
*/
|
||||
public function getLastPocketImport()
|
||||
{
|
||||
return $this->lastPocketImport;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param date $lastPocketImport
|
||||
*/
|
||||
public function setLastPocketImport($lastPocketImport)
|
||||
{
|
||||
$this->lastPocketImport = $lastPocketImport;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue