videocollection/videocollectionwrapper/src/videolistdatamodel_p.cpp
author hgs
Thu, 01 Apr 2010 23:03:51 +0300
changeset 32 253cc391d7f9
parent 30 4f111d64a341
child 34 bbb98528c666
permissions -rw-r--r--
201005_2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: VideoListDataModelPrivate class implementation
hgs
parents:
diff changeset
    15
* 
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// INCLUDE FILES
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include <mpxmediageneraldefs.h>
hgs
parents:
diff changeset
    21
#include <thumbnailmanager_qt.h>
hgs
parents:
diff changeset
    22
#include <mpxmediaarray.h>
hgs
parents:
diff changeset
    23
#include <mpxmedia.h>
hgs
parents:
diff changeset
    24
#include <qvariant.h>
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#include "videolistdatamodel.h"
hgs
parents:
diff changeset
    27
#include "videocollectionwrapper.h"
hgs
parents:
diff changeset
    28
#include "videolistdatamodel_p.h"
hgs
parents:
diff changeset
    29
#include "videothumbnaildata.h"
hgs
parents:
diff changeset
    30
#include "vcxmyvideosdefs.h"
hgs
parents:
diff changeset
    31
#include "videocollectionutils.h"
hgs
parents:
diff changeset
    32
#include "videocollectioncommon.h"
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
/**
hgs
parents:
diff changeset
    35
 * private global inline hash function for TMPXItemId keys in QSet
hgs
parents:
diff changeset
    36
 */
hgs
parents:
diff changeset
    37
inline uint qHash(TMPXItemId key) 
hgs
parents:
diff changeset
    38
{ 
hgs
parents:
diff changeset
    39
    QPair<uint, uint> keyPair(key.iId1, key.iId2); 
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
    return qHash(keyPair);
hgs
parents:
diff changeset
    42
}
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    45
//
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
// VideoListDataModelPrivate
hgs
parents:
diff changeset
    49
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
//
hgs
parents:
diff changeset
    51
VideoListDataModelPrivate::VideoListDataModelPrivate(VideoListDataModel *model) :
hgs
parents:
diff changeset
    52
q_ptr(model),
hgs
parents:
diff changeset
    53
mVideoThumbnailData(VideoThumbnailData::instance()),
hgs
parents:
diff changeset
    54
mInitialized(false)
hgs
parents:
diff changeset
    55
{
hgs
parents:
diff changeset
    56
}
hgs
parents:
diff changeset
    57
	
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
// ~VideoListDataModelPrivate
hgs
parents:
diff changeset
    60
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
//
hgs
parents:
diff changeset
    62
VideoListDataModelPrivate::~VideoListDataModelPrivate()
hgs
parents:
diff changeset
    63
{
hgs
parents:
diff changeset
    64
    mMediaData.clear();
hgs
parents:
diff changeset
    65
}
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    68
// initialize
hgs
parents:
diff changeset
    69
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    70
//
hgs
parents:
diff changeset
    71
int VideoListDataModelPrivate::initialize()
hgs
parents:
diff changeset
    72
{
hgs
parents:
diff changeset
    73
    if(mInitialized)
hgs
parents:
diff changeset
    74
    {
hgs
parents:
diff changeset
    75
        return 0;
hgs
parents:
diff changeset
    76
    }
hgs
parents:
diff changeset
    77
    if(!connect( &mVideoThumbnailData, SIGNAL(thumbnailsFetched( QList<TMPXItemId> )), 
hgs
parents:
diff changeset
    78
                  this, SLOT(thumbnailsFetchedSlot( QList<TMPXItemId> ))))
hgs
parents:
diff changeset
    79
    {
hgs
parents:
diff changeset
    80
        return -1;
hgs
parents:
diff changeset
    81
    }
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
    mInitialized = true;
hgs
parents:
diff changeset
    84
    return 0;
hgs
parents:
diff changeset
    85
}
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    88
// getVideoCount
hgs
parents:
diff changeset
    89
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    90
//
hgs
parents:
diff changeset
    91
int VideoListDataModelPrivate::getVideoCount()
hgs
parents:
diff changeset
    92
{
hgs
parents:
diff changeset
    93
    return mMediaData.count();
hgs
parents:
diff changeset
    94
}
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    97
// getMediaIdFromIndex
hgs
parents:
diff changeset
    98
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    99
//
hgs
parents:
diff changeset
   100
TMPXItemId VideoListDataModelPrivate::getMediaIdFromIndex( int index ) const
hgs
parents:
diff changeset
   101
{
hgs
parents:
diff changeset
   102
    return mMediaData.idFromIndex(index);
hgs
parents:
diff changeset
   103
}
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   106
// getVideoNameFromIndex
hgs
parents:
diff changeset
   107
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   108
//
hgs
parents:
diff changeset
   109
