From 9934846a106494fb19d0b30e809be8f20bf0ac15 Mon Sep 17 00:00:00 2001 From: Elias Wennerlund Date: Tue, 28 Apr 2026 22:16:15 +0200 Subject: [PATCH 1/2] feat(Media): Enhance media usage display with human-readable size format Co-authored-by: Copilot --- src/app/[locale]/(main-content)/settings/media/page.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/app/[locale]/(main-content)/settings/media/page.tsx b/src/app/[locale]/(main-content)/settings/media/page.tsx index 8fba8ab5..f2716b90 100644 --- a/src/app/[locale]/(main-content)/settings/media/page.tsx +++ b/src/app/[locale]/(main-content)/settings/media/page.tsx @@ -1,6 +1,13 @@ import i18nService from '@/services/i18nService'; import MediaService from '@/services/mediaService'; +function bytesToSize(bytes: number): string { + if (bytes === 0) return '0 B'; + const sizes = ['B', 'KB', 'MB', 'GB', 'TB']; + const i = Math.floor(Math.log(bytes) / Math.log(1024)); + return Math.round(bytes / Math.pow(1024, i)) + ' ' + sizes[i]; +} + export default async function Page(props: { params: Promise<{ locale: string }>; }) { @@ -21,7 +28,7 @@ export default async function Page(props: { {l.settings.media.stored}: {stats.count}

- {l.settings.media.usage}: {stats.size} bytes + {l.settings.media.usage}: {bytesToSize(stats.size)}

{l.settings.media.orphaned}: {stats.count - stats.used} From 9a6ae0e7bddb2a54949b0a1180962df024cffd10 Mon Sep 17 00:00:00 2001 From: Elias Wennerlund Date: Tue, 28 Apr 2026 22:48:24 +0200 Subject: [PATCH 2/2] refactor(Media): Move bytesToSize function to MediaService for better organization --- .../[locale]/(main-content)/settings/media/page.tsx | 9 +-------- src/services/mediaService.ts | 11 +++++++++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/app/[locale]/(main-content)/settings/media/page.tsx b/src/app/[locale]/(main-content)/settings/media/page.tsx index f2716b90..da83d0da 100644 --- a/src/app/[locale]/(main-content)/settings/media/page.tsx +++ b/src/app/[locale]/(main-content)/settings/media/page.tsx @@ -1,13 +1,6 @@ import i18nService from '@/services/i18nService'; import MediaService from '@/services/mediaService'; -function bytesToSize(bytes: number): string { - if (bytes === 0) return '0 B'; - const sizes = ['B', 'KB', 'MB', 'GB', 'TB']; - const i = Math.floor(Math.log(bytes) / Math.log(1024)); - return Math.round(bytes / Math.pow(1024, i)) + ' ' + sizes[i]; -} - export default async function Page(props: { params: Promise<{ locale: string }>; }) { @@ -28,7 +21,7 @@ export default async function Page(props: { {l.settings.media.stored}: {stats.count}

- {l.settings.media.usage}: {bytesToSize(stats.size)} + {l.settings.media.usage}: {MediaService.bytesToSize(stats.size)}

{l.settings.media.orphaned}: {stats.count - stats.used} diff --git a/src/services/mediaService.ts b/src/services/mediaService.ts index cb8b46b6..513e414b 100644 --- a/src/services/mediaService.ts +++ b/src/services/mediaService.ts @@ -1,7 +1,7 @@ import prisma from '@/prisma'; -import { stat, readdir, readFile, writeFile } from 'fs/promises'; -import FileService, { MediaType } from './fileService'; import { existsSync } from 'fs'; +import { readdir, readFile, stat, writeFile } from 'fs/promises'; +import FileService, { MediaType } from './fileService'; const mediaPath = process.env.MEDIA_PATH || './media'; @@ -96,4 +96,11 @@ export default class MediaService { return { count: dir.length, size, used }; } + + static bytesToSize(bytes: number): string { + if (bytes === 0) return '0 B'; + const sizes = ['B', 'KB', 'MB', 'GB', 'TB']; + const i = Math.floor(Math.log(bytes) / Math.log(1024)); + return Math.round(bytes / Math.pow(1024, i)) + ' ' + sizes[i]; + } }