增加dbus文件,再次启动的时候会唤起第一个进程

并且处理spark打开
This commit is contained in:
depend 2022-10-15 19:55:19 +08:00
parent 8ca0035107
commit dd6780d636
6 changed files with 81 additions and 2 deletions

View File

@ -0,0 +1,12 @@
#include "dbussparkstore.h"
#include <QDebug>
DBusSparkStoreService::DBusSparkStoreService(QObject *parent)
: QDBusAbstractAdaptor(parent)
{
}
void DBusSparkStoreService::activeWindow(const QString & arg)
{
emit sigOpenUrl(arg);
}

24
src/dbus/dbussparkstore.h Normal file
View File

@ -0,0 +1,24 @@
#ifndef DBUSSPARKSTORE_H
#define DBUSSPARKSTORE_H
#include <QObject>
#include <QUrl>
#include <QtDBus/QtDBus>
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

View File

@ -4,6 +4,9 @@
#include <DAboutDialog> #include <DAboutDialog>
#include <QVector> #include <QVector>
#include <QScreen> #include <QScreen>
//新增dbus
#include <QDBusInterface>
#include <QDBusPendingCall>
#include "widget.h" #include "widget.h"
@ -69,6 +72,17 @@ int main(int argc, char *argv[])
// 限制单实例运行 // 限制单实例运行
if(!a.setSingleInstance("spark-store")) 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; return -1;
} }

View File

@ -8,6 +8,7 @@ QT += core gui network concurrent webenginewidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
QT += dbus
TARGET = spark-store TARGET = spark-store
TEMPLATE = app TEMPLATE = app
@ -41,7 +42,8 @@ SOURCES += \
main.cpp \ main.cpp \
progressload.cpp \ progressload.cpp \
widget.cpp \ widget.cpp \
workerthreads.cpp workerthreads.cpp \
dbus/dbussparkstore.cpp
HEADERS += \ HEADERS += \
appitem.h \ appitem.h \
@ -52,7 +54,8 @@ HEADERS += \
image_show.h \ image_show.h \
progressload.h \ progressload.h \
widget.h \ widget.h \
workerthreads.h workerthreads.h \
dbus/dbussparkstore.h
FORMS += \ FORMS += \
appitem.ui \ appitem.ui \

View File

@ -33,6 +33,7 @@
#include "HttpClient.h" #include "HttpClient.h"
#include "downloadworker.h" #include "downloadworker.h"
#include "./dbus/dbussparkstore.h"
DWIDGET_USE_NAMESPACE DWIDGET_USE_NAMESPACE
Widget::Widget(DBlurEffectWidget *parent) : Widget::Widget(DBlurEffectWidget *parent) :
@ -138,6 +139,9 @@ Widget::Widget(DBlurEffectWidget *parent) :
}); });
notify_init(tr("Spark\\ Store").toLocal8Bit()); notify_init(tr("Spark\\ Store").toLocal8Bit());
//初始化dbus服务
initDbus();
} }
Widget::~Widget() Widget::~Widget()
@ -452,6 +456,15 @@ void Widget::sendNotification(const char *message, const int msTimeout, const QS
notify_notification_show(_notify, nullptr); 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() void Widget::updateUI()
{ {
if(themeIsDark) if(themeIsDark)
@ -1354,3 +1367,12 @@ void Widget::on_pushButton_update_clicked()
QDesktopServices::openUrl(QUrl("https://www.deepinos.org/")); QDesktopServices::openUrl(QUrl("https://www.deepinos.org/"));
} }
void Widget::onGetUrl(const QString &url)
{
if(url.left(6)=="spk://")
{
openUrl(QUrl(url));
}
activateWindow();
}

View File

@ -64,6 +64,7 @@ public:
static void sendNotification(const QString &message, const int msTimeout = 5000, const QString &icon = "spark-store"); 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"); static void sendNotification(const char *message, const int msTimeout = 5000, const QString &icon = "spark-store");
void initDbus();
private slots: private slots:
void httpFinished(); void httpFinished();
@ -103,6 +104,9 @@ private slots:
void on_pushButton_refresh_clicked(); void on_pushButton_refresh_clicked();
void on_pushButton_update_clicked(); void on_pushButton_update_clicked();
//接受来自dbus的url
void onGetUrl(const QString &url);
public: public:
QUrl url; QUrl url;
QString cdnSeverUrl; QString cdnSeverUrl;