Skip to content

Commit fa703f4

Browse files
author
zhangjiarui
committed
fix(editor): support opening files with MIME subtypes via parent type inheritance
- Refactor isMimeTypeSupport() to retain QMimeDatabase and QMimeType objects for further queries - Replace QStringList stream insertion with initializer list construction - Add parentMimeTypes() lookup to match MIME subtypes against the whitelist (e.g. application/schema+json → application/json) 修复(editor): 通过父类型继承支持打开 MIME 子类型文件 - 重构 isMimeTypeSupport(),保留 QMimeDatabase 和 QMimeType 对象以供后续查询 - 将 QStringList 的流插入替换为初始化列表构造 - 新增 parentMimeTypes() 查找,将 MIME 子类型与白名单匹配(如 application/schema+json → application/json) Log: 修复 JSON Schema 等 MIME 子类型文件无法被编辑器打开的问题,通过检查父 MIME 类型继承关系扩展白名单匹配范围 Bug: https://pms.uniontech.com/bug-view-362023.html
1 parent 86ad04a commit fa703f4

1 file changed

Lines changed: 54 additions & 43 deletions

File tree

src/common/utils.cpp

Lines changed: 54 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,9 @@ QVariantMap Utils::getThemeMapFromPath(const QString &filepath)
525525

526526
bool Utils::isMimeTypeSupport(const QString &filepath)
527527
{
528-
QString mimeType = QMimeDatabase().mimeTypeForFile(filepath, QMimeDatabase::MatchMode::MatchContent).name();
528+
QMimeDatabase db;
529+
const QMimeType mime = db.mimeTypeForFile(filepath, QMimeDatabase::MatchMode::MatchContent);
530+
const QString mimeType = mime.name();
529531

530532
if (mimeType.startsWith("text/")) {
531533
return true;
@@ -535,53 +537,62 @@ bool Utils::isMimeTypeSupport(const QString &filepath)
535537
return true;
536538
}
537539
// 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";
540+
const QStringList textMimeTypes = {
541+
"application/cmd",
542+
"application/javascript",
543+
"application/json",
544+
"application/pkix-cert",
545+
"application/octet-stream",
546+
"application/sql",
547+
"application/vnd.apple.mpegurl",
548+
"application/vnd.nokia.qt.qmakeprofile",
549+
"application/vnd.nokia.xml.qt.resource",
550+
"application/x-desktop",
551+
"application/x-designer",
552+
"application/x-empty",
553+
"application/x-msdos-program",
554+
"application/x-pearl",
555+
"application/x-php",
556+
"application/x-shellscript",
557+
"application/x-sh",
558+
"application/x-theme",
559+
"application/x-cue",
560+
"application/x-csh",
561+
"application/x-asp",
562+
"application/x-subrip",
563+
"application/x-text",
564+
"application/x-trash",
565+
"application/x-xbel",
566+
"application/x-yaml",
567+
"application/x-pem-key",
568+
"application/xml",
569+
"application/yaml",
570+
"application/x-zerosize",
571+
"image/svg+xml",
572+
"application/x-perl",
573+
"application/x-ruby",
574+
"application/x-mpegURL",
575+
"application/x-wine-extension-ini",
576+
"model/vrml",
577+
"application/pkix-cert+pem",
578+
"application/x-pak",
579+
"application/x-code-workspace",
580+
"application/toml",
581+
"audio/x-mod"
582+
};
580583

581584
if (textMimeTypes.contains(mimeType)) {
582585
return true;
583586
}
584587

588+
// 检查父MIME类型是否在支持列表中(如 application/schema+json → application/json)
589+
const QStringList parentTypes = mime.parentMimeTypes();
590+
for (const QString &parent : parentTypes) {
591+
if (textMimeTypes.contains(parent)) {
592+
return true;
593+
}
594+
}
595+
585596
return false;
586597
}
587598

0 commit comments

Comments
 (0)