aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Wallabag/CoreBundle/Helper/ContentProxy.php67
1 files changed, 35 insertions, 32 deletions
diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php
index 2dc436f8..92351986 100644
--- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php
+++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php
@@ -321,43 +321,46 @@ class ContentProxy
321 */ 321 */
322 private function updateOriginUrl(Entry $entry, $url) 322 private function updateOriginUrl(Entry $entry, $url)
323 { 323 {
324 if (!empty($url) && $entry->getUrl() !== $url) { 324 if (empty($url) || $entry->getUrl() === $url) {
325 $parsed_entry_url = parse_url($entry->getUrl()); 325 return false;
326 $parsed_content_url = parse_url($url); 326 }
327
328 $parsed_entry_url = parse_url($entry->getUrl());
329 $parsed_content_url = parse_url($url);
327 330
328 $diff_ec = array_diff_assoc($parsed_entry_url, $parsed_content_url); 331 $diff_ec = array_diff_assoc($parsed_entry_url, $parsed_content_url);
329 $diff_ce = array_diff_assoc($parsed_content_url, $parsed_entry_url); 332 $diff_ce = array_diff_assoc($parsed_content_url, $parsed_entry_url);
330 333
331 $diff = array_merge($diff_ec, $diff_ce); 334 $diff = array_merge($diff_ec, $diff_ce);
332 $diff_keys = array_keys($diff); 335 $diff_keys = array_keys($diff);
333 sort($diff_keys); 336 sort($diff_keys);
337
338 if ($this->ignoreUrl($entry->getUrl())) {
339 $entry->setUrl($url);
340 return false;
341 }
334 342
335 if ($this->ignoreUrl($entry->getUrl())) { 343 switch ($diff_keys) {
344 case ['path']:
345 if (($parsed_entry_url['path'] . '/' === $parsed_content_url['path']) // diff is trailing slash, we only replace the url of the entry
346 || ($url === urldecode($entry->getUrl()))) { // we update entry url if new url is a decoded version of it, see EntryRepository#findByUrlAndUserId
347 $entry->setUrl($url);
348 }
349 break;
350 case ['scheme']:
336 $entry->setUrl($url); 351 $entry->setUrl($url);
337 } else { 352 break;
338 switch ($diff_keys) { 353 case ['fragment']:
339 case ['path']: 354 case ['query']:
340 if (($parsed_entry_url['path'] . '/' === $parsed_content_url['path']) // diff is trailing slash, we only replace the url of the entry 355 case ['fragment', 'query']:
341 || ($url === urldecode($entry->getUrl()))) { // we update entry url if new url is a decoded version of it, see EntryRepository#findByUrlAndUserId 356 // noop
342 $entry->setUrl($url); 357 break;
343 } 358 default:
344 break; 359 if (empty($entry->getOriginUrl())) {
345 case ['scheme']: 360 $entry->setOriginUrl($entry->getUrl());
346 $entry->setUrl($url);
347 break;
348 case ['fragment']:
349 case ['query']:
350 case ['fragment', 'query']:
351 // noop
352 break;
353 default:
354 if (empty($entry->getOriginUrl())) {
355 $entry->setOriginUrl($entry->getUrl());
356 }
357 $entry->setUrl($url);
358 break;
359 } 361 }
360 } 362 $entry->setUrl($url);
363 break;
361 } 364 }
362 } 365 }
363 366