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, HandPointMessage, humanFileSize, isoDatetimeToAgoPopup, mimetypeColor, PageContainer, Paginator, PreviewLink, TagIcon, textEllipsis, useTitle } from "./Common"; import { useFilesProgressInterval, usePages, useSearchFiles, useSearchFilter, useSearchView, useStatusFlag, useWROLMode } from "../hooks/customHooks"; import {Route, Routes} from "react-router"; 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, Icon, Modal, Placeholder, Popup, 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"; import {useSearch} from "./Search"; import {FILES_MEDIA_URI} from "./Vars"; 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); const title = file.title || file.stem || file.name; const header = {title} ; return {file.author ? {file.author} : null} {file.size &&

{humanFileSize(file.size)}

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

{textEllipsis(title)}

; const dt = file.published_datetime || file.published_modified_datetime || file.modified; return

{isoDatetimeToAgoPopup(dt, false)}

{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 color = mimetypeColor(file.mimetype); const size = file.size !== null && file.size !== undefined ? humanFileSize(file.size) : null; const title = file.title || file.name || file.primary_path; const dt = file.published_datetime || file.published_modified_datetime || file.modified; return {title}} content={title}/> {author && {author}}

{isoDatetimeToAgoPopup(dt, false)}

{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)}

{humanFileSize(file.size)}
} 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)} {humanFileSize(file.size)}
} 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', 'Data']; 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 ; }