File indexing completed on 2024-12-01 12:29:51

0001 /*
0002  * BluezQt - Asynchronous BlueZ wrapper library
0003  *
0004  * SPDX-FileCopyrightText: 2014-2015 David Rosca <nowrep@gmail.com>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007  */
0008 
0009 #ifndef BLUEZQT_OBEXTRANSFER_H
0010 #define BLUEZQT_OBEXTRANSFER_H
0011 
0012 #include <QObject>
0013 
0014 #include "bluezqt_export.h"
0015 #include "types.h"
0016 
0017 class QDBusObjectPath;
0018 
0019 namespace BluezQt
0020 {
0021 class PendingCall;
0022 
0023 /**
0024  * @class BluezQt::ObexTransfer obextransfer.h <BluezQt/ObexTransfer>
0025  *
0026  * OBEX transfer.
0027  *
0028  * This class represents transfer of one file.
0029  */
0030 class BLUEZQT_EXPORT ObexTransfer : public QObject
0031 {
0032     Q_OBJECT
0033 
0034     Q_PROPERTY(Status status READ status NOTIFY statusChanged)
0035     Q_PROPERTY(QString name READ name)
0036     Q_PROPERTY(QString type READ type)
0037     Q_PROPERTY(quint64 time READ time)
0038     Q_PROPERTY(quint64 size READ size)
0039     Q_PROPERTY(quint64 transferred READ transferred NOTIFY transferredChanged)
0040     Q_PROPERTY(QString fileName READ fileName NOTIFY fileNameChanged)
0041     Q_PROPERTY(bool suspendable READ isSuspendable)
0042 
0043 public:
0044     /**
0045      * Status of transfer.
0046      */
0047     enum Status {
0048         /** Indicates that the transfer is queued. */
0049         Queued,
0050         /** Indicates that the transfer is active. */
0051         Active,
0052         /** Indicates that the transfer is suspended. */
0053         Suspended,
0054         /** Indicates that the transfer have completed successfully. */
0055         Complete,
0056         /** Indicates that the transfer have failed with error. */
0057         Error,
0058         /** Indicates that the transfer status is unknown. */
0059         Unknown,
0060     };
0061     Q_ENUM(Status)
0062 
0063     /**
0064      * Destroys an ObexTransfer object.
0065      */
0066     ~ObexTransfer() override;
0067 
0068     /**
0069      * Returns a shared pointer from this.
0070      *
0071      * @return ObexTransferPtr
0072      */
0073     ObexTransferPtr toSharedPtr() const;
0074 
0075     /**
0076      * D-Bus object path of the transfer.
0077      *
0078      * @return object path of transfer
0079      */
0080     QDBusObjectPath objectPath() const;
0081 
0082     /**
0083      * Returns the status of the transfer.
0084      *
0085      * @return status of transfer
0086      */
0087     Status status() const;
0088 
0089     /**
0090      * Returns the name of the transferred object.
0091      *
0092      * @return name of transferred object
0093      */
0094     QString name() const;
0095 
0096     /**
0097      * Returns the type of the transferred object.
0098      *
0099      * @return type of transferred object
0100      */
0101     QString type() const;
0102 
0103     /**
0104      * Returns the time of the transferred object.
0105      *
0106      * @return time of transferred object
0107      */
0108     quint64 time() const;
0109 
0110     /**
0111      * Returns the total size of the transferred object.
0112      *
0113      * @return size of transferred object
0114      */
0115     quint64 size() const;
0116 
0117     /**
0118      * Returns the number of bytes transferred.
0119      *
0120      * @return number of bytes transferred
0121      */
0122     quint64 transferred() const;
0123 
0124     /**
0125      * Returns the full name of the transferred file.
0126      *
0127      * @return full name of transferred file
0128      */
0129     QString fileName() const;
0130 
0131     /**
0132      * Returns whether the transfer is suspendable.
0133      *
0134      * @return true if transfer is suspendable
0135      */
0136     bool isSuspendable() const;
0137 
0138     /**
0139      * Stops the current transfer.
0140      *
0141      * Possible errors: PendingCall::NotAuthorized, PendingCall::InProgress
0142      *                  PendingCall::Failed
0143      *
0144      * @return void pending call
0145      */
0146     PendingCall *cancel();
0147 
0148     /**
0149      * Suspends the current transfer.
0150      *
0151      * Only suspendable transfers can be suspended.
0152      *
0153      * Possible errors: PendingCall::NotAuthorized, PendingCall::NotInProgress
0154      *
0155      * @see isSuspendable() const
0156      *
0157      * @return void pending call
0158      */
0159     PendingCall *suspend();
0160 
0161     /**
0162      * Resumes the current transfer.
0163      *
0164      * Possible errors: PendingCall::NotAuthorized, PendingCall::NotInProgress
0165      *
0166      * @return void pending call
0167      */
0168     PendingCall *resume();
0169 
0170 Q_SIGNALS:
0171     /**
0172      * Indicates that the status of transfer have changed.
0173      */
0174     void statusChanged(Status status);
0175 
0176     /**
0177      * Indicates that the number of transferred bytes have changed.
0178      */
0179     void transferredChanged(quint64 transferred);
0180 
0181     /**
0182      * Indicates that the name of transferred file have changed.
0183      */
0184     void fileNameChanged(const QString &fileName);
0185 
0186 private:
0187     BLUEZQT_NO_EXPORT explicit ObexTransfer(const QString &path, const QVariantMap &properties);
0188 
0189     class ObexTransferPrivate *const d;
0190 
0191     friend class ObexTransferPrivate;
0192     friend class ObexAgentAdaptor;
0193     friend class PendingCallPrivate;
0194 };
0195 
0196 } // namespace BluezQt
0197 
0198 #endif // BLUEZQT_OBEXTRANSFER_H