From d97a4a0a21ac0f289c6a848de6f34e4dba34f6b8 Mon Sep 17 00:00:00 2001 From: ZhangTingan Date: Sat, 9 May 2026 09:20:05 +0800 Subject: [PATCH 1/3] chore: update gitignore Log: as title --- .gitignore | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ef57ae5c..940f02e4 100644 --- a/.gitignore +++ b/.gitignore @@ -109,4 +109,19 @@ debian/.debhelper debian/deepin-compressor debian/deepin-compressor.debhelper.log debian/deepin-compressor.substvars -debian/files \ No newline at end of file +debian/files + +# vscode +.vscode/ + +# cursor +.specstory/ +.cursor/ +.cursorindexingignore + + # ai +CLAUDE.md +AGENTS.md +.trellis +.claude +.agents From 469ec92f0599cc8552683049f4fb87754dcfc32b Mon Sep 17 00:00:00 2001 From: ZhangTingan Date: Wed, 13 May 2026 10:14:44 +0800 Subject: [PATCH 2/3] fix: incorrect passing and display of third-party library signals. remove connect of libarchive Log: fix bug Bug: https://pms.uniontech.com/bug-view-360229.html --- src/source/archivemanager/singlejob.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/source/archivemanager/singlejob.cpp b/src/source/archivemanager/singlejob.cpp index 237d8963..93071c77 100644 --- a/src/source/archivemanager/singlejob.cpp +++ b/src/source/archivemanager/singlejob.cpp @@ -116,7 +116,6 @@ 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); } void SingleJob::slotFinished(PluginFinishType eType) From 41deaa270559fb1a9b12c91512743f2e5b05e807 Mon Sep 17 00:00:00 2001 From: ZhangTingan Date: Tue, 19 May 2026 13:23:38 +0800 Subject: [PATCH 3/3] fix: handle password prompt and missing list in long filename extraction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add password detection in handleLongNameExtract() for content-encrypted archives to prevent UI freeze - Remove FILE_MAX_SIZE check so right-click extract always lists first, ensuring long filename prescan has archive data available Log: fix bug Bug:https://pms.uniontech.com//bug-view-361845.html --- .../archiveinterface/cliinterface.cpp | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/3rdparty/interface/archiveinterface/cliinterface.cpp b/3rdparty/interface/archiveinterface/cliinterface.cpp index b6184a05..4ece3809 100644 --- a/3rdparty/interface/archiveinterface/cliinterface.cpp +++ b/3rdparty/interface/archiveinterface/cliinterface.cpp @@ -111,7 +111,7 @@ PluginFinishType CliInterface::extractFiles(const QList &files, const m_extractOptions = options; if (!bLnfs) { - if (arcData.listRootEntry.isEmpty() && options.qSize < FILE_MAX_SIZE) { + if (arcData.listRootEntry.isEmpty()) { emit signalprogress(1); setProperty("list", "tmpList"); list(); @@ -1323,7 +1323,51 @@ bool CliInterface::handleLongNameExtract(const QList &files) pProcess->setProgram(m_cliProps->property("extractProgram").toString(), m_cliProps->extractArgs(absoluteDestinationPath, fileList, false, password)); pProcess->start(); - pProcess->waitForFinished(-1); + + // 检测加密文件解压时的密码提示,避免进程卡死 + if (password.isEmpty()) { + bool bPasswordEntered = false; + while (!pProcess->waitForFinished(200)) { + if (pProcess->bytesAvailable() > 0) { + QByteArray output = pProcess->readAllStandardOutput(); + QStringList lines = QString::fromLocal8Bit(output).split('\n'); + for (const QString &line : lines) { + if (isPasswordPrompt(line)) { + pProcess->kill(); + pProcess->waitForFinished(3000); + + PasswordNeededQuery query(m_strArchiveName); + emit signalQuery(&query); + query.waitForResponse(); + + if (query.responseCancelled()) { + m_eErrorType = ET_NeedPassword; + return false; + } + + password = query.password(); + DataManager::get_instance().archiveData().strPassword = password; + + // 带密码参数重新启动解压进程 + pProcess->setPtyChannels(KPtyProcess::StdinChannel); + pProcess->setOutputChannelMode(KProcess::MergedChannels); + pProcess->setNextOpenMode(QIODevice::ReadWrite | QIODevice::Unbuffered | QIODevice::Text); + pProcess->setProgram(m_cliProps->property("extractProgram").toString(), + m_cliProps->extractArgs(absoluteDestinationPath, fileList, false, password)); + pProcess->start(); + pProcess->waitForFinished(-1); + + bPasswordEntered = true; + break; + } + } + if (bPasswordEntered) + break; + } + } + } else { + pProcess->waitForFinished(-1); + } } } pProcess->deleteLater();