1/*
2 This file is part of the syndication library
3 SPDX-FileCopyrightText: 2006 Frank Osterfeld <osterfeld@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#include "item.h"
9#include "contentvocab.h"
10#include "document.h"
11#include "dublincore.h"
12#include "model.h"
13#include "rssvocab.h"
14#include "statement.h"
15
16#include <specificitemvisitor.h>
17#include <tools.h>
18
19#include <QString>
20
21namespace Syndication
22{
23namespace RDF
24{
25class SYNDICATION_NO_EXPORT Item::Private
26{
27public:
28 DocumentPtr doc;
29};
30
31Item::Item()
32 : ResourceWrapper()
33 , d(new Private)
34{
35}
36
37Item::Item(ResourcePtr resource, DocumentPtr doc)
38 : ResourceWrapper(resource)
39 , d(new Private)
40{
41 d->doc = doc;
42}
43
44Item::Item(const Item &other)
45 : ResourceWrapper(other)
46 , SpecificItem(other)
47 , d(new Private)
48{
49 *d = *(other.d);
50}
51
52Item::~Item() = default;
53
54Item &Item::operator=(const Item &other)
55{
56 ResourceWrapper::operator=(other);
57 *d = *(other.d);
58 return *this;
59}
60
61bool Item::operator==(const Item &other) const
62{
63 return ResourceWrapper::operator==(other);
64}
65
66QString Item::title() const
67{
68 if (!d->doc) {
69 return originalTitle();
70 }
71
72 bool containsMarkup = false;
73 d->doc->getItemTitleFormatInfo(containsMarkup: &containsMarkup);
74
75 return normalize(str: originalTitle(), isCDATA: false, containsMarkup);
76}
77
78QString Item::description() const
79{
80 if (!d->doc) {
81 return originalDescription();
82 }
83
84 bool containsMarkup = false;
85 d->doc->getItemDescriptionFormatInfo(containsMarkup: &containsMarkup);
86
87 return normalize(str: originalDescription(), isCDATA: false, containsMarkup);
88}
89
90QString Item::link() const
91{
92 return resource()->property(property: RSSVocab::self()->link())->asString();
93}
94
95DublinCore Item::dc() const
96{
97 return DublinCore(resource());
98}
99
100QString Item::encodedContent() const
101{
102 return resource()->property(property: ContentVocab::self()->encoded())->asString();
103}
104
105QString Item::originalTitle() const
106{
107 return resource()->property(property: RSSVocab::self()->title())->asString();
108}
109
110QString Item::originalDescription() const
111{
112 return resource()->property(property: RSSVocab::self()->description())->asString();
113}
114
115QString Item::debugInfo() const
116{
117 QString info = QLatin1String("### Item: ###################\n");
118 info += QLatin1String("title: #") + title() + QLatin1String("#\n");
119 info += QLatin1String("link: #") + link() + QLatin1String("#\n");
120 info += QLatin1String("description: #") + description() + QLatin1String("#\n");
121 info += QLatin1String("content:encoded: #") + encodedContent() + QLatin1String("#\n");
122 info += dc().debugInfo();
123 info += QLatin1String("### Item end ################\n");
124 return info;
125}
126
127bool Item::accept(SpecificItemVisitor *visitor)
128{
129 return visitor->visitRDFItem(item: this);
130}
131
132} // namespace RDF
133} // namespace Syndication
134

source code of syndication/src/rdf/item.cpp