diff -r dec420019252 -r 4f111d64a341 videocollection/videocollectionwrapper/src/videocollectionclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videocollection/videocollectionwrapper/src/videocollectionclient.cpp Thu Apr 01 22:38:49 2010 +0300 @@ -0,0 +1,591 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: VideoCollectionClient class implementation +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "videodatasignalreceiver.h" +#include "videocollectionclient.h" +#include "videocollectionlistener.h" + +// ----------------------------------------------------------------------------- +// VideoCollectionClient() +// ----------------------------------------------------------------------------- +// +VideoCollectionClient::VideoCollectionClient() : +mCollectionUtility(0), +mCollectionOpenStatus(ECollectionNotOpen), +mCollectionListener(0), +mOpenCategoryAlbum(0,9), +mCollectionPathLevel(VideoCollectionClient::ELevelInvalid) +{ + +} + +// ----------------------------------------------------------------------------- +// initialize() +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::initialize() +{ + if(mCollectionUtility && mCollectionListener) + { + // already initialized + return 0; + } + if(!mCollectionListener) + { + mCollectionListener = new VideoCollectionListener(*this); + if(!mCollectionListener) + { + return -1; + } + } + if(!mCollectionUtility) + { + TRAPD( error, mCollectionUtility = MMPXCollectionUtility::NewL( mCollectionListener, KMcModeDefault ) ); + if(error) + { + delete mCollectionListener; + mCollectionListener = 0; + return error; + } + } + return 0; +} + +// ----------------------------------------------------------------------------- +// ~VideoCollectionClient() +// ----------------------------------------------------------------------------- +// +VideoCollectionClient::~VideoCollectionClient() +{ + if (mCollectionUtility) + { + // closing deallocates collection utility pointer + mCollectionUtility->Close(); + } + delete mCollectionListener; +} + + +// ----------------------------------------------------------------------------- +// setVideoModelObserver +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::connectCollectionSignalReceiver( + VideoDataSignalReceiver *signalReceiver) +{ + if(!mCollectionListener || !signalReceiver) + { + return -1; + } + + + if(!QObject::connect(mCollectionListener, SIGNAL(newVideoList(CMPXMediaArray*)), + signalReceiver, SLOT(newVideoListSlot(CMPXMediaArray*)), + Qt::DirectConnection)) + { + return -1; + } + + if(!QObject::connect(mCollectionListener, SIGNAL(videoListAppended(CMPXMediaArray*)), + signalReceiver, SLOT(appendVideoListSlot(CMPXMediaArray*)), + Qt::DirectConnection)) + { + return -1; + } + + if(!QObject::connect(mCollectionListener, SIGNAL(newVideoAvailable(CMPXMedia*)), + signalReceiver, SLOT(newVideoAvailableSlot(CMPXMedia*)), + Qt::DirectConnection)) + { + return -1; + } + + if(!QObject::connect(mCollectionListener, SIGNAL(videoDeleted(TMPXItemId)), + signalReceiver, SLOT(videoDeletedSlot(TMPXItemId)), + Qt::DirectConnection)) + { + return -1; + } + + if(!QObject::connect(mCollectionListener, SIGNAL(videoDeleteCompleted(int, QList*)), + signalReceiver, SLOT(videoDeleteCompletedSlot(int, QList*)), + Qt::DirectConnection)) + { + return -1; + } + + if(!QObject::connect(mCollectionListener, SIGNAL(videoDetailsCompleted(TMPXItemId)), + signalReceiver, SLOT(videoDetailsCompletedSlot(TMPXItemId)), + Qt::DirectConnection)) + { + return -1; + } + return 0; +} + + +// --------------------------------------------------------------------------- +// categoryIds +// --------------------------------------------------------------------------- +// +void VideoCollectionClient::getCategoryIds(int& id, int& type) +{ + id = mOpenCategoryAlbum.iId1; //unique id + type = mOpenCategoryAlbum.iId2; //category or album +} + +// --------------------------------------------------------------------------- +// getCollectionLevel +// --------------------------------------------------------------------------- +// +int VideoCollectionClient::getCollectionLevel() +{ + return mCollectionPathLevel; +} + +// --------------------------------------------------------------------------- +// getOpenStatus +// --------------------------------------------------------------------------- +// +int VideoCollectionClient::getOpenStatus() +{ + return mCollectionOpenStatus; +} + +// --------------------------------------------------------------------------- +// setOpenStatus +// --------------------------------------------------------------------------- +// +void VideoCollectionClient::setOpenStatus(int status) +{ + mCollectionOpenStatus = status; + if(mCollectionOpenStatus == ECollectionOpened) + { + startOpenCurrentState(); + } +} + +// ----------------------------------------------------------------------------- +// startOpenCollection +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::startOpenCollection(int level) +{ + if(!mCollectionUtility) + { + return -1; + } + + if((mCollectionOpenStatus == ECollectionOpening) && (getCollectionLevel() == level)) + { + // allready opening/opened + return 0; + } + mCollectionOpenStatus = ECollectionNotOpen; + TRAPD(error, startOpenCollectionL(level)); + return error; +} + +// ----------------------------------------------------------------------------- +// startOpenCurrentState +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::startOpenCurrentState() +{ + int error = -1; + if(mCollectionUtility && mCollectionOpenStatus == ECollectionOpened) + { + TRAP(error, mCollectionUtility->Collection().OpenL()); + } + return error; +} + +// ----------------------------------------------------------------------------- +// deleteFile +// ----------------------------------------------------------------------------- +int VideoCollectionClient::deleteVideos(QList *mediaIds) +{ + if(!mCollectionUtility || !mediaIds) + { + return -1; + } + TRAPD(error, deleteVideosL(*mediaIds)); + return error; +} + +// ----------------------------------------------------------------------------- +// openMedia +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::openVideo(TMPXItemId &mediaId) +{ + if(!mCollectionUtility) + { + return -1; + } + + TInt error; + if (getCollectionLevel() == VideoCollectionClient::ELevelVideos) + { + TRAP(error, openVideoL(mediaId)); + } + else + { + TRAP(error, openCategoryL(mediaId)); + } + return error; +} + +// ----------------------------------------------------------------------------- +// back +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::back() +{ + if(!mCollectionUtility) + { + return -1; + } + TRAPD(error, backL()); + return error; +} + +// ----------------------------------------------------------------------------- +// fetchMpxMediaByMpxId +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::fetchMpxMediaByMpxId(TMPXItemId &mpxId) +{ + if(!mCollectionUtility) + { + return -1; + } + + TRAPD(error, fetchMpxMediaByMpxIdL(mpxId)); + return error; +} + +// ----------------------------------------------------------------------------- +// getVideoDetails +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::getVideoDetails(TMPXItemId &mediaId) +{ + if(!mCollectionUtility) + { + return -1; + } + + TRAPD(error, getVideoDetailsL(mediaId)); + + return error; +} + +// ----------------------------------------------------------------------------- +// addNewCollection +// ----------------------------------------------------------------------------- +// +int VideoCollectionClient::addNewCollection(QString name, QString thumbnail, QList mediaIds) +{ + if(!mCollectionUtility) + { + return -1; + } + + TRAPD(error, addNewCollectionL(name, thumbnail, mediaIds)); + + return error; +} + +// ----------------------------------------------------------------------------- +// startOpenCollectionL +// ----------------------------------------------------------------------------- +// +void VideoCollectionClient::startOpenCollectionL(int level) +{ + if(!mCollectionUtility) + { + User::Leave(KErrGeneral); + } + CMPXCollectionPath* collectionPath = CMPXCollectionPath::NewL(); + CleanupStack::PushL( collectionPath ); + + collectionPath->AppendL( KVcxUidMyVideosMpxCollection ); + if (level == VideoCollectionClient::ELevelVideos) + { + collectionPath->AppendL( KVcxMvcCategoryIdAll ); + + mOpenCategoryAlbum.iId1 = KVcxMvcCategoryIdAll; + mOpenCategoryAlbum.iId2 = 1; + + mCollectionPathLevel = VideoCollectionClient::ELevelVideos; + } + else + { + mOpenCategoryAlbum.iId1 = 0; + mOpenCategoryAlbum.iId2 = 9; + + mCollectionPathLevel = VideoCollectionClient::ELevelCategory; + } + mCollectionUtility->Collection().OpenL( *collectionPath ); + CleanupStack::PopAndDestroy( collectionPath ); + mCollectionListener->setRequestNewMediaArray(true); + mCollectionOpenStatus = ECollectionOpening; +} + + +// ----------------------------------------------------------------------------- +// deleteVideosL +// ----------------------------------------------------------------------------- +// +void VideoCollectionClient::deleteVideosL(QList &mediaIds) +{ + if(!mCollectionUtility || mediaIds.count() == 0) + { + User::Leave(KErrGeneral); + } + CMPXMediaArray* mediasToDelete = CMPXMediaArray::NewL(); + CleanupStack::PushL( mediasToDelete ); + + CMPXMedia* media = NULL; + + TMPXItemId currentId; + foreach(currentId, mediaIds) + { + media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + media->SetTObjectValueL( KMPXMediaGeneralId, currentId ); + mediasToDelete->AppendL( *media ); + CleanupStack::PopAndDestroy( media ); + } + + CMPXCommand* cmd = CMPXMedia::NewL(); + CleanupStack::PushL( cmd ); + + cmd->SetTObjectValueL( KMPXCommandGeneralId, KVcxCommandIdMyVideos ); + cmd->SetTObjectValueL( KVcxMediaMyVideosCommandId, KVcxCommandMyVideosDelete ); + cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, EFalse ); + cmd->SetTObjectValueL( KMPXCommandGeneralCollectionId, + TUid::Uid( KVcxUidMyVideosMpxCollection ) ); + cmd->SetCObjectValueL( KMPXMediaArrayContents, mediasToDelete ); + + mCollectionUtility->Collection().CommandL( *cmd ); + + CleanupStack::PopAndDestroy( cmd ); + CleanupStack::PopAndDestroy( mediasToDelete ); +} + +// ----------------------------------------------------------------------------- +// openVideoL +// ----------------------------------------------------------------------------- +// +void VideoCollectionClient::openVideoL(TMPXItemId &videoId) +{ + if(!mCollectionUtility) + { + User::Leave(KErrGeneral); + } + CMPXCollectionPath* path = CMPXCollectionPath::NewL(); + CleanupStack::PushL( path ); + path->AppendL( KVcxUidMyVideosMpxCollection ); + path->AppendL( KVcxMvcCategoryIdAll ); + path->AppendL( TMPXItemId( videoId, 0 ) ); + path->SelectL( TMPXItemId( videoId, 0 ) ); + + mCollectionUtility->Collection().OpenL( *path ); + CleanupStack::PopAndDestroy( path ); +} + +// ----------------------------------------------------------------------------- +// openCategoryL +// ----------------------------------------------------------------------------- +// +void VideoCollectionClient::openCategoryL(TMPXItemId &id) +{ + if(!mCollectionUtility) + { + User::Leave(KErrGeneral); + } + CMPXCollectionPath* collectionPath = CMPXCollectionPath::NewL(); + CleanupStack::PushL( collectionPath ); + + collectionPath->AppendL( KVcxUidMyVideosMpxCollection ); + collectionPath->AppendL( id ); + mCollectionUtility->Collection().OpenL( *collectionPath ); + CleanupStack::PopAndDestroy( collectionPath ); + mCollectionListener->setRequestNewMediaArray(true); + + mOpenCategoryAlbum.iId1 = id; + mOpenCategoryAlbum.iId2 = 1; + + mCollectionPathLevel = VideoCollectionClient::ELevelVideos; + + mCollectionOpenStatus = ECollectionOpening; +} + +// ----------------------------------------------------------------------------- +// backL +// ----------------------------------------------------------------------------- +// +void VideoCollectionClient::backL() +{ + if(!mCollectionUtility) + { + User::Leave(KErrGeneral); + } + + if (getCollectionLevel() > 2 ) + { + mCollectionUtility->Collection().BackL(); + mCollectionOpenStatus = ECollectionOpening; + mCollectionListener->setRequestNewMediaArray(true); + mOpenCategoryAlbum.iId1 = 0; + mOpenCategoryAlbum.iId2 = 9; + + mCollectionPathLevel = VideoCollectionClient::ELevelCategory; + } +} + +// ----------------------------------------------------------------------------- +// getVideoDetailsL +// ----------------------------------------------------------------------------- +// +void VideoCollectionClient::getVideoDetailsL(TMPXItemId &videoId) +{ + if(!mCollectionUtility) + { + User::Leave(KErrGeneral); + } + CMPXCommand* cmd = CMPXCommand::NewL(); + CleanupStack::PushL( cmd ); + + cmd->SetTObjectValueL( KMPXCommandGeneralId, KVcxCommandIdMyVideos ); + cmd->SetTObjectValueL( KVcxMediaMyVideosCommandId, KVcxCommandMyVideosGetMediaFullDetailsByMpxId ); + cmd->SetTObjectValueL( KMPXMediaGeneralId, videoId ); + mCollectionUtility->Collection().CommandL( *cmd ); + + CleanupStack::PopAndDestroy( cmd ); +} + +// ----------------------------------------------------------------------------- +// addNewCollectionL +// ----------------------------------------------------------------------------- +// +void VideoCollectionClient::addNewCollectionL(QString name, QString thumbnail, QList mediaIds) +{ + if(!mCollectionUtility) + { + User::Leave(KErrGeneral); + } + + CMPXCommand* cmd = CMPXCommand::NewL(); + CleanupStack::PushL( cmd ); + + cmd->SetTObjectValueL( KMPXCommandGeneralId, KVcxCommandIdMyVideos ); + cmd->SetTObjectValueL( KVcxMediaMyVideosCommandId, -1 ); + cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, ETrue ); + cmd->SetTObjectValueL( KMPXMediaGeneralTitle, name ); + cmd->SetTObjectValueL( KMPXMediaGeneralThumbnail1, thumbnail ); + + // TODO real command id missing, uncomment only after the collection supports adding collections +// mCollectionUtility->Collection().CommandL( *cmd ); + + CleanupStack::PopAndDestroy( cmd ); + + if(mediaIds.size() > 0) { + cmd = CMPXCommand::NewL(); + CleanupStack::PushL( cmd ); + CMPXMediaArray* idMediaArray = CMPXMediaArray::NewL(); + CleanupStack::PushL( idMediaArray ); + + cmd->SetTObjectValueL( KMPXCommandGeneralId, KVcxCommandIdMyVideos ); + cmd->SetTObjectValueL( KVcxMediaMyVideosCommandId, -1 ); + cmd->SetTObjectValueL( KMPXCommandGeneralCollectionId, + TUid::Uid( KVcxUidMyVideosMpxCollection ) ); + + // TODO need to add the mpxid of the newly created collection here. + + TMPXItemId mediaId; + foreach(mediaId, mediaIds) { + CMPXMedia* media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + media->SetTObjectValueL( KMPXMessageMediaGeneralId, mediaId ); + idMediaArray->AppendL( *media ); + CleanupStack::PopAndDestroy( media ); + } + + cmd->SetCObjectValueL( KMPXMediaArrayContents, idMediaArray ); + cmd->SetTObjectValueL( KMPXMediaArrayCount, idMediaArray->Count() ); + + // TODO real command id missing, only uncomment after collection supports adding collections. +// mCollectionUtility->Collection().CommandL( *cmd ); + + CleanupStack::PopAndDestroy( idMediaArray ); + CleanupStack::PopAndDestroy( cmd ); + } +} + +// ----------------------------------------------------------------------------- +// fetchMpxMediaByMpxIdL +// ----------------------------------------------------------------------------- +// +void VideoCollectionClient::fetchMpxMediaByMpxIdL(TMPXItemId &aMpxId) +{ + if(!mCollectionUtility) + { + User::Leave(KErrGeneral); + } + + CMPXCommand* cmd = CMPXCommand::NewL(); + CleanupStack::PushL( cmd ); + cmd->SetTObjectValueL( KMPXCommandGeneralId, KVcxCommandIdMyVideos ); + cmd->SetTObjectValueL( KVcxMediaMyVideosCommandId, KVcxCommandMyVideosGetMediasByMpxId ); + cmd->SetTObjectValueL( KMPXCommandGeneralCollectionId, + TUid::Uid( KVcxUidMyVideosMpxCollection ) ); + + CMPXMediaArray* idMediaArray = CMPXMediaArray::NewL(); + CleanupStack::PushL( idMediaArray ); + CMPXMedia* media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + media->SetTObjectValueL( KMPXMessageMediaGeneralId, aMpxId ); + idMediaArray->AppendL( *media ); + cmd->SetCObjectValueL( KMPXMediaArrayContents, idMediaArray ); + cmd->SetTObjectValueL( KMPXMediaArrayCount, idMediaArray->Count() ); + mCollectionUtility->Collection().CommandL( *cmd ); + + CleanupStack::PopAndDestroy( media ); + CleanupStack::PopAndDestroy( idMediaArray ); + CleanupStack::PopAndDestroy( cmd ); +} + +