diff --git a/ui/v2.5/src/components/Images/ImageDetails/ImageFileInfoPanel.tsx b/ui/v2.5/src/components/Images/ImageDetails/ImageFileInfoPanel.tsx index adf95d2f9..4e566a626 100644 --- a/ui/v2.5/src/components/Images/ImageDetails/ImageFileInfoPanel.tsx +++ b/ui/v2.5/src/components/Images/ImageDetails/ImageFileInfoPanel.tsx @@ -1,6 +1,6 @@ import React, { useState } from "react"; import { Accordion, Button, Card } from "react-bootstrap"; -import { FormattedMessage, FormattedNumber, FormattedTime } from "react-intl"; +import { FormattedMessage, FormattedTime } from "react-intl"; import { TruncatedText } from "src/components/Shared/TruncatedText"; import { DeleteFilesDialog } from "src/components/Shared/DeleteFilesDialog"; import * as GQL from "src/core/generated-graphql"; @@ -8,6 +8,7 @@ import { mutateImageSetPrimaryFile } from "src/core/StashService"; import { useToast } from "src/hooks/Toast"; import TextUtils from "src/utils/text"; import { TextField, URLField, URLsField } from "src/utils/field"; +import { FileSize } from "src/components/Shared/FileSize"; interface IFileInfoPanelProps { file: GQL.ImageFileDataFragment | GQL.VideoFileDataFragment; @@ -21,29 +22,6 @@ interface IFileInfoPanelProps { const FileInfoPanel: React.FC = ( props: IFileInfoPanelProps ) => { - function renderFileSize() { - if (props.file.size === undefined) { - return; - } - - const { size, unit } = TextUtils.fileSize(props.file.size ?? 0); - - return ( - - - - - - ); - } - const checksum = props.file.fingerprints.find((f) => f.type === "md5"); return ( @@ -64,7 +42,11 @@ const FileInfoPanel: React.FC = ( value={`file://${props.file.path}`} truncate /> - {renderFileSize()} + + + + + ) : undefined} {separator} - {size && filesize ? ( + {size ? ( - - {` ${TextUtils.formatFileSizeUnit(filesize.unit)}`} + ) : undefined} ) diff --git a/ui/v2.5/src/components/SceneDuplicateChecker/SceneDuplicateChecker.tsx b/ui/v2.5/src/components/SceneDuplicateChecker/SceneDuplicateChecker.tsx index 5f4f5e44d..2d8114935 100644 --- a/ui/v2.5/src/components/SceneDuplicateChecker/SceneDuplicateChecker.tsx +++ b/ui/v2.5/src/components/SceneDuplicateChecker/SceneDuplicateChecker.tsx @@ -44,6 +44,7 @@ import { } from "@fortawesome/free-solid-svg-icons"; import { SceneMergeModal } from "../Scenes/SceneMergeDialog"; import { objectTitle } from "src/core/files"; +import { FileSize } from "../Shared/FileSize"; const CLASSNAME = "duplicate-checker"; @@ -326,19 +327,6 @@ export const SceneDuplicateChecker: React.FC = () => { resetCheckboxSelection(); } - const renderFilesize = (filesize: number | null | undefined) => { - const { size: parsedSize, unit } = TextUtils.fileSize(filesize ?? 0); - return ( - - ); - }; - function maybeRenderMissingPhashWarning() { const missingPhashes = missingPhash?.findScenes.count ?? 0; if (missingPhashes > 0) { @@ -917,7 +905,9 @@ export const SceneDuplicateChecker: React.FC = () => { {file?.duration && TextUtils.secondsToTimestamp(file.duration)} - {renderFilesize(file?.size ?? 0)} + + + {`${file?.width ?? 0}x${file?.height ?? 0}`} - {sizeObj != null ? ( + {file?.size !== undefined ? ( - - {TextUtils.formatFileSizeUnit(sizeObj.unit)} + ) : ( "" diff --git a/ui/v2.5/src/components/Scenes/SceneDetails/SceneFileInfoPanel.tsx b/ui/v2.5/src/components/Scenes/SceneDetails/SceneFileInfoPanel.tsx index 8db3f9388..63490a2ee 100644 --- a/ui/v2.5/src/components/Scenes/SceneDetails/SceneFileInfoPanel.tsx +++ b/ui/v2.5/src/components/Scenes/SceneDetails/SceneFileInfoPanel.tsx @@ -18,6 +18,7 @@ import TextUtils from "src/utils/text"; import { TextField, URLField, URLsField } from "src/utils/field"; import { StashIDPill } from "src/components/Shared/StashID"; import { PatchComponent } from "../../../patch"; +import { FileSize } from "src/components/Shared/FileSize"; interface IFileInfoPanelProps { sceneID: string; @@ -36,25 +37,6 @@ const FileInfoPanel: React.FC = ( const intl = useIntl(); const history = useHistory(); - function renderFileSize() { - const { size, unit } = TextUtils.fileSize(props.file.size); - - return ( - - - - - - ); - } - // TODO - generalise fingerprints const oshash = props.file.fingerprints.find((f) => f.type === "oshash"); const phash = props.file.fingerprints.find((f) => f.type === "phash"); @@ -94,7 +76,11 @@ const FileInfoPanel: React.FC = ( value={`file://${props.file.path}`} truncate /> - {renderFileSize()} + + + + + ) : undefined} {separator} - {size && filesize ? ( + {size ? ( - - {` ${TextUtils.formatFileSizeUnit(filesize.unit)}`} + ) : undefined} ) diff --git a/ui/v2.5/src/components/Scenes/SceneListTable.tsx b/ui/v2.5/src/components/Scenes/SceneListTable.tsx index 3e68d27c2..d5cf65f5d 100644 --- a/ui/v2.5/src/components/Scenes/SceneListTable.tsx +++ b/ui/v2.5/src/components/Scenes/SceneListTable.tsx @@ -3,7 +3,7 @@ import { Link } from "react-router-dom"; import * as GQL from "src/core/generated-graphql"; import NavUtils from "src/utils/navigation"; import TextUtils from "src/utils/text"; -import { FormattedMessage, FormattedNumber, useIntl } from "react-intl"; +import { FormattedMessage, useIntl } from "react-intl"; import { objectTitle } from "src/core/files"; import { galleryTitle } from "src/core/galleries"; import SceneQueue from "src/models/sceneQueue"; @@ -11,6 +11,7 @@ import { RatingSystem } from "../Shared/Rating/RatingSystem"; import { useSceneUpdate } from "src/core/StashService"; import { IColumn, ListTable } from "../List/ListTable"; import { useTableColumns } from "src/hooks/useTableColumns"; +import { FileSize } from "../Shared/FileSize"; interface ISceneListTableProps { scenes: GQL.SlimSceneDataFragment[]; @@ -169,24 +170,12 @@ export const SceneListTable: React.FC = ( ); - function renderFileSize(file: { size: number | undefined }) { - const { size, unit } = TextUtils.fileSize(file.size); - - return ( - - ); - } - const FileSizeCell = (scene: GQL.SlimSceneDataFragment) => (
    {scene.files.map((file) => ( -
  • {renderFileSize(file)}
  • +
  • + +
  • ))}
); diff --git a/ui/v2.5/src/components/Shared/FileSize.tsx b/ui/v2.5/src/components/Shared/FileSize.tsx new file mode 100644 index 000000000..b58ba8344 --- /dev/null +++ b/ui/v2.5/src/components/Shared/FileSize.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import { FormattedNumber } from "react-intl"; +import TextUtils from "src/utils/text"; + +export const FileSize: React.FC<{ size: number }> = ({ size: fileSize }) => { + const { size, unit } = TextUtils.fileSize(fileSize); + + return ( + <> + + {` ${TextUtils.formatFileSizeUnit(unit)}`} + + ); +}; diff --git a/ui/v2.5/src/components/Stats.tsx b/ui/v2.5/src/components/Stats.tsx index 87d022be7..b035fe66b 100644 --- a/ui/v2.5/src/components/Stats.tsx +++ b/ui/v2.5/src/components/Stats.tsx @@ -3,6 +3,7 @@ import { useStats } from "src/core/StashService"; import { FormattedMessage, FormattedNumber } from "react-intl"; import { LoadingIndicator } from "src/components/Shared/LoadingIndicator"; import TextUtils from "src/utils/text"; +import { FileSize } from "./Shared/FileSize"; export const Stats: React.FC = () => { const { data, error, loading } = useStats(); @@ -10,9 +11,6 @@ export const Stats: React.FC = () => { if (error) return {error.message}; if (loading || !data) return ; - const scenesSize = TextUtils.fileSize(data.stats.scenes_size); - const imagesSize = TextUtils.fileSize(data.stats.images_size); - const scenesDuration = TextUtils.secondsAsTimeString( data.stats.scenes_duration, 3 @@ -28,13 +26,7 @@ export const Stats: React.FC = () => {

- - {` ${TextUtils.formatFileSizeUnit(scenesSize.unit)}`} +

@@ -74,13 +66,7 @@ export const Stats: React.FC = () => {

- - {` ${TextUtils.formatFileSizeUnit(imagesSize.unit)}`} +