File indexing completed on 2024-04-28 04:21:08
0001 // SPDX-FileCopyrightText: 2020 The KPhotoAlbum development team 0002 // SPDX-FileCopyrightText: 2021 Johannes Zarl-Zierl <johannes@zarl-zierl.at> 0003 // 0004 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 0005 0006 #include "ThumbnailCacheConverter.h" 0007 #include "Logging.h" 0008 0009 #include <KLocalizedString> 0010 #include <QDataStream> 0011 #include <QFile> 0012 #include <QString> 0013 #include <QTemporaryFile> 0014 #include <QTextStream> 0015 0016 int KPAThumbnailTool::convertV5ToV4Cache(const QString &indexFilename, QTextStream &err) 0017 { 0018 QFile fromFile { indexFilename }; 0019 if (!fromFile.open(QIODevice::ReadOnly)) { 0020 err << i18nc("@info:shell", "Could not open file `thumbnailindex`!\n"); 0021 err << i18nc("@info:shell", "Thumbnail index was not changed.\n"); 0022 return 1; 0023 } 0024 QTemporaryFile toFile; 0025 if (!toFile.open()) { 0026 err << i18nc("@info:shell", "Could not open temporary file for writing!\n"); 0027 err << i18nc("@info:shell", "Thumbnail index was not changed.\n"); 0028 return 1; 0029 } 0030 0031 if (!convertV5ToV4Cache(fromFile, toFile, err)) 0032 return 1; 0033 0034 if (!fromFile.rename(QString::fromUtf8("%1.bak").arg(indexFilename))) { 0035 err << i18nc("@info:shell", "Could not back up file `thumbnailindex`!\n"); 0036 err << i18nc("@info:shell", "Thumbnail index was not changed.\n"); 0037 return 1; 0038 } 0039 if (!toFile.copy(indexFilename)) { 0040 err << i18nc("@info:shell", "Could not copy temporary thumbnail index file to final location!\n"); 0041 err << i18nc("@info:shell", "Error message was: %1\n", toFile.errorString()); 0042 return 1; 0043 } 0044 return 0; 0045 } 0046 0047 bool KPAThumbnailTool::convertV5ToV4Cache(QIODevice &fromFile, QIODevice &toFile, QTextStream &err) 0048 { 0049 Q_ASSERT(fromFile.isReadable()); 0050 Q_ASSERT(toFile.isWritable()); 0051 QDataStream fromStream { &fromFile }; 0052 int version; 0053 fromStream >> version; 0054 if (version != 5) { 0055 err << i18nc("@info:shell", "Thumbnail index is not a version 5 file!\n"); 0056 err << i18nc("@info:shell", "Thumbnail index was not changed.\n"); 0057 return false; 0058 } 0059 // skip dimensions 0060 fromStream.skipRawData(sizeof(int)); 0061 0062 QDataStream toStream { &toFile }; 0063 constexpr int v4FileVersion = 4; 0064 toStream << v4FileVersion; 0065 int numBytes = 0; 0066 char buf[256]; 0067 do { 0068 numBytes = fromStream.readRawData(buf, 256); 0069 toStream.writeRawData(buf, numBytes); 0070 } while (numBytes != 0); 0071 0072 return true; 0073 } 0074 0075 // vi:expandtab:tabstop=4 shiftwidth=4: