Fix bug where videos couldn't be uploaded from a direct link
Possibly a firefox-only issue.pull/16/head
parent
5322d0158a
commit
cbeea1c665
|
|
@ -1,4 +1,13 @@
|
|||
import { guessContentType } from "./Utility";
|
||||
import { getUrlExtension, guessContentType } from "./Utility";
|
||||
|
||||
test("getUrlExtension", () => {
|
||||
expect(getUrlExtension("image.png")).toBe("png");
|
||||
expect(getUrlExtension("image.jpeg?34")).toBe("jpeg");
|
||||
expect(getUrlExtension("image.php?q=test&p=123%204")).toBe("php");
|
||||
|
||||
// I would probably rather have this return an empty string, but maybe some code relies on this functionality?
|
||||
expect(getUrlExtension("http://site/index")).toBe("http://site/index");
|
||||
});
|
||||
|
||||
test("guessContentType", () => {
|
||||
expect(guessContentType("video.mp4")).toBe("video");
|
||||
|
|
|
|||
|
|
@ -39,9 +39,17 @@ export const videoExtensions = [
|
|||
];
|
||||
|
||||
export function getUrlExtension(url: string) {
|
||||
// https://stackoverflow.com/a/47767860
|
||||
return url.split(/[#?]/)[0].split(".").pop()!.trim();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns "image" when the guessed type is NOT a video.
|
||||
* This means that it will also return "image" when the content type
|
||||
* could not be guessed!
|
||||
* @param url
|
||||
* @returns "image" | "video"
|
||||
*/
|
||||
export function guessContentType(url: string): ContentType {
|
||||
if (url != undefined) {
|
||||
const ext = getUrlExtension(url);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { ScrapeEngine, ScrapeResult, ScrapedPost, ContentType } from "../ScrapeEngine";
|
||||
import { guessContentType } from "../Utility";
|
||||
|
||||
class MediaElement {
|
||||
constructor(
|
||||
|
|
@ -16,6 +17,21 @@ export default class Fallback implements ScrapeEngine {
|
|||
}
|
||||
|
||||
scrapeDocument(document: Document): ScrapeResult {
|
||||
let result = new ScrapeResult(this.name);
|
||||
|
||||
// Check if the current page is a link to a video file.
|
||||
// If it is then use the document.location.href as media source and immediately return.
|
||||
// This is needed because firefox does not add a <source> to a <video> element
|
||||
// when going to a direct link. It looks like chromium-based browsers do not have this issue.
|
||||
if (guessContentType(document.location.href) == "video") {
|
||||
let post = new ScrapedPost();
|
||||
post.pageUrl = document.location.href;
|
||||
post.contentUrl = document.location.href;
|
||||
post.contentType = "video";
|
||||
result.posts.push(post);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Get all img elements.
|
||||
const largestImgElement = Array.from(document.getElementsByTagName("img")).map(
|
||||
(x) => new MediaElement("image", x.src, x.width * x.height)
|
||||
|
|
@ -33,8 +49,6 @@ export default class Fallback implements ScrapeEngine {
|
|||
a?.size > b?.size ? a : b
|
||||
);
|
||||
|
||||
let result = new ScrapeResult(this.name);
|
||||
|
||||
if (largestMediaElement) {
|
||||
let post = new ScrapedPost();
|
||||
post.pageUrl = document.location.href;
|
||||
|
|
|
|||
Loading…
Reference in New Issue