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 }