Skip to content

Commit a976c75

Browse files
pppanghu77deepin-bot[bot]
authored andcommitted
fix: [optimization] Optimize user experience
Record the searched devices and provide the option to minimize pallets Log: [optimization] Optimize user experience Bug: https://pms.uniontech.com/bug-view-250143.html
1 parent 372a7c3 commit a976c75

18 files changed

+488
-66
lines changed

src/ipc/proto/comstruct.h

+3
Original file line numberDiff line numberDiff line change
@@ -190,16 +190,19 @@ struct SearchDevice {
190190

191191
struct SearchDeviceResult {
192192
bool result;
193+
fastring ip;
193194
fastring msg;
194195

195196
void from_json(const co::Json& _x_) {
196197
result = _x_.get("result").as_bool();
198+
ip = _x_.get("ip").as_c_str();
197199
msg = _x_.get("msg").as_c_str();
198200
}
199201

200202
co::Json as_json() const {
201203
co::Json _x_;
202204
_x_.add_member("result", result);
205+
_x_.add_member("ip", ip);
203206
_x_.add_member("msg", msg);
204207
return _x_;
205208
}

src/plugins/cooperation/core/cooperation/cooperationmanager.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -577,8 +577,11 @@ void CooperationManager::handleNetworkDismiss(const QString &msg)
577577
}
578578
}
579579

580-
void CooperationManager::handleSearchDeviceResult(bool res)
580+
void CooperationManager::handleSearchDeviceResult(bool res, const QString &ip)
581581
{
582582
if (!res)
583583
emit MainController::instance()->discoveryFinished(false);
584+
else {
585+
ConfigManager::instance()->setAppAttribute(AppSettings::CacheGroup, AppSettings::SearchIPKey, ip);
586+
}
584587
}

src/plugins/cooperation/core/cooperation/cooperationmanager.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public Q_SLOTS:
3434
void onVerifyTimeout();
3535
void handleCancelCooperApply();
3636
void handleNetworkDismiss(const QString &msg);
37-
void handleSearchDeviceResult(bool res);
37+
void handleSearchDeviceResult(bool res, const QString &ip);
3838

3939
private:
4040
explicit CooperationManager(QObject *parent = nullptr);

src/plugins/cooperation/core/discover/discovercontroller.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ DiscoverController::DiscoverController(QObject *parent)
3434
return;
3535
}
3636

37-
openZeroConfDaemonDailog();
37+
//openZeroConfDaemonDailog();
3838
// QTimer *timer = new QTimer(this);
3939
// connect(timer, &QTimer::timeout, this, [timer, this] {
4040
// if (isZeroConfDaemonActive()) {
@@ -187,6 +187,7 @@ bool DiscoverController::isZeroConfDaemonActive()
187187
return false;
188188
}
189189
} else {
190+
WLOG << "Avahi service is not running";
190191
//ELOG << "Error: " << error.toStdString();
191192
return false;
192193
}

src/plugins/cooperation/core/global_defines.h

+2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ inline constexpr char CooperationEnabled[] { "CooperationEnabled" };
104104
inline constexpr char CacheGroup[] { "Cache" };
105105
inline constexpr char TransHistoryKey[] { "TransHistory" };
106106
inline constexpr char ConnectHistoryKey[] { "ConnectHistory" };
107+
inline constexpr char CloseOptionKey[] { "CloseOption" };
108+
inline constexpr char SearchIPKey[] { "SearchIP" };
107109
}
108110

109111
// 组策略

src/plugins/cooperation/core/gui/mainwindow.cpp

+107-1
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,25 @@
77
#include "dialogs/settingdialog.h"
88
#include "maincontroller/maincontroller.h"
99

10+
#include <utils/cooperationutil.h>
1011
#include <QScreen>
1112
#include <QUrl>
1213
#include <QApplication>
1314
#include <QDesktopServices>
15+
#include <QCheckBox>
16+
#include <QSystemTrayIcon>
17+
#include <QMenu>
18+
#include <QVBoxLayout>
1419

1520
using namespace cooperation_core;
1621

