Compare commits

..
Author SHA1 Message Date
Graham Steffaniak fd07f4ac1d fix linting 2026-11-06 13:27:40 -06:00
Graham Steffaniak da548cb7b3 use static vars 2026-11-06 13:21:31 -06:00
Graham Steffaniak 8cbca1ab3a Merge branch 'dev/v2.2.0' into consolidate-folio-package 2026-11-06 13:13:44 -06:00
Graham Steffaniak f547d0de32 Merge branch 'dev/v2.2.0' of github.com:gtsteffaniak/filebrowser into dev/v2.2.0 2026-11-06 13:11:53 -06:00
Graham Steffaniak e517ad2777 updated conditions 2026-11-06 13:10:03 -06:00
Graham Steffaniakandcoderabbitai[bot] 74f2951688 Update makefile
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-11-05 14:32:27 -06:00
Graham Steffaniak 943a915cf3 updated dist path ignore logic 2026-11-05 14:13:46 -06:00
Graham Steffaniak efe5379f3f add back gitignore 2026-11-05 13:50:17 -06:00
Graham Steffaniak 0d2451e009 updated go mod 2026-11-05 13:48:52 -06:00
Graham Steffaniak 20af71da61 Merge branch 'dev/v2.2.0' into consolidate-folio-package 2026-11-05 13:38:32 -06:00
Graham Steffaniak 324a9c3802 Merge branch 'dev/v2.2.0' of github.com:gtsteffaniak/filebrowser into dev/v2.2.0 2026-11-05 13:32:51 -06:00
Graham Steffaniak 7f88f829ef consolidate folio package into preview 2026-11-05 13:32:27 -06:00
Graham Steffaniak fafb755576 updated changelog 2026-11-04 17:44:09 -06:00
Graham Steffaniak 3e05196256 Merge branch 'office-file-guards' of github.com:gtsteffaniak/filebrowser into office-file-guards 2026-11-04 17:41:11 -06:00
Graham Steffaniak 4db06c9ab1 integrate back into the preview package 2026-11-04 17:40:35 -06:00
Graham Steffaniak 0d30433739 Merge branch 'dev/v2.2.0' into office-file-guards 2026-11-04 15:07:10 -06:00
Graham Steffaniak b45e3498b8 improve text file guards 2026-11-04 15:05:18 -06:00
Graham Steffaniak 972ba638df docker ignore the dist folder 2026-11-03 16:08:15 -06:00
6 changed files with 6 additions and 45 deletions

No files matched your search

+4 -10
View File
@@ -80,11 +80,6 @@ var heifImageExts = map[string]bool{
const heicDecodeMaxEdge = 16384
// stillImageMaxSourcePixels caps the original image area (width×height) passed to
// go-media for HEIC, JPEG XL, and camera RAW decode. JPEG XL honors it today
// (~50 MiB of 8-bit RGB at 4096×4096); other still formats ignore the field.
const stillImageMaxSourcePixels = 4096 * 4096
// cameraRawExts match go-media rawpreview formats (also iteminfo raw extensions).
var cameraRawExts = map[string]bool{
".cr2": true, ".cr3": true, ".nef": true, ".nrw": true, ".arw": true, ".srf": true, ".sr2": true,
@@ -633,11 +628,10 @@ func stillImageJPEG(path string, maxW, maxH, quality int, op string, supported f
quality = 85
}
res, err := media.Thumbnail(f, size, media.ThumbnailOptions{
MaxWidth: maxW,
MaxHeight: maxH,
Format: "jpeg",
Quality: quality,
MaxSourcePixels: stillImageMaxSourcePixels,
MaxWidth: maxW,
MaxHeight: maxH,
Format: "jpeg",
Quality: quality,
})
if err != nil {
logFail(err)
-23
View File
@@ -2,13 +2,11 @@ package gomedia
import (
"bytes"
"errors"
"image/jpeg"
"os"
"path/filepath"
"testing"
"github.com/gtsteffaniak/go-media/pkg/media"
"github.com/stretchr/testify/require"
)
@@ -68,24 +66,3 @@ func TestJXLJPEGMissingFileReturnsFalse(t *testing.T) {
require.False(t, ok)
require.Empty(t, data)
}
// JPEG XL above stillImageMaxSourcePixels must fail with go-media's ErrUnsupported
// and return ok=false (no ffmpeg fallback).
func TestJXLJPEGRejectsOversizedSource(t *testing.T) {
withGate(t, false)
f, err := os.Open(fixtureJXL)
require.NoError(t, err)
defer f.Close()
info, err := f.Stat()
require.NoError(t, err)
_, err = media.Thumbnail(f, info.Size(), media.ThumbnailOptions{
MaxWidth: 256,
MaxHeight: 256,
Format: "jpeg",
Quality: 85,
MaxSourcePixels: 1,
})
require.Error(t, err)
require.True(t, errors.Is(err, media.ErrUnsupported), "oversized JXL must surface ErrUnsupported, got %v", err)
}
@@ -567,7 +567,6 @@ func TextPreviewKind(ext string) string {
// Do not add mimetypes shared with binaries (e.g. application/x-msdownload for .exe).
var textPreviewMimeTypes = map[string]bool{
"application/json": true,
"application/rtf": true,
"application/yaml": true,
"application/x-yaml": true,
"application/sql": true,
@@ -25,7 +25,7 @@ func TestIsTextPreviewable(t *testing.T) {
for _, mt := range []string{"text/plain", "text/markdown", "text/lyrics", "text/x-go", "text/html"} {
require.True(t, IsTextPreviewable(mt), mt)
}
for _, mt := range []string{"application/json", "application/yaml", "application/sql", "application/x-sh", "application/x-php", "application/x-powershell", "application/x-tex", "application/rtf", "text/rtf"} {
for _, mt := range []string{"application/json", "application/yaml", "application/sql", "application/x-sh", "application/x-php", "application/x-powershell", "application/x-tex"} {
require.True(t, IsTextPreviewable(mt), mt)
}
// Mimetypes shared with binaries (.exe, .bat via application/x-msdownload) must stay non-previewable.
@@ -295,8 +295,6 @@ const PROFILE_SNAPSHOT_FIELDS = [
"debugOffice",
"viewMode",
"gallerySize",
"promptRightCloseButton",
"newFileTemplate",
];
export default {
+1 -8
View File
@@ -5,7 +5,6 @@ const { globalsMock } = vi.hoisted(() => ({
globalsMock: {
textPreviewMimeTypes: [
"application/json",
"application/rtf",
"application/yaml",
"application/x-yaml",
"application/sql",
@@ -67,13 +66,7 @@ describe("isTextPreviewableType", () => {
});
it("is true for text-extension mimetypes that are not text/*", () => {
for (const mt of ["application/json", "application/rtf", "application/yaml", "application/sql", "application/x-sh", "application/x-php", "application/x-powershell", "application/x-tex"]) {
expect(isTextPreviewableType(mt), mt).toBe(true);
}
});
it("is true for RTF mimetypes", () => {
for (const mt of ["application/rtf", "text/rtf", "application/rtf; charset=windows-1252"]) {
for (const mt of ["application/json", "application/yaml", "application/sql", "application/x-sh", "application/x-php", "application/x-powershell", "application/x-tex"]) {
expect(isTextPreviewableType(mt), mt).toBe(true);
}
});