6 #include "RouteSyncManager.h"
8 #include "GeoDataParser.h"
9 #include "MarbleDirs.h"
10 #include "MarbleDebug.h"
11 #include "GeoDataFolder.h"
12 #include "GeoDataDocument.h"
13 #include "GeoDataPlacemark.h"
14 #include "CloudRouteModel.h"
15 #include "CloudRoutesDialog.h"
16 #include "CloudSyncManager.h"
17 #include "OwncloudSyncBackend.h"
18 #include "RouteItem.h"
19 #include "RoutingManager.h"
33 class Q_DECL_HIDDEN RouteSyncManager::Private {
35 Private( CloudSyncManager *cloudSyncManager );
38 bool m_routeSyncEnabled;
39 CloudSyncManager *m_cloudSyncManager;
40 RoutingManager *m_routingManager;
41 CloudRouteModel *m_model;
44 OwncloudSyncBackend m_owncloudBackend;
48 RouteSyncManager::Private::Private( CloudSyncManager *cloudSyncManager ) :
49 m_routeSyncEnabled( false ),
50 m_cloudSyncManager( cloudSyncManager ),
51 m_routingManager( nullptr ),
52 m_model( new CloudRouteModel() ),
53 m_owncloudBackend( cloudSyncManager )
55 m_cacheDir =
QDir(MarbleDirs::localPath() +
QLatin1String(
"/cloudsync/cache/routes/"));
58 RouteSyncManager::Private::~Private()
63 RouteSyncManager::RouteSyncManager(CloudSyncManager *cloudSyncManager) :
64 d( new Private( cloudSyncManager ) )
66 connect( &d->m_owncloudBackend, SIGNAL(routeUploadProgress(qint64,qint64)),
this, SLOT(updateUploadProgressbar(qint64,qint64)) );
68 connect( &d->m_owncloudBackend, SIGNAL(routeListDownloadProgress(qint64,qint64)),
this, SIGNAL(routeListDownloadProgress(qint64,qint64)) );
69 connect( &d->m_owncloudBackend, SIGNAL(routeDownloadProgress(qint64,qint64)), d->m_model, SLOT(updateProgress(qint64,qint64)) );
70 connect( &d->m_owncloudBackend, SIGNAL(routeDownloaded()),
this, SLOT(prepareRouteList()) );
71 connect( &d->m_owncloudBackend, SIGNAL(routeDeleted()),
this, SLOT(prepareRouteList()) );
72 connect( &d->m_owncloudBackend, SIGNAL(removedFromCache(
QString)),
this, SLOT(prepareRouteList()) );
75 RouteSyncManager::~RouteSyncManager()
80 void RouteSyncManager::setRoutingManager(RoutingManager *routingManager)
82 d->m_routingManager = routingManager;
85 bool RouteSyncManager::isRouteSyncEnabled()
const
87 return d->m_routeSyncEnabled && d->m_cloudSyncManager && d->m_cloudSyncManager->isSyncEnabled();
90 void RouteSyncManager::setRouteSyncEnabled(
bool enabled )
92 if ( d->m_routeSyncEnabled != enabled ) {
93 d->m_routeSyncEnabled = enabled;
94 emit routeSyncEnabledChanged( d->m_routeSyncEnabled );
98 CloudRouteModel* RouteSyncManager::model()
103 QString RouteSyncManager::generateTimestamp()
const
109 QString RouteSyncManager::saveDisplayedToCache()
const
111 if ( !d->m_routingManager ) {
112 qWarning() <<
"RoutingManager instance not set in RouteSyncManager. Cannot save current route.";
116 d->m_cacheDir.mkpath( d->m_cacheDir.absolutePath() );
118 const QString timestamp = generateTimestamp();
120 d->m_routingManager->saveRoute( filename );
124 void RouteSyncManager::uploadRoute()
126 if( !d->m_cloudSyncManager->workOffline() ) {
127 d->m_owncloudBackend.uploadRoute( saveDisplayedToCache() );
135 for (
const QString &routeFilename: cachedRoutes ) {
136 QFile file(d->m_cacheDir.absolutePath() +
QLatin1Char(
'/') + routeFilename);
139 GeoDataParser parser( GeoData_KML );
140 if( !parser.read( &file ) ) {
147 GeoDocument *geoDoc = parser.releaseDocument();
148 GeoDataDocument *container =
dynamic_cast<GeoDataDocument*
>( geoDoc );
149 if ( container && container->size() > 0 ) {
150 GeoDataFolder *folder = container->folderList().
at( 0 );
151 for ( GeoDataPlacemark *placemark: folder->placemarkList() ) {
156 routeName = routeName.
left( routeName.
length() - 3 );
157 QString timestamp = routeFilename.
left( routeFilename.length() - 4 );
161 QString previewPath =
QString(
"%0/preview/%1.jpg" ).
arg( d->m_cacheDir.absolutePath(), timestamp );
164 if(
QFile( previewPath ).exists() ) {
165 preview =
QIcon( previewPath );
169 QUrl previewUrl(
QString(
"file://%0" ).arg( previewPath ) );
172 item.setIdentifier( timestamp );
173 item.setName( routeName );
174 item.setDistance( distance );
175 item.setDistance( duration );
176 item.setPreview( preview );
177 item.setPreviewUrl( previewUrl );
178 item.setOnCloud(
false );
185 void RouteSyncManager::uploadRoute(
const QString ×tamp )
187 if( !d->m_cloudSyncManager->workOffline() ) {
188 d->m_owncloudBackend.uploadRoute( timestamp );
192 void RouteSyncManager::prepareRouteList()
194 d->m_routeList.
clear();
197 for(
const RouteItem &item: cachedRoutes ) {
198 d->m_routeList.append( item );
201 if( !d->m_cloudSyncManager->workOffline() ) {
202 d->m_owncloudBackend.downloadRouteList();
206 d->m_model->setItems( d->m_routeList );
210 void RouteSyncManager::downloadRoute(
const QString ×tamp )
212 d->m_owncloudBackend.downloadRoute( timestamp );
215 void RouteSyncManager::openRoute(
const QString ×tamp )
217 if ( !d->m_routingManager ) {
218 qWarning() <<
"RoutingManager instance not set in RouteSyncManager. Cannot open route " << timestamp;
222 d->m_routingManager->loadRoute(
QString(
"%0/%1.kml" )
223 .arg( d->m_cacheDir.absolutePath() )
227 void RouteSyncManager::deleteRoute(
const QString ×tamp )
229 d->m_owncloudBackend.deleteRoute( timestamp );
232 void RouteSyncManager::removeRouteFromCache(
const QString ×tamp )
234 d->m_owncloudBackend.removeFromCache( d->m_cacheDir, timestamp );
237 void RouteSyncManager::updateUploadProgressbar( qint64 sent, qint64 total )
239 emit routeUploadProgress( sent, total );
240 if( sent == total ) {
247 if( d->m_routeList.count() > 0 ) {
249 for(
const RouteItem &item: routeList ) {
250 cloudRoutes.
append( item.identifier() );
253 for(
int position = 0; position < d->m_routeList.count(); position++ ) {
254 if( cloudRoutes.
contains( d->m_routeList.at( position ).identifier() ) ) {
255 d->m_routeList[ position ].setOnCloud(
true );
260 for(
const RouteItem &item: d->m_routeList ) {
261 cachedRoutes.
append( item.identifier() );
264 for(
const RouteItem &item: routeList ) {
265 if( !cachedRoutes.
contains( item.identifier() ) ) {
266 d->m_routeList.append( item );
270 for(
const RouteItem &item: routeList ) {
271 d->m_routeList.append( item );
275 d->m_model->setItems( d->m_routeList );
280 #include "moc_RouteSyncManager.cpp"