Skip to content

Commit f0a500b

Browse files
add-uosbarry-ran
authored andcommitted
feat: add Port history record feature
- Implement Port history storage - Ensure unique Port entries in history - Remove empty ip history config Log: Add the ability to save the history of previously connected ports when using wireless connections.
1 parent cd63e84 commit f0a500b

File tree

5 files changed

+122
-12
lines changed

5 files changed

+122
-12
lines changed

QtScrcpy/ui/dialog.cpp

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,22 @@ void Dialog::initUI()
168168
// 加载IP历史记录
169169
loadIpHistory();
170170

171+
// 加载端口历史记录
172+
loadPortHistory();
173+
171174
// 为deviceIpEdt添加右键菜单
172175
if (ui->deviceIpEdt->lineEdit()) {
173176
ui->deviceIpEdt->lineEdit()->setContextMenuPolicy(Qt::CustomContextMenu);
174177
connect(ui->deviceIpEdt->lineEdit(), &QWidget::customContextMenuRequested,
175178
this, &Dialog::showIpEditMenu);
176179
}
180+
181+
// 为devicePortEdt添加右键菜单
182+
if (ui->devicePortEdt->lineEdit()) {
183+
ui->devicePortEdt->lineEdit()->setContextMenuPolicy(Qt::CustomContextMenu);
184+
connect(ui->devicePortEdt->lineEdit(), &QWidget::customContextMenuRequested,
185+
this, &Dialog::showPortEditMenu);
186+
}
177187
}
178188