const QString VideoListDataModelPrivate::getVideoNameFromIndex( int index )  const
hgs
parents:
diff changeset
   110
{
hgs
parents:
diff changeset
   111
    QString txt;
hgs
parents:
diff changeset
   112
    CMPXMedia* media = mMediaData.fromIndex(index);
hgs
parents:
diff changeset
   113
    VideoCollectionUtils::instance().mediaValue<QString>(media, KMPXMediaGeneralTitle, txt );
hgs
parents:
diff changeset
   114
    return txt;
hgs
parents:
diff changeset
   115
}
hgs
parents:
diff changeset
   116
 
hgs
parents:
diff changeset
   117
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   118
// getVideoThumbnailFromIndex
hgs
parents:
diff changeset
   119
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   120
//
hgs
parents:
diff changeset
   121
const QIcon* VideoListDataModelPrivate::getVideoThumbnailFromIndex( int index )  const
hgs
parents:
diff changeset
   122
{
hgs
parents:
diff changeset
   123
    return mVideoThumbnailData.getThumbnail( mMediaData.idFromIndex(index) );
hgs
parents:
diff changeset
   124
}
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   127
// getVideoSizeFromIndex
hgs
parents:
diff changeset
   128
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   129
//
hgs
parents:
diff changeset
   130
quint32 VideoListDataModelPrivate::getVideoSizeFromIndex( int index ) const
hgs
parents:
diff changeset
   131
{
hgs
parents:
diff changeset
   132
    quint32 size(0);
hgs
parents:
diff changeset
   133
    CMPXMedia *media = mMediaData.fromIndex(index);
hgs
parents:
diff changeset
   134
    VideoCollectionUtils::instance().mediaValue<quint32>(media, KMPXMediaGeneralSize, size );    
hgs
parents:
diff changeset
   135
    return size;    
hgs
parents:
diff changeset
   136
}
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   139
// getVideoAgeProfileFromIndex
hgs
parents:
diff changeset
   140
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   141
//
hgs
parents:
diff changeset
   142
quint32 VideoListDataModelPrivate::getVideoAgeProfileFromIndex( int index ) const
hgs
parents:
diff changeset
   143
{
hgs
parents:
diff changeset
   144
    quint32 ageProfile(0);
hgs
parents:
diff changeset
   145
    CMPXMedia *media = mMediaData.fromIndex(index);
hgs
parents:
diff changeset
   146
    VideoCollectionUtils::instance().mediaValue<quint32>(media, KVcxMediaMyVideosAgeProfile, ageProfile );    
hgs
parents:
diff changeset
   147
    return ageProfile; 
hgs
parents:
diff changeset
   148
}
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   151
// getVideodurationFromIndex
hgs
parents:
diff changeset
   152
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   153
//
hgs
parents:
diff changeset
   154
quint32 VideoListDataModelPrivate::getVideodurationFromIndex( int index ) const
hgs
parents:
diff changeset
   155
{
hgs
parents:
diff changeset
   156
    quint32 returnDuration(0);
hgs
parents:
diff changeset
   157
    float duration(0);
hgs
parents:
diff changeset
   158
    CMPXMedia *media = mMediaData.fromIndex(index);
hgs
parents:
diff changeset
   159
    VideoCollectionUtils::instance().mediaValue<float>(media, KVcxMediaMyVideosDuration, duration );
hgs
parents:
diff changeset
   160
    returnDuration = static_cast<quint32>(duration);
hgs
parents:
diff changeset
   161
    return returnDuration;
hgs
parents:
diff changeset
   162
}
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   165
// getVideoDateFromIndex
hgs
parents:
diff changeset
   166
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   167
//
hgs
parents:
diff changeset
   168
