File indexing completed on 2024-05-05 03:49:15

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2013 Utku Aydın <utkuaydin34@gmail.com>
0004 //
0005 
0006 #include "CloudSyncManager.h"
0007 #include "BookmarkSyncManager.h"
0008 #include "RouteSyncManager.h"
0009 
0010 namespace Marble
0011 {
0012 
0013 class Q_DECL_HIDDEN CloudSyncManager::Private {
0014 
0015 public:
0016     Private();
0017     ~Private();
0018 
0019     bool m_workOffline;
0020 
0021     bool m_syncEnabled;
0022 
0023     QString m_owncloudProtocol;
0024     QString m_ownloudServer;
0025     QString m_owncloudUsername;
0026     QString m_owncloudPassword;
0027     QString m_status;
0028     CloudSyncManager::Status m_status_type;
0029 
0030     RouteSyncManager* m_routeSyncManager;
0031     BookmarkSyncManager* m_bookmarkSyncManager;
0032 };
0033 
0034 CloudSyncManager::Private::~Private()
0035 {
0036     delete m_routeSyncManager;
0037     delete m_bookmarkSyncManager;
0038 }
0039 
0040 CloudSyncManager::Private::Private() :
0041     m_workOffline( false ),
0042     m_syncEnabled( false ),
0043     m_owncloudProtocol( "http" ),
0044     m_ownloudServer(),
0045     m_owncloudUsername(),
0046     m_owncloudPassword(),
0047     m_status(),
0048     m_status_type( CloudSyncManager::Unknown),
0049     m_routeSyncManager( nullptr ),
0050     m_bookmarkSyncManager( nullptr )
0051 {
0052 }
0053 
0054 CloudSyncManager::CloudSyncManager( QObject *parent ) :
0055     QObject( parent ),
0056     d( new Private )
0057 {
0058 }
0059 
0060 CloudSyncManager::~CloudSyncManager()
0061 {
0062   delete d;
0063 }
0064 
0065 bool CloudSyncManager::workOffline() const
0066 {
0067     return d->m_workOffline;
0068 }
0069 
0070 void CloudSyncManager::setWorkOffline( bool offline )
0071 {
0072     if ( offline != d->m_workOffline ) {
0073         d->m_workOffline = offline;
0074         emit workOfflineChanged( d->m_workOffline );
0075     }
0076 }
0077 
0078 bool CloudSyncManager::isSyncEnabled() const
0079 {
0080     return d->m_syncEnabled;
0081 }
0082 
0083 QString CloudSyncManager::owncloudServer() const
0084 {
0085     return d->m_owncloudProtocol + d->m_ownloudServer;
0086 }
0087 
0088 QString CloudSyncManager::owncloudUsername() const
0089 {
0090     return d->m_owncloudUsername;
0091 }
0092 
0093 QString CloudSyncManager::owncloudPassword() const
0094 {
0095     return d->m_owncloudPassword;
0096 }
0097 
0098 void CloudSyncManager::setSyncEnabled( bool enabled )
0099 {
0100     if ( d->m_syncEnabled != enabled ) {
0101         d->m_syncEnabled = enabled;
0102         emit syncEnabledChanged( d->m_syncEnabled );
0103     }
0104 }
0105 
0106 void CloudSyncManager::setOwncloudCredentials( const QString &server, const QString &user, const QString &password )
0107 {
0108     QUrl const oldApiUrl = apiUrl();
0109     blockSignals( true );
0110     setOwncloudServer( server );
0111     setOwncloudUsername( user );
0112     setOwncloudPassword( password );
0113     blockSignals( false );
0114     if ( oldApiUrl != apiUrl() ) {
0115         emit apiUrlChanged( apiUrl() );
0116     }
0117 }
0118 
0119 void CloudSyncManager::setOwncloudServer( const QString &server )
0120 {
0121     QString const oldProtocol = d->m_owncloudProtocol;
0122     QString const oldServer = d->m_ownloudServer;
0123 
0124     if (server.startsWith(QLatin1String("http://"))) {
0125         d->m_owncloudProtocol = "http://";
0126         d->m_ownloudServer = server.mid( 7 );
0127     } else if (server.startsWith(QLatin1String("https://"))) {
0128         d->m_owncloudProtocol = "https://";
0129         d->m_ownloudServer = server.mid ( 8 );
0130     } else {
0131         d->m_owncloudProtocol = "http://";
0132         d->m_ownloudServer = server;
0133     }
0134 
0135     if ( oldServer != d->m_ownloudServer ) {
0136         emit owncloudServerChanged( owncloudServer() );
0137         emit apiUrlChanged( apiUrl() );
0138     } else if ( oldProtocol != d->m_owncloudProtocol ) {
0139         emit apiUrlChanged( apiUrl() );
0140     }
0141 }
0142 
0143 void CloudSyncManager::setOwncloudUsername( const QString &username )
0144 {
0145     if ( d->m_owncloudUsername != username ) {
0146         d->m_owncloudUsername = username;
0147         emit owncloudUsernameChanged( d->m_owncloudUsername );
0148         emit apiUrlChanged( apiUrl() );
0149     }
0150 }
0151 
0152 void CloudSyncManager::setOwncloudPassword( const QString &password )
0153 {
0154     if ( d->m_owncloudPassword != password ) {
0155         d->m_owncloudPassword = password;
0156         emit owncloudPasswordChanged( d->m_owncloudPassword );
0157         emit apiUrlChanged( apiUrl() );
0158     }
0159 }
0160 
0161 void CloudSyncManager::setStatus( const QString &status, CloudSyncManager::Status status_type )
0162 {
0163     if( d->m_status != status && d->m_status_type != status_type) {
0164         d->m_status = status;
0165         d->m_status_type = status_type;
0166         emit statusChanged( d->m_status );
0167     }
0168 }
0169 
0170 CloudSyncManager::Status CloudSyncManager::status() const
0171 {
0172     return d->m_status_type;
0173 }
0174 
0175 QString CloudSyncManager::statusDescription() const
0176 {
0177     return d->m_status;
0178 }
0179 
0180 QString CloudSyncManager::apiPath() const
0181 {
0182     return "index.php/apps/marble/api/v1";
0183 }
0184 
0185 QUrl CloudSyncManager::apiUrl() const
0186 {
0187     return QUrl( QString( "%0%1:%2@%3/%4" )
0188                  .arg( d->m_owncloudProtocol )
0189                  .arg( d->m_owncloudUsername ).arg( d->m_owncloudPassword )
0190                  .arg( d->m_ownloudServer ).arg( apiPath() ) );
0191 }
0192 
0193 RouteSyncManager *CloudSyncManager::routeSyncManager()
0194 {
0195     if ( !d->m_routeSyncManager ) {
0196         d->m_routeSyncManager = new RouteSyncManager( this );
0197     }
0198 
0199     return d->m_routeSyncManager;
0200 }
0201 
0202 BookmarkSyncManager *CloudSyncManager::bookmarkSyncManager()
0203 {
0204     if ( !d->m_bookmarkSyncManager ) {
0205         d->m_bookmarkSyncManager = new BookmarkSyncManager( this );
0206     }
0207 
0208     return d->m_bookmarkSyncManager;
0209 }
0210 
0211 }
0212 
0213 #include "moc_CloudSyncManager.cpp"