File indexing completed on 2024-05-05 03:50:48
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2008 Shashan Singh <shashank.personal@gmail.com> 0004 // SPDX-FileCopyrightText: 2009 Bastian Holst <bastianholst@gmx.de> 0005 // 0006 0007 // Self 0008 #include "PanoramioModel.h" 0009 #include "PanoramioItem.h" 0010 #include "PanoramioParser.h" 0011 0012 // Marble 0013 #include "GeoDataLatLonAltBox.h" 0014 #include "MarbleModel.h" 0015 0016 // Qt 0017 #include <QUrl> 0018 #include <QString> 0019 0020 using namespace Marble; 0021 0022 PanoramioModel::PanoramioModel( const MarbleModel *marbleModel, QObject *parent ) : 0023 AbstractDataPluginModel( "panoramio", marbleModel, parent ), 0024 m_marbleWidget( 0 ) 0025 { 0026 } 0027 0028 void PanoramioModel::setMarbleWidget( MarbleWidget *widget ) 0029 { 0030 m_marbleWidget = widget; 0031 } 0032 0033 void PanoramioModel::getAdditionalItems( const GeoDataLatLonAltBox &box, qint32 number ) 0034 { 0035 if (marbleModel()->planetId() != QLatin1String("earth")) { 0036 return; 0037 } 0038 0039 // FIXME: Download a list of constant number, because the parser doesn't support 0040 // loading a file of an unknown length. 0041 const QUrl jsonUrl(QLatin1String("http://www.panoramio.com/map/get_panoramas.php?from=") 0042 + QString::number(0) 0043 + QLatin1String("&order=upload_date") 0044 + QLatin1String("&set=public") 0045 + QLatin1String("&to=") + QString::number(number) 0046 // + QLatin1String("&to=") + QString::number( number ) 0047 + QLatin1String("&minx=") + QString::number(box.west() * RAD2DEG) 0048 + QLatin1String("&miny=") + QString::number(box.south() * RAD2DEG) 0049 + QLatin1String("&maxx=") + QString::number(box.east() * RAD2DEG) 0050 + QLatin1String("&maxy=") + QString::number(box.north() * RAD2DEG) 0051 + QLatin1String("&size=small")); 0052 0053 downloadDescriptionFile( jsonUrl ); 0054 } 0055 0056 void PanoramioModel::parseFile( const QByteArray &file ) 0057 { 0058 PanoramioParser panoramioJsonParser; 0059 QList<panoramioDataStructure> list 0060 = panoramioJsonParser.parseAllObjects( file, 0061 numberOfImagesPerFetch ); 0062 0063 QList<panoramioDataStructure>::iterator it; 0064 for ( it = list.begin(); it != list.end(); ++it ) { 0065 // Setting the meta information of the current image 0066 GeoDataCoordinates coordinates( (*it).longitude, 0067 (*it).latitude, 0068 0, 0069 GeoDataCoordinates::Degree ); 0070 0071 if( itemExists( QString::number( (*it).photo_id ) ) ) { 0072 continue; 0073 } 0074 0075 PanoramioItem *item = new PanoramioItem( m_marbleWidget, this ); 0076 item->setCoordinate( coordinates ); 0077 item->setId( QString::number( (*it).photo_id ) ); 0078 item->setPhotoUrl( (*it).photo_url ); 0079 item->setUploadDate( (*it).upload_date ); 0080 0081 downloadItem( QUrl( (*it).photo_file_url ), 0082 standardImageSize, 0083 item ); 0084 0085 addItemToList( item ); 0086 } 0087 } 0088 0089 #include "moc_PanoramioModel.cpp"