File indexing completed on 2024-12-01 05:16:29
0001 /** 0002 * SPDX-FileCopyrightText: (C) 2006 by Sébastien Laoût <slaout@linux62.org> 0003 * SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #ifndef ARCHIVE_H 0007 #define ARCHIVE_H 0008 0009 #include "basket_export.h" 0010 0011 #include <QtCore/QList> 0012 #include <QtCore/QMap> 0013 0014 class BasketScene; 0015 class Tag; 0016 0017 class QString; 0018 class QStringList; 0019 class QDomNode; 0020 class QProgressDialog; 0021 class QDomElement; 0022 0023 class KTar; 0024 class KProgress; 0025 0026 /** 0027 * @author Sébastien Laoût <slaout@linux62.org> 0028 */ 0029 class Archive 0030 { 0031 public: 0032 static void save(BasketScene *basket, bool withSubBaskets, const QString &destination); 0033 static void open(const QString &path); 0034 0035 /** 0036 * @brief The IOErrorCode enum granularly indicates whether encoding or decoding of baskets archive succeded 0037 */ 0038 enum class IOErrorCode : quint8 { 0039 NoError, 0040 NotABasketArchive, 0041 CorruptedBasketArchive, 0042 DestinationExists, 0043 IncompatibleBasketVersion, 0044 PossiblyCompatibleBasketVersion, 0045 FailedToOpenResource, 0046 }; 0047 0048 /** 0049 * @brief extractArchive decodes .baskets files 0050 * @param path to the .baskets file 0051 * @param destination into which the basket archive should be extracted 0052 * @param protectDestination decides whether the destination will be replaced if it has been present 0053 * \todo protectDestination likely should be an enum, too, to be more descriptive 0054 * @return NoError indicates a sucessful extraction. All other enum states indicate something went wrong 0055 */ 0056 BASKET_EXPORT static IOErrorCode extractArchive(const QString &path, const QString &destination, const bool protectDestination = true); 0057 0058 /** 0059 * @brief createArchiveFromSource encodes a basket directory into a .baskets file 0060 * 0061 * Be aware, this function currently does not validate the sourcePath's structure. The caller of this function needs to make sure the basket directory is a valid source. 0062 * 0063 * @param sourcePath specifies the directory to be encoded 0064 * @param previewImage specifies an optional .png image 0065 * @param destination specifies where the encoded .basket file should be saved 0066 * @param protectDestination decides whether the destination will be replaced if it has been present 0067 * @return NoError indicates a sucessful extraction. All other enum states indicate something went wrong 0068 */ 0069 BASKET_EXPORT static IOErrorCode createArchiveFromSource(const QString &sourcePath, const QString &previewImage, const QString &destination = QString(), const bool protectDestination = true); 0070 0071 private: 0072 // Convenient Methods for Saving: 0073 static void saveBasketToArchive(BasketScene *basket, bool recursive, KTar *tar, QStringList &backgrounds, const QString &tempFolder, QProgressDialog *progress); 0074 static void listUsedTags(BasketScene *basket, bool recursive, QList<Tag *> &list); 0075 // Convenient Methods for Loading: 0076 static void renameBasketFolders(const QString &extractionFolder, QMap<QString, QString> &mergedStates); 0077 static void renameBasketFolder(const QString &extractionFolder, QDomNode &basketNode, QMap<QString, QString> &folderMap, QMap<QString, QString> &mergedStates); 0078 static void renameMergedStatesAndBasketIcon(const QString &fullPath, QMap<QString, QString> &mergedStates, const QString &extractionFolder); 0079 static void renameMergedStates(QDomNode notes, QMap<QString, QString> &mergedStates); 0080 static void importBasketIcon(QDomElement properties, const QString &extractionFolder); 0081 static void loadExtractedBaskets(const QString &extractionFolder, QDomNode &basketNode, QMap<QString, QString> &folderMap, BasketScene *parent); 0082 static void importTagEmblems(const QString &extractionFolder); 0083 static void importArchivedBackgroundImages(const QString &extractionFolder); 0084 }; 0085 0086 #endif