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