From 5edd605ae1a9269b8b6b91b587da3d54a35424e9 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 4 Feb 2017 11:50:01 +0300 Subject: [PATCH] image cache: do not try to cache data: schema urls; add caching of html5 video content (similar to cache_starred_images plugin) --- include/functions2.php | 33 ++++++++++++++------------- include/rssfuncs.php | 7 +++--- plugins/cache_starred_images/init.php | 3 ++- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/include/functions2.php b/include/functions2.php index 2b34f287..6017a78f 100644 --- a/include/functions2.php +++ b/include/functions2.php @@ -888,7 +888,7 @@ $doc->loadHTML($charset_hack . $res); $xpath = new DOMXPath($doc); - $entries = $xpath->query('(//a[@href]|//img[@src])'); + $entries = $xpath->query('(//a[@href]|//img[@src]|//video/source[@src])'); $ttrss_uses_https = parse_url(get_self_url_prefix(), PHP_URL_SCHEME) === 'https'; @@ -903,28 +903,29 @@ $entry->setAttribute('rel', 'noopener noreferrer'); } - if ($entry->nodeName == 'img') { - - if ($entry->hasAttribute('src')) { - $src = rewrite_relative_url($site_url, $entry->getAttribute('src')); - - $cached_filename = CACHE_DIR . '/images/' . sha1($src) . '.png'; + if ($entry->hasAttribute('src')) { + $src = rewrite_relative_url($site_url, $entry->getAttribute('src')); - if (file_exists($cached_filename)) { - $src = SELF_URL_PATH . '/public.php?op=cached_image&hash=' . sha1($src) . '.png'; + $extension = $entry->tagName == 'source' ? '.mp4' : '.png'; + $cached_filename = CACHE_DIR . '/images/' . sha1($src) . $extension; - if ($entry->hasAttribute('srcset')) { - $entry->removeAttribute('srcset'); - } + if (file_exists($cached_filename)) { + $src = SELF_URL_PATH . '/public.php?op=cached_image&hash=' . sha1($src) . $extension; - if ($entry->hasAttribute('sizes')) { - $entry->removeAttribute('sizes'); - } + if ($entry->hasAttribute('srcset')) { + $entry->removeAttribute('srcset'); } - $entry->setAttribute('src', $src); + if ($entry->hasAttribute('sizes')) { + $entry->removeAttribute('sizes'); + } } + $entry->setAttribute('src', $src); + } + + if ($entry->nodeName == 'img') { + if ($entry->hasAttribute('src')) { $is_https_url = parse_url($entry->getAttribute('src'), PHP_URL_SCHEME) === 'https'; diff --git a/include/rssfuncs.php b/include/rssfuncs.php index fd4a10f1..1f38091b 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -1239,13 +1239,14 @@ $doc->loadHTML($charset_hack . $html); $xpath = new DOMXPath($doc); - $entries = $xpath->query('(//img[@src])'); + $entries = $xpath->query('(//img[@src])|(//video/source[@src])'); foreach ($entries as $entry) { - if ($entry->hasAttribute('src')) { + if ($entry->hasAttribute('src') && strpos($entry->getAttribute('src'), "data:") !== 0) { $src = rewrite_relative_url($site_url, $entry->getAttribute('src')); - $local_filename = CACHE_DIR . "/images/" . sha1($src) . ".png"; + $extension = $entry->tagName == 'source' ? '.mp4' : '.png'; + $local_filename = CACHE_DIR . "/images/" . sha1($src) . $extension; if ($debug) _debug("cache_images: downloading: $src to $local_filename"); diff --git a/plugins/cache_starred_images/init.php b/plugins/cache_starred_images/init.php index 63637bfd..de627fc7 100644 --- a/plugins/cache_starred_images/init.php +++ b/plugins/cache_starred_images/init.php @@ -180,7 +180,8 @@ class Cache_Starred_Images extends Plugin implements IHandler { foreach ($entries as $entry) { - if ($entry->hasAttribute('src')) { + if ($entry->hasAttribute('src') && strpos($entry->getAttribute('src'), "data:") !== 0) { + $has_images = true; $src = rewrite_relative_url($site_url, $entry->getAttribute('src')); -- 2.39.5