Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions api/dbus/org.desktopspec.ApplicationManager1.Application.xml
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@

<property name="isOnDesktop" type="b" access="read"/>

<property name="X_Deepin_CreateBy" type="s" access="read"/>

<method name="SendToDesktop">
<arg type="b" name="success" direction="out"/>
</method>
Expand Down
7 changes: 7 additions & 0 deletions api/dbus/org.desktopspec.ApplicationManager1.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,12 @@
"
/>
</method>
<method name="deleteUserApplication">
<arg type="s" name="app_id" direction="in" />
<annotation
name="org.freedesktop.DBus.Description"
value="Delete a user application by app_id."
/>
</method>
</interface>
</node>
45 changes: 45 additions & 0 deletions src/dbus/applicationmanager1service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -878,5 +878,50 @@ QString ApplicationManager1Service::addUserApplication(const QVariantMap &deskto
return {};
}

m_mimeManager->updateMimeCache(dir);

return appId;
}


void ApplicationManager1Service::deleteUserApplication(const QString &app_id) noexcept
{
if (app_id.isEmpty()) {
safe_sendErrorReply(QDBusError::Failed, "app id name is empty.");
return;
}

QDir xdgDataHome;
QString dir{getXDGDataHome() + "/applications"};
if (!xdgDataHome.mkpath(dir)) {
safe_sendErrorReply(QDBusError::Failed, "couldn't create directory of user applications.");
return;
}

xdgDataHome.setPath(dir);
const auto &filePath = xdgDataHome.filePath(app_id+".desktop");

if (QFileInfo info{filePath}; !info.exists() || !info.isFile()) {
safe_sendErrorReply(QDBusError::Failed, QString{"file not exists:%1"}.arg(info.absoluteFilePath()));
return;
}

/*
auto apps = findApplicationsByIds({app_id});
if (apps.isEmpty()) {
qWarning() << "we can't find corresponding application in ApplicationManagerService.";
}

for (const auto &app : apps) {
app->setMimeTypes({});
}
*/
if (!QFile::remove(filePath)) {
safe_sendErrorReply(QDBusError::Failed, "remove file failed.");
return;
}

m_mimeManager->updateMimeCache(dir);

return;
}
1 change: 1 addition & 0 deletions src/dbus/applicationmanager1service.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public Q_SLOTS:
ObjectInterfaceMap &application_instance_info) const noexcept;
void ReloadApplications();
QString addUserApplication(const QVariantMap &desktop_file, const QString &name) noexcept;
void deleteUserApplication(const QString &app_id) noexcept;
[[nodiscard]] ObjectMap GetManagedObjects() const;

Q_SIGNALS:
Expand Down
5 changes: 5 additions & 0 deletions src/dbus/applicationservice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -630,6 +630,11 @@ QString ApplicationService::X_Deepin_Vendor() const noexcept
return findEntryValue(DesktopFileEntryKey, "X-Deepin-Vendor", EntryValueType::String).toString();
}

QString ApplicationService::X_Deepin_CreateBy() const noexcept
{
return findEntryValue(DesktopFileEntryKey, "X-Deepin-CreateBy", EntryValueType::String).toString();
}

bool ApplicationService::terminal() const noexcept
{
auto val = findEntryValue(DesktopFileEntryKey, "Terminal", EntryValueType::String);
Expand Down
3 changes: 3 additions & 0 deletions src/dbus/applicationservice.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ class ApplicationService : public QObject, protected QDBusContext
Q_PROPERTY(bool NoDisplay READ noDisplay NOTIFY noDisplayChanged)
[[nodiscard]] bool noDisplay() const noexcept;

Q_PROPERTY(QString X_Deepin_CreateBy READ X_Deepin_CreateBy NOTIFY noDisplayChanged)
[[nodiscard]] QString X_Deepin_CreateBy() const noexcept;

[[nodiscard]] QDBusObjectPath findInstance(const QString &instanceId) const;

[[nodiscard]] const QString &getLauncher() const noexcept { return m_launcher; }
Expand Down
13 changes: 13 additions & 0 deletions src/dbus/mimemanager1service.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include <QProcess>

#include "dbus/mimemanager1adaptor.h"
#include "applicationmanager1service.h"
Expand Down Expand Up @@ -143,3 +144,15 @@ void MimeManager1Service::reset() noexcept
{
m_infos.clear();
}

void MimeManager1Service::updateMimeCache(QString dir) noexcept
{
QProcess process;
process.start("update-desktop-database", {dir});
process.waitForFinished();
auto exitCode = process.exitCode();
if (exitCode != 0) {
qWarning() << "Launch Application Failed";
}

}
1 change: 1 addition & 0 deletions src/dbus/mimemanager1service.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class MimeManager1Service : public QObject, protected QDBusContext
[[nodiscard]] const auto &infos() const noexcept { return m_infos; }
[[nodiscard]] auto &infos() noexcept { return m_infos; }
void reset() noexcept;
void updateMimeCache(QString dir) noexcept;

public Q_SLOTS:
[[nodiscard]] ObjectMap listApplications(const QString &mimeType) const noexcept;
Expand Down