Replace private API QZipWriter with KArchive
authorClaudio Cambra <claudio.cambra@gmail.com>
Wed, 20 Jul 2022 15:23:43 +0000 (17:23 +0200)
committerClaudio Cambra <claudio.cambra@gmail.com>
Wed, 7 Sep 2022 17:10:03 +0000 (19:10 +0200)
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
src/csync/std/c_private.h
src/gui/CMakeLists.txt
src/gui/generalsettings.cpp

index aaa41417fa16698e185500b7befd17f28c730e65..8307859ac3ab877f31ccdd1a0d9c659e055198f2 100644 (file)
@@ -67,7 +67,7 @@
 #define getuid() 0
 #define geteuid() 0
 #elif defined(_WIN32)
-#define mode_t int
+typedef int mode_t;
 #else
 #include <fcntl.h>
 #endif
index 5a11578130490919b21ab59222954920401ad5ef..15313219e7f64646455426fde1c78b45963987eb 100644 (file)
@@ -1,5 +1,6 @@
 project(gui)
 find_package(Qt5 REQUIRED COMPONENTS Widgets Svg Qml Quick QuickControls2 Xml Network)
+find_package(KF5Archive REQUIRED)
 
 if(QUICK_COMPILER)
         find_package(Qt5QuickCompiler)
@@ -566,6 +567,7 @@ target_link_libraries(nextcloudCore
   Qt5::Qml
   Qt5::Quick
   Qt5::QuickControls2
+  KF5::Archive
   )
 
 add_subdirectory(socketapi)
index 4a7ff307f3b7c66ecc933fbbb137c45f64be1c65..8834c3567c3f8c1d172bc6f5f14ead86fd6472ca 100644 (file)
@@ -45,7 +45,7 @@
 #include <QScopedValueRollback>
 #include <QMessageBox>
 
-#include <private/qzipwriter_p.h>
+#include <KZip>
 
 #define QTLEGACY (QT_VERSION < QT_VERSION_CHECK(5,9,0))
 
@@ -81,7 +81,7 @@ ZipEntry syncFolderToZipEntry(OCC::Folder *f)
     return fileInfoToZipEntry(journalInfo);
 }
 
-QVector<ZipEntry> createFileList()
+QVector<ZipEntry> createDebugArchiveFileList()
 {
     auto list = QVector<ZipEntry>();
     OCC::ConfigFile cfg;
@@ -91,8 +91,6 @@ QVector<ZipEntry> createFileList()
     const auto logger = OCC::Logger::instance();
 
     if (!logger->logDir().isEmpty()) {
-        list.append({QString(), QStringLiteral("logs")});
-
         QDir dir(logger->logDir());
         const auto infoList = dir.entryInfoList(QDir::Files);
         std::transform(std::cbegin(infoList), std::cend(infoList),
@@ -112,27 +110,24 @@ QVector<ZipEntry> createFileList()
 
 void createDebugArchive(const QString &filename)
 {
-    const auto entries = createFileList();
+    const auto entries = createDebugArchiveFileList();
+
+    KZip zip(filename);
+    zip.open(QIODevice::WriteOnly);
 
-    // TODO: Port away from this private API (best to port to KArchive)
-    QZipWriter zip(filename);
-    zip.setCreationPermissions(zip.creationPermissions() | QFile::ReadOther);
     for (const auto &entry : entries) {
-        if (entry.localFilename.isEmpty()) {
-            zip.addDirectory(entry.zipFilename);
-        } else {
-            QFile file(entry.localFilename);
-            if (!file.open(QFile::ReadOnly)) {
-                continue;
-            }
-            zip.addFile(entry.zipFilename, &file);
-        }
+        zip.addLocalFile(entry.localFilename, entry.zipFilename);
     }
 
-    zip.addFile("__nextcloud_client_parameters.txt", QCoreApplication::arguments().join(' ').toUtf8());
+    const auto clientParameters = QCoreApplication::arguments().join(' ').toUtf8();
+    zip.prepareWriting("__nextcloud_client_parameters.txt", {}, {}, clientParameters.size());
+    zip.writeData(clientParameters, clientParameters.size());
+    zip.finishWriting(clientParameters.size());
 
-    const auto buildInfo = QString(OCC::Theme::instance()->about() + "\n\n" + OCC::Theme::instance()->aboutDetails());
-    zip.addFile("__nextcloud_client_buildinfo.txt", buildInfo.toUtf8());
+    const auto buildInfo = QString(OCC::Theme::instance()->about() + "\n\n" + OCC::Theme::instance()->aboutDetails()).toUtf8();
+    zip.prepareWriting("__nextcloud_client_buildinfo.txt", {}, {}, buildInfo.size());
+    zip.writeData(buildInfo, buildInfo.size());
+    zip.finishWriting(buildInfo.size());
 }
 }