utilities/downloadmanager/src/omadownloadbackend.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 "omadownloadbackend.h"
hgs
parents:
diff changeset
    18
#include "omaddparser.h"
hgs
parents:
diff changeset
    19
#include "downloadmanager.h"
hgs
parents:
diff changeset
    20
#include "clientdownload.h"
hgs
parents:
diff changeset
    21
#include "downloadcore.h"
hgs
parents:
diff changeset
    22
#include "downloadevent.h"
hgs
parents:
diff changeset
    23
#include <QCoreApplication>
hgs
parents:
diff changeset
    24
#include <QFileInfo>
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#ifdef Q_OS_LINUX
hgs
parents:
diff changeset
    27
  #include <sys/statvfs.h>
hgs
parents:
diff changeset
    28
#endif
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#ifdef Q_OS_LINUX 
hgs
parents:
diff changeset
    31
static double freeSpace(const char *path)
hgs
parents:
diff changeset
    32
#else
hgs
parents:
diff changeset
    33
static double freeSpace(const char* /*path*/)
hgs
parents:
diff changeset
    34
#endif
hgs
parents:
diff changeset
    35
{
hgs
parents:
diff changeset
    36
#ifdef Q_OS_LINUX   
hgs
parents:
diff changeset
    37
    struct statvfs fiData;
hgs
parents:
diff changeset
    38
    if ((statvfs(path,&fiData)) < 0 ) 
hgs
parents:
diff changeset
    39
        return 0;
hgs
parents:
diff changeset
    40
    else {
hgs
parents:
diff changeset
    41
        int blockSize = fiData.f_bsize/1024;
hgs
parents:
diff changeset
    42
        double freeSize = (fiData.f_bavail)*blockSize;
hgs
parents:
diff changeset
    43
        freeSize = freeSize/1024;
hgs
parents:
diff changeset
    44
        return freeSize;
hgs
parents:
diff changeset
    45
    }
hgs
parents:
diff changeset
    46
#endif
hgs
parents:
diff changeset
    47
    return 0;
hgs
parents:
diff changeset
    48
}
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// private implementation
hgs
parents:
diff changeset
    51
class OMADownloadBackendPrivate {
hgs
parents:
diff changeset
    52
    DM_DECLARE_PUBLIC(OMADownloadBackend);
hgs
parents:
diff changeset
    53
public:
hgs
parents:
diff changeset
    54
    OMADownloadBackendPrivate();
hgs
parents:
diff changeset
    55
    ~OMADownloadBackendPrivate();
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
    DownloadCore *m_downloadCore;
hgs
parents:
diff changeset
    58
    ClientDownload *m_download;
hgs
parents:
diff changeset
    59
    OMADownloadDescParser *m_parser; // for parsing oma descriptor
hgs
parents:
diff changeset
    60
    OMADownloadDescriptor *m_downloadDesc;
hgs
parents:
diff changeset
    61
    bool m_isMediaDownload; // flag to indicate if media download is happening
hgs
parents:
diff changeset
    62
    ClientDownload *m_mediaDownload; // not owned
hgs
parents:
diff changeset
    63
    bool m_isUserCancelled;
hgs
parents:
diff changeset
    64
};
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
OMADownloadBackendPrivate::OMADownloadBackendPrivate()
hgs
parents:
diff changeset
    67
{
hgs
parents:
diff changeset
    68
    m_downloadCore = 0;
hgs
parents:
diff changeset
    69
    m_download = 0;
hgs
parents:
diff changeset
    70
    m_parser = 0;
hgs
parents:
diff changeset
    71
    m_downloadDesc = 0;
hgs
parents:
diff changeset
    72
    m_isMediaDownload = false;
hgs
parents:
diff changeset
    73
    m_mediaDownload = 0;
hgs
parents:
diff changeset
    74
    m_isUserCancelled = false;
hgs
parents:
diff changeset
    75
}
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
OMADownloadBackendPrivate::~OMADownloadBackendPrivate()
hgs
parents:
diff changeset
    78
{
hgs
parents:
diff changeset
    79
    if (m_parser) {
hgs
parents:
diff changeset
    80
        delete m_parser;
hgs
parents:
diff changeset
    81
        m_parser = 0;
hgs
parents:
diff changeset
    82
        m_downloadDesc = 0;
hgs
parents:
diff changeset
    83
    }
hgs
parents:
diff changeset
    84
    if (m_mediaDownload) {
hgs
parents:
diff changeset
    85
        delete m_mediaDownload;
hgs
parents:
diff changeset
    86
        m_mediaDownload = NULL;
hgs
parents:
diff changeset
    87
    }
hgs
parents:
diff changeset
    88
}
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
OMADownloadBackend::OMADownloadBackend(DownloadCore *dlCore, ClientDownload *dl)
hgs
parents:
diff changeset
    91
    :DownloadBackend(dlCore, dl)
