Skip to content

Commit

Permalink
Improve the default path of recording logs, etc. to the last saved path
Browse files Browse the repository at this point in the history
Signed-off-by: xiaoming <2014500726@smail.xtu.edu.cn>
  • Loading branch information
QQxiaoming committed Sep 9, 2024
1 parent 3c33c2d commit 2ff6e7b
Show file tree
Hide file tree
Showing 12 changed files with 201 additions and 124 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ en-US:
- Add ToolTip to the connection bar
- Add system beep support
- Add record script feature
- Improve the default path of recording logs, etc. to the last saved path
- Fix the small probability memory leak problem

zh-CN:
Expand All @@ -16,6 +17,7 @@ zh-CN:
- 增加连接条ToolTip显示
- 增加系统响铃支持
- 增加记录脚本功能
- 改进记录日志等默认路径为上次保存路径
- 修复可能存在的小概率内存泄漏问题

## [[V0.5.0](https://github.com/QQxiaoming/quardCRT/releases/tag/V0.5.0)] - 2024-08-26
Expand Down
1 change: 1 addition & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
- Add ToolTip to the connection bar
- Add system beep support
- Add record script feature
- Improve the default path of recording logs, etc. to the last saved path
- Fix the small probability memory leak problem

## [[V0.5.0](https://github.com/QQxiaoming/quardCRT/releases/tag/V0.5.0)] - 2024-08-26
Expand Down
99 changes: 54 additions & 45 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -792,9 +792,10 @@ CentralWidget::CentralWidget(QString dir, StartupUIMode mode, QLocale lang, bool
for(int i=0;i<size;i++) {
settings.setArrayIndex(i);
QString current_name = settings.value("name").toString();
QString current_group = settings.value("group", "/").toString();
if(current_name == str) {
QuickConnectWindow::QuickConnectData data;
if(setting2InfoData(&settings, data, current_name) != 0) {
if(setting2InfoData(&settings, data, current_name,current_group) != 0) {
QMessageBox::warning(this, tr("Warning"), tr("Session properties error!"));
return;
}
Expand Down Expand Up @@ -1674,8 +1675,6 @@ void CentralWidget::menuAndToolBarRetranslateUi(void) {
logSessionAction->setStatusTip(tr("Create a log file for current session"));
rawLogSessionAction->setText(tr("Raw Log Session"));
logSessionAction->setStatusTip(tr("Create a raw log file for current session"));
hexViewAction->setText(tr("Hex View"));
hexViewAction->setStatusTip(tr("Show/Hide Hex View for current session"));
exitAction->setText(tr("Exit"));
exitAction->setStatusTip(tr("Quit the application"));

Expand Down Expand Up @@ -1779,6 +1778,8 @@ void CentralWidget::menuAndToolBarRetranslateUi(void) {
connectBarAction->setStatusTip(tr("Show/Hide Connect Bar"));
sideWindowAction->setText(tr("Side Window"));
sideWindowAction->setStatusTip(tr("Show/Hide Side Window"));
hexViewAction->setText(tr("Hex View"));
hexViewAction->setStatusTip(tr("Show/Hide Hex View for current session"));
windwosTransparencyAction->setText(tr("Windows Transparency"));
windwosTransparencyAction->setStatusTip(tr("Enable/Disable alpha transparency"));
verticalScrollBarAction->setText(tr("Vertical Scroll Bar"));
Expand Down Expand Up @@ -2006,9 +2007,6 @@ void CentralWidget::menuAndToolBarInit(void) {
rawLogSessionAction->setCheckable(true);
rawLogSessionAction->setChecked(false);
fileMenu->addAction(rawLogSessionAction);
hexViewAction = new QAction(this);
hexViewAction->setCheckable(true);
fileMenu->addAction(hexViewAction);
fileMenu->addSeparator();
exitAction = new QAction(this);
fileMenu->addAction(exitAction);
Expand Down Expand Up @@ -2124,6 +2122,10 @@ void CentralWidget::menuAndToolBarInit(void) {
sideWindowAction->setChecked(true);
viewMenu->addAction(sideWindowAction);
viewMenu->addSeparator();
hexViewAction = new QAction(this);
hexViewAction->setCheckable(true);
viewMenu->addAction(hexViewAction);
viewMenu->addSeparator();
windwosTransparencyAction = new QAction(this);
windwosTransparencyAction->setCheckable(true);
viewMenu->addAction(windwosTransparencyAction);
Expand Down Expand Up @@ -2768,24 +2770,6 @@ void CentralWidget::menuAndToolBarConnectSignals(void) {
}
}
);
connect(hexViewAction,&QAction::triggered,this,[=](){
if(hexViewAction->isChecked()) {
hexViewWindow->show();
QWidget *widget = findCurrentFocusWidget();
if(widget == nullptr) return;
foreach(SessionsWindow *sessionsWindow, sessionList) {
disconnect(sessionsWindow,&SessionsWindow::hexDataDup,hexViewWindow,&HexViewWindow::recvData);
if(sessionsWindow->getMainWidget() == widget) {
connect(sessionsWindow,&SessionsWindow::hexDataDup,hexViewWindow,&HexViewWindow::recvData);
}
}
}
else
hexViewWindow->hide();
});
connect(hexViewWindow,&HexViewWindow::hideOrClose,this,[=](){
hexViewAction->setChecked(false);
});
connect(globalOptionsWindow,&GlobalOptionsWindow::colorSchemeChanged,this,[=](QString colorScheme){
if(colorScheme == "Custom") {
foreach(SessionsWindow *sessionsWindow, sessionList) {
Expand Down Expand Up @@ -3172,6 +3156,24 @@ void CentralWidget::menuAndToolBarConnectSignals(void) {
connect(sideWindowAction,&QAction::triggered,this,[=](bool checked){
ui->sidewidget->setVisible(checked);
});
connect(hexViewAction,&QAction::triggered,this,[=](){
if(hexViewAction->isChecked()) {
hexViewWindow->show();
QWidget *widget = findCurrentFocusWidget();
if(widget == nullptr) return;
foreach(SessionsWindow *sessionsWindow, sessionList) {
disconnect(sessionsWindow,&SessionsWindow::hexDataDup,hexViewWindow,&HexViewWindow::recvData);
if(sessionsWindow->getMainWidget() == widget) {
connect(sessionsWindow,&SessionsWindow::hexDataDup,hexViewWindow,&HexViewWindow::recvData);
}
}
}
else
hexViewWindow->hide();
});
connect(hexViewWindow,&HexViewWindow::hideOrClose,this,[=](){
hexViewAction->setChecked(false);
});
connect(windwosTransparencyAction,&QAction::triggered,this,[=](bool checked){
windowTransparencyEnabled = checked;
if(mainWindow) {
Expand Down Expand Up @@ -3780,7 +3782,8 @@ void CentralWidget::restoreSessionToSessionManager(void)
settings.setArrayIndex(i);
QString name = settings.value("name").toString();
int type = settings.value("type").toInt();
sessionManagerWidget->addSession(name,type);
QString group = settings.value("group", "/").toString();
sessionManagerWidget->addSession(name,type,group);
}
settings.endArray();
}
Expand All @@ -3800,7 +3803,7 @@ bool CentralWidget::checkSessionName(QString &name)
int CentralWidget::addSessionToSessionManager(SessionsWindow *sessionsWindow, QString &name)
{
checkSessionName(name);
sessionManagerWidget->addSession(name,sessionsWindow->getSessionType());
sessionManagerWidget->addSession(name,sessionsWindow->getSessionType(),"/");

GlobalSetting settings;
int size = settings.beginReadArray("Global/Session");
Expand All @@ -3809,6 +3812,7 @@ int CentralWidget::addSessionToSessionManager(SessionsWindow *sessionsWindow, QS
settings.setArrayIndex(size);
settings.setValue("name",name);
settings.setValue("type",sessionsWindow->getSessionType());
settings.setValue("group","/");
switch(sessionsWindow->getSessionType()) {
case SessionsWindow::Telnet:
settings.setValue("hostname",sessionsWindow->getHostname());
Expand Down Expand Up @@ -3858,20 +3862,21 @@ int CentralWidget::addSessionToSessionManager(const QuickConnectWindow::QuickCon
settings.endArray();
settings.beginWriteArray("Global/Session");
settings.setArrayIndex(size);
infoData2Setting(&settings, data, name);
infoData2Setting(&settings, data, name, "/");
settings.endArray();
sessionManagerWidget->addSession(name,data.type);
sessionManagerWidget->addSession(name,data.type,"/");
} else {
QList<QPair<QString,QuickConnectWindow::QuickConnectData>> infoList;
QList<QPair<QPair<QString,QString>,QuickConnectWindow::QuickConnectData>> infoList;
for(int i=0;i<size;i++) {
settings.setArrayIndex(i);
QuickConnectWindow::QuickConnectData dataInfo;
QString current_name;
setting2InfoData(&settings, dataInfo, current_name, true);
QString current_group;
setting2InfoData(&settings, dataInfo, current_name, current_group, true);
if(i == id) {
infoList.append(QPair<QString,QuickConnectWindow::QuickConnectData>(name,data));
infoList.append(QPair<QPair<QString,QString>,QuickConnectWindow::QuickConnectData>(QPair<QString,QString>(name,"/"),data));
}
infoList.append(QPair<QString,QuickConnectWindow::QuickConnectData>(current_name,dataInfo));
infoList.append(QPair<QPair<QString,QString>,QuickConnectWindow::QuickConnectData>(QPair<QString,QString>(current_name,current_group),dataInfo));
sessionManagerWidget->removeSession(current_name);
}
settings.endArray();
Expand All @@ -3881,14 +3886,14 @@ int CentralWidget::addSessionToSessionManager(const QuickConnectWindow::QuickCon
settings.beginWriteArray("Global/Session");
// write infoMap to settings
for(int i=0;i<infoList.size();i++) {
QPair<QString,QuickConnectWindow::QuickConnectData> info = infoList.at(i);
QPair<QPair<QString,QString>,QuickConnectWindow::QuickConnectData> info = infoList.at(i);
QuickConnectWindow::QuickConnectData dataR = info.second;
settings.setArrayIndex(i);
sessionManagerWidget->addSession(info.first,dataR.type);
sessionManagerWidget->addSession(info.first.first,dataR.type,info.first.second);
if(i == id) {
infoData2Setting(&settings, dataR, info.first);
infoData2Setting(&settings, dataR, info.first.first,info.first.second);
} else {
infoData2Setting(&settings, dataR, info.first, true);
infoData2Setting(&settings, dataR, info.first.first,info.first.second, true);
}
}
settings.endArray();
Expand All @@ -3897,26 +3902,27 @@ int CentralWidget::addSessionToSessionManager(const QuickConnectWindow::QuickCon
return 0;
}

int64_t CentralWidget::removeSessionFromSessionManager(QString name)
int64_t CentralWidget::removeSessionFromSessionManager(const QString &name)
{
int64_t matched = -1;
sessionManagerWidget->removeSession(name);
GlobalSetting settings;
QList<QPair<QString,QuickConnectWindow::QuickConnectData>> infoList;
QList<QPair<QPair<QString,QString>,QuickConnectWindow::QuickConnectData>> infoList;
int size = settings.beginReadArray("Global/Session");
for(int i=0;i<size;i++) {
settings.setArrayIndex(i);
QuickConnectWindow::QuickConnectData data;
QString current_name;
setting2InfoData(&settings, data, current_name, true);
QString current_group;
setting2InfoData(&settings, data, current_name,current_group,true);
if(current_name == name) {
if(data.type == QuickConnectWindow::SSH2) {
keyChainClass.deleteKey(name);
}
matched = i;
continue;
} else {
infoList.append(QPair<QString,QuickConnectWindow::QuickConnectData>(current_name,data));
infoList.append(QPair<QPair<QString,QString>,QuickConnectWindow::QuickConnectData>(QPair<QString,QString>(current_name,current_group),data));
}
}
settings.endArray();
Expand All @@ -3926,10 +3932,10 @@ int64_t CentralWidget::removeSessionFromSessionManager(QString name)
settings.beginWriteArray("Global/Session");
// write infoMap to settings
for(int i=0;i<infoList.size();i++) {
QPair<QString,QuickConnectWindow::QuickConnectData> info = infoList.at(i);
QPair<QPair<QString,QString>,QuickConnectWindow::QuickConnectData> info = infoList.at(i);
QuickConnectWindow::QuickConnectData dataR = info.second;
settings.setArrayIndex(i);
infoData2Setting(&settings, dataR, info.first, true);
infoData2Setting(&settings, dataR, info.first.first,info.first.second, true);
}
settings.endArray();

Expand All @@ -3949,9 +3955,10 @@ void CentralWidget::connectSessionFromSessionManager(QString name)
for(int i=0;i<size;i++) {
settings.setArrayIndex(i);
QString current_name = settings.value("name").toString();
QString current_group = settings.value("group", "/").toString();
if(current_name == name) {
QuickConnectWindow::QuickConnectData data;
if(setting2InfoData(&settings,data,current_name) != 0) {
if(setting2InfoData(&settings,data,current_name,current_group) != 0) {
settings.endArray();
QMessageBox::warning(this,tr("Warning"),tr("Session information get failed."),QMessageBox::Ok);
return;
Expand Down Expand Up @@ -4710,9 +4717,10 @@ void CentralWidget::sessionWindow2InfoData(SessionsWindow *sessionsWindow, Quick
}
}

int CentralWidget::setting2InfoData(GlobalSetting *settings, QuickConnectWindow::QuickConnectData &data, QString &name,bool skipPassword)
int CentralWidget::setting2InfoData(GlobalSetting *settings, QuickConnectWindow::QuickConnectData &data, QString &name, QString &group, bool skipPassword)
{
name = settings->value("name").toString();
group = settings->value("group", "/").toString();
data.type = (QuickConnectWindow::QuickConnectType)(settings->value("type").toInt());
switch(data.type) {
case QuickConnectWindow::Telnet:
Expand Down Expand Up @@ -4768,9 +4776,10 @@ int CentralWidget::setting2InfoData(GlobalSetting *settings, QuickConnectWindow:
return 0;
}

void CentralWidget::infoData2Setting(GlobalSetting *settings,const QuickConnectWindow::QuickConnectData &data,const QString &name,bool skipPassword) {
void CentralWidget::infoData2Setting(GlobalSetting *settings,const QuickConnectWindow::QuickConnectData &data,const QString &name,const QString &group,bool skipPassword) {
settings->setValue("name",name);
settings->setValue("type",data.type);
settings->setValue("group",group);
switch(data.type) {
case QuickConnectWindow::Telnet:
settings->setValue("hostname",data.TelnetData.hostname);
Expand Down
8 changes: 4 additions & 4 deletions src/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,15 +195,15 @@ class CentralWidget : public QMainWindow
bool checkSessionName(QString &name);
int addSessionToSessionManager(SessionsWindow *sessionsWindow, QString &name);
int addSessionToSessionManager(const QuickConnectWindow::QuickConnectData &data, QString &name, bool checkname = true, int64_t id = -1);
int64_t removeSessionFromSessionManager(QString name);
int64_t removeSessionFromSessionManager(const QString &name);
void connectSessionFromSessionManager(QString name);
void restoreSessionToSessionManager(void);
void saveSettings(void);
void restoreSettings(void);
void connectSessionStateChange(SessionTab *tab, int index, SessionsWindow *sessionsWindow);
void sessionWindow2InfoData(SessionsWindow *sessionsWindow, QuickConnectWindow::QuickConnectData &data, QString &name);
int setting2InfoData(GlobalSetting *settings, QuickConnectWindow::QuickConnectData &data, QString &name, bool skipPassword = false);
void infoData2Setting(GlobalSetting *settings,const QuickConnectWindow::QuickConnectData &data,const QString &name, bool skipPassword = false);
int setting2InfoData(GlobalSetting *settings, QuickConnectWindow::QuickConnectData &data, QString &name, QString &group, bool skipPassword = false);
void infoData2Setting(GlobalSetting *settings,const QuickConnectWindow::QuickConnectData &data,const QString &name,const QString &group, bool skipPassword = false);
void moveToAnotherTab(int src,int dst, int index);
void floatingWindow(MainWidgetGroup *g, int index);
void terminalWidgetContextMenuBase(QMenu *menu,SessionsWindow *term,const QPoint& position);
Expand Down Expand Up @@ -291,7 +291,6 @@ private slots:
QAction *cloneSessionAction;
QAction *logSessionAction;
QAction *rawLogSessionAction;
QAction *hexViewAction;
QAction *exitAction;
QAction *copyAction;
QAction *pasteAction;
Expand Down Expand Up @@ -325,6 +324,7 @@ private slots:
QAction *cmdWindowAction;
QAction *connectBarAction;
QAction *sideWindowAction;
QAction *hexViewAction;
QAction *windwosTransparencyAction;
QAction *verticalScrollBarAction;
QAction *allwaysOnTopAction;
Expand Down
Loading

0 comments on commit 2ff6e7b

Please sign in to comment.