File indexing completed on 2024-05-19 07:39:20
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2009 Bastian Holst <bastianholst@gmx.de> 0004 // 0005 0006 // Self 0007 #include "WikipediaModel.h" 0008 0009 // Plugin 0010 #include "GeonamesParser.h" 0011 0012 // Marble 0013 #include "GeoDataLatLonAltBox.h" 0014 #include "MarbleGlobal.h" 0015 #include "MarbleWidget.h" 0016 #include "MarbleModel.h" 0017 #include "MarbleDirs.h" 0018 #include "WikipediaItem.h" 0019 #include "MarbleLocale.h" 0020 #include "MarbleDebug.h" 0021 0022 // Qt 0023 #include <QUrl> 0024 #include <QString> 0025 #include <QPainter> 0026 0027 #include <QUrlQuery> 0028 0029 using namespace Marble; 0030 0031 WikipediaModel::WikipediaModel( const MarbleModel *marbleModel, QObject *parent ) 0032 : AbstractDataPluginModel( "wikipedia", marbleModel, parent ), 0033 m_marbleWidget( nullptr ), 0034 m_wikipediaIcon(MarbleDirs::path(QStringLiteral("svg/wikipedia_shadow.svg"))), 0035 m_showThumbnail( true ) 0036 { 0037 m_languageCode = MarbleLocale::languageCode(); 0038 } 0039 0040 WikipediaModel::~WikipediaModel() 0041 { 0042 } 0043 0044 void WikipediaModel::setShowThumbnail( bool show ) 0045 { 0046 m_showThumbnail = show; 0047 } 0048 0049 void WikipediaModel::getAdditionalItems( const GeoDataLatLonAltBox& box, 0050 qint32 number ) 0051 { 0052 // Geonames only supports wikipedia articles for earth 0053 if (marbleModel()->planetId() != QLatin1String("earth")) { 0054 return; 0055 } 0056 0057 QUrl geonamesUrl( "http://api.geonames.org/wikipediaBoundingBox" ); 0058 QUrlQuery urlQuery; 0059 urlQuery.addQueryItem( "north", QString::number( box.north( GeoDataCoordinates::Degree ) ) ); 0060 urlQuery.addQueryItem( "south", QString::number( box.south( GeoDataCoordinates::Degree ) ) ); 0061 urlQuery.addQueryItem( "east", QString::number( box.east( GeoDataCoordinates::Degree ) ) ); 0062 urlQuery.addQueryItem( "west", QString::number( box.west( GeoDataCoordinates::Degree ) ) ); 0063 urlQuery.addQueryItem( "maxRows", QString::number( number ) ); 0064 urlQuery.addQueryItem( "lang", m_languageCode ); 0065 urlQuery.addQueryItem( "username", "marble" ); 0066 geonamesUrl.setQuery( urlQuery ); 0067 0068 downloadDescriptionFile( geonamesUrl ); 0069 } 0070 0071 void WikipediaModel::parseFile( const QByteArray& file ) 0072 { 0073 QList<WikipediaItem*> list; 0074 GeonamesParser parser( m_marbleWidget, &list, this ); 0075 0076 parser.read( file ); 0077 0078 QList<AbstractDataPluginItem*> items; 0079 QList<WikipediaItem*>::const_iterator it; 0080 0081 for ( it = list.constBegin(); it != list.constEnd(); ++it ) { 0082 if ( itemExists( (*it)->id() ) ) { 0083 delete *it; 0084 continue; 0085 } 0086 0087 (*it)->setIcon( m_wikipediaIcon ); 0088 QUrl thumbnailImageUrl = (*it)->thumbnailImageUrl(); 0089 if ( m_showThumbnail && !thumbnailImageUrl.isEmpty() ) { 0090 downloadItem( thumbnailImageUrl, "thumbnail", *it ); 0091 } 0092 else { 0093 items << *it; 0094 } 0095 } 0096 0097 addItemsToList( items ); 0098 } 0099 0100 void WikipediaModel::setMarbleWidget(MarbleWidget *widget) 0101 { 0102 m_marbleWidget = widget; 0103 } 0104 0105 #include "moc_WikipediaModel.cpp"