Skip to content

Commit aa6b939

Browse files
committed
A small patch
Support specifying client working directory Clean all compile warnings
1 parent 7f96c06 commit aa6b939

13 files changed

Lines changed: 312 additions & 197 deletions

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ Great thanks to him.
7272
+ Support configuring environment variables by script
7373
(Useful when the client requires specific environment variables)
7474
+ All functions are compatible with Iceman/RRG repo(tested on v4.9237)
75+
+ Support specifying client working directory
7576
+ Fix some bugs
7677

7778
### V0.1.3

README/doc/README_zh_CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ release页面中有含客户端的GUI。这个GUI也可以搭配你自己的客
7171
+ 可通过外部脚本配置环境变量
7272
(在客户端需要配置环境变量时很有用)
7373
+ 全功能兼容冰人版(在v4.9237上测试通过)
74+
+ 支持指定客户端工作路径
7475
+ 修复部分bug
7576

7677
### V0.1.3

common/pm3process.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,11 @@ void PM3Process::connectPM3(const QString& path, const QString& port, const QStr
5555
result = result.left(result.indexOf("\r\n"));
5656
result = result.mid(3, result.lastIndexOf(" ") - 3);
5757
emit PM3StatedChanged(true, result);
58-
setSerialListener(port, true);
58+
59+
// if the arguments don't contain <port>, then disable the port listener
60+
// useful when using offline sniff
61+
if(args.indexOf(port) != -1)
62+
setSerialListener(port, true);
5963
}
6064
else
6165
kill();
@@ -132,5 +136,11 @@ void PM3Process::setProcEnv(const QStringList* env)
132136
{
133137
// qDebug() << "passed Env List" << *env;
134138
this->setEnvironment(*env);
135-
// qDebug() << "final Env List" << processEnvironment().toStringList();
139+
// qDebug() << "final Env List" << processEnvironment().toStringList();
140+
}
141+
142+
void PM3Process::setWorkingDir(const QString& dir)
143+
{
144+
// the working directory cannot be the default, or the client will failed to load the dll
145+
this->setWorkingDirectory(dir);
136146
}

common/pm3process.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <QtSerialPort/QSerialPortInfo>
1010
#include <QtSerialPort/QSerialPort>
1111
#include <QProcessEnvironment>
12+
#include <QDir>
1213

1314
#include "util.h"
1415

@@ -27,6 +28,7 @@ public slots:
2728
qint64 write(QString data);
2829
void reconnectPM3();
2930
void setProcEnv(const QStringList* env);
31+
void setWorkingDir(const QString& dir);
3032
private slots:
3133
void onTimeout();
3234
void onReadyRead();

lang/en_US.ts

Lines changed: 111 additions & 94 deletions
Large diffs are not rendered by default.

lang/zh_CN.qm

418 Bytes
Binary file not shown.

lang/zh_CN.ts

Lines changed: 112 additions & 94 deletions
Large diffs are not rendered by default.

module/mifare.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,14 @@ QString Mifare::info(bool isRequiringOutput)
102102
end = result.indexOf("\n", end);
103103
return result.mid(begin, end - begin + 1);
104104
}
105-
else
106-
return "";
107105
}
108106
else
109107
{
110108
util->execCMD("hf 14a info");
111109
ui->funcTab->setCurrentIndex(Util::rawTabIndex);
112-
return "";
113110
}
114111
}
112+
return "";
115113
}
116114

117115
void Mifare::chk()
@@ -629,6 +627,7 @@ bool Mifare::_writeblk(int blockId, KeyType keyType, const QString& key, const Q
629627
return true;
630628
}
631629
}
630+
return false;
632631
}
633632

634633
void Mifare::writeOne(TargetType targetType)

ui/mainwindow.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ MainWindow::MainWindow(QWidget *parent):
2828
pm3 = new PM3Process(pm3Thread);
2929
pm3Thread->start();
3030
pm3state = false;
31+
clientWorkingDir = new QDir;
3132

