Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: [optimization] Optimize user experience #534

Merged
merged 1 commit into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/ipc/proto/comstruct.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,16 +190,19 @@ struct SearchDevice {

struct SearchDeviceResult {
bool result;
fastring ip;
fastring msg;

void from_json(const co::Json& _x_) {
result = _x_.get("result").as_bool();
ip = _x_.get("ip").as_c_str();
msg = _x_.get("msg").as_c_str();
}

co::Json as_json() const {
co::Json _x_;
_x_.add_member("result", result);
_x_.add_member("ip", ip);
_x_.add_member("msg", msg);
return _x_;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -577,8 +577,11 @@ void CooperationManager::handleNetworkDismiss(const QString &msg)
}
}

void CooperationManager::handleSearchDeviceResult(bool res)
void CooperationManager::handleSearchDeviceResult(bool res, const QString &ip)
{
if (!res)
emit MainController::instance()->discoveryFinished(false);
else {
ConfigManager::instance()->setAppAttribute(AppSettings::CacheGroup, AppSettings::SearchIPKey, ip);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public Q_SLOTS:
void onVerifyTimeout();
void handleCancelCooperApply();
void handleNetworkDismiss(const QString &msg);
void handleSearchDeviceResult(bool res);
void handleSearchDeviceResult(bool res, const QString &ip);

private:
explicit CooperationManager(QObject *parent = nullptr);
Expand Down
3 changes: 2 additions & 1 deletion src/plugins/cooperation/core/discover/discovercontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ DiscoverController::DiscoverController(QObject *parent)
return;
}

openZeroConfDaemonDailog();
//openZeroConfDaemonDailog();
// QTimer *timer = new QTimer(this);
// connect(timer, &QTimer::timeout, this, [timer, this] {
// if (isZeroConfDaemonActive()) {
Expand Down Expand Up @@ -187,6 +187,7 @@ bool DiscoverController::isZeroConfDaemonActive()
return false;
}
} else {
WLOG << "Avahi service is not running";
//ELOG << "Error: " << error.toStdString();
return false;
}
Expand Down
2 changes: 2 additions & 0 deletions src/plugins/cooperation/core/global_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ inline constexpr char CooperationEnabled[] { "CooperationEnabled" };
inline constexpr char CacheGroup[] { "Cache" };
inline constexpr char TransHistoryKey[] { "TransHistory" };
inline constexpr char ConnectHistoryKey[] { "ConnectHistory" };
inline constexpr char CloseOptionKey[] { "CloseOption" };
inline constexpr char SearchIPKey[] { "SearchIP" };
}

// 组策略
Expand Down
108 changes: 107 additions & 1 deletion src/plugins/cooperation/core/gui/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,25 @@
#include "dialogs/settingdialog.h"
#include "maincontroller/maincontroller.h"

#include <utils/cooperationutil.h>
#include <QScreen>
#include <QUrl>
#include <QApplication>
#include <QDesktopServices>
#include <QCheckBox>
#include <QSystemTrayIcon>
#include <QMenu>
#include <QVBoxLayout>

using namespace cooperation_core;

#ifdef __linux__
DWIDGET_USE_NAMESPACE
const char *Kicon = "dde-cooperation";
#else
const char *Kicon = ":/icons/deepin/builtin/icons/dde-cooperation_128px.svg";
#endif

MainWindowPrivate::MainWindowPrivate(MainWindow *qq)
: q(qq)
{
Expand Down Expand Up @@ -160,9 +172,103 @@ void MainWindow::mousePressEvent(QMouseEvent *event)
{
d->mousePressEvent(event);
}
#endif

void MainWindow::closeEvent(QCloseEvent *event)
{
QApplication::quit();
if (qApp->property("onlyTransfer").toBool())
QApplication::quit();

showCloseDialog();
event->ignore();
}

void MainWindow::showCloseDialog()
{
QString option = CooperationUtil::closeOption();
if (option == "Minimise") {
minimizedAPP();
return;
}
if (option == "Exit")
QApplication::quit();

CooperationDialog dlg;

QVBoxLayout *layout = new QVBoxLayout();
QCheckBox *op1 = new QCheckBox(tr("Minimise to system tray"));
op1->setChecked(true);
QCheckBox *op2 = new QCheckBox(tr("Exit"));

connect(op1, &QCheckBox::stateChanged, op1, [op2](int state) {
op2->setChecked(state != Qt::Checked);
});
connect(op2, &QCheckBox::stateChanged, op2, [op1](int state) {
op1->setChecked(state != Qt::Checked);
});

QCheckBox *op3 = new QCheckBox(tr("No more enquiries"));

layout->addWidget(op1);
layout->addWidget(op2);
layout->addWidget(op3);

#ifdef __linux__
dlg.setIcon(QIcon::fromTheme("dde-cooperation"));
dlg.addButton(tr("Cancel"));
dlg.addButton(tr("Confirm"), true, DDialog::ButtonWarning);
dlg.setTitle(tr("Please select your operation"));
QWidget *content = new QWidget();

content->setLayout(layout);
dlg.addContent(content);
#else
dlg.setWindowIcon(QIcon::fromTheme(Kicon));
dlg.setWindowTitle(tr("Please select your operation"));
QPushButton *okButton = new QPushButton(tr("Confirm"));
QPushButton *cancelButton = new QPushButton(tr("Cancel"));

QObject::connect(okButton, &QPushButton::clicked, &dlg, &QDialog::accept);
QObject::connect(cancelButton, &QPushButton::clicked, &dlg, &QDialog::reject);

layout->addWidget(okButton);
layout->addWidget(cancelButton);
dlg.setLayout(layout);
dlg.setFixedSize(400, 200);
#endif

int code = dlg.exec();
if (code == QDialog::Accepted) {
bool isExit = op2->checkState() == Qt::Checked;
if (op3->checkState() == Qt::Checked) {
CooperationUtil::saveOption(isExit);
}

if (isExit)
QApplication::quit();
else
minimizedAPP();
}
}

void MainWindow::minimizedAPP()
{
this->hide();
if (d->trayIcon)
return;
d->trayIcon = new QSystemTrayIcon(QIcon::fromTheme(Kicon), this);

QMenu *trayMenu = new QMenu(this);
QAction *restoreAction = trayMenu->addAction(tr("Restore"));
QAction *quitAction = trayMenu->addAction(tr("Quit"));

d->trayIcon->setContextMenu(trayMenu);
d->trayIcon->show();

QObject::connect(restoreAction, &QAction::triggered, this, &QMainWindow::show);
QObject::connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);
QObject::connect(d->trayIcon, &QSystemTrayIcon::activated, this, [this](QSystemTrayIcon::ActivationReason reason) {
if (reason == QSystemTrayIcon::Trigger)
this->show();
});
}
4 changes: 3 additions & 1 deletion src/plugins/cooperation/core/gui/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@ class MainWindow : public CooperationMainWindow
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void closeEvent(QCloseEvent *event) override;
#endif
void closeEvent(QCloseEvent *event) override;

