import React, {useContext, useState} from "react"; import { CardContent, CardDescription, CardHeader, CardMeta, Checkbox, Container, Dropdown, Form, Image, PlaceholderLine, TableCell, TableHeaderCell, } from "semantic-ui-react"; import { CardGroupCentered, CardPoster, encodeMediaPath, ErrorMessage, ExternalCardLink, FileIcon, findPosterPath, humanFileSize, isoDatetimeToString, mimetypeColor, PageContainer, Paginator, PreviewLink, TagIcon, textEllipsis, useTitle } from "./Common"; import { useFilesProgressInterval, usePages, useQuery, useSearchFiles, useSearchFilter, useSearchView, useStatusFlag, useWROLMode } from "../hooks/customHooks"; import {Route, Routes} from "react-router-dom"; import {CardPlaceholder} from "./Placeholder"; import {ArchiveCard, ArchiveRowCells} from "./Archive"; import Grid from "semantic-ui-react/dist/commonjs/collections/Grid"; import {Media, ThemeContext} from "../contexts/contexts"; import { Button, Card, CardIcon, Icon, Modal, ModalActions, ModalContent, ModalHeader, Placeholder, Progress, Segment } from "./Theme"; import {SelectableTable} from "./Tables"; import {VideoCard, VideoRowCells} from "./Videos"; import {FileBrowser} from "./FileBrowser"; import {refreshFiles} from "../api"; import {useSubscribeEventName} from "../Events"; import {TagsSelector} from "../Tags"; import {Headlines} from "./Headline"; function EbookCard({file}) { const {s} = useContext(ThemeContext); const downloadUrl = `/download/${encodeMediaPath(file.primary_path)}`; const isEpub = file['mimetype'].startsWith('application/epub'); const viewerUrl = isEpub ? `/epub/epub.html?url=${downloadUrl}` : null; const color = mimetypeColor(file.mimetype); return {file.title || file.stem || file.name} {file.author ? {file.author} : null} {file.size &&

{humanFileSize(file.size)}

}
} function ImageCard({file}) { const {s} = useContext(ThemeContext); const url = `/media/${encodeMediaPath(file.primary_path)}`; return

{textEllipsis(file.title || file.stem || file.primary_path)}

{isoDatetimeToString(file.modified / 1000)}

{humanFileSize(file.size)}

} function FileCard({file}) { const {s} = useContext(ThemeContext); const isEbookType = file.mimetype && ( file.mimetype.startsWith('application/epub') || file.mimetype.startsWith('application/x-mobipocket-ebook') ); if (file.model === 'video' && 'video' in file) { return ; } else if (file.model === 'archive') { return ; } else if (file.mimetype && file.mimetype.startsWith('image/')) { return ; } else if (isEbookType) { return ; } const author = file.author; const downloadUrl = `/download/${encodeMediaPath(file.primary_path)}`; const color = mimetypeColor(file.mimetype); const size = file.size !== null && file.size !== undefined ? humanFileSize(file.size) : null; return {file.title || file.name || file.primary_path} {author && {author}}

{isoDatetimeToString(file.modified)}

{size}

} export function FileCards({files}) { if (files && files.length >= 1) { return {files.map(i => )} } else if (files && files.length === 0) { return No results! } else if (files === undefined) { return Could not search! } // Response is pending. return } function ImageRowCells({file}) { const url = `/media/${encodeMediaPath(file.primary_path)}`; let poster = ; if (file.size && file.size < 50000000) { // Image is less than 5mb, use it. poster = ; } // Fragment for SelectableRow return
{poster}

{textEllipsis(file.title || file.stem || file.primary_path)}

} export function EbookRowCells({file}) { let cover = ; const posterPath = findPosterPath(file); if (posterPath) { const coverSrc = `/media/${encodeMediaPath(posterPath)}`; cover = ; } // Fragment for SelectableRow return
{cover}
{textEllipsis(file.title || file.stem)}
} function FileRow({file}) { const isEbookType = file.mimetype && ( file.mimetype.startsWith('application/epub') || file.mimetype.startsWith('application/x-mobipocket-ebook') ); if (file.model === 'video' && 'video' in file) { return ; } else if (file.model === 'archive') { return ; } else if (file.mimetype && file.mimetype.startsWith('image/')) { return ; } else if (isEbookType) { return ; } // Fragment for SelectableRow return
{textEllipsis(file.title || file.name || file.stem)}
} export function FileTable({files, selectOn, onSelect, footer, selectedKeys}) { if (files && files.length > 0) { const headerContents = ['Poster', 'Title']; const rows = files.map(i => ); return ; } else if (files) { return No results! } else if (files === undefined) { return Could not search! } return } export function FileRowTagIcon({file}) { if (file.tags && file.tags.length) { return ; } } export function SearchViewButton({headlines}) { const {view, setView} = useSearchView(); if (headlines) { // Cycle: cards -> headline -> list if (view === 'headline') { return ; } export function DirectoryRefreshButton({paths}) { const {refreshing, refreshingDirectory, wrolModeEnabled, loading, refreshFiles} = useRefresh(); return }