fix: schema init, duplicate routes, and image preview bugs

- Move pg_trgm extension creation before CalDAV indexes that depend on it
- Remove duplicate app-password route registration that caused panic
- Fix missing comma in language selector array (Dutch entry)
- Await async canEdit() in file click handler (Promise was always truthy)
- Detect images by extension fallback when mime_type is octet-stream
  (files uploaded via Nextcloud WebDAV API lack correct mime types)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
zjean
2026-03-04 15:14:07 +01:00
parent 54eedf5483
commit 40b269c4eb
7 changed files with 20 additions and 28 deletions
+4 -2
View File
@@ -754,12 +754,14 @@ const ui = {
}
// WOPI editor intercept: open Office documents in the WOPI editor
// But NOT image files - those should be previewed in the inline viewer
const isImage = file.mime_type && file.mime_type.startsWith('image/');
const ext = (file.name || '').split('.').pop().toLowerCase();
const imageExts = ['jpg','jpeg','png','gif','svg','webp','bmp','ico','heic','heif','avif','tiff'];
const isImage = (file.mime_type && file.mime_type.startsWith('image/')) || imageExts.includes(ext);
if (!isImage && window.wopiEditor && await window.wopiEditor.canEdit(file.name)) {
window.wopiEditor.openInModal(file.id, file.name, 'edit');
return;
}
if (self.isViewableFile(file)) {
if (self.isViewableFile(file) || isImage) {
if (window.inlineViewer) window.inlineViewer.openFile(file);
else window.fileOps.downloadFile(file.id, file.name);
} else {
+1 -1
View File
@@ -17,7 +17,7 @@ function getAvailableLanguages() {
{ code: 'fr', name: 'Français', flag: '🇫🇷' },
{ code: 'de', name: 'Deutsch', flag: '🇩🇪' },
{ code: 'pt', name: 'Português', flag: '🇧🇷' },
{ code: 'it', name: 'Italiano', flag: '🇮🇹' }
{ code: 'it', name: 'Italiano', flag: '🇮🇹' },
{ code: 'nl', name: 'Nederlands', flag: '🇳🇱' }
];
}
+10 -7
View File
@@ -93,30 +93,33 @@ class InlineViewer {
// WOPI editor intercept: open Office documents in the WOPI editor
// But NOT image files - those should be previewed in the inline viewer
const isImage = file.mime_type && file.mime_type.startsWith('image/');
// Detect images by mime type OR extension (uploads via WebDAV may lack correct mime)
const ext = (file.name || '').split('.').pop().toLowerCase();
const imageExts = ['jpg','jpeg','png','gif','svg','webp','bmp','ico','heic','heif','avif','tiff'];
const isImage = (file.mime_type && file.mime_type.startsWith('image/')) || imageExts.includes(ext);
if (!isImage && window.wopiEditor && await window.wopiEditor.canEdit(file.name)) {
window.wopiEditor.openInModal(file.id, file.name, 'edit');
return;
}
this.currentFile = file;
// Get container
const modal = document.getElementById('inline-viewer-modal');
const container = modal.querySelector('.inline-viewer-container');
const title = modal.querySelector('.inline-viewer-title');
// Clear container
container.innerHTML = '';
// Set title
title.textContent = file.name;
// Set controls visibility
const controls = modal.querySelector('.inline-viewer-controls');
// Show viewer based on file type
if (file.mime_type && file.mime_type.startsWith('image/')) {
if (isImage) {
// Show zoom controls
controls.style.display = 'flex';