void showCloseDialog();
void minimizedAPP();
public Q_SLOTS:
void setFirstTipVisible();
void onlineStateChanged(bool isOnline);
Expand Down
2 changes: 2 additions & 0 deletions src/plugins/cooperation/core/gui/mainwindow_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <QPainter>
#include <QMouseEvent>

class QSystemTrayIcon;
namespace cooperation_core {

class MainWindow;
Expand Down Expand Up @@ -39,6 +40,7 @@ class MainWindowPrivate : public QObject
WorkspaceWidget *workspaceWidget { nullptr };
bool leftButtonPressed { false };
QPoint lastPosition;
QSystemTrayIcon *trayIcon { nullptr };
};

} // namespace cooperation_core
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#include <QHostInfo>
#include <QDir>

#include <transfer/transferhelper.h>

using ConnectHistory = QMap<QString, QString>;
Q_GLOBAL_STATIC(ConnectHistory, connectHistory)

Expand Down Expand Up @@ -157,5 +159,8 @@ void MainController::discoveryDevice()
if (!offlineDevList.isEmpty())
deviceOnline(offlineDevList);

QString searchIP = CooperationUtil::searchIPHistory();
if (!searchIP.isEmpty())
TransferHelper::instance()->searchDevice(searchIP);
CooperationUtil::instance()->asyncDiscoveryDevice();
}
20 changes: 19 additions & 1 deletion src/plugins/cooperation/core/utils/cooperationutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,8 @@ void CooperationUtilPrivate::localIPCStart()
q->metaObject()->invokeMethod(CooperationManager::instance(),
"handleSearchDeviceResult",
Qt::QueuedConnection,
Q_ARG(bool, param.result));
Q_ARG(bool, param.result),
Q_ARG(QString, QString(param.ip.c_str())));
} break;
default:
break;
Expand Down Expand Up @@ -525,6 +526,23 @@ QString CooperationUtil::localIPAddress()
return ip;
}

QString CooperationUtil::closeOption()
{
QString option = ConfigManager::instance()->appAttribute(AppSettings::CacheGroup, AppSettings::CloseOptionKey).toString();
return option;
}

QString CooperationUtil::searchIPHistory()
{
return ConfigManager::instance()->appAttribute(AppSettings::CacheGroup, AppSettings::SearchIPKey).toString();
}

void CooperationUtil::saveOption(bool exit)
{
ConfigManager::instance()->setAppAttribute(AppSettings::CacheGroup, AppSettings::CloseOptionKey,
exit ? "Exit" : "Minimise");
}

void CooperationUtil::showFeatureDisplayDialog(QDialog *dlg1)
{
#ifdef linux
Expand Down
3 changes: 3 additions & 0 deletions src/plugins/cooperation/core/utils/cooperationutil.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ class CooperationUtil : public QObject

static QVariantMap deviceInfo();
static QString localIPAddress();
static QString closeOption();
static void saveOption(bool exit);
static QString searchIPHistory();

void showFeatureDisplayDialog(QDialog *dlg);

Expand Down
1 change: 1 addition & 0 deletions src/plugins/daemon/core/service/discoveryjob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ void DiscoveryJob::searchDeviceByIp(const QString &ip, const bool remove)
emit sigNodeChanged(true, result.data.c_str());
ev.result = true;
ev.msg = result.data;
ev.ip = ip.toStdString();
auto req = ev.as_json();
// 通知前端
req.add_member("api", "Frontend.searchDeviceRes");
Expand Down
Loading
Loading