mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
feat: 任务栏安全模式通知
当任务栏9分钟内累计崩溃3次进入安全模式后,发出通知,用户点击通知中的退出安全模式,任务栏重新加载插件。 Log: 新增任务栏安全模式通知。 Task: https://pms.uniontech.com/zentao/task-view-58411.html Change-Id: I06b65ce4fdea29b635ff2af2dda0d0199035f4e8
This commit is contained in:
parent
be8d82f255
commit
625f6ba2b9
@ -45,8 +45,12 @@ void DBusDockAdaptors::callShow()
|
||||
return parent()->callShow();
|
||||
}
|
||||
|
||||
void DBusDockAdaptors::ReloadPlugins()
|
||||
{
|
||||
return parent()->relaodPlugins();
|
||||
}
|
||||
|
||||
QRect DBusDockAdaptors::geometry() const
|
||||
{
|
||||
return parent()->geometry();
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@ class DBusDockAdaptors: public QDBusAbstractAdaptor
|
||||
" <interface name=\"com.deepin.dde.Dock\">\n"
|
||||
" <property access=\"read\" type=\"(iiii)\" name=\"geometry\"/>\n"
|
||||
" <method name=\"callShow\"/>"
|
||||
" <method name=\"ReloadPlugins\"/>"
|
||||
" <signal name=\"geometryChanged\">"
|
||||
"<arg name=\"geometry\" type=\"(iiii)\"/>"
|
||||
"</signal>"
|
||||
@ -51,6 +52,7 @@ public:
|
||||
|
||||
public Q_SLOTS: // METHODS
|
||||
void callShow();
|
||||
void ReloadPlugins();
|
||||
|
||||
public: // PROPERTIES
|
||||
Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged)
|
||||
|
@ -64,15 +64,14 @@ bool IsSaveMode()
|
||||
QSettings settings(g_cfgPath, QSettings::IniFormat);
|
||||
settings.beginGroup(qApp->applicationName());
|
||||
int collapseNum = settings.value("collapse").toInt();
|
||||
|
||||
// 自动进入安全模式
|
||||
/* 崩溃次数达到3次,进入安全模式(不加载插件) */
|
||||
if (collapseNum >= 3) {
|
||||
settings.remove(""); // 删除记录的数据
|
||||
settings.setValue("collapse", 0);
|
||||
settings.endGroup();
|
||||
settings.sync();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -95,16 +94,38 @@ bool IsSaveMode()
|
||||
QSettings settings(g_cfgPath, QSettings::IniFormat);
|
||||
settings.beginGroup("dde-dock");
|
||||
|
||||
QDateTime lastDate = QDateTime::fromString(settings.value("lastDate").toString(), "yyyy-MM-dd hh:mm:ss:zzz");
|
||||
int collapseNum = settings.value("collapse").toInt();
|
||||
|
||||
// 10秒以内发生崩溃则累加,记录到文件中
|
||||
if (qAbs(lastDate.secsTo(QDateTime::currentDateTime())) < 10) {
|
||||
settings.setValue("collapse", collapseNum + 1);
|
||||
} else {
|
||||
settings.setValue("collapse", 0);
|
||||
/* 第一次崩溃或进入安全模式后的第一次崩溃,将时间重置 */
|
||||
if (collapseNum == 0) {
|
||||
settings.setValue("first_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"));
|
||||
}
|
||||
settings.setValue("lastDate", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"));
|
||||
QDateTime lastDate = QDateTime::fromString(settings.value("first_time").toString(), "yyyy-MM-dd hh:mm:ss:zzz");
|
||||
/* 将当前崩溃时间与第一次崩溃时间比较,小于9分钟,记录一次崩溃;大于9分钟,覆盖之前的崩溃时间 */
|
||||
if (qAbs(lastDate.secsTo(QDateTime::currentDateTime())) < 9 * 60) {
|
||||
settings.setValue("collapse", collapseNum + 1);
|
||||
switch (collapseNum) {
|
||||
case 0:
|
||||
settings.setValue("first_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"));
|
||||
break;
|
||||
case 1:
|
||||
settings.setValue("second_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"));
|
||||
break;
|
||||
case 2:
|
||||
settings.setValue("third_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"));
|
||||
break;
|
||||
default:
|
||||
qDebug() << "Error, the collapse is wrong!";
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (collapseNum == 2){
|
||||
settings.setValue("first_time", settings.value("second_time").toString());
|
||||
settings.setValue("second_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"));
|
||||
} else {
|
||||
settings.setValue("first_time", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"));
|
||||
}
|
||||
}
|
||||
|
||||
settings.endGroup();
|
||||
settings.sync();
|
||||
|
||||
@ -243,6 +264,9 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (!IsSaveMode() && !parser.isSet(disablePlugOption)) {
|
||||
DockItemManager::instance()->startLoadPlugins();
|
||||
qApp->setProperty("PLUGINSLOADED", true);
|
||||
} else {
|
||||
mw.sendNotifications();
|
||||
}
|
||||
|
||||
return app.exec();
|
||||
|
@ -187,6 +187,16 @@ void MainWindow::callShow()
|
||||
});
|
||||
}
|
||||
|
||||
void MainWindow::relaodPlugins()
|
||||
{
|
||||
if (qApp->property("PLUGINSLOADED").toBool()) {
|
||||
return;
|
||||
}
|
||||
|
||||
DockItemManager::instance()->startLoadPlugins();
|
||||
qApp->setProperty("PLUGINSLOADED", true);
|
||||
}
|
||||
|
||||
void MainWindow::showEvent(QShowEvent *e)
|
||||
{
|
||||
QWidget::showEvent(e);
|
||||
@ -566,4 +576,31 @@ void MainWindow::setGeometry(const QRect &rect)
|
||||
emit panelGeometryChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 当进入安全模式时,通过此方法发送通知告知用户
|
||||
*/
|
||||
void MainWindow::sendNotifications()
|
||||
{
|
||||
QStringList actionButton;
|
||||
actionButton << "reload" << tr("Exit Safe Mode");
|
||||
QVariantMap hints;
|
||||
hints["x-deepin-action-reload"] = QString("dbus-send,--session,--dest=com.deepin.dde.Dock,--print-reply,/com/deepin/dde/Dock,com.deepin.dde.Dock.ReloadPlugins");
|
||||
QTimer::singleShot(0, this, [=] {
|
||||
DDBusSender()
|
||||
.service("com.deepin.dde.Notification")
|
||||
.path("/com/deepin/dde/Notification")
|
||||
.interface("com.deepin.dde.Notification")
|
||||
.method(QString("Notify"))
|
||||
.arg(QCoreApplication::applicationName()) // appname
|
||||
.arg(static_cast<uint>(0)) // id
|
||||
.arg(QString("preferences-system")) // icon
|
||||
.arg(QString(tr("Dock - Safe Mode"))) // summary
|
||||
.arg(tr("The Dock is in safe mode, please exit to show it properly")) // content
|
||||
.arg(actionButton) // actions
|
||||
.arg(hints) // hints
|
||||
.arg(15000) // timeout
|
||||
.call();
|
||||
});
|
||||
}
|
||||
|
||||
#include "mainwindow.moc"
|
||||
|
@ -122,6 +122,7 @@ public:
|
||||
void setEffectEnabled(const bool enabled);
|
||||
void setComposite(const bool hasComposite);
|
||||
void setGeometry(const QRect &rect);
|
||||
void sendNotifications();
|
||||
|
||||
friend class MainPanel;
|
||||
friend class MainPanelControl;
|
||||
@ -131,6 +132,7 @@ public:
|
||||
public slots:
|
||||
void launch();
|
||||
void callShow();
|
||||
void relaodPlugins();
|
||||
|
||||
private:
|
||||
using QWidget::show;
|
||||
|
Loading…
x
Reference in New Issue
Block a user