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