Support video file previews

This commit is contained in:
Max Leiter 2017-12-09 15:25:01 -08:00
parent ccd37aba8f
commit d4ad60c11d
2 changed files with 35 additions and 17 deletions

View file

@ -4,13 +4,20 @@
<a class="toggle-thumbnail" href="{{link}}" target="_blank" rel="noopener"> <a class="toggle-thumbnail" href="{{link}}" target="_blank" rel="noopener">
<img src="{{thumb}}"> <img src="{{thumb}}">
</a> </a>
{{else}} {{/equal}}
{{#equal type "audio"}} {{#equal type "audio"}}
<audio controls preload="metadata"> <audio controls preload="metadata">
<source src="{{link}}" type="{{res}}"> <source src="{{link}}" type="{{res}}">
Your browser does not support the audio element. Your browser does not support the audio element.
</audio> </audio>
{{else}} {{/equal}}
{{#equal type "video"}}
<video width="320" height="240" preload="metadata" controls>
<source src="{{link}}" type="{{res}}">
Your browser does not support the video element.
</video>
{{/equal}}
{{#equal type "link"}}
{{#if thumb}} {{#if thumb}}
<a class="toggle-thumbnail" href="{{link}}" target="_blank" rel="noopener"> <a class="toggle-thumbnail" href="{{link}}" target="_blank" rel="noopener">
<img src="{{thumb}}" class="thumb"> <img src="{{thumb}}" class="thumb">
@ -21,6 +28,5 @@
<div class="body" title="{{body}}">{{body}}</div> <div class="body" title="{{body}}">{{body}}</div>
</a> </a>
{{/equal}} {{/equal}}
{{/equal}}
</div> </div>
{{/preview}} {{/preview}}

View file

@ -120,6 +120,18 @@ function parse(msg, preview, res, client) {
} }
preview.type = "audio"; preview.type = "audio";
preview.res = res.type; preview.res = res.type;
break;
case "video/webm":
case "video/ogg":
case "video/mp4":
if (!preview.link.startsWith("https://")) {
break;
}
preview.res = res.type;
preview.type = "video";
break; break;
default: default:
@ -186,7 +198,7 @@ function fetch(uri, cb) {
if (contentLength > limit) { if (contentLength > limit) {
req.abort(); req.abort();
} }
} else if (/^audio\/.+/.test(res.headers["content-type"])) { } else if (/^(audio|video)\/.+/.test(res.headers["content-type"])) {
req.abort(); // ensure server doesn't download the audio file req.abort(); // ensure server doesn't download the audio file
} else { } else {
// if not image, limit download to 50kb, since we need only meta tags // if not image, limit download to 50kb, since we need only meta tags