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 #ifndef CLOUDSYNCMANAGER_H
0007 #define CLOUDSYNCMANAGER_H
0008 
0009 #include <QObject>
0010 #include <QUrl>
0011 
0012 #include "marble_export.h"
0013 
0014 namespace Marble {
0015 
0016 class BookmarkSyncManager;
0017 class RouteSyncManager;
0018 
0019 class MARBLE_EXPORT CloudSyncManager : public QObject
0020 {
0021     Q_OBJECT
0022 
0023     Q_PROPERTY( bool workOffline READ workOffline WRITE setWorkOffline NOTIFY workOfflineChanged )
0024     Q_PROPERTY( bool syncEnabled READ isSyncEnabled WRITE setSyncEnabled NOTIFY syncEnabledChanged )
0025 
0026     Q_PROPERTY( QString owncloudUsername READ owncloudUsername WRITE setOwncloudUsername NOTIFY owncloudUsernameChanged )
0027     Q_PROPERTY( QString owncloudPassword READ owncloudPassword WRITE setOwncloudPassword NOTIFY owncloudPasswordChanged )
0028     Q_PROPERTY( QString owncloudServer READ owncloudServer WRITE setOwncloudServer NOTIFY owncloudServerChanged )
0029     Q_PROPERTY( QUrl apiUrl READ apiUrl NOTIFY apiUrlChanged )
0030 
0031     Q_PROPERTY( BookmarkSyncManager* bookmarkSyncManager READ bookmarkSyncManager NOTIFY bookmarkSyncManagerChanged )
0032     Q_PROPERTY( RouteSyncManager* routeSyncManager READ routeSyncManager NOTIFY routeSyncManagerChanged )
0033 
0034 public:
0035     explicit CloudSyncManager( QObject *parent = nullptr );
0036     ~CloudSyncManager() override;
0037 
0038     /**
0039      * Status enumeration
0040      */
0041     enum Status { Unknown, Success, Error };
0042 
0043     /**
0044      * Getter for offline mode.
0045      * @return true if offline mode enabled
0046      */
0047     bool workOffline() const;
0048 
0049     /**
0050      * Setter for offline mode.
0051      * @param offline Status of offline mode
0052      */
0053     void setWorkOffline( bool offline );
0054 
0055     /**
0056      * Checks if the user enabled synchronization.
0057      * @return true if synchronization enabled
0058      */
0059     bool isSyncEnabled() const;
0060 
0061     /**
0062      * Gets ownCloud server from settings.
0063      * @return ownCloud server
0064      */
0065     QString owncloudServer() const;
0066 
0067     /**
0068      * Gets ownCloud username from settings.
0069      * @return ownCloud username
0070      */
0071     QString owncloudUsername() const;
0072 
0073     /**
0074      * Gets ownCloud password from settings
0075      * @return ownCloud password
0076      */
0077     QString owncloudPassword() const;
0078 
0079     /**
0080      * Setter for enabling/disabling synchronization.
0081      * @param enabled Status of synchronization.
0082      */
0083     void setSyncEnabled( bool enabled );
0084 
0085     /**
0086      * Change owncloud server URL, username and password at once without emitting change
0087      * signals like setOwncloudServer, setOwncloudUsername, setOwncloudPassword do.
0088      * The apiUrlChanged signal is emitted, if needed, however.
0089      * @brief setOwncloudCredentials
0090      * @param server
0091      * @param user
0092      * @param password
0093      */
0094     void setOwncloudCredentials( const QString &server, const QString &user, const QString &password );
0095 
0096     /**
0097      * Setter for ownCloud server.
0098      * @param server ownCloud server
0099      */
0100     void setOwncloudServer( const QString &owncloudServer );
0101 
0102     /**
0103      * Setter for ownCloud username.
0104      * @param username ownCloud username
0105      */
0106     void setOwncloudUsername( const QString &owncloudUsername );
0107 
0108     /**
0109      * Setter for ownCloud password.
0110      * @param password ownCloud password
0111      */
0112     void setOwncloudPassword( const QString &owncloudPassword );
0113 
0114     /**
0115      * Setter for authentication error.
0116      * @param error authentication error
0117      */
0118     void setStatus( const QString &status, CloudSyncManager::Status status_type );
0119 
0120     /**
0121      * @return Last synchronization status
0122      */
0123     CloudSyncManager::Status status() const;
0124 
0125     /**
0126      * @return A human readable description of the last synchronization status
0127      */
0128     QString statusDescription() const;
0129 
0130     /**
0131      * Returns API path as a QString.
0132      * @return API path
0133      */
0134     QString apiPath() const;
0135 
0136     /**
0137      * Returns an API url ready for use.
0138      * @return API url as QString
0139      */
0140     QUrl apiUrl() const;
0141 
0142     /**
0143      * @return A ready to use BookmarkSyncManager instance
0144      */
0145     RouteSyncManager* routeSyncManager();
0146 
0147     /**
0148      * @return A ready to use BookmarkSyncManager instance
0149      */
0150     BookmarkSyncManager* bookmarkSyncManager();
0151 
0152 Q_SIGNALS:
0153     void workOfflineChanged(bool workOffline);
0154     void syncEnabledChanged(bool enabled);
0155 
0156     void owncloudUsernameChanged(const QString &username);
0157     void owncloudPasswordChanged(const QString &password);
0158     void owncloudServerChanged(const QString &server);
0159     void statusChanged(const QString &status);
0160 
0161     void apiUrlChanged(const QUrl &url);
0162     void routeSyncManagerChanged();
0163     void bookmarkSyncManagerChanged();
0164 
0165 private:
0166     class Private;
0167     Private *d;
0168 };
0169 
0170 }
0171 
0172 #endif // CLOUDSYNCMANAGER_H