Skip to content
Open
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
7 changes: 4 additions & 3 deletions 3rdparty/clirarplugin/clirarplugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,13 +295,14 @@ bool CliRarPlugin::handleLine(const QString &line, WorkType workStatus)
}

if (isWrongPasswordMsg(line)) { // 提示密码错误
m_eErrorType = ET_WrongPassword;

// RAR4密码错误直接结束
if (line.startsWith(QLatin1String("Checksum error in the encrypted file"))) {
m_eErrorType = ET_WrongPassword;
m_finishType = PFT_Error;
return false;
} else { // RAR5密码错误反复输入新密码
m_eErrorType = ET_WrongPassword;
} else { // RAR5密码错误:发送错误提示但不中断进程,允许用户重新输入密码
emit error(tr("Wrong password"), tr("The password entered is incorrect. Please try again."));
return true;
}
}
Expand Down
9 changes: 7 additions & 2 deletions 3rdparty/interface/archiveinterface/cliinterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -932,8 +932,13 @@ void CliInterface::handleProgress(const QString &line)
qint64 percentage = compressedSize * 1024 * 1024 * 100 / m_filesSize;

emit signalprogress(percentage);
// 无法获取正在压缩的某个文件名
// emit signalCurFileName();
// tar.7z 无法获取正在压缩的单个文件名,但可以提示正在打包成 tar 文件
// 发送 tar 文件名提示(去掉 .7z 后缀,显示正在打包的 tar 文件名)
QString tarFileName = QFileInfo(m_strArchiveName).fileName();
if (tarFileName.endsWith(".7z", Qt::CaseInsensitive)) {
tarFileName = tarFileName.left(tarFileName.length() - 3);
}
emit signalCurFileName(tarFileName);
}
}
}
Expand Down
6 changes: 6 additions & 0 deletions src/source/archivemanager/archivejob.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,12 @@ class ArchiveJob : public QObject
*/
void signalQuery(Query *query);

/**
* @brief signalTempMessage 发送临时消息(不中断操作)
* @param message 消息内容
*/
void signalTempMessage(const QString &message);

