import React from "react"; import _ from "lodash"; import {Grid, Header as SHeader, Image,} from "semantic-ui-react"; import {TagsSelector} from "../Tags"; import {Media} from "../contexts/contexts"; import {encodeMediaPath, isSupportedArchive} from "./Common"; import {getFile, tagFileGroup, untagFileGroup} from "../api"; import {ArchivePreviewContent} from "./ArchivePreview"; import {CbzViewer} from "./CbzViewer"; import {StlViewer} from "react-stl-viewer"; import {Button, Modal} from "./Theme"; import {toast} from "react-semantic-toasts-2"; import {useOneQuery} from "../hooks/customHooks"; import {ShareButton} from "./Share"; import {pathDirectory} from "./FileBrowser"; import {InlineErrorBoundary} from "./ErrorBoundary"; import {useLocation} from "react-router"; // Routes where file views should not be tracked const EXCLUDED_TRACKING_ROUTES = [ /^\/videos\/video\//, /^\/videos\/channel\/[^/]+\/video\//, /^\/archive\/\d+/ ]; function shouldSkipTracking(pathname) { return EXCLUDED_TRACKING_ROUTES.some(pattern => pattern.test(pathname)); } function getMediaPathURL(previewFile) { if (previewFile['primary_path']) { return `/media/${encodeMediaPath(previewFile['primary_path'])}`; } else { return `/media/${encodeMediaPath(previewFile['path'])}`; } } function getDownloadPathURL(previewFile) { if (previewFile['primary_path']) { return `/download/${encodeMediaPath(previewFile['primary_path'])}`; } else { return `/download/${encodeMediaPath(previewFile['path'])}`; } } function getEpubViewerURL(previewFile) { let url = previewFile['primary_path'] ?? previewFile['path']; return `/epub/epub.html?url=/media/${encodeMediaPath(url)}` } function getIframePreviewModal(previewFile, url) { url = url || getMediaPathURL(previewFile); return