utilities/downloadmanager/src/downloadcore.cpp
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16
hgs
parents:
diff changeset
     1
/**
hgs
parents:
diff changeset
     2
   This file is part of CWRT package **
hgs
parents:
diff changeset
     3
hgs
parents:
diff changeset
     4
   Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). **
hgs
parents:
diff changeset
     5
hgs
parents:
diff changeset
     6
   This program is free software: you can redistribute it and/or modify
hgs
parents:
diff changeset
     7
   it under the terms of the GNU (Lesser) General Public License as 
hgs
parents:
diff changeset
     8
   published by the Free Software Foundation, version 2.1 of the License. 
hgs
parents:
diff changeset
     9
   This program is distributed in the hope that it will be useful, but
hgs
parents:
diff changeset
    10
   WITHOUT ANY WARRANTY; without even the implied warranty of 
hgs
parents:
diff changeset
    11
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
hgs
parents:
diff changeset
    12
   (Lesser) General Public License for more details. You should have 
hgs
parents:
diff changeset
    13
   received a copy of the GNU (Lesser) General Public License along 
hgs
parents:
diff changeset
    14
   with this program. If not, see <http://www.gnu.org/licenses/>.
hgs
parents:
diff changeset
    15
*/
hgs
parents:
diff changeset
    16
hgs
parents:
diff changeset
    17
#include <qnetworkaccessmanager.h>
hgs
parents:
diff changeset
    18
#include <QNetworkReply>
hgs
parents:
diff changeset
    19
#include <QNetworkProxy>
hgs
parents:
diff changeset
    20
#include "downloadcore.h"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// Http Headers
hgs
parents:
diff changeset
    23
#define RANGE_HEADER "Range"
hgs
parents:
diff changeset
    24
#define ETAG_HEADER "ETag"
hgs
parents:
diff changeset
    25
#define ECONTENT_DISPOSITION_HEADER "Content-Disposition"
hgs
parents:
diff changeset
    26
#define IF_MATCH_HEADER "If-Match"
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
enum DownloadMethod
hgs
parents:
diff changeset
    29
{
hgs
parents:
diff changeset
    30
    Invalid,
hgs
parents:
diff changeset
    31
    FromURL,
hgs
parents:
diff changeset
    32
    FromReply
hgs
parents:
diff changeset
    33
};
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// private implementation class
hgs
parents:
diff changeset
    36
class DownloadCorePrivate
hgs
parents:
diff changeset
    37
{
hgs
parents:
diff changeset
    38
    DM_DECLARE_PUBLIC(DownloadCore);
hgs
parents:
diff changeset
    39
public:
hgs
parents:
diff changeset
    40
    DownloadCorePrivate();
hgs
parents:
diff changeset
    41
    ~DownloadCorePrivate();
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
    // member variables
hgs
parents:
diff changeset
    44
    QString m_url; // url
hgs
parents:
diff changeset
    45
    QNetworkReply *m_reply;
hgs
parents:
diff changeset
    46
    QNetworkAccessManager *m_networkAccessManager;
hgs
parents:
diff changeset
    47
    // content type
hgs
parents:
diff changeset
    48
    QString m_contentType;
hgs
parents:
diff changeset
    49
    // ETag header value
hgs
parents:
diff changeset
    50
    QString m_entityTag;
hgs
parents:
diff changeset
    51
    // total size
hgs
parents:
diff changeset
    52
    qint64 m_sizeInHeader;
hgs
parents:
diff changeset
    53
    // Last error code
hgs
parents:
diff changeset
    54
    QNetworkReply::NetworkError m_lastError;
hgs
parents:
diff changeset
    55
    QString m_lastErrorString;
hgs
parents:
diff changeset
    56
    QNetworkProxy *m_proxy;  //not owned
hgs
parents:
diff changeset
    57
    DownloadMethod m_dlMethod; 
hgs
parents:
diff changeset
    58
    bool networkAccessManagerOwned;
hgs
parents:
diff changeset
    59
    QString m_fileNameFromContentDisposition;
hgs
parents:
diff changeset
    60
};
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
DownloadCorePrivate::DownloadCorePrivate()
hgs
parents:
diff changeset
    63
{
hgs
parents:
diff changeset
    64
    m_url = "";
hgs
parents:
diff changeset
    65
    m_reply = 0;
hgs
parents:
diff changeset
    66
    m_networkAccessManager = 0;
hgs
parents:
diff changeset
    67
    m_contentType = "";
hgs
parents:
diff changeset
    68
    m_entityTag = "";
hgs
parents:
diff changeset
    69
    m_sizeInHeader = 0;
hgs
parents:
diff changeset
    70
    m_lastError = QNetworkReply::NoError;
hgs
parents:
diff changeset
    71
    m_lastErrorString = "";
hgs
parents:
diff changeset
    72
    m_proxy = 0;
hgs
parents:
diff changeset
    73
    m_dlMethod = Invalid;
hgs
parents:
diff changeset
    74
    networkAccessManagerOwned = false;
hgs
parents:
diff changeset
    75
    m_fileNameFromContentDisposition ="";
hgs
parents:
diff changeset
    76
}
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
DownloadCorePrivate::~DownloadCorePrivate()
hgs
parents:
diff changeset
    79
{
hgs
parents:
diff changeset
    80
    if(m_reply)
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
        m_reply->deleteLater();
hgs
parents:
diff changeset
    83
        m_reply = 0;
hgs
parents:
diff changeset
    84
    }
