From 94db47a01563949459785785a936c91a8e07e9c9 Mon Sep 17 00:00:00 2001 From: ComixHe Date: Tue, 5 Sep 2023 15:10:43 +0800 Subject: [PATCH] feat: add app-update-notifier Signed-off-by: ComixHe --- .reuse/dep5 | 2 +- CMakeLists.txt | 1 + apps/CMakeLists.txt | 2 +- apps/app-update-notifier/CMakeLists.txt | 2 ++ ...desktopspec.ApplicationUpdateNotifier1.xml | 12 +++++++ apps/app-update-notifier/misc/CMakeLists.txt | 32 +++++++++++++++++++ ...esktopspec.ApplicationUpdateNotifier1.conf | 21 ++++++++++++ ...spec.ApplicationUpdateNotifier1.service.in | 9 ++++++ ...spec.ApplicationUpdateNotifier1.service.in | 13 ++++++++ apps/app-update-notifier/src/CMakeLists.txt | 14 ++++++++ .../src/dbus/CMakeLists.txt | 20 ++++++++++++ .../applicationupdatenotifier1service.cpp | 18 +++++++++++ .../dbus/applicationupdatenotifier1service.h | 24 ++++++++++++++ apps/app-update-notifier/src/main.cpp | 12 +++++++ 14 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 apps/app-update-notifier/CMakeLists.txt create mode 100644 apps/app-update-notifier/api/dbus/org.desktopspec.ApplicationUpdateNotifier1.xml create mode 100644 apps/app-update-notifier/misc/CMakeLists.txt create mode 100644 apps/app-update-notifier/misc/dbus/org.desktopspec.ApplicationUpdateNotifier1.conf create mode 100644 apps/app-update-notifier/misc/dbus/org.desktopspec.ApplicationUpdateNotifier1.service.in create mode 100644 apps/app-update-notifier/misc/systemd/system/org.desktopspec.ApplicationUpdateNotifier1.service.in create mode 100644 apps/app-update-notifier/src/CMakeLists.txt create mode 100644 apps/app-update-notifier/src/dbus/CMakeLists.txt create mode 100644 apps/app-update-notifier/src/dbus/applicationupdatenotifier1service.cpp create mode 100644 apps/app-update-notifier/src/dbus/applicationupdatenotifier1service.h create mode 100644 apps/app-update-notifier/src/main.cpp diff --git a/.reuse/dep5 b/.reuse/dep5 index 9d71481..ae6fcec 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -24,7 +24,7 @@ Copyright: None License: CC0-1.0 # DBus API -Files: api/dbus/*.xml +Files: api/dbus/*.xml apps/app-update-notifier/api/dbus/*.xml Copyright: None License: CC0-1.0 diff --git a/CMakeLists.txt b/CMakeLists.txt index b9ff3a4..ab45412 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,7 @@ find_package(Qt6 REQUIRED COMPONENTS Core DBus Concurrent) find_package(Threads REQUIRED) set(APP_LAUNCH_HELPER_BIN app-launch-helper) +set(APP_UPDATE_NOTIFIER_BIN app-update-notifier) if(DDE_AM_USE_DEBUG_DBUS_NAME) add_compile_definitions(-DDDE_AM_USE_DEBUG_DBUS_NAME) diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 4f1944a..965b537 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -1,3 +1,3 @@ add_subdirectory(dde-application-manager) add_subdirectory(app-launch-helper) - +add_subdirectory(app-update-notifier) diff --git a/apps/app-update-notifier/CMakeLists.txt b/apps/app-update-notifier/CMakeLists.txt new file mode 100644 index 0000000..5007a65 --- /dev/null +++ b/apps/app-update-notifier/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(src) +add_subdirectory(misc) diff --git a/apps/app-update-notifier/api/dbus/org.desktopspec.ApplicationUpdateNotifier1.xml b/apps/app-update-notifier/api/dbus/org.desktopspec.ApplicationUpdateNotifier1.xml new file mode 100644 index 0000000..2ea0b0d --- /dev/null +++ b/apps/app-update-notifier/api/dbus/org.desktopspec.ApplicationUpdateNotifier1.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/apps/app-update-notifier/misc/CMakeLists.txt b/apps/app-update-notifier/misc/CMakeLists.txt new file mode 100644 index 0000000..6157718 --- /dev/null +++ b/apps/app-update-notifier/misc/CMakeLists.txt @@ -0,0 +1,32 @@ +# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +# +# SPDX-License-Identifier: LGPL-3.0-or-later +include(GNUInstallDirs) + +configure_file( + systemd/system/org.desktopspec.ApplicationUpdateNotifier1.service.in + systemd/system/org.desktopspec.ApplicationUpdateNotifier1.service + @ONLY +) + +set(SYSTEMD_SYSTEM_FILE + ${CMAKE_CURRENT_BINARY_DIR}/systemd/system/org.desktopspec.ApplicationUpdateNotifier1.service +) + +install(FILES ${SYSTEMD_SYSTEM_FILE} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/systemd/system/) + +configure_file( + dbus/org.desktopspec.ApplicationUpdateNotifier1.service.in + dbus/org.desktopspec.ApplicationUpdateNotifier1.service + @ONLY +) + +set(DBUS_APPLICATION_UPDATE_NOTIFIER_SERVICE_FILE + ${CMAKE_CURRENT_BINARY_DIR}/dbus/org.desktopspec.ApplicationUpdateNotifier1.service +) + +install(FILES ${DBUS_APPLICATION_UPDATE_NOTIFIER_SERVICE_FILE} + DESTINATION ${CMAKE_INSTALL_DATADIR}/dbus-1/service) + +install(FILES ${CMAKE_CURRENT_LIST_DIR}/dbus/org.desktopspec.ApplicationUpdateNotifier1.conf + DESTINATION /usr/share/dbus-1/system.d) diff --git a/apps/app-update-notifier/misc/dbus/org.desktopspec.ApplicationUpdateNotifier1.conf b/apps/app-update-notifier/misc/dbus/org.desktopspec.ApplicationUpdateNotifier1.conf new file mode 100644 index 0000000..bca71dd --- /dev/null +++ b/apps/app-update-notifier/misc/dbus/org.desktopspec.ApplicationUpdateNotifier1.conf @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/app-update-notifier/misc/dbus/org.desktopspec.ApplicationUpdateNotifier1.service.in b/apps/app-update-notifier/misc/dbus/org.desktopspec.ApplicationUpdateNotifier1.service.in new file mode 100644 index 0000000..15d4e2b --- /dev/null +++ b/apps/app-update-notifier/misc/dbus/org.desktopspec.ApplicationUpdateNotifier1.service.in @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +# +# SPDX-License-Identifier: LGPL-3.0-or-later + +[D-BUS Service] +Name=org.desktopspec.ApplicationUpdateNotifier1 +Exec=@CMAKE_INSTALL_FULL_BINDIR@/app-update-notifier +User=root +SystemdService=org.desktopspec.ApplicationUpdateNotifier1 diff --git a/apps/app-update-notifier/misc/systemd/system/org.desktopspec.ApplicationUpdateNotifier1.service.in b/apps/app-update-notifier/misc/systemd/system/org.desktopspec.ApplicationUpdateNotifier1.service.in new file mode 100644 index 0000000..5a44cc8 --- /dev/null +++ b/apps/app-update-notifier/misc/systemd/system/org.desktopspec.ApplicationUpdateNotifier1.service.in @@ -0,0 +1,13 @@ +# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +# +# SPDX-License-Identifier: LGPL-3.0-or-later + +[Unit] +Description=Notify by signal when Application changed by package manager. + +[Service] +Type=dbus +User=root +Group=root +BusName=org.desktopspec.ApplicationUpdateNotifier1 +ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/app-update-notifier diff --git a/apps/app-update-notifier/src/CMakeLists.txt b/apps/app-update-notifier/src/CMakeLists.txt new file mode 100644 index 0000000..969abce --- /dev/null +++ b/apps/app-update-notifier/src/CMakeLists.txt @@ -0,0 +1,14 @@ +add_subdirectory(dbus) + +add_executable(${APP_UPDATE_NOTIFIER_BIN} main.cpp) + +target_link_libraries(${APP_UPDATE_NOTIFIER_BIN} PRIVATE + app_update_notifier_static +) + +target_include_directories(${APP_UPDATE_NOTIFIER_BIN} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/src +) + +include(GNUInstallDirs) +install(TARGETS ${APP_UPDATE_NOTIFIER_BIN} DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/deepin/application-manager/) diff --git a/apps/app-update-notifier/src/dbus/CMakeLists.txt b/apps/app-update-notifier/src/dbus/CMakeLists.txt new file mode 100644 index 0000000..4b663e8 --- /dev/null +++ b/apps/app-update-notifier/src/dbus/CMakeLists.txt @@ -0,0 +1,20 @@ +file(GLOB_RECURSE app_update_notifier_static_SOURCE + ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/*.h +) + +qt_add_dbus_adaptor(app_update_notifier_static_SOURCE ${CMAKE_CURRENT_LIST_DIR}/../../api/dbus/org.desktopspec.ApplicationUpdateNotifier1.xml dbus/applicationupdatenotifier1service.h ApplicationUpdateNotifier1Service) + +add_library(app_update_notifier_static STATIC ${app_update_notifier_static_SOURCE}) + +target_link_libraries( + app_update_notifier_static PUBLIC + Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::DBus +) + +target_include_directories( + app_update_notifier_static PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/.. + ${CMAKE_CURRENT_BINARY_DIR}/.. +) diff --git a/apps/app-update-notifier/src/dbus/applicationupdatenotifier1service.cpp b/apps/app-update-notifier/src/dbus/applicationupdatenotifier1service.cpp new file mode 100644 index 0000000..e7f878b --- /dev/null +++ b/apps/app-update-notifier/src/dbus/applicationupdatenotifier1service.cpp @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: LGPL-3.0-or-later + +#include "dbus/applicationupdatenotifier1adaptor.h" + +ApplicationUpdateNotifier1Service::ApplicationUpdateNotifier1Service() +{ + new ApplicationUpdateNotifier1Adaptor{this}; + auto conn = QDBusConnection::systemBus(); + if (!conn.registerService(NotifierServiceName)) { + qFatal("%s", conn.lastError().message().toLocal8Bit().constData()); + } + + if (!conn.registerObject(NotifierObjectPath, NotifierInterfaceName, this, QDBusConnection::ExportAdaptors)) { + qFatal("%s", conn.lastError().message().toLocal8Bit().constData()); + } +} diff --git a/apps/app-update-notifier/src/dbus/applicationupdatenotifier1service.h b/apps/app-update-notifier/src/dbus/applicationupdatenotifier1service.h new file mode 100644 index 0000000..021102c --- /dev/null +++ b/apps/app-update-notifier/src/dbus/applicationupdatenotifier1service.h @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: LGPL-3.0-or-later + +#ifndef APPLICATIONUPDATENOTIFIER1SERVICE_H +#define APPLICATIONUPDATENOTIFIER1SERVICE_H + +#include + +constexpr auto NotifierServiceName = "org.desktopspec.ApplicationUpdateNotifier1"; +constexpr auto NotifierObjectPath = "/org/desktopspec/ApplicationUpdateNotifier1"; +constexpr auto NotifierInterfaceName = "org.desktopspec.ApplicationUpdateNotifier1"; + +class ApplicationUpdateNotifier1Service : public QObject +{ + Q_OBJECT +public: + ApplicationUpdateNotifier1Service(); + ~ApplicationUpdateNotifier1Service() override = default; +Q_SIGNALS: + void ApplicationUpdated(); +}; + +#endif diff --git a/apps/app-update-notifier/src/main.cpp b/apps/app-update-notifier/src/main.cpp new file mode 100644 index 0000000..564ba8d --- /dev/null +++ b/apps/app-update-notifier/src/main.cpp @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: LGPL-3.0-or-later + +#include "dbus/applicationupdatenotifier1service.h" + +int main() +{ + ApplicationUpdateNotifier1Service service; + emit service.ApplicationUpdated(); + return 0; +}