Skip to content

Commit 9419d09

Browse files
feat: Enhance ZIP plugin handling in UiTools
- Added logic to skip the pzip plugin when reading ZIP files, as it is write-only. - Introduced debug messages to indicate when the pzip plugin is being removed from the plugin selection process. Log: Improve handling of pzip plugin for ZIP file reading
1 parent c2a5583 commit 9419d09

3 files changed

Lines changed: 17 additions & 4 deletions

File tree

3rdparty/clipzipplugin/clipzipplugin.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,11 @@ PluginFinishType CliPzipPlugin::addFiles(const QList<FileEntry> &files, const Co
195195
arguments << "-l" << QString::number(options.iCompressionLevel);
196196
}
197197

198-
// 线程数(如果指定)
199-
if (options.iCPUTheadNum > 0) {
198+
// 线程数:只有大于1时才指定,否则让 pzip 自动使用全部 CPU 核心
199+
if (options.iCPUTheadNum > 1) {
200200
arguments << "-c" << QString::number(options.iCPUTheadNum);
201201
}
202+
// 注意:iCPUTheadNum <= 1 时不传 -c 参数,pzip 默认使用全部核心
202203

203204
// 输出文件
204205
arguments << m_strArchiveName;
@@ -213,7 +214,7 @@ PluginFinishType CliPzipPlugin::addFiles(const QList<FileEntry> &files, const Co
213214
arguments << filePath;
214215
}
215216

216-
qDebug() << "Running pzip:" << pzipPath << arguments;
217+
qInfo() << "Running pzip:" << pzipPath << arguments;
217218

218219
m_process->setProgram(pzipPath, arguments);
219220

3rdparty/clipzipplugin/kerfuffle_clipzip.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"X-KDE-Priority": 200,
1717
"X-KDE-Kerfuffle-ReadWrite": true,
1818
"application/zip": {
19-
"CompressionLevelDefault": 6,
19+
"CompressionLevelDefault": 1,
2020
"CompressionLevelMax": 9,
2121
"CompressionLevelMin": 1,
2222
"CompressionMethodDefault": "Deflate",

src/source/common/uitools.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,12 @@ ReadOnlyArchiveInterface *UiTools::createInterface(const QString &fileName, bool
285285
}
286286
}
287287

288+
// pzip 插件只用于压缩,不用于读取/解压
289+
bool removePzipFlag = (!bWrite) && (mimeType.name() == QString("application/zip"));
290+
if (removePzipFlag) {
291+
qDebug() << "Setting flag to remove pzip plugin for reading zip (pzip is write-only)";
292+
}
293+
288294
// 创建插件
289295
ReadOnlyArchiveInterface *pIface = nullptr;
290296
qDebug() << "Iterating through" << offers.size() << "plugins";
@@ -295,6 +301,12 @@ ReadOnlyArchiveInterface *UiTools::createInterface(const QString &fileName, bool
295301
continue;
296302
}
297303

304+
// 读取 ZIP 时跳过 pzip 插件(pzip 只用于压缩)
305+
if (removePzipFlag && plugin->metaData().name().contains("pzip", Qt::CaseInsensitive)) {
306+
qDebug() << "Skipping pzip plugin for reading (pzip is write-only)";
307+
continue;
308+
}
309+
298310
switch (eType) {
299311
// 自动识别
300312
case APT_Auto:

0 commit comments

Comments
 (0)