From dd6780d636042bf12d77414e6f1552cc7d1ed24c Mon Sep 17 00:00:00 2001 From: depend <523633637@qq.com> Date: Sat, 15 Oct 2022 19:55:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0dbus=E6=96=87=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E5=86=8D=E6=AC=A1=E5=90=AF=E5=8A=A8=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E4=BC=9A=E5=94=A4=E8=B5=B7=E7=AC=AC=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=BF=9B=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 并且处理spark打开 --- src/dbus/dbussparkstore.cpp | 12 ++++++++++++ src/dbus/dbussparkstore.h | 24 ++++++++++++++++++++++++ src/main.cpp | 14 ++++++++++++++ src/spark-store.pro | 7 +++++-- src/widget.cpp | 22 ++++++++++++++++++++++ src/widget.h | 4 ++++ 6 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 src/dbus/dbussparkstore.cpp create mode 100644 src/dbus/dbussparkstore.h diff --git a/src/dbus/dbussparkstore.cpp b/src/dbus/dbussparkstore.cpp new file mode 100644 index 0000000..09b584f --- /dev/null +++ b/src/dbus/dbussparkstore.cpp @@ -0,0 +1,12 @@ +#include "dbussparkstore.h" +#include +DBusSparkStoreService::DBusSparkStoreService(QObject *parent) + : QDBusAbstractAdaptor(parent) +{ + +} + +void DBusSparkStoreService::activeWindow(const QString & arg) +{ + emit sigOpenUrl(arg); +} diff --git a/src/dbus/dbussparkstore.h b/src/dbus/dbussparkstore.h new file mode 100644 index 0000000..a2c447d --- /dev/null +++ b/src/dbus/dbussparkstore.h @@ -0,0 +1,24 @@ +#ifndef DBUSSPARKSTORE_H +#define DBUSSPARKSTORE_H + +#include +#include +#include + +class Wallpaper; +class DBusSparkStoreService : public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "com.gitee.spark.store") +public: + explicit DBusSparkStoreService(QObject *parent); + +signals : + void sigOpenUrl(const QString &url); +public Q_SLOTS: + + void activeWindow(const QString &arg); + +}; + +#endif // DBUSSPARKSTORE_H diff --git a/src/main.cpp b/src/main.cpp index 29ed8f9..8ed3080 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,6 +4,9 @@ #include #include #include +//新增dbus +#include +#include #include "widget.h" @@ -69,6 +72,17 @@ int main(int argc, char *argv[]) // 限制单实例运行 if(!a.setSingleInstance("spark-store")) { + qDebug() << "The application is already running!"; + QDBusInterface iface("com.gitee.spark.store", + "/com/gitee/spark/store", + "com.gitee.spark.store", + QDBusConnection::sessionBus()); + + QString arg1 = argv[1]; + + iface.asyncCall("activeWindow",arg1); + + return -1; } diff --git a/src/spark-store.pro b/src/spark-store.pro index 676372b..b8be015 100644 --- a/src/spark-store.pro +++ b/src/spark-store.pro @@ -8,6 +8,7 @@ QT += core gui network concurrent webenginewidgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +QT += dbus TARGET = spark-store TEMPLATE = app @@ -41,7 +42,8 @@ SOURCES += \ main.cpp \ progressload.cpp \ widget.cpp \ - workerthreads.cpp + workerthreads.cpp \ + dbus/dbussparkstore.cpp HEADERS += \ appitem.h \ @@ -52,7 +54,8 @@ HEADERS += \ image_show.h \ progressload.h \ widget.h \ - workerthreads.h + workerthreads.h \ + dbus/dbussparkstore.h FORMS += \ appitem.ui \ diff --git a/src/widget.cpp b/src/widget.cpp index 0faf40b..d171117 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -33,6 +33,7 @@ #include "HttpClient.h" #include "downloadworker.h" +#include "./dbus/dbussparkstore.h" DWIDGET_USE_NAMESPACE Widget::Widget(DBlurEffectWidget *parent) : @@ -138,6 +139,9 @@ Widget::Widget(DBlurEffectWidget *parent) : }); notify_init(tr("Spark\\ Store").toLocal8Bit()); + + //初始化dbus服务 + initDbus(); } Widget::~Widget() @@ -452,6 +456,15 @@ void Widget::sendNotification(const char *message, const int msTimeout, const QS notify_notification_show(_notify, nullptr); } +void Widget::initDbus() +{ + DBusSparkStoreService *dbusInter = new DBusSparkStoreService(this); + + QDBusConnection::sessionBus().registerService("com.gitee.spark.store"); + QDBusConnection::sessionBus().registerObject("/com/gitee/spark/store", "com.gitee.spark.store", this); + connect(dbusInter,&DBusSparkStoreService::sigOpenUrl,this,&Widget::onGetUrl); +} + void Widget::updateUI() { if(themeIsDark) @@ -1354,3 +1367,12 @@ void Widget::on_pushButton_update_clicked() QDesktopServices::openUrl(QUrl("https://www.deepinos.org/")); } +void Widget::onGetUrl(const QString &url) +{ + if(url.left(6)=="spk://") + { + openUrl(QUrl(url)); + } + activateWindow(); +} + diff --git a/src/widget.h b/src/widget.h index 9ec716e..9b7da59 100644 --- a/src/widget.h +++ b/src/widget.h @@ -64,6 +64,7 @@ public: static void sendNotification(const QString &message, const int msTimeout = 5000, const QString &icon = "spark-store"); static void sendNotification(const char *message, const int msTimeout = 5000, const QString &icon = "spark-store"); + void initDbus(); private slots: void httpFinished(); @@ -103,6 +104,9 @@ private slots: void on_pushButton_refresh_clicked(); void on_pushButton_update_clicked(); + //接受来自dbus的url + void onGetUrl(const QString &url); + public: QUrl url; QString cdnSeverUrl;