File indexing completed on 2024-11-24 04:53:15

0001 /* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net>
0002 
0003    This file is part of the Trojita Qt IMAP e-mail client,
0004    http://trojita.flaska.net/
0005 
0006    This program is free software; you can redistribute it and/or
0007    modify it under the terms of the GNU General Public License as
0008    published by the Free Software Foundation; either version 2 of
0009    the License or (at your option) version 3 or any later version
0010    accepted by the membership of KDE e.V. (or its successor approved
0011    by the membership of KDE e.V.), which shall act as a proxy
0012    defined in Section 14 of version 3 of the license.
0013 
0014    This program is distributed in the hope that it will be useful,
0015    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017    GNU General Public License for more details.
0018 
0019    You should have received a copy of the GNU General Public License
0020    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021 */
0022 #ifndef IMAP_NETWORK_DOWNLOADMANAGER_H
0023 #define IMAP_NETWORK_DOWNLOADMANAGER_H
0024 
0025 #include <QFile>
0026 #include <QPersistentModelIndex>
0027 #include <QPointer>
0028 #include <QNetworkReply>
0029 #include "Imap/Model/FullMessageCombiner.h"
0030 #include "Imap/Network/MsgPartNetAccessManager.h"
0031 
0032 namespace Imap
0033 {
0034 namespace Network
0035 {
0036 
0037 /** @short A glue code for managing message parts download
0038 
0039 This class uses the existing infrastructure provided by the
0040 MsgPartNetAccessmanager to faciliate downloading of individual
0041 message parts into real files.
0042 */
0043 class FileDownloadManager : public QObject
0044 {
0045     Q_OBJECT
0046 public:
0047     FileDownloadManager(QObject *parent, Imap::Network::MsgPartNetAccessManager *manager, const QModelIndex &partIndex);
0048     FileDownloadManager(QObject *parent, Imap::Network::MsgPartNetAccessManager *manager, const QUrl &url, const QModelIndex &relativeRoot);
0049     static QString toRealFileName(const QModelIndex &index);
0050 private slots:
0051     void onPartDataTransfered();
0052     void onReplyTransferError();
0053     void onCombinerTransferError(const QString &message);
0054     void deleteReply(QNetworkReply *reply);
0055 public slots:
0056     void downloadPart();
0057     void downloadMessage();
0058     void onMessageDataTransferred();
0059 signals:
0060     void transferError(const QString &errorMessage);
0061     void fileNameRequested(QString *fileName);
0062     void succeeded();
0063     void cancelled();
0064 private:
0065     Imap::Network::MsgPartNetAccessManager *manager;
0066     QPersistentModelIndex partIndex;
0067     QNetworkReply *reply;
0068     QFile saving;
0069     bool saved;
0070     QPointer<Imap::Mailbox::FullMessageCombiner> m_combiner;
0071     QString m_errorMessage;
0072 
0073     FileDownloadManager(const FileDownloadManager &); // don't implement
0074     FileDownloadManager &operator=(const FileDownloadManager &); // don't implement
0075 };
0076 
0077 }
0078 }
0079 
0080 #endif // IMAP_NETWORK_DOWNLOADMANAGER_H