QDateTime VideoListDataModelPrivate::getVideoDateFromIndex( int index ) const
hgs
parents:
diff changeset
   169
{
hgs
parents:
diff changeset
   170
    QDateTime date;
hgs
parents:
diff changeset
   171
    quint64 dateTimeValue;
hgs
parents:
diff changeset
   172
    if(!VideoCollectionUtils::instance().mediaValue<quint64>(mMediaData.fromIndex(index), KMPXMediaGeneralDate, dateTimeValue)) 
hgs
parents:
diff changeset
   173
    {
hgs
parents:
diff changeset
   174
        return date;
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
    TDateTime temp = TTime( dateTimeValue ).DateTime();
hgs
parents:
diff changeset
   177
    date = QDateTime(QDate(temp.Year(), temp.Month()+1, temp.Day()+1), 
hgs
parents:
diff changeset
   178
                       QTime(temp.Hour(), temp.Minute(), temp.Second(), temp.MicroSecond()));
hgs
parents:
diff changeset
   179
    return date;
hgs
parents:
diff changeset
   180
}
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   183
// getMetaDataFromIndex
hgs
parents:
diff changeset
   184
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   185
//
hgs
parents:
diff changeset
   186
QMap<QString, QVariant> VideoListDataModelPrivate::getMetaDataFromIndex(int index) const
hgs
parents:
diff changeset
   187
{
hgs
parents:
diff changeset
   188
    using namespace VideoCollectionCommon;
hgs
parents:
diff changeset
   189
    QMap<QString, QVariant> map;
hgs
parents:
diff changeset
   190
    CMPXMedia *media = mMediaData.fromIndex(index);
hgs
parents:
diff changeset
   191
    if(!media) {
hgs
parents:
diff changeset
   192
        return map;
hgs
parents:
diff changeset
   193
    }
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
    // MetaKeyDate
hgs
parents:
diff changeset
   196
    QDateTime date = getVideoDateFromIndex(index);
hgs
parents:
diff changeset
   197
    if(date.isValid()) {
hgs
parents:
diff changeset
   198
        map[MetaKeyDate] = date.date();
hgs
parents:
diff changeset
   199
    }
hgs
parents:
diff changeset
   200
    
hgs
parents:
diff changeset
   201
    // MetaKeyDurationString
hgs
parents:
diff changeset
   202
    quint32 dur = getVideodurationFromIndex(index);
hgs
parents:
diff changeset
   203
    QString duration = VideoCollectionUtils::instance().prepareLengthString(dur);
hgs
parents:
diff changeset
   204
    if(!duration.isNull() && !duration.isEmpty()) {
hgs
parents:
diff changeset
   205
        map[MetaKeyDurationString] = duration;
hgs
parents:
diff changeset
   206
    }
hgs
parents:
diff changeset
   207
    
hgs
parents:
diff changeset
   208
    // MetaKeySizeString
hgs
parents:
diff changeset
   209
    quint32 s = getVideoSizeFromIndex(index);
hgs
parents:
diff changeset
   210
    QString size = VideoCollectionUtils::instance().prepareSizeString(s);
hgs
parents:
diff changeset
   211
    if(!size.isNull() && !size.isEmpty()) {
hgs
parents:
diff changeset
   212
        map[MetaKeySizeString] = size; 
hgs
parents:
diff changeset
   213
    }
hgs
parents:
diff changeset
   214
    
hgs
parents:
diff changeset
   215
    // MetaKeyStarRating
hgs
parents:
diff changeset
   216
    quint8 rating = 0;
hgs
parents:
diff changeset
   217
    if(VideoCollectionUtils::instance().mediaValue<quint8>(media, KVcxMediaMyVideosRating, rating)) 
hgs
parents:
diff changeset
   218
    {
hgs
parents:
diff changeset
   219
        map[MetaKeyStarRating] = rating;
hgs
parents:
diff changeset
   220
    }
hgs
parents:
diff changeset
   221
    
hgs
parents:
diff changeset
   222
    // MetaKeyDRMInfo
hgs
parents:
diff changeset
   223
    
hgs
parents:
diff changeset
   224
    // MetaKeyServiceURL
hgs
parents:
diff changeset
   225
    
hgs
parents:
diff changeset
   226
    // MetaKeyDescription
hgs
parents:
diff changeset
   227
    QString desc;
hgs
parents:
diff changeset
   228
    if(VideoCollectionUtils::instance().mediaValue<QString>(media, KMPXMediaGeneralComment, desc)) {
hgs
parents:
diff changeset
   229
        map[MetaKeyDescription] = desc;
hgs
parents:
diff changeset
   230
    }
hgs
parents:
diff changeset
   231
    
hgs
parents:
diff changeset
   232
    // MetaKeyModifiedDate
hgs
parents:
diff changeset
   233
    quint64 dateTimeValue;
hgs
parents:
diff changeset
   234
    if(VideoCollectionUtils::instance().mediaValue<quint64>(media, KVcxMediaMyVideosModifiedDate, dateTimeValue)) {
hgs
parents:
diff changeset
   235
        TDateTime temp = TTime( dateTimeValue ).DateTime();
hgs
parents:
diff changeset
   236
        QDateTime date = QDateTime(QDate(temp.Year(), temp.Month()+1, temp.Day()), 
hgs
parents:
diff changeset
   237
                           QTime(temp.Hour(), temp.Minute(), temp.Second(), temp.MicroSecond()));
hgs
parents:
diff changeset
   238
        map[MetaKeyModifiedDate] = date.date();
hgs
parents:
diff changeset
   239
    }
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
    // MetaKeyShotLocation
hgs
parents:
diff changeset
   242
    
hgs
parents:
diff changeset
   243
    // MetaKeyAuthor
hgs
parents:
diff changeset
   244
    QString author;
hgs
parents:
diff changeset
   245
    if(VideoCollectionUtils::instance().mediaValue<QString>(media, KVcxMediaMyVideosAuthor, author)) {
hgs
parents:
diff changeset
   246
        map[MetaKeyAuthor] = author;
hgs
parents:
diff changeset
   247
    }
hgs
parents:
diff changeset
   248
    
hgs
parents:
diff changeset
   249
    // MetaKeyCopyright
hgs
parents:
diff changeset
   250
    QString copyright;
hgs
parents:
diff changeset
   251
    if(VideoCollectionUtils::instance().mediaValue<QString>(media, KMPXMediaGeneralCopyright, copyright)) {
hgs
parents:
diff changeset
   252
        map[MetaKeyCopyright] = copyright;
hgs
parents:
diff changeset
   253
    }
hgs
parents:
diff changeset
   254
    
hgs
parents:
diff changeset
   255
    // MetaKeyAudioType
hgs
parents:
diff changeset
   256
    
hgs
parents:
diff changeset
   257
    // MetaKeyLanguageString
hgs
parents:
diff changeset
   258
    QString language;
hgs
parents:
diff changeset
   259
    if(VideoCollectionUtils::instance().mediaValue<QString>(media, KVcxMediaMyVideosAudioLanguage, language)) {
hgs
parents:
diff changeset
   260
        map[MetaKeyLanguageString] = language;
hgs
parents:
diff changeset
   261
    }
hgs
parents:
diff changeset
   262
    
hgs
parents:
diff changeset
   263
    // MetaKeyKeywords
hgs
parents:
diff changeset
   264
    
hgs
parents:
diff changeset
   265
    // MetaKeyVideoResolutionString
hgs
parents:
diff changeset
   266
    
hgs
parents:
diff changeset
   267
    // MetaKeyBitRate
hgs
parents:
diff changeset
   268
    
hgs
parents:
diff changeset
   269
    // MetaKeyFormat
hgs
parents:
diff changeset
   270
    QString format;
hgs
parents:
diff changeset
   271
    if(VideoCollectionUtils::instance().mediaValue<QString>(media, KMPXMediaGeneralMimeType, format)) {
hgs
parents:
diff changeset
   272
        map[MetaKeyFormat] = format;
hgs
parents:
diff changeset
   273
    }
hgs
parents:
diff changeset
   274
    
hgs
parents:
diff changeset
   275
    return map;
hgs
parents:
diff changeset
   276
}
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   279
// getVideoStatusFromIndex
hgs
parents:
diff changeset
   280
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   281
//
hgs
parents:
diff changeset
   282
int VideoListDataModelPrivate::getVideoStatusFromIndex(int index) const
hgs
parents:
diff changeset
   283
{
hgs
parents:
diff changeset
   284
    int status = 0;
hgs
parents:
diff changeset
   285
    if(mItemsUnderDeletion.contains(getMediaIdFromIndex(index)))
hgs
parents:
diff changeset
   286
    {
hgs
parents:
diff changeset
   287
        status = VideoCollectionCommon::StatusDeleted;        
hgs
parents:
diff changeset
   288
    }
hgs
parents:
diff changeset
   289
    return status;
hgs
parents:
diff changeset
   290
}
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   293
// markVideosRemoved
hgs
parents:
diff changeset
   294
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   295
//
hgs
parents:
diff changeset
   296
QList<TMPXItemId> VideoListDataModelPrivate::markVideosRemoved(const QModelIndexList &itemIndexes)
hgs
parents:
diff changeset
   297
{
hgs
parents:
diff changeset
   298
    QList<TMPXItemId> idList;
hgs
parents:
diff changeset
   299
    TMPXItemId id;
hgs
parents:
diff changeset
   300
    QModelIndexList::const_iterator iter = itemIndexes.constBegin();
hgs
parents:
diff changeset
   301
    while(iter != itemIndexes.constEnd())
hgs
parents:
diff changeset
   302
    {
hgs
parents:
diff changeset
   303
        id = getMediaIdFromIndex((*iter).row());
hgs
parents:
diff changeset
   304
        if(id != TMPXItemId::InvalidId())
hgs
parents:
diff changeset
   305
        {
hgs
parents:
diff changeset
   306
            mItemsUnderDeletion.insert(id);
hgs
parents:
diff changeset
   307
            idList.append(id);
hgs
parents:
diff changeset
   308
        }
hgs
parents:
diff changeset
   309
        iter++;
hgs
parents:
diff changeset
   310
    }
hgs
parents:
diff changeset
   311
    return idList;
hgs
parents:
diff changeset
   312
}
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   315
// unMarkVideosRemoved
hgs
parents:
diff changeset
   316
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   317
//
hgs
parents:
diff changeset
   318
void VideoListDataModelPrivate::unMarkVideosRemoved(QList<TMPXItemId> &itemIds)
hgs
parents:
diff changeset
   319
{
hgs
parents:
diff changeset
   320
    QList<TMPXItemId>::const_iterator iter = itemIds.constBegin();
hgs
parents:
diff changeset
   321
    while(iter != itemIds.constEnd())
hgs
parents:
diff changeset
   322
    {
hgs
parents:
diff changeset
   323
        mItemsUnderDeletion.remove(*iter);
hgs
parents:
diff changeset
   324
        iter++;
hgs
parents:
diff changeset
   325
    }
hgs
parents:
diff changeset
   326
}
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   329
// getFilePathFromIndex
hgs
parents:
diff changeset
   330
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   331
//
hgs
parents:
diff changeset
   332
const QString VideoListDataModelPrivate::getFilePathFromIndex(int index) const
hgs
parents:
diff changeset
   333
{
hgs
parents:
diff changeset
   334
    QString filePath;
hgs
parents:
diff changeset
   335
    VideoCollectionUtils::instance().mediaValue<QString>(mMediaData.fromIndex(index), 
hgs
parents:
diff changeset
   336
            KMPXMediaGeneralUri, filePath );
hgs
parents:
diff changeset
   337
    return filePath;
hgs
parents:
diff changeset
   338
}
hgs
parents:
diff changeset
   339
hgs
parents:
diff changeset
   340
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   341
// getFilePathForId
hgs
parents:
diff changeset
   342
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   343
//
hgs
parents:
diff changeset
   344
const QString VideoListDataModelPrivate::getFilePathForId(TMPXItemId mediaId) const
hgs
parents:
diff changeset
   345
{
hgs
parents:
diff changeset
   346
    QString filePath;
hgs
parents:
diff changeset
   347
    int index = mMediaData.indexOfId(mediaId);
hgs
parents:
diff changeset
   348
    VideoCollectionUtils::instance().mediaValue<QString>(mMediaData.fromIndex(index), 
hgs
parents:
diff changeset
   349
            KMPXMediaGeneralUri, filePath );
hgs
parents:
diff changeset
   350
    return filePath;
hgs
parents:
diff changeset
   351
}
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   354
// getMediaId
hgs
parents:
diff changeset
   355
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   356
//
hgs
parents:
diff changeset
   357
TMPXItemId VideoListDataModelPrivate::getMediaId(const CMPXMedia *media ) const
hgs
parents:
diff changeset
   358
{
hgs
parents:
diff changeset
   359
    TMPXItemId mediaId = TMPXItemId::InvalidId();
hgs
parents:
diff changeset
   360
    
hgs
parents:
diff changeset
   361
    VideoCollectionUtils::instance().mediaValue<TMPXItemId>(media, KMPXMediaGeneralId, mediaId );
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
    return mediaId;
hgs
parents:
diff changeset
   364
}
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   367
// appendDataToContainerL
hgs
parents:
diff changeset
   368
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   369
//
hgs
parents:
diff changeset
   370
void VideoListDataModelPrivate::appendDataToContainerL(CMPXMediaArray *videoArray, unsigned int startIndex)
hgs
parents:
diff changeset
   371
{
hgs
parents:
diff changeset
   372
    if(!videoArray || startIndex >= videoArray->Count())
hgs
parents:
diff changeset
   373
    {
hgs
parents:
diff changeset
   374
        return;
hgs
parents:
diff changeset
   375
    }
hgs
parents:
diff changeset
   376
    // get id used check wether we need category or video list masking
hgs
parents:
diff changeset
   377
    TMPXItemId mpxFirstId = TMPXItemId::InvalidId(); 
hgs
parents:
diff changeset
   378
    VideoCollectionUtils::instance().mediaValue<TMPXItemId>(videoArray->AtL(0), KMPXMediaGeneralId, mpxFirstId );
hgs
parents:
diff changeset
   379
    if(mpxFirstId == TMPXItemId::InvalidId())
hgs
parents:
diff changeset
   380
    {
hgs
parents:
diff changeset
   381
        // invalid
hgs
parents:
diff changeset
   382
        return;
hgs
parents:
diff changeset
   383
    }
hgs
parents:
diff changeset
   384
    
hgs
parents:
diff changeset
   385
    int count = videoArray->Count();
hgs
parents:
diff changeset
   386
    CMPXMedia *newMedia = 0;
hgs
parents:
diff changeset
   387
    TMPXItemId itemId = TMPXItemId::InvalidId();
hgs
parents:
diff changeset
   388
    for(int i = startIndex; i < count; ++i)
hgs
parents:
diff changeset
   389
    {
hgs
parents:
diff changeset
   390
        newMedia = 0;
hgs
parents:
diff changeset
   391
        itemId = TMPXItemId::InvalidId();
hgs
parents:
diff changeset
   392
        itemId = getMediaId(videoArray->AtL(i));
hgs
parents:
diff changeset
   393
        // type of list is taken from the first item 
hgs
parents:
diff changeset
   394
        // remaining items are accepted only if they match the type
hgs
parents:
diff changeset
   395
        // TODO: currently albums are filtered out
hgs
parents:
diff changeset
   396
        if((mpxFirstId.iId2 == 0 && itemId != TMPXItemId::InvalidId()) || 
hgs
parents:
diff changeset
   397
           (mpxFirstId.iId2 >= 1  && (itemId.iId1 == KVcxMvcCategoryIdDownloads) || 
hgs
parents:
diff changeset
   398
           (itemId.iId1 == KVcxMvcCategoryIdCaptured)) && mpxFirstId.iId2 == itemId.iId2)
hgs
parents:
diff changeset
   399
        {
hgs
parents:
diff changeset
   400
            newMedia = CMPXMedia::NewL(*(videoArray->AtL(i)));            
hgs
parents:
diff changeset
   401
            mMediaData.append(newMedia);
hgs
parents:
diff changeset
   402
        }
hgs
parents:
diff changeset
   403
    }    
hgs
parents:
diff changeset
   404
}
hgs
parents:
diff changeset
   405
hgs
parents:
diff changeset
   406
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   407
// thumbnailsFetchedSlot
hgs
parents:
diff changeset
   408
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   409
//
hgs
parents:
diff changeset
   410
void VideoListDataModelPrivate::thumbnailsFetchedSlot(QList<TMPXItemId> mediaIds)
hgs
parents:
diff changeset
   411
{
hgs
parents:
diff changeset
   412
    // TODO: find way to optimize dataChanged events 
hgs
parents:
diff changeset
   413
    
hgs
parents:
diff changeset
   414
    TMPXItemId id;
hgs
parents:
diff changeset
   415
    QModelIndex rowIndex;
hgs
parents:
diff changeset
   416
    
hgs
parents:
diff changeset
   417
    while(!mediaIds.isEmpty())
hgs
parents:
diff changeset
   418
    {
hgs
parents:
diff changeset
   419
        id = mediaIds.takeFirst();
hgs
parents:
diff changeset
   420
        rowIndex = q_ptr->index(mMediaData.indexOfId(id), 0);
hgs
parents:
diff changeset
   421
		if(rowIndex.isValid())
hgs
parents:
diff changeset
   422
		{
hgs
parents:
diff changeset
   423
	        emit dataChanged( rowIndex, rowIndex);
hgs
parents:
diff changeset
   424
		}
hgs
parents:
diff changeset
   425
    }
hgs
parents:
diff changeset
   426
}
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   429
// newVideoListSlot
hgs
parents:
diff changeset
   430
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   431
//
hgs
parents:
diff changeset
   432
void VideoListDataModelPrivate::newVideoListSlot( CMPXMediaArray *newVideoList )
hgs
parents:
diff changeset
   433
{
hgs
parents:
diff changeset
   434
    if( !newVideoList )
hgs
parents:
diff changeset
   435
    {
hgs
parents:
diff changeset
   436
        return;
hgs
parents:
diff changeset
   437
    }
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
    int count = newVideoList->Count();
hgs
parents:
diff changeset
   440
   
hgs
parents:
diff changeset
   441
    // clear old content
hgs
parents:
diff changeset
   442
    if((mMediaData.count() > 0))
hgs
parents:
diff changeset
   443
    {   
hgs
parents:
diff changeset
   444
        q_ptr->beginRemoveRows(QModelIndex(), 0, mMediaData.count() - 1);
hgs
parents:
diff changeset
   445
        mMediaData.clear();
hgs
parents:
diff changeset
   446
        q_ptr->endRemoveRows();
hgs
parents:
diff changeset
   447
    }
hgs
parents:
diff changeset
   448
    
hgs
parents:
diff changeset
   449
    // decide wether we we are inserting new or not, if provided list is empty -> we do not insert any videos
hgs
parents:
diff changeset
   450
    count == 0 ? q_ptr->beginInsertRows(QModelIndex(), 0, 0) : q_ptr->beginInsertRows(QModelIndex(), 0, count - 1);
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
    TRAP_IGNORE(appendDataToContainerL(newVideoList));
hgs
parents:
diff changeset
   453
	
hgs
parents:
diff changeset
   454
	q_ptr->endInsertRows();
hgs
parents:
diff changeset
   455
	emit q_ptr->modelReady();
hgs
parents:
diff changeset
   456
}
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   459
// appendVideoListSlot
hgs
parents:
diff changeset
   460
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   461
//
hgs
parents:
diff changeset
   462
void VideoListDataModelPrivate::appendVideoListSlot(CMPXMediaArray* videoList)
hgs
parents:
diff changeset
   463
{
hgs
parents:
diff changeset
   464
    if(!videoList)
hgs
parents:
diff changeset
   465
    {
hgs
parents:
diff changeset
   466
        return;
hgs
parents:
diff changeset
   467
    }
hgs
parents:
diff changeset
   468
    if(videoList->Count() == 0 || videoList->Count() <= mMediaData.count())
hgs
parents:
diff changeset
   469
    {
hgs
parents:
diff changeset
   470
        // nothing to append or count matches, no changes -> nothing to append
hgs
parents:
diff changeset
   471
        return;
hgs
parents:
diff changeset
   472
    }
hgs
parents:
diff changeset
   473
            
hgs
parents:
diff changeset
   474
    // array gotten is in same order as existing data from the start,
hgs
parents:
diff changeset
   475
    // so we only need to go throught the appendding array from the index
hgs
parents:
diff changeset
   476
    // at position where first new items is excepted to exists.    
hgs
parents:
diff changeset
   477
    int startIndex = mMediaData.count();
hgs
parents:
diff changeset
   478
    
hgs
parents:
diff changeset
   479
    q_ptr->beginInsertRows(QModelIndex(), startIndex, videoList->Count() - 1);
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
    TRAP_IGNORE(appendDataToContainerL(videoList, startIndex));
hgs
parents:
diff changeset
   482
hgs
parents:
diff changeset
   483
    q_ptr->endInsertRows();
hgs
parents:
diff changeset
   484
}
hgs
parents:
diff changeset
   485
hgs
parents:
diff changeset
   486
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   487
// newVideoAvailable
hgs
parents:
diff changeset
   488
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   489
//
hgs
parents:
diff changeset
   490
void VideoListDataModelPrivate::newVideoAvailableSlot(CMPXMedia *newVideo)
hgs
parents:
diff changeset
   491
{
hgs
parents:
diff changeset
   492
    if(!newVideo ) 
hgs
parents:
diff changeset
   493
    {
hgs
parents:
diff changeset
   494
        return;        
hgs
parents:
diff changeset
   495
    }
hgs
parents:
diff changeset
   496
hgs
parents:
diff changeset
   497
    // try to get id of the video, if not found consider invalid clip
hgs
parents:
diff changeset
   498
    TMPXItemId mediaId = getMediaId(newVideo);
hgs
parents:
diff changeset
   499
    if( mediaId == TMPXItemId::InvalidId())
hgs
parents:
diff changeset
   500
    {
hgs
parents:
diff changeset
   501
        return;
hgs
parents:
diff changeset
   502
    }
hgs
parents:
diff changeset
   503
hgs
parents:
diff changeset
   504
    // append video into list, ownership of provided mediaobject is not transferred, 
hgs
parents:
diff changeset
   505
    // so we need to create copy of CMPXMedia
hgs
parents:
diff changeset
   506
    CMPXMedia *videoToAppend = 0;
hgs
parents:
diff changeset
   507
    TRAP_IGNORE(videoToAppend = CMPXMedia::NewL(*newVideo));  
hgs
parents:
diff changeset
   508
    
hgs
parents:
diff changeset
   509
    q_ptr->beginInsertRows(QModelIndex(), mMediaData.count(), mMediaData.count());
hgs
parents:
diff changeset
   510
    
hgs
parents:
diff changeset
   511
    mMediaData.append(videoToAppend);    
hgs
parents:
diff changeset
   512
  
hgs
parents:
diff changeset
   513
    q_ptr->endInsertRows();
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
}
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   518
// videoDeleted
hgs
parents:
diff changeset
   519
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   520
//
hgs
parents:
diff changeset
   521
void VideoListDataModelPrivate::videoDeletedSlot(TMPXItemId videoId)
hgs
parents:
diff changeset
   522
{
hgs
parents:
diff changeset
   523
    int index = -1;
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
    if(mItemsUnderDeletion.contains(videoId))
hgs
parents:
diff changeset
   526
    {
hgs
parents:
diff changeset
   527
        mItemsUnderDeletion.remove(videoId);
hgs
parents:
diff changeset
   528
    }
hgs
parents:
diff changeset
   529
    index = mMediaData.indexOfId(videoId);
hgs
parents:
diff changeset
   530
 
hgs
parents:
diff changeset
   531
    if(index >= 0 && index < mMediaData.count())
hgs
parents:
diff changeset
   532
    {     
hgs
parents:
diff changeset
   533
        q_ptr->beginRemoveRows(QModelIndex(), index, index);
hgs
parents:
diff changeset
   534
        mMediaData.remove(videoId);
hgs
parents:
diff changeset
   535
        mVideoThumbnailData.removeThumbnail( videoId );
hgs
parents:
diff changeset
   536
        q_ptr->endRemoveRows();
hgs
parents:
diff changeset
   537
    }  
hgs
parents:
diff changeset
   538
}
hgs
parents:
diff changeset
   539
hgs
parents:
diff changeset
   540
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   541
// videoDeleteCompleted
hgs
parents:
diff changeset
   542
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   543
//
hgs
parents:
diff changeset
   544
void VideoListDataModelPrivate::videoDeleteCompletedSlot(int overallCount, QList<TMPXItemId> *failedMediaIds)
hgs
parents:
diff changeset
   545
{
hgs
parents:
diff changeset
   546
    // overallCount not used at the moment, since there is no need of
hgs
parents:
diff changeset
   547
    // reporting UI about succeed deletion
hgs
parents:
diff changeset
   548
    Q_UNUSED(overallCount);
hgs
parents:
diff changeset
   549
    
hgs
parents:
diff changeset
   550
    if(!failedMediaIds)
hgs
parents:
diff changeset
   551
    {
hgs
parents:
diff changeset
   552
        return;
hgs
parents:
diff changeset
   553
    }
hgs
parents:
diff changeset
   554
    QModelIndex failedIndex;
hgs
parents:
diff changeset
   555
    int failedCount = 0;
hgs
parents:
diff changeset
   556
    
hgs
parents:
diff changeset
   557
    // delete requested from UI
hgs
parents:
diff changeset
   558
    // go failed list throught and remove all failed from 
hgs
parents:
diff changeset
   559
    // list under deletion
hgs
parents:
diff changeset
   560
    QList<TMPXItemId>::const_iterator iter = failedMediaIds->constBegin();
hgs
parents:
diff changeset
   561
    while(iter != failedMediaIds->constEnd())
hgs
parents:
diff changeset
   562
    {
hgs
parents:
diff changeset
   563
        if(mItemsUnderDeletion.contains(*iter))
hgs
parents:
diff changeset
   564
        {
hgs
parents:
diff changeset
   565
            // failure found, remove from list and notify UI about changed status
hgs
parents:
diff changeset
   566
            failedIndex = q_ptr->index(mMediaData.indexOfId(*iter), 0);
hgs
parents:
diff changeset
   567
            mItemsUnderDeletion.remove(*iter);  
hgs
parents:
diff changeset
   568
            failedCount++;
hgs
parents:
diff changeset
   569
            emit dataChanged( failedIndex, failedIndex);
hgs
parents:
diff changeset
   570
        }
hgs
parents:
diff changeset
   571
        iter++;
hgs
parents:
diff changeset
   572
    }
hgs
parents:
diff changeset
   573
    // send status throught videocollectionwraper:
hgs
parents:
diff changeset
   574
    // - failed status, if some user requested deletion failed:
hgs
parents:
diff changeset
   575
    // --- if one item, get name and pass it along signal
hgs
parents:
diff changeset
   576
    // --- if multiple items, pass count of items
hgs
parents:
diff changeset
   577
    if(failedCount > 0)
hgs
parents:
diff changeset
   578
    {     
hgs
parents:
diff changeset
   579
        VideoCollectionWrapper *wrapper = VideoCollectionWrapper::instance();
hgs
parents:
diff changeset
   580
        QVariant data;
hgs
parents:
diff changeset
   581
        if(failedCount == 1)
hgs
parents:
diff changeset
   582
        {
hgs
parents:
diff changeset
   583
            data = getVideoNameFromIndex(failedIndex.row());
hgs
parents:
diff changeset
   584
            wrapper->sendAsyncStatus(VideoCollectionCommon::statusSingleDeleteFail, data); 
hgs
parents:
diff changeset
   585
hgs
parents:
diff changeset
   586
        }
hgs
parents:
diff changeset
   587
        else
hgs
parents:
diff changeset
   588
        {
hgs
parents:
diff changeset
   589
            data = failedCount;
hgs
parents:
diff changeset
   590
            wrapper->sendAsyncStatus(VideoCollectionCommon::statusMultipleDeleteFail, data);  
hgs
parents:
diff changeset
   591
        } 
hgs
parents:
diff changeset
   592
        wrapper->decreaseReferenceCount();
hgs
parents:
diff changeset
   593
        wrapper = 0;
hgs
parents:
diff changeset
   594
    } 
hgs
parents:
diff changeset
   595
}
hgs
parents:
diff changeset
   596
hgs
parents:
diff changeset
   597
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   598
// VideoDetailsCompleted 
hgs
parents:
diff changeset
   599
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   600
//
hgs
parents:
diff changeset
   601
void VideoListDataModelPrivate::videoDetailsCompletedSlot(TMPXItemId videoId)
hgs
parents:
diff changeset
   602
{
hgs
parents:
diff changeset
   603
    int index = mMediaData.indexOfId(videoId);
hgs
parents:
diff changeset
   604
    if(index >= 0)
hgs
parents:
diff changeset
   605
    {
hgs
parents:
diff changeset
   606
        emit videoDetailsReady(index);
hgs
parents:
diff changeset
   607
    }
hgs
parents:
diff changeset
   608
}
hgs
parents:
diff changeset
   609
hgs
parents:
diff changeset
   610
// End of file