diff --git a/thumbnail/opendocumentcreator.cpp b/thumbnail/opendocumentcreator.cpp --- a/thumbnail/opendocumentcreator.cpp +++ b/thumbnail/opendocumentcreator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Kai Uwe Broulik + * Copyright (c) 2018-2019 Kai Uwe Broulik * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -46,12 +46,40 @@ return false; } + // Open Document const KArchiveEntry *entry = zip.directory()->entry(QStringLiteral("Thumbnails/thumbnail.png")); - if (!entry || !entry->isFile()) { - return false; + if (entry && entry->isFile()) { + const KZipFileEntry *zipFileEntry = static_cast(entry); + + if (image.loadFromData(zipFileEntry->data(), "PNG")) { + return true; + } + } + + // Office "Open" XML + const KArchiveEntry *docPropsEntry = zip.directory()->entry(QStringLiteral("docProps")); + + if (docPropsEntry && docPropsEntry->isDirectory()) { + const auto *docsPropsDir = static_cast(docPropsEntry); + + const QStringList files = docsPropsDir->entries(); + + for (const QString &file : files) { + // can be any format (usually .jpeg, but also .jpg, or .emf for templates) + if (!file.startsWith(QLatin1String("thumbnail"), Qt::CaseInsensitive)) { + continue; + } + + entry = docsPropsDir->entry(file); + if (!entry || !entry->isFile()) { + continue; + } + + const KZipFileEntry *zipFileEntry = static_cast(entry); + return image.loadFromData(zipFileEntry->data()); + } } - const KZipFileEntry *zipFileEntry = static_cast(entry); - return image.loadFromData(zipFileEntry->data(), "PNG"); + return false; } diff --git a/thumbnail/opendocumentthumbnail.desktop b/thumbnail/opendocumentthumbnail.desktop --- a/thumbnail/opendocumentthumbnail.desktop +++ b/thumbnail/opendocumentthumbnail.desktop @@ -1,6 +1,6 @@ [Desktop Entry] Type=Service -Name=Office Documents (Open Document Files) +Name=Office Documents Name[ca]=Documents Office (Fitxers Open Document) Name[ca@valencia]=Documents Office (Fitxers Open Document) Name[cs]=Kancelářské dokumenty (soubory Open Document) @@ -24,7 +24,7 @@ Name[zh_TW]=Office 文件 (開啟文件檔案) X-KDE-ServiceTypes=ThumbCreator -MimeType=application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text-master-template;application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.oasis.opendocument.graphics;application/vnd.oasis.opendocument.graphics-template;application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.oasis.opendocument.formula;application/vnd.oasis.opendocument.formula-template;application/vnd.oasis.opendocument.chart;application/vnd.oasis.opendocument.chart-template; +MimeType=application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-master;application/vnd.oasis.opendocument.text-master-template;application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.opendocument.spreadsheet-template;application/vnd.oasis.opendocument.graphics;application/vnd.oasis.opendocument.graphics-template;application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.oasis.opendocument.formula;application/vnd.oasis.opendocument.formula-template;application/vnd.oasis.opendocument.chart;application/vnd.oasis.opendocument.chart-template;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.template; X-KDE-Library=opendocumentthumbnail CacheThumbnail=true