fix gmail attachment download

This commit is contained in:
Martin Rotter 2019-04-09 10:12:38 +02:00
parent eeb12394a4
commit 6ffc2c0a8d
6 changed files with 20 additions and 17 deletions

View File

@ -8,8 +8,6 @@
MessageTextBrowser::MessageTextBrowser(QWidget* parent) : QTextBrowser(parent) {}
MessageTextBrowser::~MessageTextBrowser() {}
QVariant MessageTextBrowser::loadResource(int type, const QUrl& name) {
Q_UNUSED(name)

View File

@ -9,8 +9,8 @@ class MessageTextBrowser : public QTextBrowser {
Q_OBJECT
public:
explicit MessageTextBrowser(QWidget* parent = 0);
virtual ~MessageTextBrowser();
explicit MessageTextBrowser(QWidget* parent = nullptr);
virtual ~MessageTextBrowser() = default;
QVariant loadResource(int type, const QUrl& name);

View File

@ -8,7 +8,7 @@
#define GMAIL_OAUTH_SCOPE "https://mail.google.com/"
#define GMAIL_API_BATCH_UPD_LABELS "https://www.googleapis.com/gmail/v1/users/me/messages/batchModify"
#define GMAIL_API_GET_ATTACHMENT "https://www.googleapis.com/gmail/v1/users/me/messages/%20/attachments/"
#define GMAIL_API_GET_ATTACHMENT "https://www.googleapis.com/gmail/v1/users/me/messages/%1/attachments/%2"
#define GMAIL_API_LABELS_LIST "https://www.googleapis.com/gmail/v1/users/me/labels"
#define GMAIL_API_MSGS_LIST "https://www.googleapis.com/gmail/v1/users/me/messages"
#define GMAIL_API_BATCH "https://www.googleapis.com/batch"

View File

@ -118,14 +118,16 @@ bool GmailServiceRoot::downloadAttachmentOnMyOwn(const QUrl& url) const {
QString file = QFileDialog::getSaveFileName(qApp->mainFormWidget(), tr("Select attachment destination file"),
qApp->homeFolder() + QDir::separator() + parts.at(0));
if (!file.isEmpty()) {
Downloader* down = network()->downloadAttachment(parts.at(1));
if (!file.isEmpty() && parts.size() == 3) {
Downloader* down = network()->downloadAttachment(parts.at(1), parts.at(2));
FormDownloadAttachment form(file, down, qApp->mainFormWidget());
form.exec();
return true;
}
else {
return false;
}
return true;
}
QList<QAction*> GmailServiceRoot::serviceMenu() {

View File

@ -72,20 +72,21 @@ void GmailNetworkFactory::setUsername(const QString& username) {
m_username = username;
}
Downloader* GmailNetworkFactory::downloadAttachment(const QString& attachment_id) {
Downloader* GmailNetworkFactory::downloadAttachment(const QString& msg_id, const QString& attachment_id) {
Downloader* downloader = new Downloader();
QString bearer = m_oauth2->bearer().toLocal8Bit();
if (bearer.isEmpty()) {
return nullptr;
}
else {
QString target_url = QString(GMAIL_API_GET_ATTACHMENT).arg(msg_id, attachment_id);
QString target_url = QString(GMAIL_API_GET_ATTACHMENT) + attachment_id;
downloader->appendRawHeader(QString(HTTP_HEADERS_AUTHORIZATION).toLocal8Bit(), bearer.toLocal8Bit());
downloader->downloadFile(target_url);
downloader->appendRawHeader(QString(HTTP_HEADERS_AUTHORIZATION).toLocal8Bit(), bearer.toLocal8Bit());
downloader->downloadFile(target_url);
return downloader;
return downloader;
}
}
QList<Message> GmailNetworkFactory::messages(const QString& stream_id, Feed::Status& error) {
@ -356,7 +357,9 @@ bool GmailNetworkFactory::fillFullMessage(Message& msg, const QJsonObject& json,
}
else if (!filename.isEmpty()) {
// We have attachment.
msg.m_enclosures.append(Enclosure(filename + QL1S(GMAIL_ATTACHMENT_SEP) + body["attachmentId"].toString(),
msg.m_enclosures.append(Enclosure(filename +
QL1S(GMAIL_ATTACHMENT_SEP) + msg.m_customId +
QL1S(GMAIL_ATTACHMENT_SEP) + body["attachmentId"].toString(),
filename + QString(" (%1 KB)").arg(QString::number(body["size"].toInt() / 1000.0))));
}
}

View File

@ -39,7 +39,7 @@ class GmailNetworkFactory : public QObject {
// Returned items do not have primary IDs assigned.
//RootItem* feedsCategories();
Downloader* downloadAttachment(const QString& attachment_id);
Downloader* downloadAttachment(const QString& msg_id, const QString& attachment_id);
QList<Message> messages(const QString& stream_id, Feed::Status& error);
void markMessagesRead(RootItem::ReadStatus status, const QStringList& custom_ids, bool async = true);