File indexing completed on 2024-04-21 15:07:25

0001 /*
0002     This file is part of the syndication library
0003     SPDX-FileCopyrightText: 2006 Frank Osterfeld <osterfeld@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "source.h"
0009 #include "atomtools.h"
0010 #include "category.h"
0011 #include "constants.h"
0012 #include "generator.h"
0013 #include "link.h"
0014 #include "person.h"
0015 
0016 #include <tools.h>
0017 
0018 #include <QDomElement>
0019 #include <QList>
0020 #include <QString>
0021 
0022 namespace Syndication
0023 {
0024 namespace Atom
0025 {
0026 Source::Source()
0027     : ElementWrapper()
0028 {
0029 }
0030 
0031 Source::Source(const QDomElement &element)
0032     : ElementWrapper(element)
0033 {
0034 }
0035 
0036 QList<Person> Source::authors() const
0037 {
0038     const QList<QDomElement> a = elementsByTagNameNS(atom1Namespace(), QStringLiteral("author"));
0039 
0040     QList<Person> list;
0041     list.reserve(a.count());
0042 
0043     std::transform(a.cbegin(), a.cend(), std::back_inserter(list), [](const QDomElement &element) {
0044         return Person(element);
0045     });
0046 
0047     return list;
0048 }
0049 
0050 QList<Person> Source::contributors() const
0051 {
0052     const QList<QDomElement> a = elementsByTagNameNS(atom1Namespace(), QStringLiteral("contributor"));
0053     QList<Person> list;
0054     list.reserve(a.count());
0055 
0056     std::transform(a.cbegin(), a.cend(), std::back_inserter(list), [](const QDomElement &element) {
0057         return Person(element);
0058     });
0059 
0060     return list;
0061 }
0062 
0063 QList<Category> Source::categories() const
0064 {
0065     const QList<QDomElement> a = elementsByTagNameNS(atom1Namespace(), QStringLiteral("category"));
0066     QList<Category> list;
0067     list.reserve(a.count());
0068 
0069     std::transform(a.cbegin(), a.cend(), std::back_inserter(list), [](const QDomElement &element) {
0070         return Category(element);
0071     });
0072 
0073     return list;
0074 }
0075 
0076 Generator Source::generator() const
0077 {
0078     return Generator(firstElementByTagNameNS(atom1Namespace(), QStringLiteral("generator")));
0079 }
0080 
0081 QString Source::icon() const
0082 {
0083     return extractElementTextNS(atom1Namespace(), QStringLiteral("icon"));
0084 }
0085 
0086 QString Source::id() const
0087 {
0088     return extractElementTextNS(atom1Namespace(), QStringLiteral("id"));
0089 }
0090 
0091 QList<Link> Source::links() const
0092 {
0093     const QList<QDomElement> a = elementsByTagNameNS(atom1Namespace(), QStringLiteral("link"));
0094     QList<Link> list;
0095     list.reserve(a.count());
0096 
0097     std::transform(a.cbegin(), a.cend(), std::back_inserter(list), [](const QDomElement &element) {
0098         return Link(element);
0099     });
0100 
0101     return list;
0102 }
0103 
0104 QString Source::logo() const
0105 {
0106     return extractElementTextNS(atom1Namespace(), QStringLiteral("logo"));
0107 }
0108 
0109 QString Source::rights() const
0110 {
0111     return extractAtomText(*this, QStringLiteral("rights"));
0112 }
0113 
0114 QString Source::subtitle() const
0115 {
0116     return extractAtomText(*this, QStringLiteral("subtitle"));
0117 }
0118 
0119 QString Source::title() const
0120 {
0121     return extractAtomText(*this, QStringLiteral("title"));
0122 }
0123 
0124 time_t Source::updated() const
0125 {
0126     const QString upd = extractElementTextNS(atom1Namespace(), QStringLiteral("updated"));
0127     return parseDate(upd, ISODate);
0128 }
0129 
0130 QString Source::debugInfo() const
0131 {
0132     QString info = QLatin1String("### Source: ###################\n");
0133     if (!title().isEmpty()) {
0134         info += QLatin1String("title: #") + title() + QLatin1String("#\n");
0135     }
0136     if (!subtitle().isEmpty()) {
0137         info += QLatin1String("subtitle: #") + subtitle() + QLatin1String("#\n");
0138     }
0139     if (!id().isEmpty()) {
0140         info += QLatin1String("id: #") + id() + QLatin1String("#\n");
0141     }
0142 
0143     if (!rights().isEmpty()) {
0144         info += QLatin1String("rights: #") + rights() + QLatin1String("#\n");
0145     }
0146     if (!icon().isEmpty()) {
0147         info += QLatin1String("icon: #") + icon() + QLatin1String("#\n");
0148     }
0149     if (!logo().isEmpty()) {
0150         info += QLatin1String("logo: #") + logo() + QLatin1String("#\n");
0151     }
0152     if (!generator().isNull()) {
0153         info += generator().debugInfo();
0154     }
0155 
0156     QString dupdated = dateTimeToString(updated());
0157     if (!dupdated.isNull()) {
0158         info += QLatin1String("updated: #") + dupdated + QLatin1String("#\n");
0159     }
0160 
0161     const QList<Link> dlinks = links();
0162     for (const auto &link : dlinks) {
0163         info += link.debugInfo();
0164     }
0165 
0166     const QList<Category> dcats = categories();
0167     for (const auto &cat : dcats) {
0168         info += cat.debugInfo();
0169     }
0170 
0171     info += QLatin1String("### Authors: ###################\n");
0172 
0173     const QList<Person> dauthors = authors();
0174     for (const auto &author : dauthors) {
0175         info += author.debugInfo();
0176     }
0177 
0178     info += QLatin1String("### Contributors: ###################\n");
0179 
0180     const QList<Person> dcontri = contributors();
0181     for (const auto &person : dcontri) {
0182         info += person.debugInfo();
0183     }
0184 
0185     info += QLatin1String("### Source end ################\n");
0186 
0187     return info;
0188 }
0189 
0190 } // namespace Atom
0191 } // namespace Syndication