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