Browse Source

Merge pull request #4364 from nextcloud/bugfix/fix-vfs-crash

Fix for VFS crashes due to mimetype checking for thumbnails
Matthieu Gallien 3 years ago
parent
commit
172f6929d4
1 changed files with 26 additions and 21 deletions
  1. 26 21
      src/gui/tray/usermodel.cpp

+ 26 - 21
src/gui/tray/usermodel.cpp

@@ -551,33 +551,38 @@ void User::processCompletedSyncItem(const Folder *folder, const SyncFileItemPtr
             activity._message = messageFromFileAction(activity._fileAction, fileName);
         }
 
-        if(activity._fileAction != "file_deleted") {
+        if(activity._fileAction != "file_deleted" && !item->isEmpty()) {
             auto remotePath = folder->remotePath();
             remotePath.append(activity._fileAction == "file_renamed" ? item->_renameTarget : activity._file);
 
             const auto localFiles = FolderMan::instance()->findFileInLocalFolders(item->_file, account());
             if (!localFiles.isEmpty()) {
-                const QMimeType mimeType = _mimeDb.mimeTypeForFile(QFileInfo(localFiles.constFirst()));
-
-                // Set the preview data, though for now we can skip setting file ID, link, and view
-                PreviewData preview;
-                preview._mimeType = mimeType.name();
-                preview._filename = fileName;
-
-                if(item->isDirectory()) {
-                    preview._source = account()->url().toString() + QStringLiteral("/index.php/apps/theming/img/core/filetypes/folder.svg");
-                    preview._isMimeTypeIcon = true;
-                } else if(mimeType.isValid() && mimeType.inherits("text/plain")) {
-                    preview._source = account()->url().toString() + QStringLiteral("/index.php/apps/theming/img/core/filetypes/text.svg");
-                    preview._isMimeTypeIcon = true;
-                } else if (mimeType.isValid() && mimeType.inherits("application/pdf")) {
-                    preview._source = account()->url().toString() + QStringLiteral("/index.php/apps/theming/img/core/filetypes/application-pdf.svg");
-                    preview._isMimeTypeIcon = true;
-                } else {
-                    preview._source = account()->url().toString() + QStringLiteral("/index.php/apps/files/api/v1/thumbnail/150/150/") + remotePath;
-                    preview._isMimeTypeIcon = false;
+                const auto firstFilePath = localFiles.constFirst();
+                const auto itemJournalRecord = item->toSyncJournalFileRecordWithInode(firstFilePath);
+
+                if(!itemJournalRecord.isVirtualFile()) {
+                    const auto mimeType = _mimeDb.mimeTypeForFile(QFileInfo(localFiles.constFirst()));
+
+                    // Set the preview data, though for now we can skip setting file ID, link, and view
+                    PreviewData preview;
+                    preview._mimeType = mimeType.name();
+                    preview._filename = fileName;
+
+                    if(item->isDirectory()) {
+                        preview._source = account()->url().toString() + QStringLiteral("/index.php/apps/theming/img/core/filetypes/folder.svg");
+                        preview._isMimeTypeIcon = true;
+                    } else if(mimeType.isValid() && mimeType.inherits("text/plain")) {
+                        preview._source = account()->url().toString() + QStringLiteral("/index.php/apps/theming/img/core/filetypes/text.svg");
+                        preview._isMimeTypeIcon = true;
+                    } else if (mimeType.isValid() && mimeType.inherits("application/pdf")) {
+                        preview._source = account()->url().toString() + QStringLiteral("/index.php/apps/theming/img/core/filetypes/application-pdf.svg");
+                        preview._isMimeTypeIcon = true;
+                    } else {
+                        preview._source = account()->url().toString() + QStringLiteral("/index.php/apps/files/api/v1/thumbnail/150/150/") + remotePath;
+                        preview._isMimeTypeIcon = false;
+                    }
+                    activity._previews.append(preview);
                 }
-                activity._previews.append(preview);
             }
         }