1 /*  This file is part of the KDE project.
2 
3 Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 
5 This library is free software: you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation, either version 2.1 or 3 of the License.
8 
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU Lesser General Public License for more details.
13 
14 You should have received a copy of the GNU Lesser General Public License
15 along with this library.  If not, see <http://www.gnu.org/licenses/>.
16 
17 */
18 
19 #ifndef PHONON_MMF_DOWNLOAD_H
20 #define PHONON_MMF_DOWNLOAD_H
21 
22 #include <QtCore/QMetaType>
23 #include <QtCore/QString>
24 #include <QtCore/QUrl>
25 #include <downloadmgrclient.h>
26 
27 QT_FORWARD_DECLARE_CLASS(QByteArray)
QT_FORWARD_DECLARE_CLASS(QFile)28 QT_FORWARD_DECLARE_CLASS(QFile)
29 
30 QT_BEGIN_NAMESPACE
31 
32 namespace Phonon
33 {
34 namespace MMF
35 {
36 
37 class Download;
38 
39 class DownloadPrivate : public QObject
40                       , public MHttpDownloadMgrObserver
41 {
42     Q_OBJECT
43 public:
44     DownloadPrivate(Download *parent);
45     ~DownloadPrivate();
46     bool start(int iap);
47     void resume();
48 signals:
49     void error();
50     void targetFileNameChanged();
51     void lengthChanged(qint64 length);
52     void complete();
53 private:
54     // MHttpDownloadMgrObserver
55     void HandleDMgrEventL(RHttpDownload &aDownload, THttpDownloadEvent aEvent);
56 private:
57     Download *m_parent;
58     RHttpDownloadMgr m_downloadManager;
59     RHttpDownload *m_download;
60     qint64 m_length;
61 };
62 
63 class Download : public QObject
64 {
65     Q_OBJECT
66     friend class DownloadPrivate;
67 public:
68     Download(const QUrl &url, QObject *parent = 0);
69     ~Download();
70     const QUrl &sourceUrl() const;
71     const QString &targetFileName() const;
72     void start(int iap);
73     void resume();
74 
75     enum State {
76         Idle,
77         Initializing,
78         Downloading,
79         Complete,
80         Error
81     };
82 
83 signals:
84     void lengthChanged(qint64 length);
85     void stateChanged(Download::State state);
86 
87 private:
88     void setState(State state);
89 
90     // Called by DownloadPrivate
91     void error();
92     void downloadStarted(const QString &targetFileName);
93     void complete();
94 
95 private:
96     DownloadPrivate *m_private;
97     QUrl m_sourceUrl;
98     QString m_targetFileName;
99     State m_state;
100 };
101 
102 }
103 }
104 
105 QT_END_NAMESPACE
106 
107 Q_DECLARE_METATYPE(Phonon::MMF::Download::State)
108 
109 #endif
110