hgs
parents:
diff changeset
    85
    if(networkAccessManagerOwned && m_networkAccessManager)
hgs
parents:
diff changeset
    86
    {
hgs
parents:
diff changeset
    87
        m_networkAccessManager->disconnect();    
hgs
parents:
diff changeset
    88
        delete m_networkAccessManager;
hgs
parents:
diff changeset
    89
        m_networkAccessManager = 0;
hgs
parents:
diff changeset
    90
    }
hgs
parents:
diff changeset
    91
}       
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
DownloadCore::DownloadCore(const QString& url)
hgs
parents:
diff changeset
    94
{
hgs
parents:
diff changeset
    95
    DM_INITIALIZE(DownloadCore);
hgs
parents:
diff changeset
    96
    priv->m_url = url;
hgs
parents:
diff changeset
    97
    priv->m_dlMethod = FromURL;
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
    if(!priv->m_networkAccessManager)
hgs
parents:
diff changeset
   100
    {
hgs
parents:
diff changeset
   101
        priv->m_networkAccessManager = new QNetworkAccessManager(this);
hgs
parents:
diff changeset
   102
        priv->networkAccessManagerOwned = true;
hgs
parents:
diff changeset
   103
    }
hgs
parents:
diff changeset
   104
}
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
DownloadCore::DownloadCore(QNetworkReply *reply)
hgs
parents:
diff changeset
   107
{
hgs
parents:
diff changeset
   108
    DM_INITIALIZE(DownloadCore);
hgs
parents:
diff changeset
   109
    priv->m_reply = reply;
hgs
parents:
diff changeset
   110
    priv->m_dlMethod = FromReply;
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
    priv->m_networkAccessManager = (priv->m_reply)->manager();
hgs
parents:
diff changeset
   113
    priv->m_url = (priv->m_reply)->url().toString(QUrl::None);
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
    QVariant header = (priv->m_reply)->header(QNetworkRequest::ContentLengthHeader);
hgs
parents:
diff changeset
   116
    if(header.isValid())
hgs
parents:
diff changeset
   117
    {
hgs
parents:
diff changeset
   118
        priv->m_sizeInHeader = header.toInt();
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
    
hgs
parents:
diff changeset
   121
    header = (priv->m_reply)->header(QNetworkRequest::ContentTypeHeader);
hgs
parents:
diff changeset
   122
    if(header.isValid())
hgs
parents:
diff changeset
   123
    {
hgs
parents:
diff changeset
   124
        priv->m_contentType = header.toString();
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
}
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
DownloadCore::~DownloadCore()
hgs
parents:
diff changeset
   129
{
hgs
parents:
diff changeset
   130
    DM_UNINITIALIZE(DownloadCore);
hgs
parents:
diff changeset
   131
}
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
int DownloadCore::doDownload(void)
hgs
parents:
diff changeset
   134
{
hgs
parents:
diff changeset
   135
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   136
    switch(priv->m_dlMethod)
hgs
parents:
diff changeset
   137
    {
hgs
parents:
diff changeset
   138
        case FromURL:
hgs
parents:
diff changeset
   139
        {
hgs
parents:
diff changeset
   140
            if((priv->m_url).length() <= 0 )
hgs
parents:
diff changeset
   141
            {
hgs
parents:
diff changeset
   142
                return -1;
hgs
parents:
diff changeset
   143
            }
hgs
parents:
diff changeset
   144
            if(priv->m_proxy)
hgs
parents:
diff changeset
   145
            {
hgs
parents:
diff changeset
   146
                priv->m_networkAccessManager->setProxy(*(priv->m_proxy));
hgs
parents:
diff changeset
   147
            }
hgs
parents:
diff changeset
   148
            
hgs
parents:
diff changeset
   149
            /* submit the HTTP request */
hgs
parents:
diff changeset
   150
            QNetworkRequest req(priv->m_url);
hgs
parents:
diff changeset
   151
            priv->m_reply = (priv->m_networkAccessManager)->get(req);
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
            /* establish all HTTP listeners */
hgs
parents:
diff changeset
   154
            connect(priv->m_reply, SIGNAL(metaDataChanged()),                     this, SLOT(parseHeaders()));    
hgs
parents:
diff changeset
   155
            connect(priv->m_reply, SIGNAL(downloadProgress(qint64 , qint64 )),    this, SIGNAL(downloadProgress(qint64 , qint64 )));
hgs
parents:
diff changeset
   156
            connect(priv->m_reply, SIGNAL(finished()),                            this, SIGNAL(finished()));
hgs
parents:
diff changeset
   157
            connect(priv->m_reply, SIGNAL(error(QNetworkReply::NetworkError)),    this, SIGNAL(error(QNetworkReply::NetworkError)));
hgs
parents:
diff changeset
   158
            break;
hgs
parents:
diff changeset
   159
        }
hgs
parents:
diff changeset
   160
        case FromReply:
hgs
parents:
diff changeset
   161
        { 
hgs
parents:
diff changeset
   162
            if(!priv->m_reply)
hgs
parents:
diff changeset
   163
            {
hgs
parents:
diff changeset
   164
                return -1;
hgs
parents:
diff changeset
   165
            }
hgs
parents:
diff changeset
   166
            /* establish all HTTP listeners */
hgs
parents:
diff changeset
   167
            connect(priv->m_reply, SIGNAL(downloadProgress(qint64 , qint64 )),this, SIGNAL(downloadProgress(qint64 , qint64 )));
hgs
parents:
diff changeset
   168
            connect(priv->m_reply, SIGNAL(finished()),                        this, SIGNAL(finished()));
hgs
parents:
diff changeset
   169
            connect(priv->m_reply, SIGNAL(error(QNetworkReply::NetworkError)),this, SIGNAL(error(QNetworkReply::NetworkError)));            
hgs
parents:
diff changeset
   170
            break;
hgs
parents:
diff changeset
   171
        }
hgs
parents:
diff changeset
   172
        default:
hgs
parents:
diff changeset
   173
        {
hgs
parents:
diff changeset
   174
            return -1;// error
hgs
parents:
diff changeset
   175
        }
hgs
parents:
diff changeset
   176
    }
hgs
parents:
diff changeset
   177
    return 0; // successful
hgs
parents:
diff changeset
   178
}
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
int DownloadCore::post(const QString& url, const QByteArray& data)
hgs
parents:
diff changeset
   181
{
hgs
parents:
diff changeset
   182
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   183
    QNetworkRequest req(url); 
hgs
parents:
diff changeset
   184
    // cancel the ongoing transaction if any
hgs
parents:
diff changeset
   185
    abort();
hgs
parents:
diff changeset
   186
    // post the data
hgs
parents:
diff changeset
   187
    priv->m_reply = priv->m_networkAccessManager->post(req, data);
hgs
parents:
diff changeset
   188
    if(priv->m_reply)
hgs
parents:
diff changeset
   189
    {
hgs
parents:
diff changeset
   190
        connect(priv->m_reply, SIGNAL(uploadProgress(qint64, qint64)), this, SIGNAL(uploadProgress(qint64, qint64)));
hgs
parents:
diff changeset
   191
        return 0; // successful
hgs
parents:
diff changeset
   192
    }
hgs
parents:
diff changeset
   193
    else
hgs
parents:
diff changeset
   194
    {
hgs
parents:
diff changeset
   195
        return -1; // error
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
}
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
int DownloadCore::resumeDownload(qint64 startOffeset)
hgs
parents:
diff changeset
   200
{
hgs
parents:
diff changeset
   201
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
    QNetworkRequest req(priv->m_url);
hgs
parents:
diff changeset
   204
    // set the RANGE header
hgs
parents:
diff changeset
   205
    QString buf;
hgs
parents:
diff changeset
   206
    buf.sprintf("bytes=%ld-", (long int)startOffeset);
hgs
parents:
diff changeset
   207
    req.setRawHeader(RANGE_HEADER, buf.toAscii());
hgs
parents:
diff changeset
   208
    // set ETag header
hgs
parents:
diff changeset
   209
    if (!priv->m_entityTag.isEmpty())
hgs
parents:
diff changeset
   210
        req.setRawHeader(IF_MATCH_HEADER, (priv->m_entityTag).toAscii());
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
    if(!priv->m_networkAccessManager)
hgs
parents:
diff changeset
   213
    {
hgs
parents:
diff changeset
   214
        priv->m_networkAccessManager = new QNetworkAccessManager(this);
hgs
parents:
diff changeset
   215
        priv->networkAccessManagerOwned = true;
hgs
parents:
diff changeset
   216
    }
hgs
parents:
diff changeset
   217
    if(priv->m_proxy)
hgs
parents:
diff changeset
   218
    {
hgs
parents:
diff changeset
   219
        priv->m_networkAccessManager->setProxy(*(priv->m_proxy));
hgs
parents:
diff changeset
   220
    }
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
    /* submit the HTTP request */
hgs
parents:
diff changeset
   223
    priv->m_reply = (priv->m_networkAccessManager)->get(req);
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
    /* establish all HTTP listeners */
hgs
parents:
diff changeset
   226
    connect(priv->m_reply, SIGNAL(metaDataChanged()),                     this, SLOT(parseHeaders()));
hgs
parents:
diff changeset
   227
    connect(priv->m_reply, SIGNAL(downloadProgress(qint64 , qint64 )),    this, SIGNAL(downloadProgress(qint64 , qint64 )));
hgs
parents:
diff changeset
   228
    connect(priv->m_reply, SIGNAL(finished()),                            this, SIGNAL(finished()));
hgs
parents:
diff changeset
   229
    connect(priv->m_reply, SIGNAL(error(QNetworkReply::NetworkError)),    this, SIGNAL(error(QNetworkReply::NetworkError)));
hgs
parents:
diff changeset
   230
    return 0; // successful
hgs
parents:
diff changeset
   231
}
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
int DownloadCore::abort(void)
hgs
parents:
diff changeset
   234
{
hgs
parents:
diff changeset
   235
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   236
    if(priv->m_reply)
hgs
parents:
diff changeset
   237
    {
hgs
parents:
diff changeset
   238
        (priv->m_reply)->abort();
hgs
parents:
diff changeset
   239
        priv->m_reply->deleteLater();
hgs
parents:
diff changeset
   240
        priv->m_reply = 0;
hgs
parents:
diff changeset
   241
    }
hgs
parents:
diff changeset
   242
    return 0; // successful
hgs
parents:
diff changeset
   243
}
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
QString& DownloadCore::url(void)
hgs
parents:
diff changeset
   246
{
hgs
parents:
diff changeset
   247
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   248
    return priv->m_url;
hgs
parents:
diff changeset
   249
}
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
void DownloadCore::changeUrl(QString& url)
hgs
parents:
diff changeset
   252
{
hgs
parents:
diff changeset
   253
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   254
    priv->m_url = url;
hgs
parents:
diff changeset
   255
    priv->m_dlMethod = FromURL;
hgs
parents:
diff changeset
   256
}
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
QNetworkReply* DownloadCore::reply(void)
hgs
parents:
diff changeset
   259
{
hgs
parents:
diff changeset
   260
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   261
    return priv->m_reply;
hgs
parents:
diff changeset
   262
}
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
QNetworkAccessManager* DownloadCore::networkAccessManager(void)
hgs
parents:
diff changeset
   265
{
hgs
parents:
diff changeset
   266
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   267
    return priv->m_networkAccessManager;
hgs
parents:
diff changeset
   268
}
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
QString& DownloadCore::contentType(void)
hgs
parents:
diff changeset
   271
{
hgs
parents:
diff changeset
   272
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   273
    return priv->m_contentType;
hgs
parents:
diff changeset
   274
}
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
QString& DownloadCore::entityTag(void)
hgs
parents:
diff changeset
   277
{
hgs
parents:
diff changeset
   278
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   279
    return priv->m_entityTag;
hgs
parents:
diff changeset
   280
}
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
void DownloadCore::setContentType(const QString& contentType)
hgs
parents:
diff changeset
   283
{
hgs
parents:
diff changeset
   284
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   285
    priv->m_contentType = contentType;
hgs
parents:
diff changeset
   286
    return;
hgs
parents:
diff changeset
   287
}
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
void DownloadCore::setEntityTag(const QString& entityTag)
hgs
parents:
diff changeset
   290
{
hgs
parents:
diff changeset
   291
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   292
    priv->m_entityTag = entityTag;
hgs
parents:
diff changeset
   293
}
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
qint64 DownloadCore::sizeInHeader(void)
hgs
parents:
diff changeset
   296
{
hgs
parents:
diff changeset
   297
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   298
    return priv->m_sizeInHeader;
hgs
parents:
diff changeset
   299
}
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
QNetworkReply::NetworkError DownloadCore::lastError(void)
hgs
parents:
diff changeset
   302
{
hgs
parents:
diff changeset
   303
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   304
    return priv->m_lastError;
hgs
parents:
diff changeset
   305
}
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
void DownloadCore::setLastError(QNetworkReply::NetworkError code)
hgs
parents:
diff changeset
   308
{
hgs
parents:
diff changeset
   309
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   310
    priv->m_lastError = code;
hgs
parents:
diff changeset
   311
}
hgs
parents:
diff changeset
   312
hgs
parents:
diff changeset
   313
QString DownloadCore::lastErrorString(void)
hgs
parents:
diff changeset
   314
{
hgs
parents:
diff changeset
   315
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   316
    return priv->m_lastErrorString;
hgs
parents:
diff changeset
   317
}
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
void DownloadCore::setLastErrorString(const QString& errStr)
hgs
parents:
diff changeset
   320
{
hgs
parents:
diff changeset
   321
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   322
    priv->m_lastErrorString = errStr;
hgs
parents:
diff changeset
   323
}
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
void DownloadCore::setProxy(QNetworkProxy *proxy)
hgs
parents:
diff changeset
   326
{
hgs
parents:
diff changeset
   327
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   328
    priv->m_proxy = proxy;
hgs
parents:
diff changeset
   329
}
hgs
parents:
diff changeset
   330
hgs
parents:
diff changeset
   331
QNetworkProxy* DownloadCore::proxy()
hgs
parents:
diff changeset
   332
{
hgs
parents:
diff changeset
   333
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   334
    return priv->m_proxy;
hgs
parents:
diff changeset
   335
}
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
QString DownloadCore::fileNameFromContentDispositionHeader()
hgs
parents:
diff changeset
   338
{
hgs
parents:
diff changeset
   339
     DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   340
     return priv->m_fileNameFromContentDisposition;
hgs
parents:
diff changeset
   341
}
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
void DownloadCore::parseHeaders(void)
hgs
parents:
diff changeset
   344
{
hgs
parents:
diff changeset
   345
    DM_PRIVATE(DownloadCore);
hgs
parents:
diff changeset
   346
    QVariant lenHeader = (priv->m_reply)->header(QNetworkRequest::ContentLengthHeader);
hgs
parents:
diff changeset
   347
    if(lenHeader.isValid())
hgs
parents:
diff changeset
   348
    {
hgs
parents:
diff changeset
   349
        priv->m_sizeInHeader = lenHeader.toInt();
hgs
parents:
diff changeset
   350
    }                
hgs
parents:
diff changeset
   351
    priv->m_contentType = (priv->m_reply)->header(QNetworkRequest::ContentTypeHeader).toString();
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
    // ETag
hgs
parents:
diff changeset
   354
    priv->m_entityTag = (priv->m_reply)->rawHeader(ETAG_HEADER);
hgs
parents:
diff changeset
   355
    
hgs
parents:
diff changeset
   356
    if (priv->m_reply->hasRawHeader(ECONTENT_DISPOSITION_HEADER)) {
hgs
parents:
diff changeset
   357
        const QString value = priv->m_reply->rawHeader(ECONTENT_DISPOSITION_HEADER);
hgs
parents:
diff changeset
   358
        const int pos = value.indexOf("filename=");
hgs
parents:
diff changeset
   359
        if (pos != -1) {
hgs
parents:
diff changeset
   360
            QString name = value.mid(pos + 9);
hgs
parents:
diff changeset
   361
            if (name.startsWith('"') && name.endsWith('"'))
hgs
parents:
diff changeset
   362
                name = name.mid(1, name.size() - 2);
hgs
parents:
diff changeset
   363
            priv->m_fileNameFromContentDisposition = name;
hgs
parents:
diff changeset
   364
        }
hgs
parents:
diff changeset
   365
    }
hgs
parents:
diff changeset
   366
    // emit the signal
hgs
parents:
diff changeset
   367
    emit metaDataChanged();
hgs
parents:
diff changeset
   368
    return;
hgs
parents:
diff changeset
   369
}
hgs
parents:
diff changeset
   370