public:
JobType m_eJobType = JT_NoJob; // 操作类型
PluginFinishType m_eFinishedType = PFT_Nomral;
Expand Down
10 changes: 10 additions & 0 deletions src/source/archivemanager/archivemanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ bool ArchiveManager::loadArchive(const QString &strArchiveFullPath, UiTools::Ass
// 连接槽函数
connect(pLoadJob, &LoadJob::signalJobFinshed, this, &ArchiveManager::slotJobFinished);
connect(pLoadJob, &LoadJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pLoadJob, &LoadJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

m_pArchiveJob = pLoadJob;
pLoadJob->start();
Expand Down Expand Up @@ -154,6 +155,7 @@ bool ArchiveManager::addFiles(const QString &strArchiveFullPath, const QList<Fil
connect(pAddJob, &AddJob::signalprogress, this, &ArchiveManager::signalprogress);
connect(pAddJob, &AddJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
connect(pAddJob, &AddJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pAddJob, &AddJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

m_pArchiveJob = pAddJob;
pAddJob->start();
Expand Down Expand Up @@ -185,6 +187,7 @@ bool ArchiveManager::extractFiles(const QString &strArchiveFullPath, const QList
connect(pExtractJob, &ExtractJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
connect(pExtractJob, &ExtractJob::signalFileWriteErrorName, this, &ArchiveManager::signalFileWriteErrorName);
connect(pExtractJob, &ExtractJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pExtractJob, &ExtractJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

m_pArchiveJob = pExtractJob;
pExtractJob->start();
Expand All @@ -201,6 +204,7 @@ bool ArchiveManager::extractFiles(const QString &strArchiveFullPath, const QList
connect(pStepExtractJob, &StepExtractJob::signalprogress, this, &ArchiveManager::signalprogress);
connect(pStepExtractJob, &StepExtractJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
connect(pStepExtractJob, &StepExtractJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pStepExtractJob, &StepExtractJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

pStepExtractJob->start();
qDebug() << "StepExtractJob started successfully";
Expand Down Expand Up @@ -231,6 +235,7 @@ bool ArchiveManager::extractFiles2Path(const QString &strArchiveFullPath, const
connect(pExtractJob, &ExtractJob::signalprogress, this, &ArchiveManager::signalprogress);
connect(pExtractJob, &ExtractJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
connect(pExtractJob, &ExtractJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pExtractJob, &ExtractJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

m_pArchiveJob = pExtractJob;
pExtractJob->start();
Expand Down Expand Up @@ -260,6 +265,7 @@ bool ArchiveManager::deleteFiles(const QString &strArchiveFullPath, const QList<
connect(pDeleteJob, &DeleteJob::signalprogress, this, &ArchiveManager::signalprogress);
connect(pDeleteJob, &DeleteJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
connect(pDeleteJob, &DeleteJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pDeleteJob, &DeleteJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

m_pArchiveJob = pDeleteJob;
pDeleteJob->start();
Expand Down Expand Up @@ -289,6 +295,7 @@ bool ArchiveManager::renameFiles(const QString &strArchiveFullPath, const QList<
connect(pRenameJob, &RenameJob::signalprogress, this, &ArchiveManager::signalprogress);
connect(pRenameJob, &RenameJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
connect(pRenameJob, &RenameJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pRenameJob, &RenameJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

m_pArchiveJob = pRenameJob;
pRenameJob->start();
Expand All @@ -315,6 +322,7 @@ bool ArchiveManager::batchExtractFiles(const QStringList &listFiles, const QStri
connect(pBatchExtractJob, &BatchExtractJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
connect(pBatchExtractJob, &BatchExtractJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pBatchExtractJob, &BatchExtractJob::signalCurArchiveName, this, &ArchiveManager::signalCurArchiveName);
connect(pBatchExtractJob, &BatchExtractJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

m_pArchiveJob = pBatchExtractJob;
pBatchExtractJob->start();
Expand Down Expand Up @@ -343,6 +351,7 @@ bool ArchiveManager::openFile(const QString &strArchiveFullPath, const FileEntry
// 连接槽函数
connect(pOpenJob, &OpenJob::signalJobFinshed, this, &ArchiveManager::slotJobFinished);
connect(pOpenJob, &OpenJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pOpenJob, &OpenJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);


m_pArchiveJob = pOpenJob;
Expand Down Expand Up @@ -412,6 +421,7 @@ bool ArchiveManager::convertArchive(const QString &strOriginalArchiveFullPath, c
connect(pConvertJob, &ConvertJob::signalprogress, this, &ArchiveManager::signalprogress);
connect(pConvertJob, &ConvertJob::signalCurFileName, this, &ArchiveManager::signalCurFileName);
connect(pConvertJob, &ConvertJob::signalQuery, this, &ArchiveManager::signalQuery);
connect(pConvertJob, &ConvertJob::signalTempMessage, this, &ArchiveManager::signalTempMessage);

pConvertJob->start();
qDebug() << "ConvertJob started successfully";
Expand Down
6 changes: 6 additions & 0 deletions src/source/archivemanager/archivemanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,12 @@ class ArchiveManager : public QObject
*/
void signalCurArchiveName(const QString &strArchiveName);

/**
* @brief signalTempMessage 发送临时消息(不中断操作)
* @param message 消息内容
*/
void signalTempMessage(const QString &message);

private:
explicit ArchiveManager(QObject *parent = nullptr);
~ArchiveManager() override;
Expand Down
2 changes: 2 additions & 0 deletions src/source/archivemanager/batchjob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ bool BatchExtractJob::addExtractItem(const QFileInfo &fileInfo)
connect(pExtractJob, &ExtractJob::signalCurFileName, this, &BatchExtractJob::slotHandleSingleJobCurFileName);
connect(pExtractJob, &ExtractJob::signalQuery, this, &BatchExtractJob::signalQuery);
connect(pExtractJob, &ExtractJob::signalJobFinshed, this, &BatchExtractJob::slotHandleSingleJobFinished);
connect(pExtractJob, &ExtractJob::signalTempMessage, this, &BatchExtractJob::signalTempMessage);
addSubjob(pExtractJob);
} else {
qDebug() << "Creating StepExtractJob for tar.7z archive";
Expand All @@ -231,6 +232,7 @@ bool BatchExtractJob::addExtractItem(const QFileInfo &fileInfo)
connect(pStepExtractJob, &StepExtractJob::signalCurFileName, this, &BatchExtractJob::slotHandleSingleJobCurFileName);
connect(pStepExtractJob, &StepExtractJob::signalQuery, this, &BatchExtractJob::signalQuery);
connect(pStepExtractJob, &StepExtractJob::signalJobFinshed, this, &BatchExtractJob::slotHandleSingleJobFinished);
connect(pStepExtractJob, &StepExtractJob::signalTempMessage, this, &BatchExtractJob::signalTempMessage);
addSubjob(pStepExtractJob);
}
qDebug() << "Extract item added successfully";
Expand Down
6 changes: 6 additions & 0 deletions src/source/archivemanager/batchjob.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,13 @@
*/
void signalCurArchiveName(const QString &strArchiveName);

/**
* @brief signalTempMessage 发送临时消息(不中断操作)
* @param message 消息内容
*/
void signalTempMessage(const QString &message);

private Q_SLOTS:

Check warning on line 123 in src/source/archivemanager/batchjob.h

View workflow job for this annotation

GitHub Actions / cppcheck

There is an unknown macro here somewhere. Configuration is required. If Q_SLOTS is a macro then please configure it.
/**
* @brief slotHandleSingleJobProgress 处理单个压缩包解压进度
* @param dPercentage
Expand Down
9 changes: 9 additions & 0 deletions src/source/archivemanager/singlejob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ void SingleJob::initConnections()
connect(m_pInterface, &ReadOnlyArchiveInterface::signalCurFileName, this, &SingleJob::signalCurFileName, Qt::ConnectionType::UniqueConnection);
connect(m_pInterface, &ReadOnlyArchiveInterface::signalFileWriteErrorName, this, &SingleJob::signalFileWriteErrorName, Qt::ConnectionType::UniqueConnection);
connect(m_pInterface, &ReadOnlyArchiveInterface::signalQuery, this, &SingleJob::signalQuery, Qt::ConnectionType::AutoConnection);
connect(m_pInterface, &ReadOnlyArchiveInterface::error, this, &SingleJob::slotError, Qt::AutoConnection);
qDebug() << "Signal connections initialized";
}

Expand All @@ -159,6 +160,13 @@ void SingleJob::slotFinished(PluginFinishType eType)
emit signalJobFinshed();
}

void SingleJob::slotError(const QString &message, const QString &details)
{
Q_UNUSED(details);
// 传递临时消息信号,用于显示但不中断操作的非致命错误提示
emit signalTempMessage(message);
}

// 加载操作
LoadJob::LoadJob(ReadOnlyArchiveInterface *pInterface, QObject *parent)
: SingleJob(pInterface, parent)
Expand Down Expand Up @@ -428,6 +436,7 @@ OpenJob::OpenJob(const FileEntry &stEntry, const QString &strTempExtractPath, co
m_eJobType = JT_Open;
connect(m_pInterface, &ReadOnlyArchiveInterface::signalFinished, this, &OpenJob::slotFinished, Qt::ConnectionType::UniqueConnection);
connect(m_pInterface, &ReadOnlyArchiveInterface::signalQuery, this, &SingleJob::signalQuery, Qt::ConnectionType::AutoConnection);
connect(m_pInterface, &ReadOnlyArchiveInterface::error, this, &SingleJob::slotError, Qt::AutoConnection);
}

OpenJob::~OpenJob()
Expand Down
7 changes: 7 additions & 0 deletions src/source/archivemanager/singlejob.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,13 @@ class SingleJob : public ArchiveJob
*/
bool status() override;

/**
* @brief slotError 处理错误消息(不中断操作)
* @param message 错误消息
* @param details 详细信息
*/
void slotError(const QString &message, const QString &details);

SingleJobThread *getdptr();
protected:
/**
Expand Down
20 changes: 18 additions & 2 deletions src/source/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ void MainWindow::initConnections()
connect(ArchiveManager::get_instance(), &ArchiveManager::signalFileWriteErrorName, this, &MainWindow::slotReceiveFileWriteErrorName);
connect(ArchiveManager::get_instance(), &ArchiveManager::signalCurArchiveName, this, &MainWindow::slotReceiveCurArchiveName);
connect(ArchiveManager::get_instance(), &ArchiveManager::signalQuery, this, &MainWindow::slotQuery);
connect(ArchiveManager::get_instance(), &ArchiveManager::signalTempMessage, this, &MainWindow::slotReceiveTempMessage);

qDebug() << "Connecting file watcher signals";
connect(m_pOpenFileWatcher, &OpenFileWatcher::fileChanged, this, &MainWindow::slotOpenFileChanged);
Expand Down Expand Up @@ -1447,6 +1448,13 @@ void MainWindow::slotReceiveFileWriteErrorName(const QString &strName)
m_fileWriteErrorName = strName;
}

void MainWindow::slotReceiveTempMessage(const QString &strMessage)
{
qInfo() << "Temp message:" << strMessage;
QIcon icon = UiTools::renderSVG(":assets/icons/deepin/builtin/icons/compress_fail_128px.svg", QSize(30, 30));
sendMessage(new CustomFloatingMessage(icon, strMessage, 2000, this));
}

void MainWindow::slotQuery(Query *query)
{
qInfo() << " query->execute()";
Expand Down Expand Up @@ -2810,8 +2818,16 @@ bool MainWindow::handleArguments_Open(const QStringList &listParam)
qInfo() << "打开文件";
m_eStartupType = StartupType::ST_Normal;
// 加载单个压缩包数据
loadArchive(listParam[0]);

static bool firstLoad = true;
if (UiTools::isWayland() && firstLoad) {
firstLoad = false;
auto path = listParam[0];
QTimer::singleShot(200, [this, path]() {
loadArchive(path);
});
} else {
loadArchive(listParam[0]);
}
return true;
}

Expand Down
6 changes: 6 additions & 0 deletions src/source/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,12 @@ private Q_SLOTS:
*/
void slotReceiveFileWriteErrorName(const QString &strName);

/**
* @brief slotReceiveTempMessage 接收临时消息
* @param strMessage 消息内容
*/
void slotReceiveTempMessage(const QString &strMessage);

/**
* @brief slotQuery 发送询问信号
* @param query 询问类型
Expand Down
Loading
Loading