| 269 | } |
| 270 | |
| 271 | void ParseObject::parseAtom(const QString &feedUrl, const QDomDocument &doc) |
| 272 | { |
| 273 | QDomElement rootElem = doc.documentElement(); |
| 274 | FeedItemStruct feedItem; |
| 275 | |
| 276 | feedItem.linkBase = rootElem.attribute("xml:base"); |
| 277 | feedItem.title = toPlainText(rootElem.namedItem("title").toElement().text()); |
| 278 | feedItem.description = rootElem.namedItem("subtitle").toElement().text(); |
| 279 | feedItem.updated = rootElem.namedItem("updated").toElement().text(); |
| 280 | feedItem.updated = parseDate(feedItem.updated, feedUrl); |
| 281 | QDomElement authorElem = rootElem.namedItem("author").toElement(); |
| 282 | if (!authorElem.isNull()) { |
| 283 | feedItem.author = toPlainText(authorElem.namedItem("name").toElement().text()); |
| 284 | if (feedItem.author.isEmpty()) feedItem.author = toPlainText(authorElem.text()); |
| 285 | feedItem.authorUri = authorElem.namedItem("uri").toElement().text(); |
| 286 | feedItem.authorEmail = authorElem.namedItem("email").toElement().text(); |
| 287 | } |
| 288 | feedItem.language = rootElem.namedItem("language").toElement().text(); |
| 289 | QDomNodeList linksList = rootElem.elementsByTagName("link"); |
| 290 | for (int j = 0; j < linksList.size(); j++) { |
| 291 | if (linksList.at(j).toElement().attribute("rel") == "alternate") { |
| 292 | feedItem.link = linksList.at(j).toElement().attribute("href"); |
| 293 | break; |
| 294 | } |
| 295 | } |
| 296 | if (feedItem.link.isEmpty()) { |
| 297 | for (int j = 0; j < linksList.size(); j++) { |
| 298 | if (!(linksList.at(j).toElement().attribute("rel") == "self")) { |
| 299 | feedItem.link = linksList.at(j).toElement().attribute("href"); |
| 300 | break; |
| 301 | } |
| 302 | } |
| 303 | } |
| 304 | |
| 305 | if (QUrl(feedItem.link).host().isEmpty() || (QUrl(feedItem.link).host().indexOf('.')) == -1) { |
| 306 | if (!feedItem.linkBase.isEmpty() && !QUrl(feedItem.linkBase).host().isEmpty()) |
| 307 | feedItem.link = QUrl(feedItem.linkBase).scheme() % "://" % QUrl(feedItem.linkBase).host(); |
| 308 | else |
| 309 | feedItem.link = QUrl(feedUrl).scheme() % "://" % QUrl(feedUrl).host(); |
| 310 | } |
| 311 | if (feedItem.linkBase.isEmpty() && !QUrl(feedItem.link).host().isEmpty()) |
| 312 | feedItem.linkBase = QUrl(feedItem.link).scheme() % "://" % QUrl(feedItem.link).host(); |
| 313 | if (QUrl(feedItem.link).host().isEmpty()) |
| 314 | feedItem.link = feedItem.linkBase + feedItem.link; |
| 315 | feedItem.link = toPlainText(feedItem.link); |
| 316 | QUrl url = QUrl(feedItem.link); |
| 317 | if (url.scheme().isEmpty()) |
| 318 | url.setScheme(QUrl(feedUrl).scheme()); |
| 319 | feedItem.link = url.toString(); |
| 320 | |
| 321 | QSqlQuery q(db_); |
| 322 | q.setForwardOnly(true); |
| 323 | QString qStr ("UPDATE feeds " |
| 324 | "SET title=?, description=?, htmlUrl=?, " |
| 325 | "author_name=?, author_email=?, " |
| 326 | "author_uri=?, pubdate=?, language=? " |
| 327 | "WHERE id==?"); |
| 328 | q.prepare(qStr); |