hgs
parents:
diff changeset
    92
{
hgs
parents:
diff changeset
    93
    DM_INITIALIZE(OMADownloadBackend);
hgs
parents:
diff changeset
    94
    priv->m_downloadCore = dlCore;
hgs
parents:
diff changeset
    95
    priv->m_download = dl;
hgs
parents:
diff changeset
    96
}
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
OMADownloadBackend::~OMADownloadBackend()
hgs
parents:
diff changeset
    99
{
hgs
parents:
diff changeset
   100
     DM_UNINITIALIZE(OMADownloadBackend);
hgs
parents:
diff changeset
   101
}
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
int OMADownloadBackend::pause()
hgs
parents:
diff changeset
   104
{
hgs
parents:
diff changeset
   105
    DM_PRIVATE(OMADownloadBackend);
hgs
parents:
diff changeset
   106
    if (priv->m_isMediaDownload) {
hgs
parents:
diff changeset
   107
        priv->m_mediaDownload->pause();
hgs
parents:
diff changeset
   108
        setDownloadState(DlPaused);
hgs
parents:
diff changeset
   109
    }
hgs
parents:
diff changeset
   110
    return 0;
hgs
parents:
diff changeset
   111
}
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
int OMADownloadBackend::resume()
hgs
parents:
diff changeset
   114
{
hgs
parents:
diff changeset
   115
    DM_PRIVATE(OMADownloadBackend);
hgs
parents:
diff changeset
   116
    priv->m_isUserCancelled = false;
hgs
parents:
diff changeset
   117
    if (priv->m_isMediaDownload)
hgs
parents:
diff changeset
   118
        return (priv->m_mediaDownload->resume());
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
    // Ready to download after the descriptor is parsed
hgs
parents:
diff changeset
   121
    // capability check on the descriptor information
hgs
parents:
diff changeset
   122
    if (checkDownloadDescriptor()) {
hgs
parents:
diff changeset
   123
         // create download for media object
hgs
parents:
diff changeset
   124
        priv->m_mediaDownload = new ClientDownload(priv->m_download->downloadManager(), 
hgs
parents:
diff changeset
   125
                priv->m_downloadDesc->getAttribute(OMADownloadDescObjectURI).toString(), priv->m_download->id()); 
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
        if (!priv->m_mediaDownload) {
hgs
parents:
diff changeset
   128
            deleteInfo(); 
hgs
parents:
diff changeset
   129
            return -1;               
hgs
parents:
diff changeset
   130
        }
hgs
parents:
diff changeset
   131
        priv->m_mediaDownload->setAttribute(DlFileName, priv->m_downloadDesc->getAttribute(OMADownloadDescName));
hgs
parents:
diff changeset
   132
        priv->m_mediaDownload->registerEventReceiver(this);
hgs
parents:
diff changeset
   133
        priv->m_mediaDownload->start();
hgs
parents:
diff changeset
   134
        priv->m_isMediaDownload = true; 
hgs
parents:
diff changeset
   135
        deleteInfo(); 
hgs
parents:
diff changeset
   136
        return 0;         
hgs
parents:
diff changeset
   137
    }
hgs
parents:
diff changeset
   138
    return -1;
hgs
parents:
diff changeset
   139
}
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
int OMADownloadBackend::cancel()
hgs
parents:
diff changeset
   142
{
hgs
parents:
diff changeset
   143
    DM_PRIVATE(OMADownloadBackend);
hgs
parents:
diff changeset
   144
    priv->m_isUserCancelled = true;
hgs
parents:
diff changeset
   145
    if (priv->m_isMediaDownload)
hgs
parents:
diff changeset
   146
        priv->m_mediaDownload->cancel();
hgs
parents:
diff changeset
   147
    else
hgs
parents:
diff changeset
   148
        DownloadBackend::cancel();
hgs
parents:
diff changeset
   149
    return 0;
hgs
parents:
diff changeset
   150
}
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
QVariant OMADownloadBackend::getAttribute(DownloadAttribute attr)
hgs
parents:
diff changeset
   153
{
hgs
parents:
diff changeset
   154
    DM_PRIVATE(OMADownloadBackend);
hgs
parents:
diff changeset
   155
    switch(attr) {
hgs
parents:
diff changeset
   156
    case OMADownloadDescriptorName:
hgs
parents:
diff changeset
   157
        return priv->m_downloadDesc->getAttribute(OMADownloadDescName);
hgs
parents:
diff changeset
   158
    case OMADownloadDescriptorVersion:
hgs
parents:
diff changeset
   159
        return priv->m_downloadDesc->getAttribute(OMADownloadDescVersion);
hgs
parents:
diff changeset
   160
    case OMADownloadDescriptorType:
hgs
parents:
diff changeset
   161
        return priv->m_downloadDesc->getAttribute(OMADownloadDescType);
hgs
parents:
diff changeset
   162
    case OMADownloadDescriptorSize:
hgs
parents:
diff changeset
   163
        return priv->m_downloadDesc->getAttribute(OMADownloadDescSize);
hgs
parents:
diff changeset
   164
    case OMADownloadDescriptorVendor:
hgs
parents:
diff changeset
   165
        return priv->m_downloadDesc->getAttribute(OMADownloadDescVendor);
hgs
parents:
diff changeset
   166
    case OMADownloadDescriptorDescription:
hgs
parents:
diff changeset
   167
        return priv->m_downloadDesc->getAttribute(OMADownloadDescDescription);
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
    case DlFileName:
hgs
parents:
diff changeset
   170
    {
hgs
parents:
diff changeset
   171
        if (!priv->m_isMediaDownload) {
hgs
parents:
diff changeset
   172
            QString url = priv->m_downloadCore->url();
hgs
parents:
diff changeset
   173
            QFileInfo fileUrl(url);
hgs
parents:
diff changeset
   174
            return QVariant(fileUrl.fileName());
hgs
parents:
diff changeset
   175
        } else
hgs
parents:
diff changeset
   176
            return priv->m_downloadDesc->getAttribute(OMADownloadDescName);
hgs
parents:
diff changeset
   177
    }
hgs
parents:
diff changeset
   178
    case DlContentType:
hgs
parents:
diff changeset
   179
    {
hgs
parents:
diff changeset
   180
        if (!priv->m_isMediaDownload)
hgs
parents:
diff changeset
   181
            return DownloadBackend::getAttribute(DlContentType);
hgs
parents:
diff changeset
   182
            
hgs
parents:
diff changeset
   183
        else
hgs
parents:
diff changeset
   184
            return priv->m_mediaDownload->getAttribute(DlContentType);
hgs
parents:
diff changeset
   185
    }
hgs
parents:
diff changeset
   186
    default:
hgs
parents:
diff changeset
   187
        return DownloadBackend::getAttribute(attr);
hgs
parents:
diff changeset
   188
    }    
hgs
parents:
diff changeset
   189
    return QVariant();
hgs
parents:
diff changeset
   190
}
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
int OMADownloadBackend::setAttribute(DownloadAttribute attr, const QVariant& value)
hgs
parents:
diff changeset
   193
{
hgs
parents:
diff changeset
   194
    return DownloadBackend::setAttribute(attr, value);
hgs
parents:
diff changeset
   195
}
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
// stores the data in storage
hgs
parents:
diff changeset
   198
