videocollection/videocollectionwrapper/src/videosortfilterproxymodel.cpp
author hgs
Fri, 23 Jul 2010 11:10:06 +0300
changeset 49 824471cb468a
parent 39 f6d44a0cd476
child 50 21fe8338c6bf
permissions -rw-r--r--
201029
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:   Videosortfilterproxymodel implementation
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
49
hgs
parents: 39
diff changeset
    18
// Version : %version: 66.1.5 %
36
hgs
parents: 35
diff changeset
    19
hgs
parents: 35
diff changeset
    20
// INCLUDE FILES
30
hgs
parents:
diff changeset
    21
#include <qstringlist.h>
34
hgs
parents: 30
diff changeset
    22
#include <qset.h>
30
hgs
parents:
diff changeset
    23
#include <qtimer.h>
hgs
parents:
diff changeset
    24
#include <qdatetime.h>
34
hgs
parents: 30
diff changeset
    25
#include <vcxmyvideosdefs.h>
30
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include "videothumbnaildata.h"
hgs
parents:
diff changeset
    28
#include "videocollectioncommon.h"
hgs
parents:
diff changeset
    29
#include "videosortfilterproxymodel.h"
hgs
parents:
diff changeset
    30
#include "videolistdatamodel.h"
hgs
parents:
diff changeset
    31
#include "videocollectionclient.h"
34
hgs
parents: 30
diff changeset
    32
#include "videocollectionwrapper.h"
36
hgs
parents: 35
diff changeset
    33
#include "videocollectiontrace.h"
30
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    36
// VideoSortFilterProxyModel::VideoSortFilterProxyModel
hgs
parents:
diff changeset
    37
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    38
//
36
hgs
parents: 35
diff changeset
    39
VideoSortFilterProxyModel::VideoSortFilterProxyModel(VideoCollectionCommon::TModelType type, QObject *parent) :
35
hgs
parents: 34
diff changeset
    40
QSortFilterProxyModel(parent),
hgs
parents: 34
diff changeset
    41
mModel(0),
hgs
parents: 34
diff changeset
    42
mCollectionClient(0),
hgs
parents: 34
diff changeset
    43
mType(type),
36
hgs
parents: 35
diff changeset
    44
mLevel(VideoCollectionCommon::ELevelInvalid),
35
hgs
parents: 34
diff changeset
    45
mGenericFilterId(TMPXItemId::InvalidId()),
34
hgs
parents: 30
diff changeset
    46
mGenericFilterValue(false),
35
hgs
parents: 34
diff changeset
    47
mIdleSortTimer(0),
36
hgs
parents: 35
diff changeset
    48
mWantedSortRole(VideoCollectionCommon::KeyDateTime),
hgs
parents: 35
diff changeset
    49
mWantedSortOrder(Qt::AscendingOrder)
30
hgs
parents:
diff changeset
    50
{
36
hgs
parents: 35
diff changeset
    51
	FUNC_LOG_ADDR(this);
hgs
parents: 35
diff changeset
    52
	INFO_2("VideoSortFilterProxyModel::VideoSortFilterProxyModel() [0x%x]: type: %d", this, type);
30
hgs
parents:
diff changeset
    53
}
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    56
// VideoSortFilterProxyModel::~VideoSortFilterProxyModel
hgs
parents:
diff changeset
    57
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    58
//
hgs
parents:
diff changeset
    59
VideoSortFilterProxyModel::~VideoSortFilterProxyModel()
hgs
parents:
diff changeset
    60
{
36
hgs
parents: 35
diff changeset
    61
	FUNC_LOG_ADDR(this);
30
hgs
parents:
diff changeset
    62
}
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    65
// VideoSortFilterProxyModel::initialize
hgs
parents:
diff changeset
    66
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    67
//
hgs
parents:
diff changeset
    68
int VideoSortFilterProxyModel::initialize(VideoListDataModel *sourceModel)
hgs
parents:
diff changeset
    69
{
36
hgs
parents: 35
diff changeset
    70
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
    71
    if(!sourceModel)
hgs
parents: 30
diff changeset
    72
    {
hgs
parents: 30
diff changeset
    73
        return -1;
hgs
parents: 30
diff changeset
    74
    }
hgs
parents: 30
diff changeset
    75
    
hgs
parents: 30
diff changeset
    76
    if(!mModel) 
hgs
parents: 30
diff changeset
    77
    {
hgs
parents: 30
diff changeset
    78
        mModel = sourceModel;
hgs
parents: 30
diff changeset
    79
        if(!connectSignals()) 
hgs
parents: 30
diff changeset
    80
        {
36
hgs
parents: 35
diff changeset
    81
            ERROR_1(-1, "VideoSortFilterProxyModel::initialize() [0x%x] failed to connect signals.", this);
34
hgs
parents: 30
diff changeset
    82
            disconnectSignals();
hgs
parents: 30
diff changeset
    83
            mModel = 0;
30
hgs
parents:
diff changeset
    84
            return -1;
hgs
parents:
diff changeset
    85
        }
34
hgs
parents: 30
diff changeset
    86
        mCollectionClient = mModel->getCollectionClient();
hgs
parents: 30
diff changeset
    87
        setSourceModel(sourceModel); 
hgs
parents: 30
diff changeset
    88
    }           
hgs
parents: 30
diff changeset
    89
    return 0;
hgs
parents: 30
diff changeset
    90
}
30
hgs
parents:
diff changeset
    91
34
hgs
parents: 30
diff changeset
    92
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
    93
// VideoSortFilterProxyModel::connectSignals
hgs
parents: 30
diff changeset
    94
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
    95
//
hgs
parents: 30
diff changeset
    96
bool VideoSortFilterProxyModel::connectSignals()
hgs
parents: 30
diff changeset
    97
{
36
hgs
parents: 35
diff changeset
    98
	FUNC_LOG_ADDR(this);
49
hgs
parents: 39
diff changeset
    99
34
hgs
parents: 30
diff changeset
   100
    if(!connect(mModel, SIGNAL(modelChanged()),
49
hgs
parents: 39
diff changeset
   101
                    this, SLOT(invalidate()))) 
34
hgs
parents: 30
diff changeset
   102
    {
hgs
parents: 30
diff changeset
   103
        return false;
hgs
parents: 30
diff changeset
   104
    }
36
hgs
parents: 35
diff changeset
   105
    if(mType == VideoCollectionCommon::EModelTypeCollectionContent)
34
hgs
parents: 30
diff changeset
   106
    {
35
hgs
parents: 34
diff changeset
   107
        if(!connect(mModel, SIGNAL(albumChanged()),
hgs
parents: 34
diff changeset
   108
                    this, SLOT(albumChangedSlot()))) 
hgs
parents: 34
diff changeset
   109
        {
hgs
parents: 34
diff changeset
   110
            return false;
hgs
parents: 34
diff changeset
   111
        }
34
hgs
parents: 30
diff changeset
   112
    }
36
hgs
parents: 35
diff changeset
   113
    if(mType == VideoCollectionCommon::EModelTypeCollections)
hgs
parents: 35
diff changeset
   114
    {
hgs
parents: 35
diff changeset
   115
        if(!connect(mModel, SIGNAL(itemModified(const TMPXItemId &)),
hgs
parents: 35
diff changeset
   116
                    this, SLOT(itemModifiedSlot(const TMPXItemId &)))) 
hgs
parents: 35
diff changeset
   117
        {
hgs
parents: 35
diff changeset
   118
            return false;
hgs
parents: 35
diff changeset
   119
        }
hgs
parents: 35
diff changeset
   120
    }
34
hgs
parents: 30
diff changeset
   121
    return true;
hgs
parents: 30
diff changeset
   122
}
hgs
parents: 30
diff changeset
   123
   
