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