feat(fuse,core): thumbnails for videos and for our own uploads

Videos without a server thumbnail fell through to the local fallback,
which downloaded the whole file, failed to decode it as an image and
wrote the video off for good. Grab one frame with ffmpeg instead, a
second in or from the start for shorter clips. Probe for ffmpeg before
downloading, bound every run, and skip videos over 256 MiB.
Migration V32 gives the videos written off so far another try.

Those videos had no server thumbnail because our uploads never sent one.
Every upload path (bulk upload, drained mount writes, conflict copies,
new revisions and folder sync) now attaches a thumbnail rendered from
the local file, kept under the 60 KiB Proton's own clients use. Files
that are not images or videos, or cannot be decoded, upload bare as
before; a .ts file only counts as video with an MPEG-TS sync byte.

ffmpeg is a new optional dependency in the PKGBUILDs.
This commit is contained in:
nvrl committed 2026-09-23 20:29:15 +02:00
1 parent 0b7236bd4a
commit 90e110e893
13 files changed
+573 -65

No files matched your search

@@ -14,6 +14,7 @@ pkgbase = proton-drive-for-linux-bin
depends = glibc
depends = hicolor-icon-theme
optdepends = perl-image-exiftool: thumbnails for camera RAW files
optdepends = ffmpeg: video thumbnails
optdepends = gnome-keyring: credential storage over the Secret Service API
optdepends = kwallet: credential storage over the Secret Service API
optdepends = xdg-utils: "Open folder" action in the tray menu
@@ -10,6 +10,7 @@ license=('MIT')
depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'dbus' 'gcc-libs' 'glibc'
'hicolor-icon-theme')
optdepends=('perl-image-exiftool: thumbnails for camera RAW files'
'ffmpeg: video thumbnails'
'gnome-keyring: credential storage over the Secret Service API'
'kwallet: credential storage over the Secret Service API'
'xdg-utils: "Open folder" action in the tray menu'
@@ -17,6 +17,7 @@ pkgbase = proton-drive-for-linux-git
depends = glibc
depends = hicolor-icon-theme
optdepends = perl-image-exiftool: thumbnails for camera RAW files
optdepends = ffmpeg: video thumbnails
optdepends = gnome-keyring: credential storage over the Secret Service API
optdepends = kwallet: credential storage over the Secret Service API
optdepends = xdg-utils: "Open folder" action in the tray menu
@@ -11,6 +11,7 @@ depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'dbus' 'gcc-libs' 'glibc'
'hicolor-icon-theme')
makedepends=('cargo' 'git' 'gettext')
optdepends=('perl-image-exiftool: thumbnails for camera RAW files'
'ffmpeg: video thumbnails'
'gnome-keyring: credential storage over the Secret Service API'
'kwallet: credential storage over the Secret Service API'
'xdg-utils: "Open folder" action in the tray menu'
@@ -16,6 +16,7 @@ pkgbase = proton-drive-for-linux
depends = glibc
depends = hicolor-icon-theme
optdepends = perl-image-exiftool: thumbnails for camera RAW files
optdepends = ffmpeg: video thumbnails
optdepends = gnome-keyring: credential storage over the Secret Service API
optdepends = kwallet: credential storage over the Secret Service API
optdepends = xdg-utils: "Open folder" action in the tray menu
@@ -11,6 +11,7 @@ depends=('fuse3' 'gtk4' 'libadwaita' 'webkitgtk-6.0' 'dbus' 'gcc-libs' 'glibc'
'hicolor-icon-theme')
makedepends=('cargo' 'gettext')
optdepends=('perl-image-exiftool: thumbnails for camera RAW files'
'ffmpeg: video thumbnails'
'gnome-keyring: credential storage over the Secret Service API'
'kwallet: credential storage over the Secret Service API'
'xdg-utils: "Open folder" action in the tray menu'