File indexing completed on 2024-04-21 14:52:21

0001 /*
0002     This file is part of KDE.
0003 
0004     SPDX-FileCopyrightText: 2010 Sebastian Kügler <sebas@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "publisherparser.h"
0010 #include <qdebug.h>
0011 
0012 using namespace Attica;
0013 
0014 Publisher Publisher::Parser::parseXml(QXmlStreamReader &xml)
0015 {
0016     // For specs about the XML provided, see here:
0017     // http://www.freedesktop.org/wiki/Specifications/open-collaboration-services-draft
0018 
0019     Publisher publisher;
0020     QStringList fields;
0021 
0022     while (!xml.atEnd()) {
0023         // qCDebug(ATTICA) << "XML returned:" << xml.text().toString();
0024         xml.readNext();
0025 
0026         if (xml.isStartElement()) {
0027             if (xml.name() == QLatin1String("id")) {
0028                 publisher.setId(xml.readElementText());
0029             } else if (xml.name() == QLatin1String("name")) {
0030                 publisher.setName(xml.readElementText());
0031             } else if (xml.name() == QLatin1String("registrationurl")) {
0032                 publisher.setUrl(xml.readElementText());
0033             } else if (xml.name() == QLatin1String("fields")) {
0034                 while (!xml.atEnd()) {
0035                     xml.readNextStartElement();
0036                     if (xml.isStartElement()) {
0037                         if (xml.name() == QLatin1String("field")) {
0038                             Field t;
0039                             while (!xml.atEnd()) {
0040                                 xml.readNextStartElement();
0041                                 if (xml.isStartElement()) {
0042                                     if (xml.name() == QLatin1String("fieldtype")) {
0043                                         t.type = xml.readElementText();
0044                                     } else if (xml.name() == QLatin1String("name")) {
0045                                         t.name = xml.readElementText();
0046                                     } else if (xml.name() == QLatin1String("fieldsize")) {
0047                                         t.fieldsize = xml.readElementText().toInt();
0048                                     } else if (xml.name() == QLatin1String("required")) {
0049                                         t.required = xml.readElementText() == QLatin1String("true");
0050                                     } else if (xml.name() == QLatin1String("options")) {
0051                                         while (!xml.atEnd()) {
0052                                             xml.readNextStartElement();
0053                                             if (xml.isStartElement()) {
0054                                                 if (xml.name() == QLatin1String("option")) {
0055                                                     t.options << xml.readElementText();
0056                                                 }
0057                                             } else if (xml.isEndElement() && xml.name() == QLatin1String("options")) {
0058                                                 xml.readNext();
0059                                                 break;
0060                                             }
0061                                         }
0062                                     }
0063                                 } else if (xml.isEndElement() && (xml.name() == QLatin1String("field"))) {
0064                                     xml.readNext();
0065                                     break;
0066                                 }
0067                             }
0068                             publisher.addField(t);
0069                         }
0070                     } else if (xml.isEndElement() && (xml.name() == QLatin1String("fields"))) {
0071                         xml.readNext();
0072                         break;
0073                     }
0074                 }
0075             } else if (xml.name() == QLatin1String("supportedtargets")) {
0076                 while (!xml.atEnd()) {
0077                     xml.readNextStartElement();
0078                     if (xml.isStartElement()) {
0079                         if (xml.name() == QLatin1String("target")) {
0080                             Target t;
0081                             t.name = xml.readElementText();
0082                             publisher.addTarget(t);
0083                         }
0084                     } else if (xml.isEndElement() && (xml.name() == QLatin1String("supportedtargets"))) {
0085                         xml.readNext();
0086                         break;
0087                     }
0088                 }
0089             }
0090         } else if (xml.isEndElement() //
0091                    && (xml.name() == QLatin1String("publisher") || xml.name() == QLatin1String("user"))) {
0092             break;
0093         }
0094     }
0095     return publisher;
0096 }
0097 
0098 QStringList Publisher::Parser::xmlElement() const
0099 {
0100     return QStringList(QStringLiteral("publisher")) << QStringLiteral("user");
0101 }