3233
util = new Util(this);
3334
mifare = new Mifare(ui, util, this);
@@ -94,6 +95,7 @@ void MainWindow::on_PM3_connectButton_clicked()
9495
{
9596
QStringList args = ui->Set_Client_startArgsEdit->text().replace("<port>", port).split(' ');
9697
saveClientPath(ui->PM3_pathEdit->text());
98+
9799
QProcess envSetProcess;
98100
QFileInfo envScriptPath(ui->Set_Client_envScriptEdit->text());
99101
if(envScriptPath.exists())
@@ -113,6 +115,15 @@ void MainWindow::on_PM3_connectButton_clicked()
113115
else
114116
clientEnv.clear();
115117
emit setProcEnv(&clientEnv);
118+
119+
clientWorkingDir->setPath(QApplication::applicationDirPath());
120+
qDebug() << clientWorkingDir->absolutePath();
121+
clientWorkingDir->mkpath(ui->Set_Client_workingDirEdit->text());
122+
qDebug() << clientWorkingDir->absolutePath();
123+
clientWorkingDir->cd(ui->Set_Client_workingDirEdit->text());
124+
qDebug() << clientWorkingDir->absolutePath();
125+
emit setWorkingDir(clientWorkingDir->absolutePath());
126+
116127
emit connectPM3(ui->PM3_pathEdit->text(), port, args);
117128
}
118129
}
@@ -976,6 +987,7 @@ void MainWindow::uiInit()
976987

977988
settings->beginGroup("Client_Env");
978989
ui->Set_Client_envScriptEdit->setText(settings->value("scriptPath").toString());
990+
ui->Set_Client_workingDirEdit->setText(settings->value("workingDir", "../data").toString());
979991
settings->endGroup();
980992

981993
ui->MF_RW_keyTypeBox->addItem("A", Mifare::KEY_A);
@@ -996,6 +1008,7 @@ void MainWindow::signalInit()
9961008
connect(pm3, &PM3Process::PM3StatedChanged, util, &Util::setRunningState);
9971009
connect(this, &MainWindow::killPM3, pm3, &PM3Process::kill);
9981010
connect(this, &MainWindow::setProcEnv, pm3, &PM3Process::setProcEnv);
1011+
connect(this, &MainWindow::setWorkingDir, pm3, &PM3Process::setWorkingDir);
9991012

10001013
connect(util, &Util::write, pm3, &PM3Process::write);
10011014

@@ -1160,3 +1173,10 @@ void MainWindow::on_Set_Client_envScriptEdit_editingFinished()
11601173
settings->setValue("scriptPath", ui->Set_Client_envScriptEdit->text());
11611174
settings->endGroup();
11621175
}
1176+
1177+
void MainWindow::on_Set_Client_saveWorkingDirButton_clicked()
1178+
{
1179+
settings->beginGroup("Client_Env");
1180+
settings->setValue("workingDir", ui->Set_Client_workingDirEdit->text());
1181+
settings->endGroup();
1182+
}

ui/mainwindow.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ private slots:
173173

174174
void on_Set_Client_envScriptEdit_editingFinished();
175175

176+
void on_Set_Client_saveWorkingDirButton_clicked();
177+
176178
private:
177179
Ui::MainWindow* ui;
178180
QButtonGroup* MFCardTypeBtnGroup;
@@ -199,6 +201,7 @@ private slots:
199201
QTimer* portSearchTimer;
200202
QStringList portList;
201203
QStringList clientEnv;
204+
QDir* clientWorkingDir;
202205

203206
Mifare* mifare;
204207
Util* util;
@@ -217,5 +220,6 @@ private slots:
217220
void killPM3();
218221
void setSerialListener(const QString& name, bool state);
219222
void setProcEnv(const QStringList *env);
223+
void setWorkingDir(const QString& dir);
220224
};
221225
#endif // MAINWINDOW_H

0 commit comments

Comments
 (0)