File indexing completed on 2024-06-16 05:00:31

0001 /*
0002    SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "compareexportfile.h"
0008 #include "comparefilehelper.h"
0009 #include "generatelistfilefromarchive.h"
0010 #include "loadlistfromfile.h"
0011 #include <KZip>
0012 #include <QDebug>
0013 #include <QTest>
0014 
0015 #define REMOVE_TEMPORARY_FILES 1
0016 
0017 CompareExportFile::CompareExportFile() = default;
0018 
0019 CompareExportFile::~CompareExportFile()
0020 {
0021     delete mZip;
0022     mZip = nullptr;
0023     delete mTempDir;
0024     mTempDir = nullptr;
0025 }
0026 
0027 void CompareExportFile::compareFiles()
0028 {
0029     GenerateListFileFromArchive archive(mTempFilePath);
0030     // qDebug() << " archive " << archive.listFile();
0031 
0032     LoadListFromFile f(mListFilePath + QStringLiteral("/list.txt"));
0033     const QStringList archiveList = archive.listFile();
0034     const bool equal = (f.fileList() == archiveList);
0035     if (!equal) {
0036         qDebug() << "Requested : " << f.fileList();
0037         qDebug() << "List File : " << archiveList;
0038     }
0039     QVERIFY(equal);
0040     mZip = new KZip(mTempFilePath);
0041     // qDebug() << " mFileName" << mFileName;
0042     const bool result = mZip->open(QIODevice::ReadOnly);
0043     QVERIFY(result);
0044     const KArchiveDirectory *topDirectory = mZip->directory();
0045     for (const QString &file : archiveList) {
0046         if (file == QLatin1StringView("information/VERSION_2") || file == QLatin1StringView("information/exportdatatype.xml")) {
0047             continue;
0048         }
0049         const KArchiveEntry *currentEntry = topDirectory->entry(file);
0050         if (currentEntry && currentEntry->isFile()) {
0051             if (!mTempDir) {
0052                 mTempDir = new QTemporaryDir;
0053 #ifdef REMOVE_TEMPORARY_FILES
0054                 mTempDir->setAutoRemove(true);
0055 #else
0056                 mTempDir->setAutoRemove(false);
0057 #endif
0058             }
0059             const auto currentFile = static_cast<const KArchiveFile *>(currentEntry);
0060 
0061             QString adaptFile = file;
0062             // We store in zip as configs, but we extract in config/
0063             adaptFile.replace(QStringLiteral("configs/"), QStringLiteral("config/"));
0064             const QString fileName = mTempDir->path() + QLatin1Char('/') + adaptFile;
0065             // create path
0066             const QFileInfo fileInfo(fileName);
0067             QDir().mkpath(fileInfo.dir().path());
0068 
0069             QFile newFile(fileName);
0070             // qDebug() << " fileName" << fileName;
0071             QVERIFY(newFile.open(QIODevice::WriteOnly));
0072 
0073             // Store data.
0074             const QByteArray data = currentFile->data();
0075             QCOMPARE(newFile.write(data), data.length());
0076             newFile.close();
0077 
0078             CompareFileHelper::compareFile(mListFilePath + QStringLiteral("/references/") + adaptFile, fileName);
0079         }
0080     }
0081 }
0082 
0083 QString CompareExportFile::tempFilePath() const
0084 {
0085     return mTempFilePath;
0086 }
0087 
0088 void CompareExportFile::setTempFilePath(const QString &tempFilePath)
0089 {
0090     mTempFilePath = tempFilePath;
0091 }
0092 
0093 QString CompareExportFile::listFilePath() const
0094 {
0095     return mListFilePath;
0096 }
0097 
0098 void CompareExportFile::setListFilePath(const QString &listFilePath)
0099 {
0100     mListFilePath = listFilePath;
0101 }