Skip to content

Commit d8d17e9

Browse files
committed
fix: Add temporary message support for non-blocking error notifications
RAR5 errors no longer interrupt extraction, user sees floating message instead. Bug: https://pms.uniontech.com/bug-view-354871.html
1 parent 84d231b commit d8d17e9

File tree

10 files changed

+65
-3
lines changed

10 files changed

+65
-3
lines changed

3rdparty/clirarplugin/clirarplugin.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,13 +284,14 @@ bool CliRarPlugin::handleLine(const QString &line, WorkType workStatus)
284284
}
285285

286286
if (isWrongPasswordMsg(line)) { // 提示密码错误
287+
m_eErrorType = ET_WrongPassword;
288+
287289
// RAR4密码错误直接结束
288290
if (line.startsWith(QLatin1String("Checksum error in the encrypted file"))) {
289-
m_eErrorType = ET_WrongPassword;
290291
m_finishType = PFT_Error;
291292
return false;
292-
} else { // RAR5密码错误反复输入新密码
293-
m_eErrorType = ET_WrongPassword;
293+
} else { // RAR5密码错误:发送错误提示但不中断进程,允许用户重新输入密码
294+
emit error(tr("Wrong password"), tr("The password entered is incorrect. Please try again."));
294295
return true;
295296
}
296297
}

src/source/archivemanager/archivejob.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ class ArchiveJob : public QObject
110110
*/
111111
void signalQuery(Query *query);
112112

113+
/**
114+
* @brief signalTempMessage 发送临时消息(不中断操作)
115+
* @param message 消息内容
116+
*/
117+
void signalTempMessage(const QString &message);
118+
113119
public:
114120
JobType m_eJobType = JT_NoJob; // 操作类型
115121
PluginFinishType m_eFinishedType = PFT_Nomral;