void OMADownloadBackend::store(QByteArray /*data*/, bool /*lastChunk=false*/)
hgs
parents:
diff changeset
   199
{
hgs
parents:
diff changeset
   200
    return;
hgs
parents:
diff changeset
   201
}
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
// deletes the storage
hgs
parents:
diff changeset
   204
void OMADownloadBackend::deleteStore()
hgs
parents:
diff changeset
   205
{
hgs
parents:
diff changeset
   206
    return;
hgs
parents:
diff changeset
   207
}
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
// returns the size of stored data
hgs
parents:
diff changeset
   210
qint64 OMADownloadBackend::storedDataSize()
hgs
parents:
diff changeset
   211
{
hgs
parents:
diff changeset
   212
    return 0;
hgs
parents:
diff changeset
   213
}
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
void OMADownloadBackend::bytesRecieved(qint64 /*bytesRecieved*/, qint64 /*bytesTotal*/)
hgs
parents:
diff changeset
   216
{
hgs
parents:
diff changeset
   217
     //Do nothing. This is here to avoid this signal to reach to base class' slot.
hgs
parents:
diff changeset
   218
     return;
hgs
parents:
diff changeset
   219
}
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
void OMADownloadBackend::bytesUploaded(qint64 bytesUploaded, qint64 bytesTotal)
hgs
parents:
diff changeset
   222
{
hgs
parents:
diff changeset
   223
    DM_PRIVATE(OMADownloadBackend); 
hgs
parents:
diff changeset
   224
    // once data is uploaded, cancel the transaction
hgs
parents:
diff changeset
   225
    if (bytesUploaded == bytesTotal)
hgs
parents:
diff changeset
   226
        priv->m_downloadCore->abort() ;
hgs
parents:
diff changeset
   227
}
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
void OMADownloadBackend::handleFinished()
hgs
parents:
diff changeset
   230
{
hgs
parents:
diff changeset
   231
     DM_PRIVATE(OMADownloadBackend);
hgs
parents:
diff changeset
   232
     QString contentType = priv->m_downloadCore->contentType();
hgs
parents:
diff changeset
   233
     if (contentType == OMA_CONTENT_TYPE) {
hgs
parents:
diff changeset
   234
         bool bSucceeded = parseDownloadDescriptor();
hgs
parents:
diff changeset
   235
         if (bSucceeded) {
hgs
parents:
diff changeset
   236
             priv->m_downloadDesc = priv->m_parser->downloadDescriptor();
hgs
parents:
diff changeset
   237
             
hgs
parents:
diff changeset
   238
             QString objectURI = priv->m_downloadDesc->getAttribute(OMADownloadDescObjectURI).toString();
hgs
parents:
diff changeset
   239
             if (objectURI.isEmpty()) {
hgs
parents:
diff changeset
   240
                 priv->m_downloadCore->post(priv->m_downloadDesc->getAttribute(OMADownloadDescInstallNotifyURI).toString(), QByteArray("905 Attribute Mismatch"));
hgs
parents:
diff changeset
   241
                 priv->m_downloadCore->setLastError(QNetworkReply::UnknownContentError);
hgs
parents:
diff changeset
   242
                 priv->m_downloadCore->setLastErrorString(tr("No ObjectURI"));
hgs
parents:
diff changeset
   243
                 setDownloadState(DlFailed);
hgs
parents:
diff changeset
   244
                 postEvent(Error, NULL);
hgs
parents:
diff changeset
   245
                 return;
hgs
parents:
diff changeset
   246
             }
hgs
parents:
diff changeset
   247
             setDownloadState(DlPaused);
hgs
parents:
diff changeset
   248
             postEvent(OMADownloadDescriptorReady, NULL);
hgs
parents:
diff changeset
   249
         } else {
hgs
parents:
diff changeset
   250
             priv->m_downloadDesc = priv->m_parser->downloadDescriptor();
hgs
parents:
diff changeset
   251
             priv->m_downloadCore->post(priv->m_downloadDesc->getAttribute(OMADownloadDescInstallNotifyURI).toString(), QByteArray("906 Invalid descriptor"));
hgs
parents:
diff changeset
   252
             priv->m_downloadCore->setLastError(QNetworkReply::UnknownContentError);
hgs
parents:
diff changeset
   253
             priv->m_downloadCore->setLastErrorString(tr("Invalid Descriptor"));
hgs
parents:
diff changeset
   254
             setDownloadState(DlFailed);
hgs
parents:
diff changeset
   255
             postEvent(Error, NULL);
hgs
parents:
diff changeset
   256
         }
hgs
parents:
diff changeset
   257
     }
hgs
parents:
diff changeset
   258
}
hgs
parents:
diff changeset
   259
          
