diff options
Diffstat (limited to 'kresources/tvanytime/service.cpp')
-rw-r--r-- | kresources/tvanytime/service.cpp | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/kresources/tvanytime/service.cpp b/kresources/tvanytime/service.cpp new file mode 100644 index 000000000..2f9d9bbb1 --- /dev/null +++ b/kresources/tvanytime/service.cpp @@ -0,0 +1,224 @@ +/*************************************************************************** + * Copyright (C) 2005 by Will Stephenson * + * wstephenson@kde.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * 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. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "service.h" + +Service::Service() : mActive( true ) +{ + +} + +Service::Service( bool active, const QString & name, const QString & owner, const KURL & serviceUrl, const KURL & logo, const QStringList & genres ) +: mActive( active ), mName( name ), mOwner( owner ), mServiceUrl( serviceUrl ), mLogo( logo ), mGenres( genres ) +{ +} + +void Service::setActive( bool active ) +{ + mActive = active; +} + +void Service::setName( const QString & name ) +{ + mName = name; +} + +void Service::setProgramInformation( const ProgramInformationMap & map ) +{ + mProgInfo = map; +} + +bool Service::active() const +{ + return mActive; +} + +QString Service::name() const +{ + return mName; +} + +bool Service::loadXML( const QDomElement & top ) +{ + if ( top.tagName() != "ServiceInformation" ) { + qWarning( "XML error: Top tag was %s instead of the expected service information", + top.tagName().ascii() ); + return false; + } + + setId( top.attribute( "serviceId" ) ); + + for ( QDomNode n = top.firstChild(); !n.isNull(); n = n.nextSibling() ) { + if ( n.isComment() ) + continue; + if ( n.isElement() ) { + QDomElement e = n.toElement(); + loadAttribute( e ); + } else + qWarning( "Node is not a comment or an element???" ); + } + return true; +} + +bool Service::loadAttribute( const QDomElement& element ) +{ + QString tagName = element.tagName(); + if ( tagName == "Name" ) { + QDomNode cn = element.firstChild(); + QDomText t = cn.toText(); + mName = t.data(); + } + else if ( tagName == "Owner" ) { + QDomNode cn = element.firstChild(); + QDomText t = cn.toText(); + mOwner = t.data(); + } + else if ( tagName == "ServiceURL" ) { + QDomNode cn = element.firstChild(); + QDomText t = cn.toText(); + mServiceUrl = t.data(); + } + // TODO: parse logo data + // TODO: parse genre data + return true; +} + +QRegExp ScheduleEvent::sRegExp( "PT(\\d{2})H(\\d{2})M(\\d{2})S" ); + +bool ScheduleEvent::loadXML( const QDomElement & top ) +{ + if ( top.tagName() != "ScheduleEvent" ) { + qWarning( "XML error: Top tag was %s instead of the expected event", + top.tagName().ascii() ); + return false; + } + + mCrid = top.attribute( "serviceId" ); + + for ( QDomNode n = top.firstChild(); !n.isNull(); n = n.nextSibling() ) { + if ( n.isComment() ) + continue; + if ( n.isElement() ) { + QDomElement e = n.toElement(); + loadAttribute( e ); + } else + qWarning( "Node is not a comment or an element???" ); + } + return true; +} + +bool ScheduleEvent::loadAttribute( const QDomElement& element ) +{ + QString tagName = element.tagName(); + if ( tagName == "ProgramURL" ) { + QDomNode cn = element.firstChild(); + QDomText t = cn.toText(); + mUrl = t.data(); + } + else if ( tagName == "Program" ) { + mCrid = element.attribute( "crid" ); + } + else if ( tagName == "PublishedStartTime" ) { + QDomNode cn = element.firstChild(); + QDomText t = cn.toText(); + mStartTime = QDateTime::fromString( t.data(), Qt::ISODate ); + } + else if ( tagName == "PublishedDuration" ) { + QDomNode cn = element.firstChild(); + QDomText t = cn.toText(); + QString duration = t.data(); + if ( sRegExp.search( duration ) != -1 ) + { + mDuration = 0; + mDuration += 60 * 60 * sRegExp.cap( 1 ).toUInt(); + mDuration += 60 * sRegExp.cap( 2 ).toUInt(); + mDuration += sRegExp.cap( 3 ).toUInt(); + } + } + return true; +} + +ProgramInformationMap Service::programmeInformation() const +{ + return mProgInfo; +} + +ProgramInformation::ProgramInformation( const QString & title, const QString &synopsis ) +: mTitle( title ), mSynopsis( synopsis ) +{ + +} + +bool ProgramInformation::loadXML( const QDomElement & top ) +{ + if ( top.tagName() != "ProgramInformation" ) { + qWarning( "XML error: Top tag was %s instead of the expected program information", + top.tagName().ascii() ); + return false; + } + + setId( top.attribute( "programId" ) ); + + for ( QDomNode n = top.firstChild(); !n.isNull(); n = n.nextSibling() ) { + if ( n.isComment() ) + continue; + if ( n.isElement() ) { + QDomElement e = n.toElement(); + if ( e.tagName() == "BasicDescription" ) + { + for ( QDomNode n = e.firstChild(); !n.isNull(); n = n.nextSibling() ) { + if ( n.isComment() ) + continue; + if ( n.isElement() ) { + QDomElement e = n.toElement(); + loadAttribute( e ); + } + } + } + } else + qWarning( "Node is not a comment or an element???" ); + } + return true; +} + +bool ProgramInformation::loadAttribute( const QDomElement& element ) +{ + QString tagName = element.tagName(); + if ( tagName == "Title" ) { + QDomNode cn = element.firstChild(); + QDomText t = cn.toText(); + mTitle = t.data(); + } + else if ( tagName == "Synopsis" ) { + QDomNode cn = element.firstChild(); + QDomText t = cn.toText(); + mSynopsis = t.data(); + } + else if ( tagName == "Genre" ) { + QDomNode name = element.firstChild(); + QDomElement nameElem = name.toElement(); + if ( nameElem.tagName() == "Name" ) { + QDomNode cn = nameElem.firstChild(); + QDomText t = cn.toText(); + mGenres.append( t.data() ); + } + } + return true; +} |