fix: add fallback when query mime type
Signed-off-by: ComixHe <heyuming@deepin.org>
This commit is contained in:
parent
1fe387b5a3
commit
054feb9739
@ -234,7 +234,7 @@ bool MimeApps::writeToFile() const noexcept
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString MimeApps::queryDefaultApp(const QMimeType &type) const noexcept
|
QString MimeApps::queryDefaultApp(const QString &type) const noexcept
|
||||||
{
|
{
|
||||||
const auto &map = content();
|
const auto &map = content();
|
||||||
auto defaultSection = map.find(defaultApplications);
|
auto defaultSection = map.find(defaultApplications);
|
||||||
@ -242,7 +242,7 @@ QString MimeApps::queryDefaultApp(const QMimeType &type) const noexcept
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto defaultApp = defaultSection->find(type.name());
|
auto defaultApp = defaultSection->find(type);
|
||||||
if (defaultApp == defaultSection->end()) {
|
if (defaultApp == defaultSection->end()) {
|
||||||
return {};
|
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();
|
const auto &content = this->content();
|
||||||
auto it = content.constFind(mimeCache);
|
auto it = content.constFind(mimeCache);
|
||||||
@ -294,7 +294,7 @@ QStringList MimeCache::queryApps(const QMimeType &type) const noexcept
|
|||||||
}
|
}
|
||||||
|
|
||||||
QStringList ret;
|
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();
|
const auto &apps = kv.value();
|
||||||
for (const auto &e : apps) {
|
for (const auto &e : apps) {
|
||||||
if (!e.endsWith(desktopSuffix.data())) {
|
if (!e.endsWith(desktopSuffix.data())) {
|
||||||
|
@ -67,7 +67,7 @@ public:
|
|||||||
void setDefaultApplication(const QString &mimeType, const QString &appId) noexcept;
|
void setDefaultApplication(const QString &mimeType, const QString &appId) noexcept;
|
||||||
void unsetDefaultApplication(const QString &mimeType) 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]] AppList queryTypes(QString appId) const noexcept;
|
||||||
[[nodiscard]] bool writeToFile() const noexcept;
|
[[nodiscard]] bool writeToFile() const noexcept;
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ public:
|
|||||||
MimeCache &operator=(const MimeCache &) = delete;
|
MimeCache &operator=(const MimeCache &) = delete;
|
||||||
~MimeCache() override = default;
|
~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;
|
[[nodiscard]] QStringList queryTypes(QString appId) const noexcept;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -20,10 +20,10 @@ MimeManager1Service::~MimeManager1Service() = default;
|
|||||||
|
|
||||||
ObjectMap MimeManager1Service::listApplications(const QString &mimeType) const noexcept
|
ObjectMap MimeManager1Service::listApplications(const QString &mimeType) const noexcept
|
||||||
{
|
{
|
||||||
auto mime = m_database.mimeTypeForName(mimeType);
|
auto type = m_database.mimeTypeForName(mimeType).name();
|
||||||
if (!mime.isValid()) {
|
if (type.isEmpty()) {
|
||||||
qWarning() << "can't find" << mimeType;
|
qInfo() << "try to query raw type:" << mimeType;
|
||||||
return {};
|
type = mimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList appIds;
|
QStringList appIds;
|
||||||
@ -33,7 +33,7 @@ ObjectMap MimeManager1Service::listApplications(const QString &mimeType) const n
|
|||||||
if (!info) {
|
if (!info) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
auto apps = info->queryApps(mime);
|
auto apps = info->queryApps(type);
|
||||||
appIds.append(std::move(apps));
|
appIds.append(std::move(apps));
|
||||||
}
|
}
|
||||||
appIds.removeDuplicates();
|
appIds.removeDuplicates();
|
||||||
@ -53,17 +53,18 @@ QString MimeManager1Service::queryDefaultApplication(const QString &content, QDB
|
|||||||
mime = m_database.mimeTypeForName(content);
|
mime = m_database.mimeTypeForName(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mime.isValid()) {
|
auto type = mime.name();
|
||||||
sendErrorReply(QDBusError::Failed, "query content is invalid.");
|
|
||||||
return {};
|
if (type.isEmpty()) {
|
||||||
|
qInfo() << "try to query raw content:" << content;
|
||||||
|
type = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString defaultAppId;
|
QString defaultAppId;
|
||||||
auto mimeType = mime.name();
|
|
||||||
for (auto it1 = m_infos.rbegin(); it1 != m_infos.rend(); ++it1) {
|
for (auto it1 = m_infos.rbegin(); it1 != m_infos.rend(); ++it1) {
|
||||||
const auto &list = it1->appsList();
|
const auto &list = it1->appsList();
|
||||||
for (auto it2 = list.rbegin(); it2 != list.rend(); ++it2) {
|
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;
|
defaultAppId = app;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -71,7 +72,7 @@ QString MimeManager1Service::queryDefaultApplication(const QString &content, QDB
|
|||||||
|
|
||||||
if (defaultAppId.isEmpty()) {
|
if (defaultAppId.isEmpty()) {
|
||||||
qInfo() << "file's mimeType:" << mime.name() << "but can't find a default application for this type.";
|
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<ApplicationManager1Service *>(parent())->findApplicationsByIds({defaultAppId});
|
const auto &apps = dynamic_cast<ApplicationManager1Service *>(parent())->findApplicationsByIds({defaultAppId});
|
||||||
@ -82,7 +83,7 @@ QString MimeManager1Service::queryDefaultApplication(const QString &content, QDB
|
|||||||
application = apps.firstKey();
|
application = apps.firstKey();
|
||||||
}
|
}
|
||||||
|
|
||||||
return mimeType;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MimeManager1Service::setDefaultApplication(const QStringMap &defaultApps) noexcept
|
void MimeManager1Service::setDefaultApplication(const QStringMap &defaultApps) noexcept
|
||||||
|
Loading…
Reference in New Issue
Block a user