1 #ifndef TELEGRAMFILEHANDLER_H 2 #define TELEGRAMFILEHANDLER_H 3 4 #include <QObject> 5 #include <QUrl> 6 #include <QSize> 7 8 #include "telegramqml_global.h" 9 10 class FileLocationObject; 11 class UploadObject; 12 class DownloadObject; 13 class TelegramQml; 14 class MessageObject; 15 class DialogObject; 16 class TelegramFileHandlerPrivate; 17 class TELEGRAMQMLSHARED_EXPORT TelegramFileHandler : public QObject 18 { 19 Q_OBJECT 20 Q_ENUMS(ObjectType) 21 Q_ENUMS(ProgressType) 22 Q_ENUMS(TargetType) 23 24 Q_PROPERTY(TelegramQml* telegram READ telegram WRITE setTelegram NOTIFY telegramChanged) 25 Q_PROPERTY(QObject* target READ target WRITE setTarget NOTIFY targetChanged ) 26 27 Q_PROPERTY(int objectType READ objectType NOTIFY objectTypeChanged) 28 Q_PROPERTY(int targetType READ targetType NOTIFY targetTypeChanged) 29 30 Q_PROPERTY(int progressType READ progressType NOTIFY progressTypeChanged ) 31 Q_PROPERTY(qint64 progressTotalByte READ progressTotalByte NOTIFY progressTotalByteChanged ) 32 Q_PROPERTY(qint64 progressCurrentByte READ progressCurrentByte NOTIFY progressCurrentByteChanged) 33 Q_PROPERTY(qreal progressPercent READ progressPercent NOTIFY progressPercentChanged ) 34 Q_PROPERTY(bool downloaded READ downloaded NOTIFY downloadedChanged ) 35 36 Q_PROPERTY(QUrl filePath READ filePath NOTIFY filePathChanged ) 37 Q_PROPERTY(QUrl thumbPath READ thumbPath NOTIFY thumbPathChanged) 38 39 Q_PROPERTY(bool isSticker READ isSticker NOTIFY isStickerChanged) 40 Q_PROPERTY(QSize imageSize READ imageSize NOTIFY imageSizeChanged) 41 Q_PROPERTY(qint64 fileSize READ fileSize NOTIFY fileSizeChanged ) 42 Q_PROPERTY(QString fileName READ fileName NOTIFY fileNameChanged ) 43 44 Q_PROPERTY(QUrl defaultThumbnail READ defaultThumbnail WRITE setDefaultThumbnail NOTIFY defaultThumbnailChanged) 45 46 public: 47 enum ObjectType { 48 TypeObjectEmpty, 49 TypeObjectMessage, 50 TypeObjectPeer, 51 TypeObjectDialog, 52 TypeObjectUser, 53 TypeObjectChat, 54 TypeObjectFileLocation, 55 TypeObjectMessageAction, 56 TypeObjectMessageMedia, 57 TypeObjectAudio, 58 TypeObjectDocument, 59 TypeObjectVideo, 60 TypeObjectGeoPoint, 61 TypeObjectContact, 62 TypeObjectPhoto, 63 TypeObjectPhotoSizeList, 64 TypeObjectPhotoSize, 65 TypeObjectUserProfilePhoto, 66 TypeObjectChatPhoto 67 }; 68 69 enum ProgressType { 70 TypeProgressEmpty, 71 TypeProgressUpload, 72 TypeProgressDownload 73 }; 74 75 enum TargetType { 76 TypeTargetUnknown, 77 TypeTargetMediaPhoto, 78 TypeTargetMediaAudio, 79 TypeTargetMediaVideo, 80 TypeTargetMediaDocument, 81 TypeTargetMediaGeoPoint, 82 TypeTargetMediaContact, 83 TypeTargetMediaOther, 84 TypeTargetChatPhoto, 85 TypeTargetUserPhoto, 86 TypeTargetActionChatPhoto 87 }; 88 89 TelegramFileHandler(QObject *parent = 0); 90 ~TelegramFileHandler(); 91 92 void setTelegram(TelegramQml *tg); 93 TelegramQml *telegram() const; 94 95 void setTarget(QObject *obj); 96 QObject *target() const; 97 98 int objectType() const; 99 int targetType() const; 100 101 int progressType() const; 102 bool downloaded() const; 103 qint64 progressTotalByte() const; 104 qint64 progressCurrentByte() const; 105 qreal progressPercent() const; 106 107 void setDefaultThumbnail(const QUrl &url); 108 QUrl defaultThumbnail() const; 109 110 QUrl filePath() const; 111 QUrl thumbPath() const; 112 113 bool isSticker() const; 114 QSize imageSize() const; 115 qint64 fileSize() const; 116 QString fileName() const; 117 118 public Q_SLOTS: 119 bool cancelProgress(); 120 bool download(); 121 122 Q_SIGNALS: 123 void telegramChanged(); 124 void targetChanged(); 125 126 void objectTypeChanged(); 127 void targetTypeChanged(); 128 129 void progressTypeChanged(); 130 void downloadedChanged(); 131 void progressTotalByteChanged(); 132 void progressCurrentByteChanged(); 133 void progressPercentChanged(); 134 135 void defaultThumbnailChanged(); 136 void filePathChanged(); 137 void thumbPathChanged(); 138 139 void isStickerChanged(); 140 void imageSizeChanged(); 141 void fileSizeChanged(); 142 void fileNameChanged(); 143 144 private Q_SLOTS: 145 void refresh(); 146 147 void dwl_locationChanged(); 148 void dwl_downloadedChanged(); 149 void dwl_totalChanged(); 150 void dwl_fileIdChanged(); 151 152 void upl_locationChanged(); 153 void upl_uploadedChanged(); 154 void upl_totalSizeChanged(); 155 void upl_fileIdChanged(); 156 157 void emitPathChanges(); 158 159 private: 160 FileLocationObject *analizeObject(QObject *target, int *targetType = 0, QObject **targetPointer = 0); 161 ObjectType detectObjectType(QObject *obj); 162 void detectObjectType(); 163 164 void connectLocation(FileLocationObject *lct); 165 void disconnectLocation(FileLocationObject *lct); 166 167 void connectUpload(UploadObject *ul); 168 void disconnectUpload(UploadObject *ul); 169 170 private: 171 TelegramFileHandlerPrivate *p; 172 }; 173 174 #endif // TELEGRAMFILEHANDLER_H 175