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