22+
#ifdef __linux__
23+
DWIDGET_USE_NAMESPACE
24+
const char *Kicon = "dde-cooperation";
25+
#else
26+
const char *Kicon = ":/icons/deepin/builtin/icons/dde-cooperation_128px.svg";
27+
#endif
28+
1729
MainWindowPrivate::MainWindowPrivate(MainWindow *qq)
1830
: q(qq)
1931
{
@@ -160,9 +172,103 @@ void MainWindow::mousePressEvent(QMouseEvent *event)
160172
{
161173
d->mousePressEvent(event);
162174
}
175+
#endif
163176

164177
void MainWindow::closeEvent(QCloseEvent *event)
165178
{
166-
QApplication::quit();
179+
if (qApp->property("onlyTransfer").toBool())
180+
QApplication::quit();
181+
182+
showCloseDialog();
183+
event->ignore();
167184
}
185+
186+
void MainWindow::showCloseDialog()
187+
{
188+
QString option = CooperationUtil::closeOption();
189+
if (option == "Minimise") {
190+
minimizedAPP();
191+
return;
192+
}
193+
if (option == "Exit")
194+
QApplication::quit();
195+
196+
CooperationDialog dlg;
197+
198+
QVBoxLayout *layout = new QVBoxLayout();
199+
QCheckBox *op1 = new QCheckBox(tr("Minimise to system tray"));
200+
op1->setChecked(true);
201+
QCheckBox *op2 = new QCheckBox(tr("Exit"));
202+
203+
connect(op1, &QCheckBox::stateChanged, op1, [op2](int state) {
204+
op2->setChecked(state != Qt::Checked);
205+
});
206+
connect(op2, &QCheckBox::stateChanged, op2, [op1](int state) {
207+
op1->setChecked(state != Qt::Checked);
208+
});
209+
210+
QCheckBox *op3 = new QCheckBox(tr("No more enquiries"));
211+
212+
layout->addWidget(op1);
213+
layout->addWidget(op2);
214+
layout->addWidget(op3);
215+
216+
#ifdef __linux__
217+
dlg.setIcon(QIcon::fromTheme("dde-cooperation"));
218+
dlg.addButton(tr("Cancel"));
219+
dlg.addButton(tr("Confirm"), true, DDialog::ButtonWarning);
220+
dlg.setTitle(tr("Please select your operation"));
221+
QWidget *content = new QWidget();
222+
223+
content->setLayout(layout);
224+
dlg.addContent(content);
225+
#else
226+
dlg.setWindowIcon(QIcon::fromTheme(Kicon));
227+
dlg.setWindowTitle(tr("Please select your operation"));
228+
QPushButton *okButton = new QPushButton(tr("Confirm"));
229+
QPushButton *cancelButton = new QPushButton(tr("Cancel"));
230+
231+
QObject::connect(okButton, &QPushButton::clicked, &dlg, &QDialog::accept);
232+
QObject::connect(cancelButton, &QPushButton::clicked, &dlg, &QDialog::reject);
233+
234+
layout->addWidget(okButton);
235+
layout->addWidget(cancelButton);
236+
dlg.setLayout(layout);
237+
dlg.setFixedSize(400, 200);
168238
#endif
239+
240+
int code = dlg.exec();
241+
if (code == QDialog::Accepted) {
242+
bool isExit = op2->checkState() == Qt::Checked;
243+
if (op3->checkState() == Qt::Checked) {
244+
CooperationUtil::saveOption(isExit);
245+
}
246+
247+
if (isExit)
248+
QApplication::quit();
249+
else
250+
minimizedAPP();
251+
}
252+
}
253+
254+
void MainWindow::minimizedAPP()
255+
{
256+
this->hide();
257+
if (d->trayIcon)
258+
return;
259+
d->trayIcon = new QSystemTrayIcon(QIcon::fromTheme(Kicon), this);
260+
261+
QMenu *trayMenu = new QMenu(this);
262+
QAction *restoreAction = trayMenu->addAction(tr("Restore"));
263+
QAction *quitAction = trayMenu->addAction(tr("Quit"));
264+
265+
d->trayIcon->setContextMenu(trayMenu);
266+
d->trayIcon->show();
267+
268+
QObject::connect(restoreAction, &QAction::triggered, this, &QMainWindow::show);
269+
QObject::connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);
270+
QObject::connect(d->trayIcon, &QSystemTrayIcon::activated, this, [this](QSystemTrayIcon::ActivationReason reason) {
271+
if (reason == QSystemTrayIcon::Trigger)
272+
this->show();
273+
});
274+
}

