File indexing completed on 2024-05-05 04:22:02
0001 // SPDX-FileCopyrightText: 2003-2010 Jesper K. Pedersen <blackie@kde.org> 0002 // SPDX-FileCopyrightText: 2021-2023 Johannes Zarl-Zierl <johannes@zarl-zierl.at> 0003 // 0004 // SPDX-License-Identifier: GPL-2.0-or-later 0005 0006 #include "KimFileReader.h" 0007 0008 #include <kpabase/FileExtensions.h> 0009 #include <kpabase/FileNameUtil.h> 0010 0011 #include <KLocalizedString> 0012 #include <QFileInfo> 0013 #include <kmessagebox.h> 0014 #include <kzip.h> 0015 0016 ImportExport::KimFileReader::KimFileReader() 0017 : m_zip(nullptr) 0018 , m_dir(nullptr) 0019 { 0020 } 0021 0022 bool ImportExport::KimFileReader::open(const QString &fileName) 0023 { 0024 m_fileName = fileName; 0025 m_zip = new KZip(fileName); 0026 if (!m_zip->open(QIODevice::ReadOnly)) { 0027 KMessageBox::error(nullptr, i18n("Unable to open '%1' for reading.", fileName), i18n("Error Importing Data")); 0028 delete m_zip; 0029 m_zip = nullptr; 0030 return false; 0031 } 0032 0033 m_dir = m_zip->directory(); 0034 if (m_dir == nullptr) { 0035 KMessageBox::error(nullptr, i18n("Error reading folder contents of file %1; it is likely that the file is broken.", fileName)); 0036 delete m_zip; 0037 m_zip = nullptr; 0038 return false; 0039 } 0040 0041 return true; 0042 } 0043 0044 QByteArray ImportExport::KimFileReader::indexXML() 0045 { 0046 const KArchiveEntry *indexxml = m_dir->entry(QString::fromLatin1("index.xml")); 0047 if (indexxml == nullptr || !indexxml->isFile()) { 0048 KMessageBox::error(nullptr, i18n("Error reading index.xml file from %1; it is likely that the file is broken.", m_fileName)); 0049 return QByteArray(); 0050 } 0051 0052 const KArchiveFile *file = static_cast<const KArchiveFile *>(indexxml); 0053 return file->data(); 0054 } 0055 0056 ImportExport::KimFileReader::~KimFileReader() 0057 { 0058 delete m_zip; 0059 } 0060 0061 QPixmap ImportExport::KimFileReader::loadThumbnail(QString fileName) 0062 { 0063 const KArchiveEntry *thumbnails = m_dir->entry(QString::fromLatin1("Thumbnails")); 0064 if (!thumbnails) 0065 return QPixmap(); 0066 0067 if (!thumbnails->isDirectory()) { 0068 KMessageBox::error(nullptr, i18n("Thumbnail item in export file was not a folder, this indicates that the file is broken.")); 0069 return QPixmap(); 0070 } 0071 0072 const KArchiveDirectory *thumbnailDir = static_cast<const KArchiveDirectory *>(thumbnails); 0073 0074 const auto fileInfo = QFileInfo(fileName); 0075 const QString ext = KPABase::isVideo(DB::FileName::fromRelativePath(fileName)) ? QString::fromLatin1("jpg") : fileInfo.completeSuffix(); 0076 fileName = QString::fromLatin1("%1.%2").arg(fileInfo.baseName()).arg(ext); 0077 const KArchiveEntry *fileEntry = thumbnailDir->entry(fileName); 0078 if (fileEntry == nullptr || !fileEntry->isFile()) { 0079 KMessageBox::error(nullptr, i18n("No thumbnail existed in export file for %1", fileName)); 0080 return QPixmap(); 0081 } 0082 0083 const KArchiveFile *file = static_cast<const KArchiveFile *>(fileEntry); 0084 const QByteArray data = file->data(); 0085 QPixmap pixmap; 0086 pixmap.loadFromData(data); 0087 return pixmap; 0088 } 0089 0090 QByteArray ImportExport::KimFileReader::loadImage(const QString &fileName) 0091 { 0092 const KArchiveEntry *images = m_dir->entry(QString::fromLatin1("Images")); 0093 if (!images) { 0094 KMessageBox::error(nullptr, i18n("Export file did not contain a Images subfolder, this indicates that the file is broken")); 0095 return QByteArray(); 0096 } 0097 0098 if (!images->isDirectory()) { 0099 KMessageBox::error(nullptr, i18n("Images item in export file was not a folder, this indicates that the file is broken")); 0100 return QByteArray(); 0101 } 0102 0103 const KArchiveDirectory *imagesDir = static_cast<const KArchiveDirectory *>(images); 0104 0105 const KArchiveEntry *fileEntry = imagesDir->entry(fileName); 0106 if (fileEntry == nullptr || !fileEntry->isFile()) { 0107 KMessageBox::error(nullptr, i18n("No image existed in export file for %1", fileName)); 0108 return QByteArray(); 0109 } 0110 0111 const KArchiveFile *file = static_cast<const KArchiveFile *>(fileEntry); 0112 QByteArray data = file->data(); 0113 return data; 0114 } 0115 // vi:expandtab:tabstop=4 shiftwidth=4: