Warning, file /pim/pim-data-exporter/core/xml/templateselection.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002    SPDX-FileCopyrightText: 2014-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "templateselection.h"
0008 #include "pimdataexportcore_debug.h"
0009 #include <QFile>
0010 #include <QXmlStreamWriter>
0011 
0012 TemplateSelection::TemplateSelection() = default;
0013 
0014 TemplateSelection::~TemplateSelection()
0015 {
0016     delete mStreamWriter;
0017     delete mStreamReader;
0018 }
0019 
0020 Utils::StoredTypes TemplateSelection::loadStoredTypes(int &numberOfStep)
0021 {
0022     Utils::StoredTypes types = Utils::None;
0023     while (mStreamReader->readNextStartElement()) {
0024         if (mStreamReader->name() == QLatin1StringView("mailtransport")) {
0025             types |= Utils::MailTransport;
0026             numberOfStep++;
0027         } else if (mStreamReader->name() == QLatin1StringView("mail")) {
0028             types |= Utils::Mails;
0029             numberOfStep++;
0030         } else if (mStreamReader->name() == QLatin1StringView("resources")) {
0031             types |= Utils::Resources;
0032             numberOfStep++;
0033         } else if (mStreamReader->name() == QLatin1StringView("identity")) {
0034             types |= Utils::Identity;
0035             numberOfStep++;
0036         } else if (mStreamReader->name() == QLatin1StringView("config")) {
0037             types |= Utils::Config;
0038             numberOfStep++;
0039         } else if (mStreamReader->name() == QLatin1StringView("data")) {
0040             types |= Utils::Data;
0041             numberOfStep++;
0042         }
0043         mStreamReader->skipCurrentElement();
0044     }
0045     return types;
0046 }
0047 
0048 QMap<Utils::AppsType, Utils::importExportParameters> TemplateSelection::loadTemplate(const QString &path)
0049 {
0050     if (path.isEmpty()) {
0051         return {};
0052     }
0053     QFile file(path);
0054     if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
0055         qCDebug(PIMDATAEXPORTERCORE_LOG) << "Unable to load file:" << path;
0056         return {};
0057     } else {
0058         mStreamReader = new QXmlStreamReader(&file);
0059     }
0060 
0061     QMap<Utils::AppsType, Utils::importExportParameters> value;
0062     if (mStreamReader->readNextStartElement()) {
0063         // Compatibility with old version
0064         if ((mStreamReader->name() == QLatin1StringView("pimsettingexporter")) || (mStreamReader->name() == QLatin1StringView("pimdataexporter"))) {
0065             while (mStreamReader->readNextStartElement()) {
0066                 Utils::AppsType type = Utils::Unknown;
0067                 if (mStreamReader->name() == QLatin1StringView("kmail")) {
0068                     type = Utils::KMail;
0069                 } else if (mStreamReader->name() == QLatin1StringView("kaddressbook")) {
0070                     type = Utils::KAddressBook;
0071                 } else if (mStreamReader->name() == QLatin1StringView("kalarm")) {
0072                     type = Utils::KAlarm;
0073                 } else if (mStreamReader->name() == QLatin1StringView("korganizer")) {
0074                     type = Utils::KOrganizer;
0075                 } else if (mStreamReader->name() == QLatin1StringView("knotes")) {
0076                     type = Utils::KNotes;
0077                 } else if (mStreamReader->name() == QLatin1StringView("akregator")) {
0078                     type = Utils::Akregator;
0079                 }
0080                 if (type != Utils::Unknown) {
0081                     int numberOfSteps = 0;
0082                     Utils::StoredTypes storedType = loadStoredTypes(numberOfSteps);
0083                     if (storedType != Utils::None) {
0084                         Utils::importExportParameters utils;
0085                         utils.types = storedType;
0086                         utils.numberSteps = numberOfSteps;
0087                         value.insert(type, utils);
0088                     }
0089                 } else {
0090                     mStreamReader->skipCurrentElement();
0091                 }
0092             }
0093         } else {
0094             qCDebug(PIMDATAEXPORTERCORE_LOG) << "Toplevel xml is not correct";
0095         }
0096     } else {
0097         qCDebug(PIMDATAEXPORTERCORE_LOG) << "Impossible to parse file";
0098     }
0099 
0100     return value;
0101 }
0102 
0103 void TemplateSelection::saveParameters(Utils::StoredTypes type)
0104 {
0105     if (type & Utils::MailTransport) {
0106         mStreamWriter->writeEmptyElement(QStringLiteral("mailtransport"));
0107     }
0108     if (type & Utils::Mails) {
0109         mStreamWriter->writeEmptyElement(QStringLiteral("mail"));
0110     }
0111     if (type & Utils::Resources) {
0112         mStreamWriter->writeEmptyElement(QStringLiteral("resources"));
0113     }
0114     if (type & Utils::Identity) {
0115         mStreamWriter->writeEmptyElement(QStringLiteral("identity"));
0116     }
0117     if (type & Utils::Config) {
0118         mStreamWriter->writeEmptyElement(QStringLiteral("config"));
0119     }
0120     if (type & Utils::Data) {
0121         mStreamWriter->writeEmptyElement(QStringLiteral("data"));
0122     }
0123 }
0124 
0125 QString TemplateSelection::saveTemplate() const
0126 {
0127     return mSaveTemplate;
0128 }
0129 
0130 void TemplateSelection::createTemplate(const QMap<Utils::AppsType, Utils::importExportParameters> &stored)
0131 {
0132     mSaveTemplate.clear();
0133     delete mStreamWriter;
0134     mStreamWriter = new QXmlStreamWriter(&mSaveTemplate);
0135     mStreamWriter->setAutoFormatting(true);
0136     mStreamWriter->setAutoFormattingIndent(2);
0137     mStreamWriter->writeStartDocument();
0138 
0139     mStreamWriter->writeStartElement(QStringLiteral("pimdataexporter"));
0140 
0141     QMap<Utils::AppsType, Utils::importExportParameters>::const_iterator i = stored.constBegin();
0142     while (i != stored.constEnd()) {
0143         switch (i.key()) {
0144         case Utils::KMail:
0145             mStreamWriter->writeStartElement(QStringLiteral("kmail"));
0146             saveParameters(i.value().types);
0147             mStreamWriter->writeEndElement();
0148             break;
0149         case Utils::KAddressBook:
0150             mStreamWriter->writeStartElement(QStringLiteral("kaddressbook"));
0151             saveParameters(i.value().types);
0152             mStreamWriter->writeEndElement();
0153             break;
0154         case Utils::KAlarm:
0155             mStreamWriter->writeStartElement(QStringLiteral("kalarm"));
0156             saveParameters(i.value().types);
0157             mStreamWriter->writeEndElement();
0158             break;
0159         case Utils::KOrganizer:
0160             mStreamWriter->writeStartElement(QStringLiteral("korganizer"));
0161             saveParameters(i.value().types);
0162             mStreamWriter->writeEndElement();
0163             break;
0164         case Utils::KNotes:
0165             mStreamWriter->writeStartElement(QStringLiteral("knotes"));
0166             saveParameters(i.value().types);
0167             mStreamWriter->writeEndElement();
0168             break;
0169         case Utils::Akregator:
0170             mStreamWriter->writeStartElement(QStringLiteral("akregator"));
0171             saveParameters(i.value().types);
0172             mStreamWriter->writeEndElement();
0173             break;
0174         case Utils::Unknown:
0175             qCCritical(PIMDATAEXPORTERCORE_LOG) << "Code must not use this enum here";
0176             break;
0177         }
0178         ++i;
0179     }
0180     mStreamWriter->writeEndElement();
0181 }