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"