Compare commits
52
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f624fff88f | ||
|
|
494baf2c0b | ||
|
|
95ab565324 | ||
|
|
04135038c1 | ||
|
|
e72a8fece0 | ||
|
|
5bcbf450a8 | ||
|
|
252f329be8 | ||
|
|
f6c043382d | ||
|
|
690ef5d246 | ||
|
|
347ae9c430 | ||
|
|
63f09d6eaa | ||
|
|
9d084d4d2b | ||
|
|
33c7359f7c | ||
|
|
d5421886bd | ||
|
|
7f262b2a16 | ||
|
|
cd115ac6c6 | ||
|
|
b7ddd535a9 | ||
|
|
fc62c6c9c7 | ||
|
|
7d114bece0 | ||
|
|
b8d59cdb6a | ||
|
|
e9b8cbdedc | ||
|
|
65e7a50233 | ||
|
|
764131efeb | ||
|
|
14b16a86df | ||
|
|
0df891e566 | ||
|
|
56a0666daf | ||
|
|
0e56d8e241 | ||
|
|
a850132695 | ||
|
|
43c57cabf6 | ||
|
|
426381a8bb | ||
|
|
01c025f31d | ||
|
|
b3703698e4 | ||
|
|
c2e6065f05 | ||
|
|
f4814e6315 | ||
|
|
2cedc3d7d3 | ||
|
|
8994f01986 | ||
|
|
4bbf70ccb7 | ||
|
|
4bf4dac969 | ||
|
|
c000eef6e5 | ||
|
|
70082d25b4 | ||
|
|
5e6fb6b95a | ||
|
|
29605bcfb8 | ||
|
|
06ad835900 | ||
|
|
1b77c6816e | ||
|
|
97bd657751 | ||
|
|
625cc58e4c | ||
|
|
b2332db888 | ||
|
|
fa5be1aa70 | ||
|
|
fb8dcd8711 | ||
|
|
2b98c92d5c | ||
|
|
4a54ef8d16 | ||
|
|
19926422c2 |
No files matched your search
@@ -2,15 +2,6 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. For commit guidelines, please refer to [Standard Version](https://github.com/conventional-changelog/standard-version).
|
||||
|
||||
## v1.1.1-beta
|
||||
|
||||
**Notes**:
|
||||
- [docker] upgraded ffmpeg 8.0 to 8.0.1
|
||||
|
||||
**BugFixes**:
|
||||
- added missing exiftool to docker image for heic conversion orientation support
|
||||
- v1.1.0-beta - Incorrect naming of 1 file in directory-info #1621
|
||||
|
||||
## v1.1.0-beta
|
||||
|
||||
**New Features**:
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
|
||||
## Pinned
|
||||
|
||||
:loudspeaker: [What's Coming Soon](https://github.com/gtsteffaniak/filebrowser/discussions/1622)
|
||||
|
||||
:pushpin: [Read The Official Docs](https://filebrowserquantum.com/) (currently english-only)
|
||||
|
||||
## About
|
||||
|
||||
+2
-3
@@ -1,4 +1,4 @@
|
||||
FROM gtstef/ffmpeg:8.0.1-decode AS ffmpeg
|
||||
FROM gtstef/ffmpeg:8.0-decode AS ffmpeg
|
||||
FROM golang:alpine AS base
|
||||
ARG VERSION
|
||||
ARG REVISION
|
||||
@@ -28,7 +28,7 @@ COPY --from=ffmpeg [ "/ffmpeg", "/ffprobe", "/usr/local/bin/" ]
|
||||
ENV FILEBROWSER_FFMPEG_PATH="/usr/local/bin/"
|
||||
ENV FILEBROWSER_DATABASE="/home/filebrowser/data/database.db"
|
||||
ENV PATH="$PATH:/home/filebrowser"
|
||||
RUN apk --no-cache add ca-certificates mailcap tzdata curl exiftool
|
||||
RUN apk --no-cache add ca-certificates mailcap tzdata curl
|
||||
RUN adduser -D -s /bin/true -u 1000 filebrowser
|
||||
USER filebrowser
|
||||
WORKDIR /home/filebrowser
|
||||
@@ -42,7 +42,6 @@ COPY --from=nbuild --chown=filebrowser:1000 [ "/app/dist/", "./http/dist/" ]
|
||||
RUN [ "filebrowser", "version" ]
|
||||
RUN [ "ffmpeg", "-version" ]
|
||||
RUN [ "ffprobe", "-version" ]
|
||||
RUN [ "exiftool", "-ver" ]
|
||||
USER root
|
||||
# exposing default port for auto discovery.
|
||||
EXPOSE 80
|
||||
|
||||
+3
-2
@@ -14,13 +14,13 @@ require (
|
||||
github.com/google/go-cmp v0.7.0
|
||||
github.com/gtsteffaniak/go-cache v1.0.0
|
||||
github.com/gtsteffaniak/go-logger v0.2.3
|
||||
github.com/kovidgoyal/imaging v1.7.2
|
||||
github.com/kovidgoyal/imaging v1.8.15
|
||||
github.com/pquerna/otp v1.5.0
|
||||
github.com/spf13/afero v1.15.0
|
||||
github.com/stretchr/testify v1.11.1
|
||||
github.com/swaggo/http-swagger v1.3.4
|
||||
github.com/swaggo/swag v1.16.6
|
||||
golang.org/x/crypto v0.45.0
|
||||
golang.org/x/crypto v0.44.0
|
||||
golang.org/x/image v0.33.0
|
||||
golang.org/x/mod v0.30.0
|
||||
golang.org/x/oauth2 v0.33.0
|
||||
@@ -161,6 +161,7 @@ require (
|
||||
github.com/kisielk/errcheck v1.9.0 // indirect
|
||||
github.com/kkHAIKE/contextcheck v1.1.6 // indirect
|
||||
github.com/kovidgoyal/go-parallel v1.1.1 // indirect
|
||||
github.com/kovidgoyal/go-shm v1.0.0 // indirect
|
||||
github.com/kulti/thelper v0.7.1 // indirect
|
||||
github.com/kunwardeep/paralleltest v1.0.15 // indirect
|
||||
github.com/lasiar/canonicalheader v1.1.2 // indirect
|
||||
|
||||
+6
-4
@@ -546,8 +546,10 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kovidgoyal/go-parallel v1.1.1 h1:1OzpNjtrUkBPq3UaqrnvOoB2F9RttSt811uiUXyI7ok=
|
||||
github.com/kovidgoyal/go-parallel v1.1.1/go.mod h1:BJNIbe6+hxyFWv7n6oEDPj3PA5qSw5OCtf0hcVxWJiw=
|
||||
github.com/kovidgoyal/imaging v1.7.2 h1:mmT6k6Az3mC6dbqdZ6Q9KQCdZFWTAQ+q97NyGZgJ/2c=
|
||||
github.com/kovidgoyal/imaging v1.7.2/go.mod h1:GdkCORjfZMMGFY0Pb7TDmRhj7PDhxF/QShKukSCj0VU=
|
||||
github.com/kovidgoyal/go-shm v1.0.0 h1:HJEel9D1F9YhULvClEHJLawoRSj/1u/EDV7MJbBPgQo=
|
||||
github.com/kovidgoyal/go-shm v1.0.0/go.mod h1:Yzb80Xf9L3kaoB2RGok9hHwMIt7Oif61kT6t3+VnZds=
|
||||
github.com/kovidgoyal/imaging v1.8.15 h1:FwKRGvmbQ04OFYF5WIalcvUontcnj1chBeHmR5I7UYg=
|
||||
github.com/kovidgoyal/imaging v1.8.15/go.mod h1:aXZHGm/gKcaXpxn1NnQiVtuz3Z2BCnXWyjF0ZGrmJ1g=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
@@ -891,8 +893,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
||||
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
|
||||
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
|
||||
golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
|
||||
golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
|
||||
@@ -56,6 +56,11 @@ var ResizableImageTypes = map[string]bool{
|
||||
".tif": true,
|
||||
".heic": true,
|
||||
".heif": true,
|
||||
".webp": true,
|
||||
".pbm": true,
|
||||
".pgm": true,
|
||||
".ppm": true,
|
||||
".pam": true,
|
||||
".other": false,
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,11 @@ gif
|
||||
tiff
|
||||
bmp
|
||||
heic
|
||||
webp
|
||||
pbm
|
||||
pgm
|
||||
ppm
|
||||
pam
|
||||
)
|
||||
*/
|
||||
type Format int
|
||||
@@ -39,6 +44,16 @@ func (x Format) toImaging() imaging.Format {
|
||||
return imaging.BMP
|
||||
case FormatHeic:
|
||||
return imaging.JPEG
|
||||
case FormatWebp:
|
||||
return imaging.WEBP
|
||||
case FormatPbm:
|
||||
return imaging.PBM
|
||||
case FormatPgm:
|
||||
return imaging.PGM
|
||||
case FormatPpm:
|
||||
return imaging.PPM
|
||||
case FormatPam:
|
||||
return imaging.PAM
|
||||
default:
|
||||
return imaging.JPEG
|
||||
}
|
||||
@@ -96,6 +111,16 @@ func (s *Service) FormatFromExtension(ext string) (Format, error) {
|
||||
return FormatTiff, nil
|
||||
case imaging.BMP:
|
||||
return FormatBmp, nil
|
||||
case imaging.WEBP:
|
||||
return FormatWebp, nil
|
||||
case imaging.PBM:
|
||||
return FormatPbm, nil
|
||||
case imaging.PGM:
|
||||
return FormatPgm, nil
|
||||
case imaging.PPM:
|
||||
return FormatPpm, nil
|
||||
case imaging.PAM:
|
||||
return FormatPam, nil
|
||||
default:
|
||||
return -1, ErrUnsupportedFormat
|
||||
}
|
||||
@@ -166,9 +191,25 @@ func (s *Service) Resize(in io.Reader, width, height int, out io.Writer, options
|
||||
}
|
||||
|
||||
// For HEIC files, try without AutoOrientation first since it might not work properly
|
||||
// Try decoding with default settings (auto color space conversion)
|
||||
img, err := imaging.Decode(wrappedReader)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to decode image: %w", err)
|
||||
// If decoding fails due to ICC profile issues (e.g., unsupported grayscale colorspace),
|
||||
// retry with color space conversion disabled
|
||||
if bytes.Contains([]byte(err.Error()), []byte("colorspace")) ||
|
||||
bytes.Contains([]byte(err.Error()), []byte("ICC profile")) {
|
||||
// Reset reader to beginning
|
||||
if seeker, ok := wrappedReader.(io.Seeker); ok {
|
||||
_, _ = seeker.Seek(0, io.SeekStart)
|
||||
}
|
||||
// Try again without color space conversion
|
||||
img, err = imaging.Decode(wrappedReader, imaging.ColorSpace(imaging.NO_CHANGE_OF_COLORSPACE))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to decode image: %w", err)
|
||||
}
|
||||
} else {
|
||||
return fmt.Errorf("failed to decode image: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Note: For HEIC files processed via FFmpeg, orientation is handled automatically
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
<div class="status-info">
|
||||
<span v-if="selectedCount > 0">
|
||||
<span class="button">{{ selectedCount }}</span>
|
||||
{{ selectedItemsText }}
|
||||
<!-- eslint-disable-next-line @intlify/vue-i18n/no-raw-text -->
|
||||
{{ $t(selectedCount === 1 ? 'files.itemSelected' : 'files.itemsSelected') }} ({{ displayTotalSize }})
|
||||
</span>
|
||||
<span v-else class="directory-info">
|
||||
{{ directoryInfoText }}
|
||||
<!-- eslint-disable-next-line @intlify/vue-i18n/no-raw-text -->
|
||||
{{ numDirs }} {{ $t(numDirs === 1 ? 'buttons.folder' : 'general.folders') }} | {{ numFiles }} {{ $t(numFiles === 1 ? 'buttons.file' : 'general.files') }} ({{ displayTotalSize }})
|
||||
</span>
|
||||
</div>
|
||||
<div class="status-controls">
|
||||
@@ -85,29 +87,6 @@ export default {
|
||||
const size = this.selectedCount > 0 ? this.totalSelectedSize : this.totalDirectorySize;
|
||||
return getHumanReadableFilesize(size);
|
||||
},
|
||||
// i18n labels with compile-time checked keys
|
||||
itemsSelectedLabel() {
|
||||
return this.selectedCount === 1
|
||||
? this.$t("files.itemSelected")
|
||||
: this.$t("files.itemsSelected");
|
||||
},
|
||||
foldersLabel() {
|
||||
return this.numDirs === 1
|
||||
? this.$t("general.folder")
|
||||
: this.$t("general.folders");
|
||||
},
|
||||
filesLabel() {
|
||||
return this.numFiles === 1
|
||||
? this.$t("general.file")
|
||||
: this.$t("general.files");
|
||||
},
|
||||
// Complete text with raw characters moved from template
|
||||
selectedItemsText() {
|
||||
return `${this.itemsSelectedLabel} (${this.displayTotalSize})`;
|
||||
},
|
||||
directoryInfoText() {
|
||||
return `${this.numDirs} ${this.foldersLabel} | ${this.numFiles} ${this.filesLabel} (${this.displayTotalSize})`;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
updateGallerySize(event) {
|
||||
|
||||
@@ -25,11 +25,9 @@
|
||||
<strong>{{ $t("prompts.size", { suffix: ":" }) }}</strong> {{ humanSize }}
|
||||
<!-- eslint-disable-line @intlify/vue-i18n/no-raw-text -->
|
||||
</div>
|
||||
<div v-if="!shareInfo.disableDownload" class="share__box__element share__box__center">
|
||||
<button class="button button--flat clickable" @click="goToDownload()"> {{ $t("general.download") }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user