src/source/archivemanager/archivemanager.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ bool ArchiveManager::loadArchive(const QString &strArchiveFullPath, UiTools::Ass
111111
// 连接槽函数
112112
connect(pLoadJob, &LoadJob::signalJobFinshed, this, &ArchiveManager::slotJobFinished);
113113
connect(pLoadJob, &LoadJob::signalQuery, this, &ArchiveManager::signalQuery);
114+
connect(pLoadJob, &LoadJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
114115

115116
m_pArchiveJob = pLoadJob;
116117
pLoadJob->start();
@@ -139,6 +140,7 @@ bool ArchiveManager::addFiles(const QString &strArchiveFullPath, const QList<Fil
139140
connect(pAddJob, &AddJob::signalprogress, this, &ArchiveManager::signalprogress);
140141
connect(pAddJob, &AddJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
141142
connect(pAddJob, &AddJob::signalQuery, this, &ArchiveManager::signalQuery);
143+
connect(pAddJob, &AddJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
142144

143145
m_pArchiveJob = pAddJob;
144146
pAddJob->start();
@@ -171,6 +173,7 @@ bool ArchiveManager::extractFiles(const QString &strArchiveFullPath, const QList
171173
connect(pExtractJob, &ExtractJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
172174
connect(pExtractJob, &ExtractJob::signalFileWriteErrorName, this, &ArchiveManager::signalFileWriteErrorName);
173175
connect(pExtractJob, &ExtractJob::signalQuery, this, &ArchiveManager::signalQuery);
176+
connect(pExtractJob, &ExtractJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
174177

175178
m_pArchiveJob = pExtractJob;
176179
pExtractJob->start();
@@ -186,6 +189,7 @@ bool ArchiveManager::extractFiles(const QString &strArchiveFullPath, const QList
186189
connect(pStepExtractJob, &StepExtractJob::signalprogress, this, &ArchiveManager::signalprogress);
187190
connect(pStepExtractJob, &StepExtractJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
188191
connect(pStepExtractJob, &StepExtractJob::signalQuery, this, &ArchiveManager::signalQuery);
192+
connect(pStepExtractJob, &StepExtractJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
189193

190194
pStepExtractJob->start();
191195
return true;
@@ -217,6 +221,7 @@ bool ArchiveManager::extractFiles2Path(const QString &strArchiveFullPath, const
217221
connect(pExtractJob, &ExtractJob::signalprogress, this, &ArchiveManager::signalprogress);
218222
connect(pExtractJob, &ExtractJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
219223
connect(pExtractJob, &ExtractJob::signalQuery, this, &ArchiveManager::signalQuery);
224+
connect(pExtractJob, &ExtractJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
220225

221226
m_pArchiveJob = pExtractJob;
222227
pExtractJob->start();
@@ -247,6 +252,7 @@ bool ArchiveManager::deleteFiles(const QString &strArchiveFullPath, const QList<
247252
connect(pDeleteJob, &DeleteJob::signalprogress, this, &ArchiveManager::signalprogress);
248253
connect(pDeleteJob, &DeleteJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
249254
connect(pDeleteJob, &DeleteJob::signalQuery, this, &ArchiveManager::signalQuery);
255+
connect(pDeleteJob, &DeleteJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
250256

251257
m_pArchiveJob = pDeleteJob;
252258
pDeleteJob->start();
@@ -277,6 +283,7 @@ bool ArchiveManager::renameFiles(const QString &strArchiveFullPath, const QList<
277283
connect(pRenameJob, &RenameJob::signalprogress, this, &ArchiveManager::signalprogress);
278284
connect(pRenameJob, &RenameJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
279285
connect(pRenameJob, &RenameJob::signalQuery, this, &ArchiveManager::signalQuery);
286+
connect(pRenameJob, &RenameJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
280287

281288
m_pArchiveJob = pRenameJob;
282289
pRenameJob->start();
@@ -299,6 +306,7 @@ bool ArchiveManager::batchExtractFiles(const QStringList &listFiles, const QStri
299306
connect(pBatchExtractJob, &BatchExtractJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
300307
connect(pBatchExtractJob, &BatchExtractJob::signalQuery, this, &ArchiveManager::signalQuery);
301308
connect(pBatchExtractJob, &BatchExtractJob::signalCurArchiveName, this, &ArchiveManager::signalCurArchiveName);
309+
connect(pBatchExtractJob, &BatchExtractJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
302310

303311
m_pArchiveJob = pBatchExtractJob;
304312
pBatchExtractJob->start();
@@ -328,6 +336,7 @@ bool ArchiveManager::openFile(const QString &strArchiveFullPath, const FileEntry
328336
// 连接槽函数
329337
connect(pOpenJob, &OpenJob::signalJobFinshed, this, &ArchiveManager::slotJobFinished);
330338
connect(pOpenJob, &OpenJob::signalQuery, this, &ArchiveManager::signalQuery);
339+
connect(pOpenJob, &OpenJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
331340

332341

333342
m_pArchiveJob = pOpenJob;
@@ -386,6 +395,7 @@ bool ArchiveManager::convertArchive(const QString &strOriginalArchiveFullPath, c
386395
connect(pConvertJob, &ConvertJob::signalprogress, this, &ArchiveManager::signalprogress);
387396
connect(pConvertJob, &ConvertJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
388397
connect(pConvertJob, &ConvertJob::signalQuery, this, &ArchiveManager::signalQuery);
398+
connect(pConvertJob, &ConvertJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);
389399

390400
pConvertJob->start();
391401
return true;

src/source/archivemanager/archivemanager.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,12 @@ class ArchiveManager : public QObject
213213
*/
214214
void signalCurArchiveName(const QString &strArchiveName);
215215

216+
/**
217+
* @brief signalTempMessage 发送临时消息(不中断操作)
218+
* @param message 消息内容
219+
*/
220+
void signalTempMessage(const QString &message);
221+
216222
private:
217223
explicit ArchiveManager(QObject *parent = nullptr);
218224
~ArchiveManager() override;

src/source/archivemanager/batchjob.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,15 @@ bool BatchExtractJob::addExtractItem(const QFileInfo &fileInfo)
186186
connect(pExtractJob, &ExtractJob::signalCurFileName, this, &BatchExtractJob::slotHandleSingleJobCurFileName);
187187
connect(pExtractJob, &ExtractJob::signalQuery, this, &BatchExtractJob::signalQuery);
188188
connect(pExtractJob, &ExtractJob::signalJobFinshed, this, &BatchExtractJob::slotHandleSingleJobFinished);
189+
connect(pExtractJob, &ExtractJob::signalTempMessage, this, &BatchExtractJob::signalTempMessage);
189190
addSubjob(pExtractJob);
190191
} else {
191192
StepExtractJob *pStepExtractJob = new StepExtractJob(fileInfo.absoluteFilePath(), stOptions);
192193
connect(pStepExtractJob, &StepExtractJob::signalprogress, this, &BatchExtractJob::slotHandleSingleJobProgress);
193194
connect(pStepExtractJob, &StepExtractJob::signalCurFileName, this, &BatchExtractJob::slotHandleSingleJobCurFileName);
194195
connect(pStepExtractJob, &StepExtractJob::signalQuery, this, &BatchExtractJob::signalQuery);
195196
connect(pStepExtractJob, &StepExtractJob::signalJobFinshed, this, &BatchExtractJob::slotHandleSingleJobFinished);
197+
connect(pStepExtractJob, &StepExtractJob::signalTempMessage, this, &BatchExtractJob::signalTempMessage);
196198
addSubjob(pStepExtractJob);
197199
}
198200
return true;

src/source/archivemanager/batchjob.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ class BatchExtractJob : public BatchJob
114114
*/
115115
void signalCurArchiveName(const QString &strArchiveName);
116116

117+
/**
118+
* @brief signalTempMessage 发送临时消息(不中断操作)
119+
* @param message 消息内容
120+
*/
121+
void signalTempMessage(const QString &message);
122+
117123
private Q_SLOTS:
118124
/**
119125
* @brief slotHandleSingleJobProgress 处理单个压缩包解压进度

src/source/archivemanager/singlejob.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ void SingleJob::initConnections()
116116
connect(m_pInterface, &ReadOnlyArchiveInterface::signalCurFileName, this, &SingleJob::signalCurFileName, Qt::ConnectionType::UniqueConnection);
117117
connect(m_pInterface, &ReadOnlyArchiveInterface::signalFileWriteErrorName, this, &SingleJob::signalFileWriteErrorName, Qt::ConnectionType::UniqueConnection);
118118
connect(m_pInterface, &ReadOnlyArchiveInterface::signalQuery, this, &SingleJob::signalQuery, Qt::ConnectionType::AutoConnection);
119+
connect(m_pInterface, &ReadOnlyArchiveInterface::error, this, &SingleJob::slotError, Qt::AutoConnection);
119120
}
120121

121122
void SingleJob::slotFinished(PluginFinishType eType)
@@ -129,6 +130,13 @@ void SingleJob::slotFinished(PluginFinishType eType)
129130
emit signalJobFinshed();
130131
}
131132

133+
void SingleJob::slotError(const QString &message, const QString &details)
134+
{
135+
Q_UNUSED(details);
136+
// 传递临时消息信号,用于显示但不中断操作的非致命错误提示
137+
emit signalTempMessage(message);
138+
}
139+
132140
// 加载操作
133141
LoadJob::LoadJob(ReadOnlyArchiveInterface *pInterface, QObject *parent)
134142
: SingleJob(pInterface, parent)
@@ -361,6 +369,7 @@ OpenJob::OpenJob(const FileEntry &stEntry, const QString &strTempExtractPath, co
361369
m_eJobType = JT_Open;
362370
connect(m_pInterface, &ReadOnlyArchiveInterface::signalFinished, this, &OpenJob::slotFinished, Qt::ConnectionType::UniqueConnection);
363371
connect(m_pInterface, &ReadOnlyArchiveInterface::signalQuery, this, &SingleJob::signalQuery, Qt::ConnectionType::AutoConnection);
372+
connect(m_pInterface, &ReadOnlyArchiveInterface::error, this, &SingleJob::slotError, Qt::AutoConnection);
364373
}
365374

366375
OpenJob::~OpenJob()

src/source/archivemanager/singlejob.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,13 @@ class SingleJob : public ArchiveJob
7070
*/
7171
bool status() override;
7272

73+
/**
74+
* @brief slotError 处理错误消息(不中断操作)
75+
* @param message 错误消息
76+
* @param details 详细信息
77+
*/
78+
void slotError(const QString &message, const QString &details);
79+
7380
SingleJobThread *getdptr();
7481
protected:
7582
/**

src/source/mainwindow.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ void MainWindow::initConnections()
278278
connect(ArchiveManager::get_instance(), &ArchiveManager::signalFileWriteErrorName, this, &MainWindow::slotReceiveFileWriteErrorName);
279279
connect(ArchiveManager::get_instance(), &ArchiveManager::signalCurArchiveName, this, &MainWindow::slotReceiveCurArchiveName);
280280
connect(ArchiveManager::get_instance(), &ArchiveManager::signalQuery, this, &MainWindow::slotQuery);
281+
connect(ArchiveManager::get_instance(), &ArchiveManager::signalTempMessage, this, &MainWindow::slotReceiveTempMessage);
281282

282283
connect(m_pOpenFileWatcher, &OpenFileWatcher::fileChanged, this, &MainWindow::slotOpenFileChanged);
283284
//定制需求不显示ctrl+shift+?快捷键菜单
@@ -1262,6 +1263,14 @@ void MainWindow::slotReceiveFileWriteErrorName(const QString &strName)
12621263
m_fileWriteErrorName = strName;
12631264
}
12641265

1266+
void MainWindow::slotReceiveTempMessage(const QString &strMessage)
1267+
{
1268+
qInfo() << "Temp message:" << strMessage;
1269+
QIcon icon = UiTools::renderSVG(":assets/icons/deepin/builtin/icons/compress_fail_128px.svg", QSize(30, 30));
1270+
// 显示 2 秒临时消息
1271+
sendMessage(new CustomFloatingMessage(icon, strMessage, 2000, this));
1272+
}
1273+
12651274
void MainWindow::slotQuery(Query *query)
12661275
{
12671276
qInfo() << " query->execute()";

src/source/mainwindow.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,12 @@ private Q_SLOTS:
415415
*/
416416
void slotReceiveFileWriteErrorName(const QString &strName);
417417

418+
/**
419+
* @brief slotReceiveTempMessage 接收临时消息
420+
* @param strMessage 消息内容
421+
*/
422+
void slotReceiveTempMessage(const QString &strMessage);
423+
418424
/**
419425
* @brief slotQuery 发送询问信号
420426
* @param query 询问类型

0 commit comments

Comments
 (0)