Skip to content

Commit c2a5583

Browse files
feat: Enhance clipzipplugin support for ARM + Qt6
- Updated CMake configuration to conditionally enable pzip and clipzipplugin for ARM architecture with Qt6. - Improved signal-slot connections in clipzipplugin for compatibility with different Qt versions. - Added compression level options and refined process completion handling. Log: Enhance ARM + Qt6 support for clipzipplugin
1 parent ed75998 commit c2a5583

5 files changed

Lines changed: 60 additions & 15 deletions

File tree

3rdparty/CMakeLists.txt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@ add_subdirectory(libzipplugin)
1616

1717
add_subdirectory(libminizipplugin)
1818

19-
# pzip 高性能并行压缩工具
20-
add_subdirectory(pzip)
21-
22-
# clipzipplugin 调用 pzip 的插件
23-
add_subdirectory(clipzipplugin)
19+
# pzip 高性能并行压缩工具(仅 ARM + Qt6 环境启用)
20+
# 检查是否为 ARM 架构且 Qt6
21+
if((CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm") AND (QT_VERSION_MAJOR EQUAL 6))
22+
message(STATUS "ARM + Qt6 环境,启用 pzip 高性能压缩插件")
23+
add_subdirectory(pzip)
24+
add_subdirectory(clipzipplugin)
25+
else()
26+
message(STATUS "非 ARM + Qt6 环境,使用默认 libzip 插件")
27+
endif()
2428

2529
##add_subdirectory(cliunarchiverplugin) #不可用
2630

3rdparty/clipzipplugin/clipzipplugin.cpp

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,12 @@ PluginFinishType CliPzipPlugin::extractFiles(const QList<FileEntry> &files, cons
149149
readStdout();
150150
});
151151

152-
connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)),
153-
this, SLOT(processFinished(int, QProcess::ExitStatus)));
152+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
153+
connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
154+
this, &CliPzipPlugin::processFinished);
155+
#else
156+
connect(m_process, &QProcess::finished, this, &CliPzipPlugin::processFinished);
157+
#endif
154158

155159
m_process->start();
156160

@@ -186,9 +190,14 @@ PluginFinishType CliPzipPlugin::addFiles(const QList<FileEntry> &files, const Co
186190
// 静默模式
187191
arguments << "-q";
188192

193+
// 压缩级别(如果指定)
194+
if (options.iCompressionLevel >= 1 && options.iCompressionLevel <= 9) {
195+
arguments << "-l" << QString::number(options.iCompressionLevel);
196+
}
197+
189198
// 线程数(如果指定)
190199
if (options.iCPUTheadNum > 0) {
191-
arguments << "-j" << QString::number(options.iCPUTheadNum);
200+
arguments << "-c" << QString::number(options.iCPUTheadNum);
192201
}
193202

194203
// 输出文件
@@ -217,8 +226,12 @@ PluginFinishType CliPzipPlugin::addFiles(const QList<FileEntry> &files, const Co
217226
qDebug() << "pzip stderr:" << QString::fromLocal8Bit(errorOutput);
218227
});
219228

220-
connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)),
221-
this, SLOT(processFinished(int, QProcess::ExitStatus)));
229+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
230+
connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
231+
this, &CliPzipPlugin::processFinished);
232+
#else
233+
connect(m_process, &QProcess::finished, this, &CliPzipPlugin::processFinished);
234+
#endif
222235

223236
m_process->start();
224237

@@ -435,16 +448,23 @@ void CliPzipPlugin::readStdout(bool handleAll)
435448
}
436449
}
437450

451+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
438452
void CliPzipPlugin::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
439453
{
440454
qInfo() << "pzip process finished, exitcode:" << exitCode << "exitstatus:" << exitStatus;
455+
#else
456+
void CliPzipPlugin::processFinished(int exitCode)
457+
{
458+
QProcess::ExitStatus exitStatus = m_process ? m_process->exitStatus() : QProcess::NormalExit;
459+
qInfo() << "pzip process finished, exitcode:" << exitCode << "exitstatus:" << exitStatus;
460+
#endif
441461

442462
deleteProcess();
443463
m_timer->stop();
444464

445465
PluginFinishType eFinishType;
446466

447-
if (0 == exitCode) {
467+
if (0 == exitCode && exitStatus == QProcess::NormalExit) {
448468
eFinishType = PFT_Nomral;
449469
} else {
450470
eFinishType = PFT_Error;

3rdparty/clipzipplugin/clipzipplugin.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include <QProcess>
1414
#include <QTimer>
15+
#include <QtGlobal> // for QT_VERSION_CHECK
1516

1617
class CliPzipPluginFactory : public KPluginFactory
1718
{
@@ -89,7 +90,11 @@ class CliPzipPlugin : public ReadWriteArchiveInterface
8990

9091
private slots:
9192
void readStdout(bool handleAll = false);
93+
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
9294
void processFinished(int exitCode, QProcess::ExitStatus exitStatus);
95+
#else
96+
void processFinished(int exitCode);
97+
#endif
9398

9499
private:
95100
KPtyProcess *m_process = nullptr;

3rdparty/clipzipplugin/kerfuffle_clipzip.json

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
{
22
"KPlugin": {
3+
"Description": "High-performance parallel ZIP compression using pzip",
4+
"Description[zh_CN]": "使用 pzip 进行高性能并行 ZIP 压缩",
35
"Id": "kerfuffle_clipzip",
46
"MimeTypes": [
57
"application/zip"
@@ -12,6 +14,17 @@
1214
"Version": "1.0"
1315
},
1416
"X-KDE-Priority": 200,
15-
"X-KDE-Kerfuffle-ReadWrite": true
17+
"X-KDE-Kerfuffle-ReadWrite": true,
18+
"application/zip": {
19+
"CompressionLevelDefault": 6,
20+
"CompressionLevelMax": 9,
21+
"CompressionLevelMin": 1,
22+
"CompressionMethodDefault": "Deflate",
23+
"CompressionMethods": {
24+
"Deflate": "Deflate",
25+
"Store": "Store"
26+
},
27+
"SupportsTesting": false,
28+
"SupportsWriteComment": false
29+
}
1630
}
17-

CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ install(TARGETS compressor-interface DESTINATION ${COMPRESSOR_PLUGIN_PATH})
129129
install(TARGETS bz2plugin DESTINATION ${COMPRESSOR_PLUGIN_PATH})
130130
install(TARGETS gzplugin DESTINATION ${COMPRESSOR_PLUGIN_PATH})
131131
install(TARGETS xzplugin DESTINATION ${COMPRESSOR_PLUGIN_PATH})
132-
# pzip 高性能压缩插件
133-
install(TARGETS clipzipplugin DESTINATION ${COMPRESSOR_PLUGIN_PATH})
132+
133+
# pzip 高性能压缩插件(仅 ARM + Qt6 环境)
134+
if((CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm") AND (QT_VERSION_MAJOR EQUAL 6))
135+
install(TARGETS clipzipplugin DESTINATION ${COMPRESSOR_PLUGIN_PATH})
136+
endif()
134137

0 commit comments

Comments
 (0)