diff --git a/playwright.config.ts b/playwright.config.ts index 047b5a13e..9d001833f 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -29,6 +29,11 @@ export default defineConfig({ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry', }, + timeout: 60 * 1000, + globalTimeout: 60 * 1000, + expect: { + timeout: 60 * 1000, + }, /* Configure projects for major browsers */ projects: [ diff --git a/src/components/NavItems/Assistant/AssistantRuleBook.jsx b/src/components/NavItems/Assistant/AssistantRuleBook.jsx index 10f6cf5dd..5a628ffc2 100644 --- a/src/components/NavItems/Assistant/AssistantRuleBook.jsx +++ b/src/components/NavItems/Assistant/AssistantRuleBook.jsx @@ -1,3 +1,4 @@ +import React from "react"; import analysisIconOff from "../../NavBar/images/tools/video_logoOff.png"; import keyframesIconOff from "../../NavBar/images/tools/keyframesOff.png"; import thumbnailsIconOff from "../../NavBar/images/tools/youtubeOff.png"; @@ -6,6 +7,7 @@ import metadataIconOff from "../../NavBar/images/tools/metadataOff.png"; import videoRightsIconOff from "../../NavBar/images/tools/copyrightOff.png"; import forensicIconOff from "../../NavBar/images/tools/forensic_logoOff.png"; import videoIconOff from "../../NavBar/images/tools/video_logoOff.png"; +import DownloadIcon from "@mui/icons-material/Download"; export const NE_SUPPORTED_LANGS = ["en", "pt", "fr", "de", "el", "es", "it"]; @@ -113,11 +115,7 @@ export const ASSISTANT_ACTIONS = [ { title: "navbar_analysis_video", icon: analysisIconOff, - linksAccepted: [ - KNOWN_LINKS.YOUTUBE, - KNOWN_LINKS.FACEBOOK, - KNOWN_LINKS.TWITTER, - ], + linksAccepted: [KNOWN_LINKS.YOUTUBE, KNOWN_LINKS.FACEBOOK], cTypes: [CONTENT_TYPE.VIDEO], exceptions: [], useInputUrl: true, @@ -142,14 +140,10 @@ export const ASSISTANT_ACTIONS = [ linksAccepted: [ KNOWN_LINKS.YOUTUBE, KNOWN_LINKS.FACEBOOK, - KNOWN_LINKS.TWITTER, - KNOWN_LINKS.DAILYMOTION, - KNOWN_LINKS.VIMEO, KNOWN_LINKS.YOUTUBE, KNOWN_LINKS.YOUTUBESHORTS, KNOWN_LINKS.LIVELEAK, KNOWN_LINKS.OWN, - KNOWN_LINKS.INSTAGRAM, ], cTypes: [CONTENT_TYPE.VIDEO], exceptions: [], @@ -172,7 +166,7 @@ export const ASSISTANT_ACTIONS = [ { title: "navbar_magnifier", icon: magnifierIconOff, - linksAccepted: [KNOWN_LINKS.MISC, KNOWN_LINKS.OWN], + processLinksAccepted: [KNOWN_LINKS.MISC, KNOWN_LINKS.OWN], cTypes: [CONTENT_TYPE.IMAGE], exceptions: [], useInputUrl: false, @@ -183,7 +177,7 @@ export const ASSISTANT_ACTIONS = [ { title: "navbar_metadata", icon: metadataIconOff, - linksAccepted: [KNOWN_LINKS.MISC, KNOWN_LINKS.OWN], + processLinksAccepted: [KNOWN_LINKS.MISC, KNOWN_LINKS.OWN], cTypes: [CONTENT_TYPE.IMAGE, CONTENT_TYPE.VIDEO], exceptions: [ /(pbs.twimg.com)|(youtu.be|youtube)|(instagram)|(fbcdn.net)|(vimeo)|(tiktok.com)/, @@ -196,11 +190,7 @@ export const ASSISTANT_ACTIONS = [ { title: "navbar_rights", icon: videoRightsIconOff, - linksAccepted: [ - KNOWN_LINKS.YOUTUBE, - KNOWN_LINKS.FACEBOOK, - KNOWN_LINKS.TWITTER, - ], + linksAccepted: [KNOWN_LINKS.YOUTUBE], cTypes: [CONTENT_TYPE.VIDEO], exceptions: [], useInputUrl: true, @@ -211,7 +201,7 @@ export const ASSISTANT_ACTIONS = [ { title: "navbar_forensic", icon: forensicIconOff, - linksAccepted: [KNOWN_LINKS.MISC, KNOWN_LINKS.OWN], + processLinksAccepted: [KNOWN_LINKS.MISC, KNOWN_LINKS.OWN], cTypes: [CONTENT_TYPE.IMAGE], exceptions: [], useInputUrl: false, @@ -222,7 +212,7 @@ export const ASSISTANT_ACTIONS = [ { title: "navbar_ocr", icon: forensicIconOff, - linksAccepted: [KNOWN_LINKS.MISC, KNOWN_LINKS.OWN], + processLinksAccepted: [KNOWN_LINKS.MISC, KNOWN_LINKS.OWN], cTypes: [CONTENT_TYPE.IMAGE], exceptions: [], useInputUrl: false, @@ -233,7 +223,11 @@ export const ASSISTANT_ACTIONS = [ { title: "assistant_video_download_action", icon: videoIconOff, - linksAccepted: [KNOWN_LINKS.TELEGRAM, KNOWN_LINKS.MISC], + linksAccepted: [ + KNOWN_LINKS.TELEGRAM, + KNOWN_LINKS.FACEBOOK, + KNOWN_LINKS.TWITTER, + ], cTypes: [CONTENT_TYPE.VIDEO], exceptions: [], useInputUrl: false, @@ -241,6 +235,36 @@ export const ASSISTANT_ACTIONS = [ tsvPrefix: "assistant_video", download: true, }, + { + title: "assistant_video_download_generic", + icon: , + linksAccepted: [ + KNOWN_LINKS.YOUTUBESHORTS, + KNOWN_LINKS.INSTAGRAM, + KNOWN_LINKS.FACEBOOK, + KNOWN_LINKS.VK, + KNOWN_LINKS.VIMEO, + KNOWN_LINKS.LIVELEAK, + KNOWN_LINKS.DAILYMOTION, + ], + cTypes: [CONTENT_TYPE.VIDEO], + exceptions: [], + useInputUrl: false, + text: "assistant_video_download_generic_description", + tsvPrefix: "assistant_video", + path: null, + }, + { + title: "assistant_video_download_tiktok", + icon: , + linksAccepted: [KNOWN_LINKS.TIKTOK], + cTypes: [CONTENT_TYPE.VIDEO], + exceptions: [], + useInputUrl: false, + text: "assistant_video_download_tiktok_description", + tsvPrefix: "assistant_video", + path: null, + }, ]; export const selectCorrectActions = ( @@ -251,12 +275,10 @@ export const selectCorrectActions = ( ) => { let possibleActions = ASSISTANT_ACTIONS.filter( (action) => - ((action.useInputUrl && - action.linksAccepted.includes(inputUrlType) && - action.cTypes.includes(contentType)) || - (!action.useInputUrl && - action.linksAccepted.includes(processUrlType) && - action.cTypes.includes(contentType))) && + (!action.linksAccepted || action.linksAccepted.includes(inputUrlType)) && + (!action.processLinksAccepted || + action.processLinksAccepted.includes(processUrlType)) && + action.cTypes.includes(contentType) && (action.exceptions.length === 0 || !processUrl.match(action.exceptions)), ); return possibleActions; diff --git a/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantImageResult.jsx b/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantImageResult.jsx index ed3da6dcd..348130ade 100644 --- a/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantImageResult.jsx +++ b/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantImageResult.jsx @@ -32,6 +32,7 @@ const AssistantImageResult = () => { height={"100%"} alt={processUrl} width={"100%"} + data-testid="assistant-media-image" /> diff --git a/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantProcessUrlActions.jsx b/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantProcessUrlActions.jsx index 2376f6942..c13cc0aa4 100644 --- a/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantProcessUrlActions.jsx +++ b/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantProcessUrlActions.jsx @@ -36,7 +36,9 @@ const AssistantProcessUrlActions = () => { dl.setAttribute("href", resultUrl); dl.setAttribute("download", ""); dl.click(); - } else if (resultUrl != null) { + } else if (action.path === null) { + return; // Do nothing if path is null + } else if (resultUrl !== null) { navigate( "/app/" + action.path + @@ -70,19 +72,31 @@ const AssistantProcessUrlActions = () => { handleClick(action)}> - + {typeof action.icon === "string" && ( + + )} + {typeof action.icon !== "string" && action.icon} - + {keyword(action.title)} } secondary={ - {keyword(action.text)} + +
+
} /> diff --git a/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantVideoResult.jsx b/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantVideoResult.jsx index 3fcfc9d44..11954d0ab 100644 --- a/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantVideoResult.jsx +++ b/src/components/NavItems/Assistant/AssistantScrapeResults/AssistantVideoResult.jsx @@ -51,6 +51,11 @@ const AssistantVideoResult = () => { let stringToMatch = ""; let positionOne = 0; + // Don't embed blob links, they are url for cached in-memory video + if (embedURL.startsWith("blob:")) { + return null; + } + switch (input_url_type) { case KNOWN_LINKS.YOUTUBE: if (!embedURL.includes("/embed/")) { @@ -83,6 +88,9 @@ const AssistantVideoResult = () => { "embed/" + embedURL.slice(positionOne); break; + case KNOWN_LINKS.TIKTOK: + embedURL = null; + break; default: return embedURL; } @@ -95,16 +103,18 @@ const AssistantVideoResult = () => { return ( - + {useIframe() && preprocessLinkForEmbed(processUrl) && ( -