src/plugins/cooperation/core/gui/mainwindow.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ class MainWindow : public CooperationMainWindow
2727
void mouseMoveEvent(QMouseEvent *event) override;
2828
void mouseReleaseEvent(QMouseEvent *event) override;
2929
void mousePressEvent(QMouseEvent *event) override;
30-
void closeEvent(QCloseEvent *event) override;
3130
#endif
31+
void closeEvent(QCloseEvent *event) override;
3232

33+
void showCloseDialog();
34+
void minimizedAPP();
3335
public Q_SLOTS:
3436
void setFirstTipVisible();
3537
void onlineStateChanged(bool isOnline);

src/plugins/cooperation/core/gui/mainwindow_p.h

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <QPainter>
1212
#include <QMouseEvent>
1313

14+
class QSystemTrayIcon;
1415
namespace cooperation_core {
1516

1617
class MainWindow;
@@ -39,6 +40,7 @@ class MainWindowPrivate : public QObject
3940
WorkspaceWidget *workspaceWidget { nullptr };
4041
bool leftButtonPressed { false };
4142
QPoint lastPosition;
43+
QSystemTrayIcon *trayIcon { nullptr };
4244
};
4345

4446
} // namespace cooperation_core

src/plugins/cooperation/core/maincontroller/maincontroller.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
#include <QHostInfo>
1818
#include <QDir>
1919

20+
#include <transfer/transferhelper.h>
21+
2022
using ConnectHistory = QMap<QString, QString>;
2123
Q_GLOBAL_STATIC(ConnectHistory, connectHistory)
2224

@@ -157,5 +159,8 @@ void MainController::discoveryDevice()
157159
if (!offlineDevList.isEmpty())
158160
deviceOnline(offlineDevList);
159161

162+
QString searchIP = CooperationUtil::searchIPHistory();
163+
if (!searchIP.isEmpty())
164+
TransferHelper::instance()->searchDevice(searchIP);
160165
CooperationUtil::instance()->asyncDiscoveryDevice();
161166
}

src/plugins/cooperation/core/utils/cooperationutil.cpp

+19-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,8 @@ void CooperationUtilPrivate::localIPCStart()
264264
q->metaObject()->invokeMethod(CooperationManager::instance(),
265265
"handleSearchDeviceResult",
266266
Qt::QueuedConnection,
267-
Q_ARG(bool, param.result));
267+
Q_ARG(bool, param.result),
268+
Q_ARG(QString, QString(param.ip.c_str())));
268269
} break;
269270
default:
270271
break;
@@ -525,6 +526,23 @@ QString CooperationUtil::localIPAddress()
525526
return ip;
526527
}
527528

529+
QString CooperationUtil::closeOption()
530+
{
531+
QString option = ConfigManager::instance()->appAttribute(AppSettings::CacheGroup, AppSettings::CloseOptionKey).toString();
532+
return option;
533+
}
534+
535+
QString CooperationUtil::searchIPHistory()
536+
{
537+
return ConfigManager::instance()->appAttribute(AppSettings::CacheGroup, AppSettings::SearchIPKey).toString();
538+
}
539+
540+
void CooperationUtil::saveOption(bool exit)
541+
{
542+
ConfigManager::instance()->setAppAttribute(AppSettings::CacheGroup, AppSettings::CloseOptionKey,
543+
exit ? "Exit" : "Minimise");
544+
}
545+
528546
void CooperationUtil::showFeatureDisplayDialog(QDialog *dlg1)
529547
{
530548
#ifdef linux

src/plugins/cooperation/core/utils/cooperationutil.h

+3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class CooperationUtil : public QObject
3333

3434
static QVariantMap deviceInfo();
3535
static QString localIPAddress();
36+
static QString closeOption();
37+
static void saveOption(bool exit);
38+
static QString searchIPHistory();
3639

3740
void showFeatureDisplayDialog(QDialog *dlg);
3841

src/plugins/daemon/core/service/discoveryjob.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ void DiscoveryJob::searchDeviceByIp(const QString &ip, const bool remove)
246246
emit sigNodeChanged(true, result.data.c_str());
247247
ev.result = true;
248248
ev.msg = result.data;
249+
ev.ip = ip.toStdString();
249250
auto req = ev.as_json();
250251
// 通知前端
251252
req.add_member("api", "Frontend.searchDeviceRes");

0 commit comments

Comments
 (0)