add history widget
[mdictionary] / src / plugins / xdxf / XdxfDictDownloader.h
1 /*******************************************************************************
2
3     This file is part of mDictionary.
4
5     mDictionary is free software: you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation, either version 3 of the License, or
8     (at your option) any later version.
9
10     mDictionary is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with mDictionary.  If not, see <http://www.gnu.org/licenses/>.
17
18     Copyright 2010 Comarch S.A.
19
20 *******************************************************************************/
21 /*!
22     \file XdxfDictDownloader.h
23     \brief XdxfDictDownloader is responsible for getting dict list from XDXF website
24     and other actions necessary to download and add dictionary
25
26     \author Mateusz Półrola <mateusz.polrola@comarch.pl>
27 */
28
29 #ifndef XDXFDICTDOWNLOADER_H
30 #define XDXFDICTDOWNLOADER_H
31
32 #include <QObject>
33 #include <QTimer>
34 #include <QNetworkAccessManager>
35 #include <QNetworkReply>
36 #include <DownloadDict.h>
37 #include <string.h>
38 #include <errno.h>
39
40 #include "XdxfDictSelectDialog.h"
41 #include "XdxfDictDownloadProgressDialog.h"
42 #include "../../include/Notify.h"
43 #include "HttpDownloader.h"
44
45 /*!
46     XdxfDictDownloader is responsible for getting dict list from XDXF website
47     and other actions necessary to download and add dictionary
48
49     When user want to add dictionary he may choose "browse" or "download",
50     after selecting "download"  XDXFDictDownloader would present him list of
51     dictionaries and when he select one downloading would be started. Next
52     step is to extract archive and move file to ~/.mdictionary
53 */
54 class XdxfDictDownloader : public QObject {
55     Q_OBJECT
56 public:
57     XdxfDictDownloader(QObject *parent = 0);
58
59     //! \return name of downloaded file
60     QString downloadedFile();
61
62 public Q_SLOTS:
63     //! downloads dictionaries list from xdxf website
64     void download(QWidget* parent);
65
66 Q_SIGNALS:
67     //! emmited when file download precess is complete
68     void fileDownloaded(QString);
69
70     //! emitted to inform user about errors and warnings
71     void notify(Notify::NotifyType, QString);
72
73     //! emmited what is update Download Progress
74     void downloadProgress(float);
75     void downloadProgress2(QVariant);
76
77 private Q_SLOTS:
78     //! obtained list of dictionaries from website
79     void dictListReceived(QNetworkReply*);
80
81     //! one of system processes finished
82     void processFinished();
83
84     //! user cancel downloading
85     void breakDownloading();
86
87     //! handling a download error
88     void downloadingError(QString);
89
90     /*!
91         function divide two qint64 and result emmit in
92         signals downloadProgress(float)
93     */
94     void updateDownloadProgress(qint64, qint64);
95
96 private:
97     //! dict is downloaded and unpacked
98     void downloadComplete();
99
100     QList<DownloadDict> dicts;
101     QWidget* parentDialog;
102     QString _downloadedFile;
103     XdxfDictDownloadProgressDialog* progressDialog;
104     QStringList commands;
105     int currentCommand;
106     QProcess* process;
107     QString _fileName;
108     bool downloadError;
109     bool aborted;
110     QNetworkAccessManager *manager;
111     bool extract(QString file);
112     HttpDownloader http;
113 };
114
115 #endif // XDXFDICTDOWNLOADER_H