Skip to content

Commit 5095342

Browse files
author
zhangjiarui
committed
fix(editor): check parent MIME types to support subtype files in isMimeTypeSupport
- Retain QMimeType object to enable parent type lookup - Add parentMimeTypes() fallback to match subtypes against whitelist 修复(editor): 在 isMimeTypeSupport 中检查父 MIME 类型以支持子类型文件打开 Log: 通过父 MIME 类型继承关系扩展白名单匹配范围,修复子类型文件无法打开的问题 Bug: https://pms.uniontech.com/bug-view-362023.html
1 parent 86ad04a commit 5095342

1 file changed

Lines changed: 57 additions & 47 deletions

File tree

src/common/utils.cpp

Lines changed: 57 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2011-2023 UnionTech Software Technology Co., Ltd.
1+
// SPDX-FileCopyrightText: 2011-2026 UnionTech Software Technology Co., Ltd.
22
//
33
// SPDX-License-Identifier: GPL-3.0-or-later
44

@@ -41,6 +41,50 @@ QT_BEGIN_NAMESPACE
4141
extern Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0);
4242
QT_END_NAMESPACE
4343

44+
static const QStringList SupportedTextMimeTypes = {
45+
"application/cmd",
46+
"application/javascript",
47+
"application/json",
48+
"application/pkix-cert",
49+
"application/octet-stream",
50+
"application/sql",
51+
"application/vnd.apple.mpegurl",
52+
"application/vnd.nokia.qt.qmakeprofile",
53+
"application/vnd.nokia.xml.qt.resource",
54+
"application/x-desktop",
55+
"application/x-designer",
56+
"application/x-empty",
57+
"application/x-msdos-program",
58+
"application/x-pearl",
59+
"application/x-php",
60+
"application/x-shellscript",
61+
"application/x-sh",
62+
"application/x-theme",
63+
"application/x-cue",
64+
"application/x-csh",
65+
"application/x-asp",
66+
"application/x-subrip",
67+
"application/x-text",
68+
"application/x-trash",
69+
"application/x-xbel",
70+
"application/x-yaml",
71+
"application/x-pem-key",
72+
"application/xml",
73+
"application/yaml",
74+
"application/x-zerosize",
75+
"image/svg+xml",
76+
"application/x-perl",
77+
"application/x-ruby",
78+
"application/x-mpegURL",
79+
"application/x-wine-extension-ini",
80+
"model/vrml",
81+
"application/pkix-cert+pem",
82+
"application/x-pak",
83+
"application/x-code-workspace",
84+
"application/toml",
85+
"audio/x-mod"
86+
};
87+
4488
QString Utils::m_systemLanguage;
4589

4690
QString Utils::getQrcPath(const QString &imageName)
@@ -525,7 +569,8 @@ QVariantMap Utils::getThemeMapFromPath(const QString &filepath)
525569

526570
bool Utils::isMimeTypeSupport(const QString &filepath)
527571
{
528-
QString mimeType = QMimeDatabase().mimeTypeForFile(filepath, QMimeDatabase::MatchMode::MatchContent).name();
572+
const QMimeType mime = QMimeDatabase().mimeTypeForFile(filepath, QMimeDatabase::MatchMode::MatchContent);
573+
const QString mimeType = mime.name();
529574

530575
if (mimeType.startsWith("text/")) {
531576
return true;
@@ -534,54 +579,19 @@ bool Utils::isMimeTypeSupport(const QString &filepath)
534579
if (filepath.endsWith("pub")) {
535580
return true;
536581
}
537-
// Please check full mime type list from: https://www.freeformatter.com/mime-types-list.html
538-
QStringList textMimeTypes;
539-
textMimeTypes << "application/cmd"
540-
<< "application/javascript"
541-
<< "application/json"
542-
<< "application/pkix-cert"
543-
<< "application/octet-stream"
544-
<< "application/sql"
545-
<< "application/vnd.apple.mpegurl"
546-
<< "application/vnd.nokia.qt.qmakeprofile"
547-
<< "application/vnd.nokia.xml.qt.resource"
548-
<< "application/x-desktop"
549-
<< "application/x-designer"
550-
<< "application/x-empty"
551-
<< "application/x-msdos-program"
552-
<< "application/x-pearl"
553-
<< "application/x-php"
554-
<< "application/x-shellscript"
555-
<< "application/x-sh"
556-
<< "application/x-theme"
557-
<< "application/x-cue"
558-
<< "application/x-csh"
559-
<< "application/x-asp"
560-
<< "application/x-subrip"
561-
<< "application/x-text"
562-
<< "application/x-trash"
563-
<< "application/x-xbel"
564-
<< "application/x-yaml"
565-
<< "application/x-pem-key"
566-
<< "application/xml"
567-
<< "application/yaml"
568-
<< "application/x-zerosize"
569-
<< "image/svg+xml"
570-
<< "application/x-perl"
571-
<< "application/x-ruby"
572-
<< "application/x-mpegURL"
573-
<< "application/x-wine-extension-ini"
574-
<< "model/vrml"
575-
<< "application/pkix-cert+pem"
576-
<< "application/x-pak"
577-
<< "application/x-code-workspace"
578-
<< "application/toml"
579-
<< "audio/x-mod";
580-
581-
if (textMimeTypes.contains(mimeType)) {
582+
583+
if (SupportedTextMimeTypes.contains(mimeType)) {
582584
return true;
583585
}
584586

587+
if (mime.isValid()) {
588+
for (const QString &supportedType : SupportedTextMimeTypes) {
589+
if (mime.inherits(supportedType)) {
590+
return true;
591+
}
592+
}
593+
}
594+
585595
return false;
586596
}
587597

0 commit comments

Comments
 (0)