author | llornkcor <llornkcor> | 2005-08-28 19:53:11 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2005-08-28 19:53:11 (UTC) |
commit | f680479965bf13285a955873c48db47bd0c935d3 (patch) (side-by-side diff) | |
tree | 58945d235215685b316c00b62d951bd0b6d4df95 /core/multimedia/opieplayer/rssparser.cpp | |
parent | 43217700cc9b23519776a27661fbf0c29a7d100d (diff) | |
download | opie-f680479965bf13285a955873c48db47bd0c935d3.zip opie-f680479965bf13285a955873c48db47bd0c935d3.tar.gz opie-f680479965bf13285a955873c48db47bd0c935d3.tar.bz2 |
podcast! support.. 1st installment. needs improvements
Diffstat (limited to 'core/multimedia/opieplayer/rssparser.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/multimedia/opieplayer/rssparser.cpp | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/core/multimedia/opieplayer/rssparser.cpp b/core/multimedia/opieplayer/rssparser.cpp new file mode 100644 index 0000000..ec81409 --- a/dev/null +++ b/core/multimedia/opieplayer/rssparser.cpp @@ -0,0 +1,201 @@ +/*************************************************************************** + * Copyright (C) 2004 by ljp * + * lpotter@trolltech.com * + * * + * This program may be distributed under the terms of the Q Public * + * License as defined by Trolltech AS of Norway and appearing in the * + * file LICENSE.QPL included in the packaging of this file. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * + ***************************************************************************/ +#include "rssparser.h" + +#include <qstring.h> +#include <qmessagebox.h> +#include <qlist.h> + +RssParser::RssParser() +{ + isItem = false; +} + +RssParser::~RssParser() +{ + int size = channel->rssItems.size(); + for (int i = 0; i < size; i ++) { + delete channel->rssItems.at(i); + } + delete channel; +} + +bool RssParser::startElement( const QString &, const QString & /*localName*/,const QString & qName, const QXmlAttributes &atts) +{ + if( qName == "rss") { + channel = new rssChannel(); + channel->rssItems.resize( 0); + return true; + } +// qWarning(qName + " %d",atts.length()); + if(qName == "item") { + isItem = true; + tag = NewItemTag; + Item = new rssItem(); + } + + if(qName == "image") { + tag = NewItemTag; + image = new rssImage(); + } + + if(qName == "title") { + tag = TitleTag; + } + + if (qName == "description") { + tag = DescriptionTag; + } + + if( qName == "link") { + tag = LinkTag; + } + + if( qName == "pubDate") { + tag = pubDateTag; + } + +// if( qName == "enclosure") { +// tag = EnclosureTag; +// } + + if(atts.length() > 0/* && tag == EnclosureTag*/) { +// qWarning(qName +" attributes %d", atts.length()); +// Item->attributes << qName; +// for(int i=0; i < atts.length(); i++) { +// Item->attributes << atts.qName(i) << atts.value(atts.qName(i)); +// } + + QStringList *sList; + sList = new QStringList(); + sList->append(qName); + for(int i=0; i < atts.length(); i++) { + sList->append( atts.qName(i)); + sList->append( atts.value(atts.qName(i))); + } + if(isItem) + Item->attributes.append( sList); + else + channel->attributes.append( sList); + } + + return true; +} + +bool RssParser::endElement( const QString &, const QString &, const QString & qName ) +{ + tag = NoneTag; + if(qName == "item") { + isItem = false; + int size = channel->rssItems.size(); + channel->rssItems.resize( size + 1); + channel->rssItems.insert( channel->rssItems.size() - 1, Item); + } + if(qName == "channel") { +// isItem = false; +// int size = channel->rssItems.size(); +// channel->rssItems.resize( size + 1); +// channel->rssItems.insert( channel->rssItems.size() - 1, Item); + } + return true; +} + +bool RssParser::characters( const QString & ch ) +{ + if(!ch.isEmpty()) { + if(isItem) { +// qWarning("ch "+ch); + switch(tag) { + case NewItemTag: + break; + case TitleTag: + Item->title = ch; + break; + case DescriptionTag: + Item->description = ch; + break; + case LinkTag: + Item->link = ch; + break; + case pubDateTag: + Item->pubdate = ch; + break; + case NoneTag: + break; + }; + } else { //channel + switch(tag) { + case TitleTag: + channel->title = ch; + break; + case DescriptionTag: + channel->description = ch; + break; + case LinkTag: + channel->link = ch; + break; + case pubDateTag: + channel->pubdate = ch; + break; + case NoneTag: + case NewItemTag: + break; + }; + } + } + return true; +} + +bool RssParser::warning(const QXmlParseException &e) +{ + errorMessage = e.message(); +// QMessageBox::message("Warning",tr("<p>Sorry, could not find the requested document.</p>")); + qWarning("Warning " + errorMessage); + return true; +} + +bool RssParser::error(const QXmlParseException &e) +{ + errorMessage = e.message(); +// QMessageBox::message("Error", "<p>" + errorMessage + "</p>"); + qWarning("Error: " + errorMessage); + return true; +} + +bool RssParser::fatalError(const QXmlParseException &e) +{ + errorMessage = e.message(); +// errorMessage += " line: " + e.lineNumber(); +// errorMessage += " col: " + e.columnNumber(); + qWarning("Fatal Error: "+ errorMessage); + qWarning("line %d, col %d\n", e.lineNumber(), e.columnNumber()); +// QMessageBox::message("Fatal Error", errorMessage ); + return false; +} + +QVector<rssItem> &RssParser::getItems() +{ + return channel->rssItems; +} + +int RssParser::getSize() +{ + return channel->rssItems.size(); +} + +QStringList RssParser::getChannelInfo() +{ + QStringList ch; + ch << channel->title << channel->description << channel->link << channel->pubdate << channel->copyright << channel->language; + return ch; +} |