hgs
parents: 30
diff changeset
   124
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   125
// VideoSortFilterProxyModel::disconnectSignals
hgs
parents: 30
diff changeset
   126
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   127
//
hgs
parents: 30
diff changeset
   128
void VideoSortFilterProxyModel::disconnectSignals()
hgs
parents: 30
diff changeset
   129
{
36
hgs
parents: 35
diff changeset
   130
	FUNC_LOG_ADDR(this);
49
hgs
parents: 39
diff changeset
   131
    disconnect(mModel, SIGNAL(modelChanged()), this, SLOT(invalidate()));
36
hgs
parents: 35
diff changeset
   132
    if(mType == VideoCollectionCommon::EModelTypeCollectionContent)
35
hgs
parents: 34
diff changeset
   133
    {
hgs
parents: 34
diff changeset
   134
        disconnect(mModel, SIGNAL(albumChanged()), this, SLOT(albumChangedSlot()));
hgs
parents: 34
diff changeset
   135
    }
36
hgs
parents: 35
diff changeset
   136
    if(mType == VideoCollectionCommon::EModelTypeCollections)
hgs
parents: 35
diff changeset
   137
    {
hgs
parents: 35
diff changeset
   138
        disconnect(mModel, SIGNAL(itemModified(const TMPXItemId &)), 
hgs
parents: 35
diff changeset
   139
                   this, SLOT(itemModifiedSlot(const TMPXItemId &)));
hgs
parents: 35
diff changeset
   140
    }
30
hgs
parents:
diff changeset
   141
}
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   144
// VideoSortFilterProxyModel::open
hgs
parents:
diff changeset
   145
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   146
//
36
hgs
parents: 35
diff changeset
   147
int VideoSortFilterProxyModel::open(VideoCollectionCommon::TCollectionLevels level)
30
hgs
parents:
diff changeset
   148
{
36
hgs
parents: 35
diff changeset
   149
	FUNC_LOG_ADDR(this);
hgs
parents: 35
diff changeset
   150
	INFO_2("VideoSortFilterProxyModel::open() [0x%x] level: %d", this, level);
hgs
parents: 35
diff changeset
   151
	
34
hgs
parents: 30
diff changeset
   152
    if(!mCollectionClient)
hgs
parents: 30
diff changeset
   153
    {
hgs
parents: 30
diff changeset
   154
        return -1;
30
hgs
parents:
diff changeset
   155
    }
49
hgs
parents: 39
diff changeset
   156
34
hgs
parents: 30
diff changeset
   157
    if(mLevel != level) 
hgs
parents: 30
diff changeset
   158
    {
49
hgs
parents: 39
diff changeset
   159
       INFO_1("VideoSortFilterProxyModel::open() [0x%x] opening different level, invalidating.", this);
hgs
parents: 39
diff changeset
   160
       mLevel = level;
hgs
parents: 39
diff changeset
   161
       invalidateFilter();
hgs
parents: 39
diff changeset
   162
       // sorting call required here to setup correct sort order in cases where source model allready 
hgs
parents: 39
diff changeset
   163
       // contains items but proxy is not yet updated. (invalidate -call does not work since it updates proxy and
hgs
parents: 39
diff changeset
   164
       // calls sort in different order for us to use)
hgs
parents: 39
diff changeset
   165
       sort(0, mWantedSortOrder);
34
hgs
parents: 30
diff changeset
   166
    }
hgs
parents: 30
diff changeset
   167
    // need to call open every time to make sure all items are 
hgs
parents: 30
diff changeset
   168
    // inserted to UI ( recent open might have been cancelled)
hgs
parents: 30
diff changeset
   169
    return mCollectionClient->startOpenCollection(level);
30
hgs
parents:
diff changeset
   170
}
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   173
// VideoSortFilterProxyModel::doSorting
hgs
parents:
diff changeset
   174
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   175
//
hgs
parents:
diff changeset
   176
void VideoSortFilterProxyModel::doSorting(int sortingRole, Qt::SortOrder order, 
hgs
parents:
diff changeset
   177
        bool async)