179189
void Dialog::updateBootConfig(bool toView)
@@ -361,12 +371,14 @@ void Dialog::on_wirelessConnectBtn_clicked()
361371
return;
362372
}
363373
QString addr = ui->deviceIpEdt->currentText().trimmed();
364-
if (!ui->devicePortEdt->text().isEmpty()) {
365-
addr += ":";
366-
addr += ui->devicePortEdt->text().trimmed();
367-
} else if (!ui->devicePortEdt->placeholderText().isEmpty()) {
374+
if (addr.isEmpty()) {
375+
outLog("error: device ip is null", false);
376+
return;
377+
}
378+
379+
if (!ui->devicePortEdt->currentText().isEmpty()) {
368380
addr += ":";
369-
addr += ui->devicePortEdt->placeholderText().trimmed();
381+
addr += ui->devicePortEdt->currentText().trimmed();
370382
} else {
371383
outLog("error: device port is null", false);
372384
return;
@@ -377,6 +389,12 @@ void Dialog::on_wirelessConnectBtn_clicked()
377389
if (!ip.isEmpty()) {
378390
saveIpHistory(ip);
379391
}
392+
393+
// 保存端口历史记录
394+
QString port = addr.split(":").last();
395+
if (!port.isEmpty() && port != ip) {
396+
savePortHistory(port);
397+
}
380398

381399
outLog("wireless connect...", false);
382400
QStringList adbArgs;
@@ -831,3 +849,45 @@ void Dialog::showIpEditMenu(const QPoint &pos)
831849
menu->exec(ui->deviceIpEdt->lineEdit()->mapToGlobal(pos));
832850
delete menu;
833851
}
852+
853+
void Dialog::loadPortHistory()
854+
{
855+
QStringList portList = Config::getInstance().getPortHistory();
856+
ui->devicePortEdt->clear();
857+
ui->devicePortEdt->addItems(portList);
858+
ui->devicePortEdt->setContentsMargins(0, 0, 0, 0);
859+
860+
if (ui->devicePortEdt->lineEdit()) {
861+
ui->devicePortEdt->lineEdit()->setMaxLength(6);
862+
ui->devicePortEdt->lineEdit()->setPlaceholderText("5555");
863+
}
864+
}
865+
866+
void Dialog::savePortHistory(const QString &port)
867+
{
868+
if (port.isEmpty()) {
869+
return;
870+
}
871+
872+
Config::getInstance().savePortHistory(port);
873+
874+
// 更新ComboBox
875+
loadPortHistory();
876+
ui->devicePortEdt->setCurrentText(port);
877+
}
878+
879+
void Dialog::showPortEditMenu(const QPoint &pos)
880+
{
881+
QMenu *menu = ui->devicePortEdt->lineEdit()->createStandardContextMenu();
882+
menu->addSeparator();
883+
884+
QAction *clearHistoryAction = new QAction(tr("Clear History"), menu);
885+
connect(clearHistoryAction, &QAction::triggered, this, [this]() {
886+
Config::getInstance().clearPortHistory();
887+
loadPortHistory();
888+
});
889+
890+
menu->addAction(clearHistoryAction);
891+
menu->exec(ui->devicePortEdt->lineEdit()->mapToGlobal(pos));
892+
delete menu;
893+
}

QtScrcpy/ui/dialog.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ private slots:
8282
const QString &getServerPath();
8383
void loadIpHistory();
8484
void saveIpHistory(const QString &ip);
85+
void loadPortHistory();
86+
void savePortHistory(const QString &port);
87+
88+
void showPortEditMenu(const QPoint &pos);
8589

8690
protected:
8791
void closeEvent(QCloseEvent *event);

QtScrcpy/ui/dialog.ui

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,21 +1094,24 @@
10941094
</widget>
10951095
</item>
10961096
<item>
1097-
<widget class="QLineEdit" name="devicePortEdt">
1097+
<widget class="QComboBox" name="devicePortEdt">
10981098
<property name="sizePolicy">
10991099
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
11001100
<horstretch>0</horstretch>
11011101
<verstretch>0</verstretch>
11021102
</sizepolicy>
11031103
</property>
1104-
<property name="text">
1105-
<string/>
1104+
<property name="minimumSize">
1105+
<size>
1106+
<width>100</width>
1107+
<height>0</height>
1108+
</size>
11061109
</property>
1107-
<property name="maxLength">
1108-
<number>6</number>
1110+
<property name="editable">
1111+
<bool>true</bool>
11091112
</property>
1110-
<property name="placeholderText">
1111-
<string notr="true">5555</string>
1113+
<property name="currentText">
1114+
<string/>
11121115
</property>
11131116
</widget>
11141117
</item>

QtScrcpy/util/config.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@
116116
#define IP_HISTORY_DEF ""
117117
#define IP_HISTORY_MAX 10
118118

119+
// Port history
120+
#define PORT_HISTORY_KEY "PortHistory"
121+
#define PORT_HISTORY_DEF ""
122+
#define PORT_HISTORY_MAX 10
123+
119124
QString Config::s_configPath = "";
120125

121126
Config::Config(QObject *parent) : QObject(parent)
@@ -412,6 +417,7 @@ void Config::saveIpHistory(const QString &ip)
412417
QStringList Config::getIpHistory()
413418
{
414419
QStringList ipList = m_userData->value(IP_HISTORY_KEY, IP_HISTORY_DEF).toStringList();
420+
ipList.removeAll("");
415421
return ipList;
416422
}
417423

@@ -420,3 +426,35 @@ void Config::clearIpHistory()
420426
m_userData->remove(IP_HISTORY_KEY);
421427
m_userData->sync();
422428
}
429+
430+
void Config::savePortHistory(const QString &port)
431+
{
432+
QStringList portList = getPortHistory();
433+
434+
// 移除已存在的相同Port(避免重复)
435+
portList.removeAll(port);
436+
437+
// 将新Port添加到开头
438+
portList.prepend(port);
439+
440+
// 限制历史记录数量
441+
while (portList.size() > PORT_HISTORY_MAX) {
442+
portList.removeLast();
443+
}
444+
445+
m_userData->setValue(PORT_HISTORY_KEY, portList);
446+
m_userData->sync();
447+
}
448+
449+
QStringList Config::getPortHistory()
450+
{
451+
QStringList portList = m_userData->value(PORT_HISTORY_KEY, PORT_HISTORY_DEF).toStringList();
452+
portList.removeAll("");
453+
return portList;
454+
}
455+
456+
void Config::clearPortHistory()
457+
{
458+
m_userData->remove(PORT_HISTORY_KEY);
459+
m_userData->sync();
460+
}

QtScrcpy/util/config.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ class Config : public QObject
6868
QStringList getIpHistory();
6969
void clearIpHistory();
7070

71+
// Port history methods
72+
void savePortHistory(const QString &port);
73+
QStringList getPortHistory();
74+
void clearPortHistory();
75+
7176
private:
7277
explicit Config(QObject *parent = nullptr);
7378
const QString &getConfigPath();

0 commit comments

Comments
 (0)