From kde-commits Tue Jun 30 21:08:05 2009 From: Bastian Holst Date: Tue, 30 Jun 2009 21:08:05 +0000 To: kde-commits Subject: branches/marble/marble-gsoc-2009/src/plugins/render/weather Message-Id: <1246396085.828329.20005.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=124653891719636 SVN commit 989761 by bholst: Changes to marbles weather plugin: * date and time parsing in BBCParser. * removed Kelvin from choosable temperature units M +72 -1 BBCParser.cpp M +2 -0 BBCParser.h M +0 -5 WeatherConfigWidget.ui M +1 -1 WeatherData.cpp M +0 -3 WeatherPlugin.cpp --- branches/marble/marble-gsoc-2009/src/plugins/render/weather/BBCParser.cpp #989760:989761 @@ -17,6 +17,7 @@ // Qt #include +#include #include #include @@ -32,6 +33,8 @@ = QHash(); QHash BBCParser::visibilityStates = QHash(); +QHash BBCParser::monthNames + = QHash(); BBCParser::BBCParser() { @@ -125,6 +128,8 @@ readDescription( &item ); else if( name() == "title" ) readTitle( &item ); + else if( name() == "pubDate" ) + readPubDate( &item ); else readUnknownElement(); } @@ -263,12 +268,65 @@ } } +void BBCParser::readPubDate( WeatherData *data ) { + Q_ASSERT( isStartElement() + && name() == "pubDate" ); + + while( !atEnd() ) { + readNext(); + + if( isEndElement() ) + break; + + if( isStartElement() ) { + readUnknownElement(); + } + + if( isCharacters() ) { + QString pubDate = text().toString(); + QRegExp regExp; + + regExp.setPattern( "([A-Za-z]+,\\s+)(\\d+)(\\s+)([A-Za-z]+)(\\s+)(\\d{4,4})(\\s+)(\\d+)(:)(\\d+)(:)(\\d+)(\\s+)([+-])(\\d{2,2})(\\d{2,2})" ); + int pos = regExp.indexIn( pubDate ); + if ( pos > -1 ) { + QDateTime dateTime; + QDate date; + QTime time; + + dateTime.setTimeSpec( Qt::UTC ); + date.setYMD( regExp.cap( 6 ).toInt(), + monthNames.value( regExp.cap( 4 ) ), + regExp.cap( 2 ).toInt() ); + time.setHMS( regExp.cap( 8 ).toInt(), + regExp.cap( 10 ).toInt(), + regExp.cap( 12 ).toInt() ); + + dateTime.setDate( date ); + dateTime.setTime( time ); + + // Timezone + if( regExp.cap( 14 ) == "-" ) { + dateTime = dateTime.addSecs( 60*60*regExp.cap( 15 ).toInt() ); + dateTime = dateTime.addSecs( 60 *regExp.cap( 16 ).toInt() ); + } + else { + dateTime = dateTime.addSecs( -60*60*regExp.cap( 15 ).toInt() ); + dateTime = dateTime.addSecs( -60 *regExp.cap( 16 ).toInt() ); + } + + data->setDateTime( dateTime ); + } + } + } +} + void BBCParser::setupHashes() { if( !( ( dayConditions.isEmpty() ) || ( nightConditions.isEmpty() ) || ( windDirections.isEmpty() ) || ( pressureDevelopments.isEmpty() ) - || ( visibilityStates.isEmpty() ) ) ) + || ( visibilityStates.isEmpty() ) + || ( monthNames.isEmpty() ) ) ) { return; } @@ -392,4 +450,17 @@ visibilityStates["Very Poor"] = WeatherData::VeryPoor; visibilityStates["Fog"] = WeatherData::VeryPoor; visibilityStates["N/A"] = WeatherData::VisibilityNotAvailable; + + monthNames["Jan"] = 1; + monthNames["Feb"] = 2; + monthNames["Mar"] = 3; + monthNames["Apr"] = 4; + monthNames["May"] = 5; + monthNames["Jun"] = 6; + monthNames["Jul"] = 7; + monthNames["Aug"] = 8; + monthNames["Sep"] = 9; + monthNames["Oct"] = 10; + monthNames["Nov"] = 11; + monthNames["Dec"] = 12; } --- branches/marble/marble-gsoc-2009/src/plugins/render/weather/BBCParser.h #989760:989761 @@ -38,6 +38,7 @@ void readItem(); void readDescription( WeatherData *data ); void readTitle( WeatherData *data ); + void readPubDate( WeatherData *data ); void setupHashes(); @@ -48,6 +49,7 @@ static QHash windDirections; static QHash pressureDevelopments; static QHash visibilityStates; + static QHash monthNames; }; } // Marble namespace --- branches/marble/marble-gsoc-2009/src/plugins/render/weather/WeatherConfigWidget.ui #989760:989761 @@ -41,11 +41,6 @@ Fahrenheit - - - Kelvin - - --- branches/marble/marble-gsoc-2009/src/plugins/render/weather/WeatherData.cpp #989760:989761 @@ -292,7 +292,7 @@ void WeatherData::setDateTime( const QDateTime& dateTime ) { detach(); - d->m_dateTime = dateTime; + d->m_dateTime = dateTime.toUTC(); } bool WeatherData::hasValidDateTime() const { --- branches/marble/marble-gsoc-2009/src/plugins/render/weather/WeatherPlugin.cpp #989760:989761 @@ -118,15 +118,12 @@ int temperatureUnit; if ( m_settings.contains( "temperatureUnit" ) ) { temperatureUnit = m_settings.value( "temperatureUnit" ).toInt(); - qDebug() << "Found unit" << temperatureUnit; } else { temperatureUnit = WeatherData::Kelvin; m_settings.insert( "temperatureUnit", temperatureUnit ); - qDebug() << "Didn't find unit" << temperatureUnit; } ui_configWidget.m_temperatureComboBox->setCurrentIndex( temperatureUnit ); - qDebug() << "Set unit " << temperatureUnit; int windSpeedUnit; if ( m_settings.contains( "windSpeedUnit" ) ) {