hgs
parents:
diff changeset
   178
{
36
hgs
parents: 35
diff changeset
   179
	FUNC_LOG_ADDR(this);
hgs
parents: 35
diff changeset
   180
	INFO_3("VideoSortFilterProxyModel::doSorting() [0x%x] sortingRole: %d, order: %d", this, sortingRole, order);
hgs
parents: 35
diff changeset
   181
	
hgs
parents: 35
diff changeset
   182
    if(sortingRole != VideoCollectionCommon::KeyTitle &&
hgs
parents: 35
diff changeset
   183
       sortingRole != VideoCollectionCommon::KeySizeValue &&
hgs
parents: 35
diff changeset
   184
       sortingRole != VideoCollectionCommon::KeyDateTime &&
hgs
parents: 35
diff changeset
   185
       sortingRole != VideoCollectionCommon::KeyNumberOfItems)
30
hgs
parents:
diff changeset
   186
    {
36
hgs
parents: 35
diff changeset
   187
        // default sorting order is by date for other models but collections.
hgs
parents: 35
diff changeset
   188
        if(mType != VideoCollectionCommon::EModelTypeCollections)
hgs
parents: 35
diff changeset
   189
        {   
hgs
parents: 35
diff changeset
   190
            mWantedSortRole = VideoCollectionCommon::KeyDateTime;
hgs
parents: 35
diff changeset
   191
        }
hgs
parents: 35
diff changeset
   192
        else
hgs
parents: 35
diff changeset
   193
        {
hgs
parents: 35
diff changeset
   194
            mWantedSortRole = VideoCollectionCommon::KeyTitle;
hgs
parents: 35
diff changeset
   195
        }
30
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
    else
hgs
parents:
diff changeset
   198
    {
hgs
parents:
diff changeset
   199
        mWantedSortRole = sortingRole;
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
    
hgs
parents:
diff changeset
   202
    mWantedSortOrder = order;
hgs
parents:
diff changeset
   203
    
hgs
parents:
diff changeset
   204
    if(async)
hgs
parents:
diff changeset
   205
    {
hgs
parents:
diff changeset
   206
        if(mIdleSortTimer)
hgs
parents:
diff changeset
   207
        {
hgs
parents:
diff changeset
   208
            if(mIdleSortTimer->isActive())
hgs
parents:
diff changeset
   209
            {
hgs
parents:
diff changeset
   210
                mIdleSortTimer->stop();
hgs
parents:
diff changeset
   211
            }
hgs
parents:
diff changeset
   212
        }
hgs
parents:
diff changeset
   213
        else
hgs
parents:
diff changeset
   214
        {
hgs
parents:
diff changeset
   215
            mIdleSortTimer = new QTimer(this);
hgs
parents:
diff changeset
   216
            connect(mIdleSortTimer, SIGNAL(timeout()), this, SLOT(processSorting()));
hgs
parents:
diff changeset
   217
        }
hgs
parents:
diff changeset
   218
        mIdleSortTimer->start(0);
36
hgs
parents: 35
diff changeset
   219
    }
hgs
parents: 35
diff changeset
   220
    else
hgs
parents: 35
diff changeset
   221
    {
30
hgs
parents:
diff changeset
   222
        processSorting();
hgs
parents:
diff changeset
   223
    }
hgs
parents:
diff changeset
   224
}
34
hgs
parents: 30
diff changeset
   225
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   226
// VideoSortFilterProxyModel::getSorting
hgs
parents: 30
diff changeset
   227
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   228
//
hgs
parents: 30
diff changeset
   229
void VideoSortFilterProxyModel::getSorting(int &sortingRole, Qt::SortOrder &order)
hgs
parents: 30
diff changeset
   230
{
36
hgs
parents: 35
diff changeset
   231
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   232
	sortingRole = mWantedSortRole;
hgs
parents: 30
diff changeset
   233
	order       = mWantedSortOrder;
hgs
parents: 30
diff changeset
   234
}
30
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   237
// VideoSortFilterProxyModel::deleteItems
hgs
parents:
diff changeset
   238
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   239
//
hgs
parents:
diff changeset
   240
int VideoSortFilterProxyModel::deleteItems(const QModelIndexList &indexList)
hgs
parents:
diff changeset
   241
{
36
hgs
parents: 35
diff changeset
   242
	FUNC_LOG_ADDR(this);
30
hgs
parents:
diff changeset
   243
    if(mModel)
hgs
parents:
diff changeset
   244
    {
hgs
parents:
diff changeset
   245
        QModelIndexList mappedList;
hgs
parents:
diff changeset
   246
        for(int i = 0; i < indexList.count(); ++i)
hgs
parents:
diff changeset
   247
        {
hgs
parents:
diff changeset
   248
            mappedList.append(mapToSource(indexList.at(i)));
hgs
parents:
diff changeset
   249
        }
hgs
parents:
diff changeset
   250
        
hgs
parents:
diff changeset
   251
        if(mModel->removeRows(mappedList))
hgs
parents:
diff changeset
   252
        {
hgs
parents:
diff changeset
   253
            // Start fetching thumbnails at start of the model.
34
hgs
parents: 30
diff changeset
   254
            VideoThumbnailData::instance().startBackgroundFetching(0, 0);
30
hgs
parents:
diff changeset
   255
            return 0;
hgs
parents:
diff changeset
   256
        }
hgs
parents:
diff changeset
   257
    }
hgs
parents:
diff changeset
   258
    return -1;
hgs
parents:
diff changeset
   259
}
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   262
// VideoSortFilterProxyModel::openItem
hgs
parents:
diff changeset
   263
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   264
//
34
hgs
parents: 30
diff changeset
   265
int VideoSortFilterProxyModel::openItem(TMPXItemId mediaId)
30
hgs
parents:
diff changeset
   266
{
36
hgs
parents: 35
diff changeset
   267
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   268
    if(mediaId != TMPXItemId::InvalidId() && mCollectionClient)
30
hgs
parents:
diff changeset
   269
    {
34
hgs
parents: 30
diff changeset
   270
        if(mCollectionClient->openItem(mediaId) == 0)
hgs
parents: 30
diff changeset
   271
        {
hgs
parents: 30
diff changeset
   272
            if(mediaId.iId2 != KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   273
            { 
hgs
parents: 30
diff changeset
   274
                mLevel = VideoCollectionCommon::ELevelAlbum;
hgs
parents: 30
diff changeset
   275
                mModel->setAlbumInUse(mediaId);
36
hgs
parents: 35
diff changeset
   276
                INFO_1("VideoSortFilterProxyModel::open() [0x%x] opening album or category, invalidating.", this);
34
hgs
parents: 30
diff changeset
   277
                invalidateFilter();
49
hgs
parents: 39
diff changeset
   278
                // sorting call required here to setup correct sort order in cases where source model allready 
hgs
parents: 39
diff changeset
   279
                // contains items but proxy is not yet updated. (invalidate -call does not work since it updates proxy and
hgs
parents: 39
diff changeset
   280
                // calls sort in different order for us to use)
hgs
parents: 39
diff changeset
   281
                sort(0, mWantedSortOrder);
34
hgs
parents: 30
diff changeset
   282
            } 
hgs
parents: 30
diff changeset
   283
            return 0;
hgs
parents: 30
diff changeset
   284
        }
30
hgs
parents:
diff changeset
   285
    }
hgs
parents:
diff changeset
   286
    return -1;
hgs
parents:
diff changeset
   287
}
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   290
// VideoSortFilterProxyModel::back
hgs
parents:
diff changeset
   291
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   292
//
hgs
parents:
diff changeset
   293
int VideoSortFilterProxyModel::back()
hgs
parents:
diff changeset
   294
{
36
hgs
parents: 35
diff changeset
   295
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   296
    if(mCollectionClient && mCollectionClient->back() == 0)
30
hgs
parents:
diff changeset
   297
    {
34
hgs
parents: 30
diff changeset
   298
        if(mLevel == VideoCollectionCommon::ELevelAlbum)
hgs
parents: 30
diff changeset
   299
        {
hgs
parents: 30
diff changeset
   300
            mLevel = VideoCollectionCommon::ELevelCategory;
hgs
parents: 30
diff changeset
   301
        }
hgs
parents: 30
diff changeset
   302
        else
hgs
parents: 30
diff changeset
   303
        {
hgs
parents: 30
diff changeset
   304
            mLevel = VideoCollectionCommon::ELevelVideos;
hgs
parents: 30
diff changeset
   305
        }
hgs
parents: 30
diff changeset
   306
        return 0;
30
hgs
parents:
diff changeset
   307
    }
hgs
parents:
diff changeset
   308
    return -1;
hgs
parents:
diff changeset
   309
}
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   312
// VideoSortFilterProxyModel::fetchItemDetails
hgs
parents:
diff changeset
   313
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   314
//
hgs
parents:
diff changeset
   315
int VideoSortFilterProxyModel::fetchItemDetails(const QModelIndex &index)
hgs
parents:
diff changeset
   316
{
36
hgs
parents: 35
diff changeset
   317
	FUNC_LOG_ADDR(this);
30
hgs
parents:
diff changeset
   318
    // no need to map index beforehand, because 
hgs
parents:
diff changeset
   319
	// getMediaIdAtIndex maps it
hgs
parents:
diff changeset
   320
    TMPXItemId mpxId1 = getMediaIdAtIndex(index);
hgs
parents:
diff changeset
   321
    if(mpxId1 != TMPXItemId::InvalidId() && mCollectionClient)
hgs
parents:
diff changeset
   322
    {
hgs
parents:
diff changeset
   323
        if(mCollectionClient->getVideoDetails(mpxId1) == 0)
hgs
parents:
diff changeset
   324
        {
34
hgs
parents: 30
diff changeset
   325
            emit shortDetailsReady(mpxId1);
30
hgs
parents:
diff changeset
   326
            return 0;
hgs
parents:
diff changeset
   327
        }
hgs
parents:
diff changeset
   328
    }
hgs
parents:
diff changeset
   329
    return -1;
hgs
parents:
diff changeset
   330
}
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   333
// VideoSortFilterProxyModel::processSorting
hgs
parents:
diff changeset
   334
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   335
//
hgs
parents:
diff changeset
   336
void VideoSortFilterProxyModel::processSorting()
hgs
parents:
diff changeset
   337
{
36
hgs
parents: 35
diff changeset
   338
	FUNC_LOG_ADDR(this);
30
hgs
parents:
diff changeset
   339
    if(mIdleSortTimer)
hgs
parents:
diff changeset
   340
    {
hgs
parents:
diff changeset
   341
        mIdleSortTimer->stop();
hgs
parents:
diff changeset
   342
    }
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
    if(sortRole() != mWantedSortRole)
hgs
parents:
diff changeset
   345
    {
hgs
parents:
diff changeset
   346
        setSortRole(mWantedSortRole);
hgs
parents:
diff changeset
   347
    }
hgs
parents:
diff changeset
   348
    
hgs
parents:
diff changeset
   349
    if(sortColumn() == -1 || sortOrder() != mWantedSortOrder)
hgs
parents:
diff changeset
   350
    {
hgs
parents:
diff changeset
   351
        // if sorting column is not yet setted, it indicates
hgs
parents:
diff changeset
   352
        // that we've setted the sorting order for the first time
hgs
parents:
diff changeset
   353
        // and sorting has not yet been done. After we have called sort once,
hgs
parents:
diff changeset
   354
        // the sort columnt gets updated and following sorts gets executed
hgs
parents:
diff changeset
   355
        // by setSortRole -call as long as role changes.
hgs
parents:
diff changeset
   356
    
hgs
parents:
diff changeset
   357
        // Another case is when we need to change the sort order, as there is
hgs
parents:
diff changeset
   358
        // no other way of setting the sort order than calling sort().
hgs
parents:
diff changeset
   359
        sort(0, mWantedSortOrder);
hgs
parents:
diff changeset
   360
    }
hgs
parents:
diff changeset
   361
    
hgs
parents:
diff changeset
   362
    // Start fetching thumbnails at start of the model.
34
hgs
parents: 30
diff changeset
   363
    VideoThumbnailData::instance().startBackgroundFetching(0, 0);
30
hgs
parents:
diff changeset
   364
}
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   367
// VideoSortFilterProxyModel::lessThan
hgs
parents:
diff changeset
   368
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   369
//
34
hgs
parents: 30
diff changeset
   370
bool VideoSortFilterProxyModel::lessThan(const QModelIndex &left,
hgs
parents: 30
diff changeset
   371
    const QModelIndex &right) const
30
hgs
parents:
diff changeset
   372
{
34
hgs
parents: 30
diff changeset
   373
    if (!mModel)
hgs
parents: 30
diff changeset
   374
    {
hgs
parents: 30
diff changeset
   375
        return false;
hgs
parents: 30
diff changeset
   376
    }
hgs
parents: 30
diff changeset
   377
    TMPXItemId leftId = mModel->mediaIdAtIndex(left.row());
hgs
parents: 30
diff changeset
   378
    TMPXItemId rightId = mModel->mediaIdAtIndex(right.row());
hgs
parents: 30
diff changeset
   379
    
hgs
parents: 30
diff changeset
   380
    // Default categories are always first in the following order:
36
hgs
parents: 35
diff changeset
   381
    // Recently played (missing currently)
34
hgs
parents: 30
diff changeset
   382
    // Captured
hgs
parents: 30
diff changeset
   383
    // Downloaded
hgs
parents: 30
diff changeset
   384
    // Podcasts (missing currently)
hgs
parents: 30
diff changeset
   385
    bool lessThan(false);
hgs
parents: 30
diff changeset
   386
    bool proceedDataSorting(false);
hgs
parents: 30
diff changeset
   387
    if(leftId.iId2  == KVcxMvcMediaTypeCategory &&
hgs
parents: 30
diff changeset
   388
       rightId.iId2 == KVcxMvcMediaTypeCategory)
hgs
parents: 30
diff changeset
   389
    {
hgs
parents: 30
diff changeset
   390
        if(leftId.iId1 == KVcxMvcCategoryIdCaptured)
hgs
parents: 30
diff changeset
   391
        {
hgs
parents: 30
diff changeset
   392
            lessThan = true;
hgs
parents: 30
diff changeset
   393
        }
hgs
parents: 30
diff changeset
   394
   
hgs
parents: 30
diff changeset
   395
        else if(leftId.iId1 == KVcxMvcCategoryIdDownloads)
hgs
parents: 30
diff changeset
   396
        {
hgs
parents: 30
diff changeset
   397
            if(rightId.iId1 != KVcxMvcCategoryIdCaptured)
hgs
parents: 30
diff changeset
   398
            {
hgs
parents: 30
diff changeset
   399
                lessThan = true;
hgs
parents: 30
diff changeset
   400
            }
hgs
parents: 30
diff changeset
   401
        }
hgs
parents: 30
diff changeset
   402
    }
hgs
parents: 30
diff changeset
   403
    else if(leftId.iId2 == KVcxMvcMediaTypeCategory ||
hgs
parents: 30
diff changeset
   404
            rightId.iId2 == KVcxMvcMediaTypeCategory)
hgs
parents: 30
diff changeset
   405
    {
hgs
parents: 30
diff changeset
   406
        lessThan = (leftId.iId2 == KVcxMvcMediaTypeCategory);
hgs
parents: 30
diff changeset
   407
    }
hgs
parents: 30
diff changeset
   408
    else
hgs
parents: 30
diff changeset
   409
    {
hgs
parents: 30
diff changeset
   410
        proceedDataSorting = true;
hgs
parents: 30
diff changeset
   411
    }
30
hgs
parents:
diff changeset
   412
34
hgs
parents: 30
diff changeset
   413
    if(!proceedDataSorting)
hgs
parents: 30
diff changeset
   414
    {
hgs
parents: 30
diff changeset
   415
        return mWantedSortOrder == Qt::AscendingOrder ? lessThan : !lessThan;
hgs
parents: 30
diff changeset
   416
    }
hgs
parents: 30
diff changeset
   417
    
hgs
parents: 30
diff changeset
   418
    // Do comparisation based on the role:
36
hgs
parents: 35
diff changeset
   419
    //  VideoCollectionCommon::KeyTitle,
34
hgs
parents: 30
diff changeset
   420
    //  VideoCollectionCommon::KeySizeValue,
36
hgs
parents: 35
diff changeset
   421
    //  VideoCollectionCommon::KeyNumberOfItems,
34
hgs
parents: 30
diff changeset
   422
    //  VideoCollectionCommon::KeyDateValue
hgs
parents: 30
diff changeset
   423
    // 
hgs
parents: 30
diff changeset
   424
    // If role does not match, do not sort
30
hgs
parents:
diff changeset
   425
    int sRole = sortRole();
hgs
parents:
diff changeset
   426
    QVariant leftData = sourceModel()->data(left, sRole);
hgs
parents:
diff changeset
   427
    QVariant rightData = sourceModel()->data(right, sRole);
hgs
parents:
diff changeset
   428
hgs
parents:
diff changeset
   429
    if(!leftData.isValid() || !rightData.isValid())
hgs
parents:
diff changeset
   430
    {
hgs
parents:
diff changeset
   431
        return false;
hgs
parents:
diff changeset
   432
    }
36
hgs
parents: 35
diff changeset
   433
    if(sRole == VideoCollectionCommon::KeyTitle)
30
hgs
parents:
diff changeset
   434
    {
36
hgs
parents: 35
diff changeset
   435
        QString leftString = leftData.toString().toUpper();
hgs
parents: 35
diff changeset
   436
        QString rightString = rightData.toString().toUpper();
30
hgs
parents:
diff changeset
   437
        return QString::localeAwareCompare(leftString, rightString) < 0;
hgs
parents:
diff changeset
   438
    }
36
hgs
parents: 35
diff changeset
   439
    else if(sRole == VideoCollectionCommon::KeySizeValue ||
hgs
parents: 35
diff changeset
   440
            sRole == VideoCollectionCommon::KeyNumberOfItems)
30
hgs
parents:
diff changeset
   441
    {
hgs
parents:
diff changeset
   442
        quint32 leftSize = leftData.toUInt();
hgs
parents:
diff changeset
   443
        quint32 rightSize = rightData.toUInt();
hgs
parents:
diff changeset
   444
        return leftSize < rightSize;
hgs
parents:
diff changeset
   445
    }
hgs
parents:
diff changeset
   446
    else if(sRole == VideoCollectionCommon::KeyDateTime)
hgs
parents:
diff changeset
   447
    {
hgs
parents:
diff changeset
   448
        QDateTime leftDateTime = leftData.toDateTime();
hgs
parents:
diff changeset
   449
        QDateTime rightDateTime = rightData.toDateTime();
hgs
parents:
diff changeset
   450
        // datetime sorting role has inverted sorting order compared to other roles 
hgs
parents:
diff changeset
   451
        return rightDateTime < leftDateTime;
hgs
parents:
diff changeset
   452
    }
hgs
parents:
diff changeset
   453
    return false;
hgs
parents:
diff changeset
   454
}
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   457
// VideoSortFilterProxyModel::filterAcceptsRow
hgs
parents:
diff changeset
   458
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   459
//
35
hgs
parents: 34
diff changeset
   460
bool VideoSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
30
hgs
parents:
diff changeset
   461
{
34
hgs
parents: 30
diff changeset
   462
    Q_UNUSED(source_parent);
35
hgs
parents: 34
diff changeset
   463
    
30
hgs
parents:
diff changeset
   464
    if(!sourceModel())
36
hgs
parents: 35
diff changeset
   465
    {
30
hgs
parents:
diff changeset
   466
        return false;
36
hgs
parents: 35
diff changeset
   467
    }
30
hgs
parents:
diff changeset
   468
34
hgs
parents: 30
diff changeset
   469
    if(source_row < 0 || source_row >= sourceModel()->rowCount())
hgs
parents: 30
diff changeset
   470
    {
hgs
parents: 30
diff changeset
   471
        return false;
hgs
parents: 30
diff changeset
   472
    }
hgs
parents: 30
diff changeset
   473
    TMPXItemId id = mModel->mediaIdAtIndex(source_row);
hgs
parents: 30
diff changeset
   474
    if(id == TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   475
    {
hgs
parents: 30
diff changeset
   476
        return false;
hgs
parents: 30
diff changeset
   477
    }
hgs
parents: 30
diff changeset
   478
    
36
hgs
parents: 35
diff changeset
   479
    if (mType == VideoCollectionCommon::EModelTypeAllVideos)
34
hgs
parents: 30
diff changeset
   480
    {
hgs
parents: 30
diff changeset
   481
        if(id.iId2 == KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   482
        {
hgs
parents: 30
diff changeset
   483
            return true;
hgs
parents: 30
diff changeset
   484
        }
hgs
parents: 30
diff changeset
   485
    }
36
hgs
parents: 35
diff changeset
   486
    else if(mType == VideoCollectionCommon::EModelTypeCollections)
34
hgs
parents: 30
diff changeset
   487
    {
hgs
parents: 30
diff changeset
   488
        if(mLevel == VideoCollectionCommon::ELevelCategory && id.iId2 != KVcxMvcMediaTypeVideo)
hgs
parents: 30
diff changeset
   489
        {
hgs
parents: 30
diff changeset
   490
            return true;
hgs
parents: 30
diff changeset
   491
        }       
hgs
parents: 30
diff changeset
   492
    }
36
hgs
parents: 35
diff changeset
   493
    else if (mType == VideoCollectionCommon::EModelTypeCollectionContent)
30
hgs
parents:
diff changeset
   494
    {
34
hgs
parents: 30
diff changeset
   495
        // if item belongs to the open album, accept it
hgs
parents: 30
diff changeset
   496
        if (mModel->belongsToAlbum(id))
hgs
parents: 30
diff changeset
   497
        {
hgs
parents: 30
diff changeset
   498
            return true;
hgs
parents: 30
diff changeset
   499
        }
hgs
parents: 30
diff changeset
   500
    }
36
hgs
parents: 35
diff changeset
   501
    else if(mType == VideoCollectionCommon::EModelTypeGeneric)
34
hgs
parents: 30
diff changeset
   502
    {
hgs
parents: 30
diff changeset
   503
        if(mLevel == VideoCollectionCommon::ELevelVideos && id.iId2 == KVcxMvcMediaTypeVideo)
30
hgs
parents:
diff changeset
   504
        {
34
hgs
parents: 30
diff changeset
   505
            //  filter items that belong to that album setted as filter id
hgs
parents: 30
diff changeset
   506
            // if there's no filter or setted filter is "all videos", we accept everything
hgs
parents: 30
diff changeset
   507
            if(mGenericFilterId == TMPXItemId::InvalidId() || 
hgs
parents: 30
diff changeset
   508
               (mGenericFilterId.iId1 == KVcxMvcCategoryIdAll && 
hgs
parents: 30
diff changeset
   509
                mGenericFilterId.iId2 == KVcxMvcMediaTypeCategory) ||
hgs
parents: 30
diff changeset
   510
                mGenericFilterValue == mModel->belongsToAlbum(id, mGenericFilterId))
hgs
parents: 30
diff changeset
   511
            {
hgs
parents: 30
diff changeset
   512
                return true;
hgs
parents: 30
diff changeset
   513
            }
30
hgs
parents:
diff changeset
   514
        }
34
hgs
parents: 30
diff changeset
   515
        else if(mLevel == VideoCollectionCommon::ELevelCategory && id.iId2 == KVcxMvcMediaTypeAlbum)    
hgs
parents: 30
diff changeset
   516
        {
hgs
parents: 30
diff changeset
   517
            // we do not filter albums yet
hgs
parents: 30
diff changeset
   518
            return true;
hgs
parents: 30
diff changeset
   519
        }
30
hgs
parents:
diff changeset
   520
    }
34
hgs
parents: 30
diff changeset
   521
    
30
hgs
parents:
diff changeset
   522
    return false;
hgs
parents:
diff changeset
   523
}
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   526
// VideoSortFilterProxyModel::getMediaIdAtIndex()
hgs
parents:
diff changeset
   527
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   528
//
34
hgs
parents: 30
diff changeset
   529
TMPXItemId VideoSortFilterProxyModel::getMediaIdAtIndex(const QModelIndex &index) const
30
hgs
parents:
diff changeset
   530
{
hgs
parents:
diff changeset
   531
    TMPXItemId mpxId = TMPXItemId::InvalidId();
39
hgs
parents: 37
diff changeset
   532
    if(index.isValid())
30
hgs
parents:
diff changeset
   533
    {
39
hgs
parents: 37
diff changeset
   534
        QModelIndex sourceIndex = mapToSource(index);
hgs
parents: 37
diff changeset
   535
        if(mModel && sourceIndex.isValid())
hgs
parents: 37
diff changeset
   536
        {
hgs
parents: 37
diff changeset
   537
            mpxId = mModel->mediaIdAtIndex(sourceIndex.row());
hgs
parents: 37
diff changeset
   538
        }
30
hgs
parents:
diff changeset
   539
    }
hgs
parents:
diff changeset
   540
    return mpxId;
hgs
parents:
diff changeset
   541
}
hgs
parents:
diff changeset
   542
hgs
parents:
diff changeset
   543
// -----------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   544
//  VideoSortFilterProxyModel::indexOfId()
hgs
parents: 30
diff changeset
   545
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   546
//
hgs
parents: 30
diff changeset
   547
QModelIndex VideoSortFilterProxyModel::indexOfId(TMPXItemId id)
hgs
parents: 30
diff changeset
   548
{    
hgs
parents: 30
diff changeset
   549
    QModelIndex sourceIndex;
hgs
parents: 30
diff changeset
   550
    if(!mModel || id == TMPXItemId::InvalidId())
hgs
parents: 30
diff changeset
   551
    {
hgs
parents: 30
diff changeset
   552
        return sourceIndex;
hgs
parents: 30
diff changeset
   553
    }
hgs
parents: 30
diff changeset
   554
    sourceIndex = mModel->indexOfId(id);
hgs
parents: 30
diff changeset
   555
    return mapFromSource(sourceIndex);
hgs
parents: 30
diff changeset
   556
}
hgs
parents: 30
diff changeset
   557
hgs
parents: 30
diff changeset
   558
// -----------------------------------------------------------------------------
30
hgs
parents:
diff changeset
   559
// VideoSortFilterProxyModel::getMediaFilePathForId()
hgs
parents:
diff changeset
   560
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   561
//
hgs
parents:
diff changeset
   562
QString VideoSortFilterProxyModel::getMediaFilePathForId(TMPXItemId mediaId)
hgs
parents:
diff changeset
   563
{
hgs
parents:
diff changeset
   564
    QString filePath;
hgs
parents:
diff changeset
   565
    if(mModel)
hgs
parents:
diff changeset
   566
    {
hgs
parents:
diff changeset
   567
        filePath = mModel->mediaFilePathForId(mediaId);
hgs
parents:
diff changeset
   568
    }
hgs
parents:
diff changeset
   569
    return filePath;
hgs
parents:
diff changeset
   570
}
hgs
parents:
diff changeset
   571
hgs
parents:
diff changeset
   572
// -----------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   573
// VideoSortFilterProxyModel::addNewAlbum()
hgs
parents: 30
diff changeset
   574
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   575
//
hgs
parents: 30
diff changeset
   576
TMPXItemId VideoSortFilterProxyModel::addNewAlbum(const QString &title)
hgs
parents: 30
diff changeset
   577
{
36
hgs
parents: 35
diff changeset
   578
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   579
    TMPXItemId id = TMPXItemId::InvalidId();
hgs
parents: 30
diff changeset
   580
    
hgs
parents: 30
diff changeset
   581
    if (mCollectionClient)
hgs
parents: 30
diff changeset
   582
    {
hgs
parents: 30
diff changeset
   583
        id = mCollectionClient->addNewAlbum(title);
hgs
parents: 30
diff changeset
   584
    }
hgs
parents: 30
diff changeset
   585
    
hgs
parents: 30
diff changeset
   586
    return id;
hgs
parents: 30
diff changeset
   587
}
hgs
parents: 30
diff changeset
   588
hgs
parents: 30
diff changeset
   589
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   590
// VideoSortFilterProxyModel::removeAlbums()
hgs
parents: 30
diff changeset
   591
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   592
//
hgs
parents: 30
diff changeset
   593
int VideoSortFilterProxyModel::removeAlbums(const QModelIndexList &indexList)
hgs
parents: 30
diff changeset
   594
{
36
hgs
parents: 35
diff changeset
   595
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   596
	int err(-1);
hgs
parents: 30
diff changeset
   597
    
hgs
parents: 30
diff changeset
   598
	if (mCollectionClient)
hgs
parents: 30
diff changeset
   599
	{
hgs
parents: 30
diff changeset
   600
		TMPXItemId mpxId;
hgs
parents: 30
diff changeset
   601
		QList<TMPXItemId> ids;
hgs
parents: 30
diff changeset
   602
hgs
parents: 30
diff changeset
   603
		for(int i = 0; i < indexList.count(); ++i)
hgs
parents: 30
diff changeset
   604
		{
hgs
parents: 30
diff changeset
   605
			mpxId = getMediaIdAtIndex(indexList.at(i));
hgs
parents: 30
diff changeset
   606
			if((mpxId != TMPXItemId::InvalidId()) && (mpxId.iId2 == KVcxMvcMediaTypeAlbum))
hgs
parents: 30
diff changeset
   607
			{
hgs
parents: 30
diff changeset
   608
				ids.append(getMediaIdAtIndex(indexList.at(i)));
hgs
parents: 30
diff changeset
   609
			}
hgs
parents: 30
diff changeset
   610
		}
hgs
parents: 30
diff changeset
   611
		
hgs
parents: 30
diff changeset
   612
		if (ids.count())
hgs
parents: 30
diff changeset
   613
		{
hgs
parents: 30
diff changeset
   614
			err = mCollectionClient->removeAlbums(ids);
hgs
parents: 30
diff changeset
   615
		}
hgs
parents: 30
diff changeset
   616
	}
hgs
parents: 30
diff changeset
   617
hgs
parents: 30
diff changeset
   618
    return err;
hgs
parents: 30
diff changeset
   619
}
hgs
parents: 30
diff changeset
   620
hgs
parents: 30
diff changeset
   621
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   622
// VideoSortFilterProxyModel::resolveAlbumName()
30
hgs
parents:
diff changeset
   623
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   624
//
34
hgs
parents: 30
diff changeset
   625
QString VideoSortFilterProxyModel::resolveAlbumName(
hgs
parents: 30
diff changeset
   626
    const QString& albumName) const
hgs
parents: 30
diff changeset
   627
{
36
hgs
parents: 35
diff changeset
   628
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   629
    QString resolvedName = albumName.trimmed();
hgs
parents: 30
diff changeset
   630
hgs
parents: 30
diff changeset
   631
    // for checking names, we need to use collection list proxy model 
hgs
parents: 30
diff changeset
   632
    // to get all existing album names including default ones
hgs
parents: 30
diff changeset
   633
    VideoSortFilterProxyModel *collectionModel = 
hgs
parents: 30
diff changeset
   634
                       VideoCollectionWrapper::instance().getModel(
36
hgs
parents: 35
diff changeset
   635
                                   VideoCollectionCommon::EModelTypeCollections);
34
hgs
parents: 30
diff changeset
   636
    if(!collectionModel || !mModel)
hgs
parents: 30
diff changeset
   637
    {
hgs
parents: 30
diff changeset
   638
        return resolvedName;
hgs
parents: 30
diff changeset
   639
    }    
hgs
parents: 30
diff changeset
   640
    
hgs
parents: 30
diff changeset
   641
    int i(0);
hgs
parents: 30
diff changeset
   642
    QModelIndex proxyIndex = collectionModel->index(i, 0);
hgs
parents: 30
diff changeset
   643
    QSet<QString> names;
hgs
parents: 30
diff changeset
   644
    QVariant data;
hgs
parents: 30
diff changeset
   645
    // create set of existing names
hgs
parents: 30
diff changeset
   646
    while (proxyIndex.isValid())
hgs
parents: 30
diff changeset
   647
    {
36
hgs
parents: 35
diff changeset
   648
        data = mModel->data(collectionModel->mapToSource(proxyIndex), VideoCollectionCommon::KeyTitle);
34
hgs
parents: 30
diff changeset
   649
        if (data.isValid())
hgs
parents: 30
diff changeset
   650
        {
36
hgs
parents: 35
diff changeset
   651
            names.insert(data.toString());
34
hgs
parents: 30
diff changeset
   652
        }
hgs
parents: 30
diff changeset
   653
        proxyIndex = collectionModel->index(++i, 0, QModelIndex());
hgs
parents: 30
diff changeset
   654
    }
hgs
parents: 30
diff changeset
   655
    i = 0;
hgs
parents: 30
diff changeset
   656
    QString firstMatch("");
hgs
parents: 30
diff changeset
   657
    // find a name that does not yet exists
hgs
parents: 30
diff changeset
   658
    while(names.contains(resolvedName))
hgs
parents: 30
diff changeset
   659
    {
hgs
parents: 30
diff changeset
   660
        if (!firstMatch.length())
hgs
parents: 30
diff changeset
   661
        {
hgs
parents: 30
diff changeset
   662
            firstMatch = resolvedName;
hgs
parents: 30
diff changeset
   663
        }
hgs
parents: 30
diff changeset
   664
        ++i;
hgs
parents: 30
diff changeset
   665
        resolvedName = tr("%1 (%2)").arg(firstMatch).arg(i);
hgs
parents: 30
diff changeset
   666
    }
hgs
parents: 30
diff changeset
   667
    return resolvedName;
hgs
parents: 30
diff changeset
   668
}
hgs
parents: 30
diff changeset
   669
hgs
parents: 30
diff changeset
   670
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   671
// VideoSortFilterProxyModel::addItemsInAlbum()
hgs
parents: 30
diff changeset
   672
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   673
//
35
hgs
parents: 34
diff changeset
   674
int VideoSortFilterProxyModel::addItemsInAlbum(TMPXItemId &albumId,
34
hgs
parents: 30
diff changeset
   675
        const QList<TMPXItemId> &mediaIds)
30
hgs
parents:
diff changeset
   676
{
36
hgs
parents: 35
diff changeset
   677
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   678
    int err(-1);
hgs
parents: 30
diff changeset
   679
    
hgs
parents: 30
diff changeset
   680
    if (mCollectionClient)
hgs
parents: 30
diff changeset
   681
    {        
hgs
parents: 30
diff changeset
   682
        // add items in album
hgs
parents: 30
diff changeset
   683
        err = mCollectionClient->addItemsInAlbum(albumId, mediaIds);
30
hgs
parents:
diff changeset
   684
    }
34
hgs
parents: 30
diff changeset
   685
    
hgs
parents: 30
diff changeset
   686
    return err;
hgs
parents: 30
diff changeset
   687
}
hgs
parents: 30
diff changeset
   688
hgs
parents: 30
diff changeset
   689
// -----------------------------------------------------------------------------
35
hgs
parents: 34
diff changeset
   690
// VideoSortFilterProxyModel::removeItemsFromAlbum()
hgs
parents: 34
diff changeset
   691
// -----------------------------------------------------------------------------
hgs
parents: 34
diff changeset
   692
//
hgs
parents: 34
diff changeset
   693
int VideoSortFilterProxyModel::removeItemsFromAlbum(TMPXItemId &albumId, 
hgs
parents: 34
diff changeset
   694
        const QList<TMPXItemId> &mediaIds)
hgs
parents: 34
diff changeset
   695
{
36
hgs
parents: 35
diff changeset
   696
	FUNC_LOG_ADDR(this);
35
hgs
parents: 34
diff changeset
   697
    int err(-1);
hgs
parents: 34
diff changeset
   698
       
hgs
parents: 34
diff changeset
   699
    if (mModel)
hgs
parents: 34
diff changeset
   700
    {        
hgs
parents: 34
diff changeset
   701
        // remove items in album
hgs
parents: 34
diff changeset
   702
        err = mModel->removeItemsFromAlbum(albumId, mediaIds);
hgs
parents: 34
diff changeset
   703
        if(err > 0)
hgs
parents: 34
diff changeset
   704
        {
hgs
parents: 34
diff changeset
   705
            // if there really were items to be removed, invalid filter
36
hgs
parents: 35
diff changeset
   706
            INFO_1("VideoSortFilterProxyModel::removeItemsFromAlbum() [0x%x] items removed, invaliding.", this);
35
hgs
parents: 34
diff changeset
   707
            invalidateFilter();
hgs
parents: 34
diff changeset
   708
            err = 0;
hgs
parents: 34
diff changeset
   709
        }
49
hgs
parents: 39
diff changeset
   710
35
hgs
parents: 34
diff changeset
   711
    }
hgs
parents: 34
diff changeset
   712
    return err;
hgs
parents: 34
diff changeset
   713
}
hgs
parents: 34
diff changeset
   714
hgs
parents: 34
diff changeset
   715
// -----------------------------------------------------------------------------
36
hgs
parents: 35
diff changeset
   716
// VideoSortFilterProxyModel::renameAlbum()
hgs
parents: 35
diff changeset
   717
// -----------------------------------------------------------------------------
hgs
parents: 35
diff changeset
   718
//
hgs
parents: 35
diff changeset
   719
int VideoSortFilterProxyModel::renameAlbum(const TMPXItemId &albumId, const QString &newTitle)
hgs
parents: 35
diff changeset
   720
{
hgs
parents: 35
diff changeset
   721
	FUNC_LOG_ADDR(this);
hgs
parents: 35
diff changeset
   722
    int err(-1);
hgs
parents: 35
diff changeset
   723
hgs
parents: 35
diff changeset
   724
    if(mCollectionClient)
hgs
parents: 35
diff changeset
   725
    {
hgs
parents: 35
diff changeset
   726
        return mCollectionClient->renameAlbum(albumId, newTitle);
hgs
parents: 35
diff changeset
   727
    }
hgs
parents: 35
diff changeset
   728
    return err;
hgs
parents: 35
diff changeset
   729
}
hgs
parents: 35
diff changeset
   730
hgs
parents: 35
diff changeset
   731
// -----------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   732
// VideoSortFilterProxyModel::getOpenItem()
hgs
parents: 30
diff changeset
   733
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   734
//
hgs
parents: 30
diff changeset
   735
TMPXItemId VideoSortFilterProxyModel::getOpenItem() const
hgs
parents: 30
diff changeset
   736
{
36
hgs
parents: 35
diff changeset
   737
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   738
    TMPXItemId itemId = TMPXItemId::InvalidId();
hgs
parents: 30
diff changeset
   739
    
hgs
parents: 30
diff changeset
   740
    if(mModel && mCollectionClient)
hgs
parents: 30
diff changeset
   741
    {
36
hgs
parents: 35
diff changeset
   742
        if(mType == VideoCollectionCommon::EModelTypeAllVideos)
34
hgs
parents: 30
diff changeset
   743
        {
36
hgs
parents: 35
diff changeset
   744
            INFO_1("VideoSortFilterProxyModel::getOpenItem() [0x%x] all videos is open.", this);
34
hgs
parents: 30
diff changeset
   745
            itemId.iId1 = KVcxMvcCategoryIdAll;
36
hgs
parents: 35
diff changeset
   746
            itemId.iId2 = KVcxMvcMediaTypeCategory;
34
hgs
parents: 30
diff changeset
   747
        }
36
hgs
parents: 35
diff changeset
   748
        else if(mType == VideoCollectionCommon::EModelTypeCollectionContent)
34
hgs
parents: 30
diff changeset
   749
        {
36
hgs
parents: 35
diff changeset
   750
            INFO_1("VideoSortFilterProxyModel::getOpenItem() [0x%x] category or album is open.", this);
34
hgs
parents: 30
diff changeset
   751
            itemId = mModel->albumInUse();
hgs
parents: 30
diff changeset
   752
        }
hgs
parents: 30
diff changeset
   753
    }
hgs
parents: 30
diff changeset
   754
hgs
parents: 30
diff changeset
   755
    return itemId;
hgs
parents: 30
diff changeset
   756
}
hgs
parents: 30
diff changeset
   757
hgs
parents: 30
diff changeset
   758
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   759
// VideoSortFilterProxyModel::setGenericIdFilter()
hgs
parents: 30
diff changeset
   760
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   761
//
hgs
parents: 30
diff changeset
   762
void VideoSortFilterProxyModel::setGenericIdFilter(TMPXItemId itemId, bool filterValue)
hgs
parents: 30
diff changeset
   763
{
36
hgs
parents: 35
diff changeset
   764
	FUNC_LOG_ADDR(this);
hgs
parents: 35
diff changeset
   765
    if(mType == VideoCollectionCommon::EModelTypeGeneric)
34
hgs
parents: 30
diff changeset
   766
    {
36
hgs
parents: 35
diff changeset
   767
        INFO_3("VideoSortFilterProxyModel::setGenericIdFilter() [0x%x] itemId.iId2: %d, filterValue: %d", this, itemId.iId2, filterValue);
34
hgs
parents: 30
diff changeset
   768
        mGenericFilterId = itemId;
hgs
parents: 30
diff changeset
   769
        mGenericFilterValue = filterValue;
36
hgs
parents: 35
diff changeset
   770
        INFO_1("VideoSortFilterProxyModel::setGenericIdFilter() [0x%x] invalidating.", this);
34
hgs
parents: 30
diff changeset
   771
        invalidateFilter();
hgs
parents: 30
diff changeset
   772
    }
hgs
parents: 30
diff changeset
   773
}
hgs
parents: 30
diff changeset
   774
hgs
parents: 30
diff changeset
   775
// -----------------------------------------------------------------------------
35
hgs
parents: 34
diff changeset
   776
// VideoSortFilterProxyModel::setAlbumInUse()
hgs
parents: 34
diff changeset
   777
// -----------------------------------------------------------------------------
hgs
parents: 34
diff changeset
   778
//
hgs
parents: 34
diff changeset
   779
void VideoSortFilterProxyModel::setAlbumInUse(TMPXItemId albumId)
hgs
parents: 34
diff changeset
   780
{
36
hgs
parents: 35
diff changeset
   781
	FUNC_LOG_ADDR(this);
hgs
parents: 35
diff changeset
   782
    if(mModel)
hgs
parents: 35
diff changeset
   783
    {
hgs
parents: 35
diff changeset
   784
        INFO_1("VideoSortFilterProxyModel::setAlbumInUse() [0x%x] invalidating.", this);
hgs
parents: 35
diff changeset
   785
        mModel->setAlbumInUse(albumId);
hgs
parents: 35
diff changeset
   786
        invalidateFilter();
hgs
parents: 35
diff changeset
   787
    }
35
hgs
parents: 34
diff changeset
   788
}
hgs
parents: 34
diff changeset
   789
hgs
parents: 34
diff changeset
   790
// -----------------------------------------------------------------------------
34
hgs
parents: 30
diff changeset
   791
// VideoSortFilterProxyModel::albumChangedSlot()
hgs
parents: 30
diff changeset
   792
// -----------------------------------------------------------------------------
hgs
parents: 30
diff changeset
   793
//
hgs
parents: 30
diff changeset
   794
void VideoSortFilterProxyModel::albumChangedSlot()
hgs
parents: 30
diff changeset
   795
{
36
hgs
parents: 35
diff changeset
   796
	FUNC_LOG_ADDR(this);
34
hgs
parents: 30
diff changeset
   797
    // ignore if not collection content model
36
hgs
parents: 35
diff changeset
   798
    if (mType == VideoCollectionCommon::EModelTypeCollectionContent)
34
hgs
parents: 30
diff changeset
   799
    {
36
hgs
parents: 35
diff changeset
   800
        INFO_1("VideoSortFilterProxyModel::albumChangedSlot() [0x%x] invalidating.", this);
49
hgs
parents: 39
diff changeset
   801
	    // sort and invalidate filtering, otherwise newly created album content won't sort
37
hgs
parents: 36
diff changeset
   802
    	invalidateFilter();
49
hgs
parents: 39
diff changeset
   803
    	setSortRole(mWantedSortRole);
36
hgs
parents: 35
diff changeset
   804
        sort(0, mWantedSortOrder);
34
hgs
parents: 30
diff changeset
   805
    }
30
hgs
parents:
diff changeset
   806
}
hgs
parents:
diff changeset
   807
36
hgs
parents: 35
diff changeset
   808
// -----------------------------------------------------------------------------
hgs
parents: 35
diff changeset
   809
// VideoSortFilterProxyModel::itemModifiedSlot()
hgs
parents: 35
diff changeset
   810
// -----------------------------------------------------------------------------
hgs
parents: 35
diff changeset
   811
//
hgs
parents: 35
diff changeset
   812
void VideoSortFilterProxyModel::itemModifiedSlot(const TMPXItemId &itemId)
hgs
parents: 35
diff changeset
   813
{
hgs
parents: 35
diff changeset
   814
	FUNC_LOG_ADDR(this);
hgs
parents: 35
diff changeset
   815
    if(mType == VideoCollectionCommon::EModelTypeCollections &&
hgs
parents: 35
diff changeset
   816
       (itemId.iId2 == KVcxMvcMediaTypeAlbum || itemId.iId2 == KVcxMvcMediaTypeCategory))
hgs
parents: 35
diff changeset
   817
    {
hgs
parents: 35
diff changeset
   818
        INFO_1("VideoSortFilterProxyModel::itemModifiedSlot() [0x%x] invalidating.", this);
hgs
parents: 35
diff changeset
   819
        invalidate();
hgs
parents: 35
diff changeset
   820
    }
hgs
parents: 35
diff changeset
   821
}
30
hgs
parents:
diff changeset
   822
36
hgs
parents: 35
diff changeset
   823
// -----------------------------------------------------------------------------
hgs
parents: 35
diff changeset
   824
// VideoSortFilterProxyModel::getType()
hgs
parents: 35
diff changeset
   825
// -----------------------------------------------------------------------------
hgs
parents: 35
diff changeset
   826
//
hgs
parents: 35
diff changeset
   827
VideoCollectionCommon::TModelType VideoSortFilterProxyModel::getType()
hgs
parents: 35
diff changeset
   828
{
hgs
parents: 35
diff changeset
   829
	FUNC_LOG_ADDR(this);
hgs
parents: 35
diff changeset
   830
	return mType;
hgs
parents: 35
diff changeset
   831
}
hgs
parents: 35
diff changeset
   832
hgs
parents: 35
diff changeset
   833
// End of file