hgs
parents:
diff changeset
   260
bool OMADownloadBackend::parseDownloadDescriptor()
hgs
parents:
diff changeset
   261
{
hgs
parents:
diff changeset
   262
    DM_PRIVATE(OMADownloadBackend);
hgs
parents:
diff changeset
   263
    priv->m_parser = new OMADownloadDescParser();
hgs
parents:
diff changeset
   264
    QXmlInputSource source(priv->m_downloadCore->reply());
hgs
parents:
diff changeset
   265
    QXmlSimpleReader reader;
hgs
parents:
diff changeset
   266
    reader.setContentHandler(priv->m_parser);
hgs
parents:
diff changeset
   267
    reader.setErrorHandler(priv->m_parser);
hgs
parents:
diff changeset
   268
    return reader.parse(source);
hgs
parents:
diff changeset
   269
}
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
// capability check on the descriptor
hgs
parents:
diff changeset
   272
bool OMADownloadBackend::checkDownloadDescriptor()
hgs
parents:
diff changeset
   273
{
hgs
parents:
diff changeset
   274
    DM_PRIVATE(OMADownloadBackend);
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
    QString version = priv->m_downloadDesc->getAttribute(OMADownloadDescVersion).toString();
hgs
parents:
diff changeset
   277
    if (! version.isEmpty() && (version != OMA_VERSION_1)) {
hgs
parents:
diff changeset
   278
        priv->m_downloadCore->post(priv->m_downloadDesc->getAttribute(OMADownloadDescInstallNotifyURI).toString(), QByteArray("951 Invalid DDVersion"));
hgs
parents:
diff changeset
   279
        priv->m_downloadCore->setLastError(QNetworkReply::UnknownContentError);
hgs
parents:
diff changeset
   280
        priv->m_downloadCore->setLastErrorString(tr("951 Invalid DDVersion"));
hgs
parents:
diff changeset
   281
        setDownloadState(DlFailed); 
hgs
parents:
diff changeset
   282
        postEvent(Error, NULL);
hgs
parents:
diff changeset
   283
        return false; 
hgs
parents:
diff changeset
   284
    } 
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
#ifdef Q_OS_LINUX
hgs
parents:
diff changeset
   287
    // "Size" check needs to be done
hgs
parents:
diff changeset
   288
    double fileSize =  priv->m_downloadDesc->getAttribute(OMADownloadDescSize).toDouble();
hgs
parents:
diff changeset
   289
    double mbFactor = 1024*1024;
hgs
parents:
diff changeset
   290
    fileSize = fileSize/mbFactor; //fileSize in MB
hgs
parents:
diff changeset
   291
    double spaceLeft = freeSpace(ROOT_PATH); //spaze left in MB
hgs
parents:
diff changeset
   292
    
hgs
parents:
diff changeset
   293
    if (fileSize > spaceLeft) {
hgs
parents:
diff changeset
   294
        priv->m_downloadCore->post(priv->m_downloadDesc->getAttribute(OMADownloadDescInstallNotifyURI).toString(), QByteArray("901 Insufficient memory"));
hgs
parents:
diff changeset
   295
        priv->m_downloadCore->setLastError(QNetworkReply::UnknownContentError);
hgs
parents:
diff changeset
   296
        priv->m_downloadCore->setLastErrorString(tr("901 Insufficient Memory"));
hgs
parents:
diff changeset
   297
        setDownloadState(DlFailed);
hgs
parents:
diff changeset
   298
        postEvent(Error, NULL);
hgs
parents:
diff changeset
   299
        return false;       
hgs
parents:
diff changeset
   300
    } 
hgs
parents:
diff changeset
   301
#endif
hgs
parents:
diff changeset
   302
    return true;
hgs
parents:
diff changeset
   303
}
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
bool OMADownloadBackend::event(QEvent *event)
hgs
parents:
diff changeset
   306
{
hgs
parents:
diff changeset
   307
    DM_PRIVATE(OMADownloadBackend);
hgs
parents:
diff changeset
   308
    DEventType type = (DEventType)event->type();
hgs
parents:
diff changeset
   309
    switch(type) {
hgs
parents:
diff changeset
   310
    case Started:
hgs
parents:
diff changeset
   311
        break;
hgs
parents:
diff changeset
   312
    case HeaderReceived:
hgs
parents:
diff changeset
   313
    {
hgs
parents:
diff changeset
   314
        // handling the events from media object downloads
hgs
parents:
diff changeset
   315
        // Check the mismatch in total size returned by server with the size given in the descriptor.
hgs
parents:
diff changeset
   316
        //This piece of code is commented as-of-now. when needed in future , will be uncommented
hgs
parents:
diff changeset
   317
        /*int totalSize = dl->getAttribute(DlTotalSize).toInt();
hgs
parents:
diff changeset
   318
        if (priv->m_downloadDesc->getAttribute(OMADownloadDescSize).toInt() != totalSize)
hgs
parents:
diff changeset
   319
        {
hgs
parents:
diff changeset
   320
            priv->m_downloadCore->post(priv->m_downloadDesc->getAttribute(OMADownloadDescInstallNotifyURI).toString(), QByteArray("905 Attribute Mismatch"));
hgs
parents:
diff changeset
   321
             
hgs
parents:
diff changeset
   322
            if (dl)
hgs
parents:
diff changeset
   323
            {
hgs
parents:
diff changeset
   324
                dl->setError("905 Attribute Mismatch");
hgs
parents:
diff changeset
   325
                dl->cancel();
hgs
parents:
diff changeset
   326
                dl->setDownloadState(DlFailed);
hgs
parents:
diff changeset
   327
                dl->postEvent(Error, NULL);
hgs
parents:
diff changeset
   328
            } 
hgs
parents:
diff changeset
   329
            return true;
hgs
parents:
diff changeset
   330
        }*/
hgs
parents:
diff changeset
   331
        // Check the mismatch in content type returned by server with the content type given in the descriptor.
hgs
parents:
diff changeset
   332
        QString contentType = priv->m_mediaDownload->getAttribute(DlContentType).toString();
hgs
parents:
diff changeset
   333
        if (priv->m_downloadDesc->getAttribute(OMADownloadDescType).toString() != contentType) {
hgs
parents:
diff changeset
   334
            // media object download cannot be proceeded
hgs
parents:
diff changeset
   335
            if (priv->m_mediaDownload) {
hgs
parents:
diff changeset
   336
                priv->m_mediaDownload->setError("905 Attribute Mismatch");
hgs
parents:
diff changeset
   337
                priv->m_mediaDownload->cancel();
hgs
parents:
diff changeset
   338
                priv->m_mediaDownload->setDownloadState(DlFailed);
hgs
parents:
diff changeset
   339
                priv->m_mediaDownload->postEvent(Error, NULL);
hgs
parents:
diff changeset
   340
            } 
hgs
parents:
diff changeset
   341
            break;
hgs
parents:
diff changeset
   342
        } 
hgs
parents:
diff changeset
   343
    }
hgs
parents:
diff changeset
   344
    case Progress:
hgs
parents:
diff changeset
   345
    {
hgs
parents:
diff changeset
   346
        QVariant tSize = priv->m_mediaDownload->getAttribute(DlTotalSize);
hgs
parents:
diff changeset
   347
        setTotalSize(tSize.toInt());
hgs
parents:
diff changeset
   348
        QVariant curDlsize = priv->m_mediaDownload->getAttribute(DlDownloadedSize);
hgs
parents:
diff changeset
   349
        setDownloadedDataSize(curDlsize.toInt());
hgs
parents:
diff changeset
   350
        setDownloadState(DlInprogress);
hgs
parents:
diff changeset
   351
        postEvent(Progress, NULL);
hgs
parents:
diff changeset
   352
        break;
hgs
parents:
diff changeset
   353
    }
hgs
parents:
diff changeset
   354
    case NetworkLoss:
hgs
parents:
diff changeset
   355
    {
hgs
parents:
diff changeset
   356
        postEvent(NetworkLoss, NULL);
hgs
parents:
diff changeset
   357
        break;
hgs
parents:
diff changeset
   358
    }
hgs
parents:
diff changeset
   359
    case Cancelled:
hgs
parents:
diff changeset
   360
    {
hgs
parents:
diff changeset
   361
        if (priv->m_isUserCancelled)
hgs
parents:
diff changeset
   362
            priv->m_downloadCore->post(priv->m_downloadDesc->getAttribute(OMADownloadDescInstallNotifyURI).toString(), QByteArray("902 User Cancelled"));
hgs
parents:
diff changeset
   363
        setDownloadState(DlCancelled);
hgs
parents:
diff changeset
   364
        postEvent(Cancelled, NULL);
hgs
parents:
diff changeset
   365
        break;
hgs
parents:
diff changeset
   366
    }
hgs
parents:
diff changeset
   367
    case Completed:
hgs
parents:
diff changeset
   368
    {
hgs
parents:
diff changeset
   369
        priv->m_downloadCore->post(priv->m_downloadDesc->getAttribute(OMADownloadDescInstallNotifyURI).toString(), QByteArray("900 Success "));
hgs
parents:
diff changeset
   370
        setDownloadState(DlCompleted);
hgs
parents:
diff changeset
   371
        postEvent(Completed, NULL); 
hgs
parents:
diff changeset
   372
        break;
hgs
parents:
diff changeset
   373
    }
hgs
parents:
diff changeset
   374
    case Error:
hgs
parents:
diff changeset
   375
    {
hgs
parents:
diff changeset
   376
        priv->m_downloadCore->post(priv->m_downloadDesc->getAttribute(OMADownloadDescInstallNotifyURI).toString(), QByteArray("905 Attribute Mismatch"));
hgs
parents:
diff changeset
   377
        priv->m_downloadCore->setLastError(QNetworkReply::UnknownContentError);
hgs
parents:
diff changeset
   378
        priv->m_downloadCore->setLastErrorString(tr("905 Attribute Mismatch"));
hgs
parents:
diff changeset
   379
        setDownloadState(DlFailed);
hgs
parents:
diff changeset
   380
        postEvent(Error, NULL);
hgs
parents:
diff changeset
   381
        break;
hgs
parents:
diff changeset
   382
    } 
hgs
parents:
diff changeset
   383
    default:
hgs
parents:
diff changeset
   384
        break;
hgs
parents:
diff changeset
   385
    }
hgs
parents:
diff changeset
   386
    return true;
hgs
parents:
diff changeset
   387
}
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389