23 #include <rss2/item.h>
24 #include <rss2/category.h>
25 #include <rss2/enclosure.h>
26 #include <rss2/source.h>
27 #include <rss2/tools_p.h>
28 #include <constants.h>
29 #include <specificitem.h>
30 #include <specificitemvisitor.h>
33 #include <QtXml/QDomElement>
34 #include <QtCore/QString>
35 #include <QtCore/QList>
37 namespace Syndication {
40 class Item::ItemPrivate
44 boost::shared_ptr<Document> doc;
47 Item::Item(boost::shared_ptr<Document> doc) : ElementWrapper(), d(new ItemPrivate)
52 Item::Item(
const QDomElement& element, boost::shared_ptr<Document> doc) : ElementWrapper(element), d(new ItemPrivate)
68 ElementWrapper::operator=(other);
69 SpecificItem::operator=(other);
77 return originalTitle();
80 bool containsMarkup =
false;
81 d->doc->getItemTitleFormatInfo(&isCDATA, &containsMarkup);
83 return normalize(originalTitle(), isCDATA, containsMarkup);
87 QString Item::originalDescription()
const
89 return extractElementTextNS(QString(), QLatin1String(
"description"));
92 QString Item::originalTitle()
const
94 return extractElementTextNS(QString(), QLatin1String(
"title"));
99 return extractElementTextNS(QString(), QLatin1String(
"link") );
105 return originalDescription();
107 bool isCDATA =
false;
108 bool containsMarkup =
false;
109 d->doc->getItemDescriptionFormatInfo(&isCDATA, &containsMarkup);
111 return normalize(originalDescription(), isCDATA, containsMarkup);
122 QList<QDomElement> cats = elementsByTagNameNS(QString(),
123 QLatin1String(
"category"));
127 QList<QDomElement>::ConstIterator it = cats.constBegin();
128 for ( ; it != cats.constEnd(); ++it)
137 return extractElementTextNS(QString(), QLatin1String(
"comments") );
142 QString a = extractElementTextNS(QString(), QLatin1String(
"author") );
150 return extractElementTextNS(dublinCoreNamespace(),
151 QLatin1String(
"creator") );
158 QList<QDomElement> encs = elementsByTagNameNS(QString(),
159 QLatin1String(
"enclosure"));
163 QList<QDomElement>::ConstIterator it = encs.constBegin();
164 for ( ; it != encs.constEnd(); ++it)
173 return extractElementTextNS(QString(), QLatin1String(
"guid") );
180 QDomElement guidNode = firstElementByTagNameNS(QString(),
181 QLatin1String(
"guid"));
182 if (!guidNode.isNull())
184 if (guidNode.attribute(QLatin1String(
"isPermaLink"))
185 == QLatin1String(
"false"))
187 guidIsPermaLink =
false;
196 QString str = extractElementTextNS(QString(), QLatin1String(
"pubDate"));
200 return parseDate(str, RFCDate);
204 str = extractElementTextNS(dublinCoreNamespace(), QLatin1String(
"date"));
205 return parseDate(str, ISODate);
210 QString str = extractElementTextNS(QString(), QLatin1String(
"expirationDate"));
211 return parseDate(str, RFCDate);
216 return Source(firstElementByTagNameNS(QString(), QLatin1String(
"source")));
221 return extractElementTextNS(QString(), QLatin1String(
"rating") );
227 info += QLatin1String(
"### Item: ###################\n");
228 if (!
title().isNull())
229 info += QLatin1String(
"title: #") +
title() + QLatin1String(
"#\n");
230 if (!
link().isNull())
231 info += QLatin1String(
"link: #") +
link() + QLatin1String(
"#\n");
233 info += QLatin1String(
"description: #") +
description() + QLatin1String(
"#\n");
235 info += QLatin1String(
"content: #") +
content() + QLatin1String(
"#\n");
237 info += QLatin1String(
"author: #") +
author() + QLatin1String(
"#\n");
239 info += QLatin1String(
"comments: #") +
comments() + QLatin1String(
"#\n");
240 QString dpubdate = dateTimeToString(
pubDate());
241 if (!dpubdate.isNull())
242 info += QLatin1String(
"pubDate: #") + dpubdate + QLatin1String(
"#\n");
243 if (!
guid().isNull())
244 info += QLatin1String(
"guid: #") +
guid() + QLatin1String(
"#\n");
246 info += QLatin1String(
"guid is PL: #true#\n");
251 for (QList<Category>::ConstIterator it = cats.constBegin(); it != cats.constEnd(); ++it)
252 info += (*it).debugInfo();
254 for (QList<Enclosure>::ConstIterator it = encs.constBegin(); it != encs.constEnd(); ++it)
255 info += (*it).debugInfo();
257 info += QLatin1String(
"### Item end ################\n");
264 QList<ElementType> handled;
265 handled.append(ElementType(QLatin1String(
"title")));
266 handled.append(ElementType(QLatin1String(
"link")));
267 handled.append(ElementType(QLatin1String(
"description")));
268 handled.append(ElementType(QLatin1String(
"pubDate")));
269 handled.append(ElementType(QLatin1String(
"expirationDate")));
270 handled.append(ElementType(QLatin1String(
"rating")));
271 handled.append(ElementType(QLatin1String(
"source")));
272 handled.append(ElementType(QLatin1String(
"guid")));
273 handled.append(ElementType(QLatin1String(
"comments")));
274 handled.append(ElementType(QLatin1String(
"author")));
275 handled.append(ElementType(QLatin1String(
"date"), dublinCoreNamespace()));
277 QList<QDomElement> notHandled;
279 QDomNodeList children = element().childNodes();
280 for (
int i = 0; i < children.size(); ++i)
282 QDomElement el = children.at(i).toElement();
284 && !handled.contains(ElementType(el.localName(), el.namespaceURI())))
286 notHandled.append(el);
295 return visitor->visitRSS2Item(
this);