diff --git a/src/applicationmimeinfo.cpp b/src/applicationmimeinfo.cpp index 94bf76e..b2254cd 100644 --- a/src/applicationmimeinfo.cpp +++ b/src/applicationmimeinfo.cpp @@ -234,7 +234,7 @@ bool MimeApps::writeToFile() const noexcept return true; } -QString MimeApps::queryDefaultApp(const QMimeType &type) const noexcept +QString MimeApps::queryDefaultApp(const QString &type) const noexcept { const auto &map = content(); auto defaultSection = map.find(defaultApplications); @@ -242,7 +242,7 @@ QString MimeApps::queryDefaultApp(const QMimeType &type) const noexcept return {}; } - auto defaultApp = defaultSection->find(type.name()); + auto defaultApp = defaultSection->find(type); if (defaultApp == defaultSection->end()) { return {}; } @@ -284,7 +284,7 @@ MimeCache::MimeCache(MimeFileBase &&base) { } -QStringList MimeCache::queryApps(const QMimeType &type) const noexcept +QStringList MimeCache::queryApps(const QString &type) const noexcept { const auto &content = this->content(); auto it = content.constFind(mimeCache); @@ -294,7 +294,7 @@ QStringList MimeCache::queryApps(const QMimeType &type) const noexcept } QStringList ret; - if (auto kv = it->constFind(type.name()); kv != it->constEnd()) { + if (auto kv = it->constFind(type); kv != it->constEnd()) { const auto &apps = kv.value(); for (const auto &e : apps) { if (!e.endsWith(desktopSuffix.data())) { diff --git a/src/applicationmimeinfo.h b/src/applicationmimeinfo.h index f95bdba..0fbd044 100644 --- a/src/applicationmimeinfo.h +++ b/src/applicationmimeinfo.h @@ -67,7 +67,7 @@ public: void setDefaultApplication(const QString &mimeType, const QString &appId) noexcept; void unsetDefaultApplication(const QString &mimeType) noexcept; - [[nodiscard]] QString queryDefaultApp(const QMimeType &type) const noexcept; + [[nodiscard]] QString queryDefaultApp(const QString &type) const noexcept; [[nodiscard]] AppList queryTypes(QString appId) const noexcept; [[nodiscard]] bool writeToFile() const noexcept; @@ -87,7 +87,7 @@ public: MimeCache &operator=(const MimeCache &) = delete; ~MimeCache() override = default; - [[nodiscard]] QStringList queryApps(const QMimeType &type) const noexcept; + [[nodiscard]] QStringList queryApps(const QString &type) const noexcept; [[nodiscard]] QStringList queryTypes(QString appId) const noexcept; private: diff --git a/src/dbus/mimemanager1service.cpp b/src/dbus/mimemanager1service.cpp index 2007274..75a998f 100644 --- a/src/dbus/mimemanager1service.cpp +++ b/src/dbus/mimemanager1service.cpp @@ -20,10 +20,10 @@ MimeManager1Service::~MimeManager1Service() = default; ObjectMap MimeManager1Service::listApplications(const QString &mimeType) const noexcept { - auto mime = m_database.mimeTypeForName(mimeType); - if (!mime.isValid()) { - qWarning() << "can't find" << mimeType; - return {}; + auto type = m_database.mimeTypeForName(mimeType).name(); + if (type.isEmpty()) { + qInfo() << "try to query raw type:" << mimeType; + type = mimeType; } QStringList appIds; @@ -33,7 +33,7 @@ ObjectMap MimeManager1Service::listApplications(const QString &mimeType) const n if (!info) { continue; } - auto apps = info->queryApps(mime); + auto apps = info->queryApps(type); appIds.append(std::move(apps)); } appIds.removeDuplicates(); @@ -53,17 +53,18 @@ QString MimeManager1Service::queryDefaultApplication(const QString &content, QDB mime = m_database.mimeTypeForName(content); } - if (!mime.isValid()) { - sendErrorReply(QDBusError::Failed, "query content is invalid."); - return {}; + auto type = mime.name(); + + if (type.isEmpty()) { + qInfo() << "try to query raw content:" << content; + type = content; } QString defaultAppId; - auto mimeType = mime.name(); for (auto it1 = m_infos.rbegin(); it1 != m_infos.rend(); ++it1) { const auto &list = it1->appsList(); for (auto it2 = list.rbegin(); it2 != list.rend(); ++it2) { - if (auto app = it2->queryDefaultApp(mime); !app.isEmpty()) { + if (auto app = it2->queryDefaultApp(type); !app.isEmpty()) { defaultAppId = app; } } @@ -71,7 +72,7 @@ QString MimeManager1Service::queryDefaultApplication(const QString &content, QDB if (defaultAppId.isEmpty()) { qInfo() << "file's mimeType:" << mime.name() << "but can't find a default application for this type."; - return mimeType; + return type; } const auto &apps = dynamic_cast(parent())->findApplicationsByIds({defaultAppId}); @@ -82,7 +83,7 @@ QString MimeManager1Service::queryDefaultApplication(const QString &content, QDB application = apps.firstKey(); } - return mimeType; + return type; } void MimeManager1Service::setDefaultApplication(const QStringMap &defaultApps) noexcept