refact: support query default application of a file or a mime type
Signed-off-by: ComixHe <heyuming@deepin.org>
This commit is contained in:
parent
5e8c53479d
commit
1fe387b5a3
@ -2,10 +2,13 @@
|
||||
<node>
|
||||
<interface name="org.desktopspec.MimeManager1">
|
||||
|
||||
<method name="queryFileTypeAndDefaultApplication">
|
||||
<arg type="s" name="filePath" direction="in"/>
|
||||
<method name="queryDefaultApplication">
|
||||
<arg type="s" name="content" direction="in"/>
|
||||
<arg type="s" name="mimeType" direction="out"/>
|
||||
<arg type="o" name="application" direction="out"/>
|
||||
<annotation
|
||||
name="org.freedesktop.DBus.Description"
|
||||
value="content can be absolute path of a file or a mime type."/>
|
||||
</method>
|
||||
|
||||
<method name="setDefaultApplication">
|
||||
|
@ -38,22 +38,28 @@ ObjectMap MimeManager1Service::listApplications(const QString &mimeType) const n
|
||||
}
|
||||
appIds.removeDuplicates();
|
||||
qInfo() << "query" << mimeType << "find:" << appIds;
|
||||
const auto &apps = static_cast<ApplicationManager1Service *>(parent())->findApplicationsByIds(appIds);
|
||||
const auto &apps = dynamic_cast<ApplicationManager1Service *>(parent())->findApplicationsByIds(appIds);
|
||||
return dumpDBusObject(apps);
|
||||
}
|
||||
|
||||
QString MimeManager1Service::queryFileTypeAndDefaultApplication(const QString &filePath,
|
||||
QDBusObjectPath &application) const noexcept
|
||||
QString MimeManager1Service::queryDefaultApplication(const QString &content, QDBusObjectPath &application) const noexcept
|
||||
{
|
||||
QString mimeType;
|
||||
application = QDBusObjectPath{"/"};
|
||||
QMimeType mime;
|
||||
QFileInfo info{content};
|
||||
|
||||
auto mime = m_database.mimeTypeForFile(filePath);
|
||||
if (mime.isValid()) {
|
||||
mimeType = mime.name();
|
||||
if (info.isAbsolute() and info.exists() and info.isFile()) {
|
||||
mime = m_database.mimeTypeForFile(content);
|
||||
} else {
|
||||
mime = m_database.mimeTypeForName(content);
|
||||
}
|
||||
|
||||
if (!mime.isValid()) {
|
||||
sendErrorReply(QDBusError::Failed, "query content is invalid.");
|
||||
return {};
|
||||
}
|
||||
|
||||
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) {
|
||||
@ -68,7 +74,7 @@ QString MimeManager1Service::queryFileTypeAndDefaultApplication(const QString &f
|
||||
return mimeType;
|
||||
}
|
||||
|
||||
const auto &apps = static_cast<ApplicationManager1Service *>(parent())->findApplicationsByIds({defaultAppId});
|
||||
const auto &apps = dynamic_cast<ApplicationManager1Service *>(parent())->findApplicationsByIds({defaultAppId});
|
||||
if (apps.isEmpty()) {
|
||||
qWarning() << "default application has been found:" << defaultAppId
|
||||
<< " but we can't find corresponding application in ApplicationManagerService.";
|
||||
|
@ -26,8 +26,7 @@ public:
|
||||
|
||||
public Q_SLOTS:
|
||||
[[nodiscard]] ObjectMap listApplications(const QString &mimeType) const noexcept;
|
||||
[[nodiscard]] QString queryFileTypeAndDefaultApplication(const QString &filePath,
|
||||
QDBusObjectPath &application) const noexcept;
|
||||
[[nodiscard]] QString queryDefaultApplication(const QString &content, QDBusObjectPath &application) const noexcept;
|
||||
void setDefaultApplication(const QStringMap &defaultApps) noexcept;
|
||||
void unsetDefaultApplication(const QStringList &mimeTypes) noexcept;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user