Commit 5edd605a authored by Andrew Dolgov's avatar Andrew Dolgov

image cache: do not try to cache data: schema urls; add caching of html5 video...

image cache: do not try to cache data: schema urls; add caching of html5 video content (similar to cache_starred_images plugin)
parent 0442cbb6
......@@ -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';
......
......@@ -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");
......
......@@ -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'));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment