From a8e7da01146455f13ef06b151a7dafedd3acf769 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Sat, 9 Feb 2019 14:13:08 +0100 Subject: [PATCH] Do not try to retrieve thumbnails for internal link Also adds a helper function to determine if a link is a note and apply it across multiple files. --- application/api/ApiUtils.php | 2 +- application/bookmark/LinkUtils.php | 13 ++++++++++++ application/feed/FeedBuilder.php | 4 ++-- .../netscape/NetscapeBookmarkUtils.php | 2 +- index.php | 8 +++++--- tests/bookmark/LinkUtilsTest.php | 20 +++++++++++++++++++ 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/application/api/ApiUtils.php b/application/api/ApiUtils.php index 1824b5d..1e3ac02 100644 --- a/application/api/ApiUtils.php +++ b/application/api/ApiUtils.php @@ -59,7 +59,7 @@ class ApiUtils { $out['id'] = $link['id']; // Not an internal link - if ($link['url'][0] != '?') { + if (! is_note($link['url'])) { $out['url'] = $link['url']; } else { $out['url'] = $indexUrl . $link['url']; diff --git a/application/bookmark/LinkUtils.php b/application/bookmark/LinkUtils.php index de5b61c..9e9d4f0 100644 --- a/application/bookmark/LinkUtils.php +++ b/application/bookmark/LinkUtils.php @@ -220,3 +220,16 @@ function link_small_hash($date, $id) { return smallHash($date->format(LinkDB::LINK_DATE_FORMAT) . $id); } + +/** + * Returns whether or not the link is an internal note. + * Its URL starts by `?` because it's actually a permalink. + * + * @param string $linkUrl + * + * @return bool true if internal note, false otherwise. + */ +function is_note($linkUrl) +{ + return isset($linkUrl[0]) && $linkUrl[0] === '?'; +} diff --git a/application/feed/FeedBuilder.php b/application/feed/FeedBuilder.php index b66f2f9..fec0452 100644 --- a/application/feed/FeedBuilder.php +++ b/application/feed/FeedBuilder.php @@ -147,8 +147,8 @@ class FeedBuilder protected function buildItem($link, $pageaddr) { $link['guid'] = $pageaddr . '?' . $link['shorturl']; - // Check for both signs of a note: starting with ? and 7 chars long. - if ($link['url'][0] === '?' && strlen($link['url']) === 7) { + // Prepend the root URL for notes + if (is_note($link['url'])) { $link['url'] = $pageaddr . $link['url']; } if ($this->usePermalinks === true) { diff --git a/application/netscape/NetscapeBookmarkUtils.php b/application/netscape/NetscapeBookmarkUtils.php index 2fb1a4a..2866594 100644 --- a/application/netscape/NetscapeBookmarkUtils.php +++ b/application/netscape/NetscapeBookmarkUtils.php @@ -54,7 +54,7 @@ class NetscapeBookmarkUtils $link['timestamp'] = $date->getTimestamp(); $link['taglist'] = str_replace(' ', ',', $link['tags']); - if (startsWith($link['url'], '?') && $prependNoteUrl) { + if (is_note($link['url']) && $prependNoteUrl) { $link['url'] = $indexUrl . $link['url']; } diff --git a/index.php b/index.php index 633ab89..7b54f98 100644 --- a/index.php +++ b/index.php @@ -362,7 +362,7 @@ function showDailyRSS($conf, $loginManager) $conf->get('redirector.encode_url') ); $link['timestamp'] = $link['created']->getTimestamp(); - if (startsWith($link['url'], '?')) { + if (is_note($link['url'])) { $link['url'] = index_url($_SERVER) . $link['url']; // make permalink URL absolute } } @@ -1176,7 +1176,9 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager, $link['title'] = $link['url']; } - if ($conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE) { + if ($conf->get('thumbnails.mode', Thumbnailer::MODE_NONE) !== Thumbnailer::MODE_NONE + && ! is_note($link['url']) + ) { $thumbnailer = new Thumbnailer($conf); $link['thumbnail'] = $thumbnailer->get($url); } @@ -1558,7 +1560,7 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager, $ids = []; foreach ($LINKSDB as $link) { // A note or not HTTP(S) - if ($link['url'][0] === '?' || ! startsWith(strtolower($link['url']), 'http')) { + if (is_note($link['url']) || ! startsWith(strtolower($link['url']), 'http')) { continue; } $ids[] = $link['id']; diff --git a/tests/bookmark/LinkUtilsTest.php b/tests/bookmark/LinkUtilsTest.php index 1b8688e..5b31115 100644 --- a/tests/bookmark/LinkUtilsTest.php +++ b/tests/bookmark/LinkUtilsTest.php @@ -317,6 +317,26 @@ class LinkUtilsTest extends \PHPUnit\Framework\TestCase $this->assertNotContains('>#nothashtag', $autolinkedDescription); } + /** + * Test is_note with note URLs. + */ + public function testIsNote() + { + $this->assertTrue(is_note('?')); + $this->assertTrue(is_note('?abcDEf')); + $this->assertTrue(is_note('?_abcDEf#123')); + } + + /** + * Test is_note with non note URLs. + */ + public function testIsNotNote() + { + $this->assertFalse(is_note('')); + $this->assertFalse(is_note('nope')); + $this->assertFalse(is_note('https://github.com/shaarli/Shaarli/?hi')); + } + /** * Util function to build an hashtag link. *