diff -r 3b098142db83 -r 92dbd2a406d9 mpx/tsrc/public/basic/common/testplugins/testcollectionplugin/src/testcollectionplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/tsrc/public/basic/common/testplugins/testcollectionplugin/src/testcollectionplugin.cpp Mon Oct 04 00:50:27 2010 +0300 @@ -0,0 +1,1289 @@ +//* +* Copyright (c) 2002 - 2007 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: Implementation of collection test plugin interface +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "testcommonpluginuids.h" +#include "testcollectionplugin.h" + +// CONSTANTS +_LIT(KFolder, "mpxt"); +_LIT(KFile, "CFwCollection.txt"); + +#define LOG1(a) RFileLogger::Write(KFolder, KFile, EFileLoggingModeAppend, a) +#define LOG2(a,b) RFileLogger::WriteFormat(KFolder, KFile, EFileLoggingModeAppend, a, b) +#define LOG3(a,b,c) RFileLogger::WriteFormat(KFolder, KFile, EFileLoggingModeAppend, a, b, c) +#define LOG4(a,b,c,d) RFileLogger::WriteFormat(KFolder, KFile, EFileLoggingModeAppend, a, b, c,d) + + +// =========================================== LOCAL FUNCTIONS ============================================== +// print out (index, id) for each level and the first 15 ids at top level +LOCAL_C void LogPath( const CMPXCollectionPath& aPath )\ + { + TInt levels = aPath.Levels(); + TInt count = aPath.Count(); + LOG3(_L("Collection Path debug: levels= %d, count = %d"), levels, count); + for (TInt i=0; i 0) + { + TInt index = aPath.Index(); + CMPXCollectionPath* dpath = const_cast(&aPath); + dpath->SetToFirst(); + TInt c = 0; + do + { + LOG3(_L("Collection Path debug top level: item %d = id 0x%08x"), c, dpath->Id()); + } while (++(*dpath) && ++c < 15 ); + dpath->Set(index); + } + } + + +// =========================================== MEMBER FUNCTIONS ============================================= +// ---------------------------------------------------------------------------------------------------------- +// Two-phased constructor. +// ---------------------------------------------------------------------------------------------------------- +// +CTestCollectionPlugin* CTestCollectionPlugin::NewL (TAny* /*aInitParams*/) + { + CTestCollectionPlugin* self = new (ELeave) CTestCollectionPlugin(); + CleanupStack::PushL (self); + self->ConstructL (); + CleanupStack::Pop (self); + return self; + } + +// ---------------------------------------------------------------------------------------------------------- +// Destructor. +// ---------------------------------------------------------------------------------------------------------- +// +CTestCollectionPlugin::~CTestCollectionPlugin () + { + } + +// ---------------------------------------------------------------------------------------------------------- +// Constructor. +// ---------------------------------------------------------------------------------------------------------- +// +CTestCollectionPlugin::CTestCollectionPlugin () + { + } + +// ---------------------------------------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::ConstructL () + { + } + +// ---------------------------------------------------------------------------------------------------------- +// Navigates to the given path +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::OpenL(const CMPXCollectionPath& aPath, + const TArray& aAttrs, + CMPXFilter* aFilter) + { + LOG1(_L("CTestCollectionPlugin::OpenL")); + LogPath( aPath ); + TMPXOpenMode openMode = aPath.OpenNextMode(); + TInt idIndex = aPath.Levels() - 1; + LOG2(_L("TMPXOpendMode=%d"), openMode); + LOG2(_L("aFilter=%x"), aFilter); + + RArray supportedIds; + CleanupClosePushL(supportedIds); + supportedIds.AppendL(KMPXMediaIdContainer); + supportedIds.AppendL(KMPXMediaIdGeneral); + + CMPXMedia* entries = CMPXMedia::NewL(supportedIds.Array()); + CleanupStack::PopAndDestroy(&supportedIds); + CleanupStack::PushL(entries); + entries->SetTObjectValueL(TMPXAttribute(KMPXMediaIdGeneral,EMPXMediaGeneralId), aPath.Id(idIndex)); + + if(aPath.Levels() == 1) + { + // Plugin's root level + RArray ids; + CleanupClosePushL( ids ); + ids.Append( 11 ); + ids.Append( 12 ); + ids.Append( 13 ); + ids.Append( 990 ); // for Playback Framework Test + RArray attrs; + CleanupClosePushL( attrs ); + attrs.Append( KMPXMediaGeneralId ); + attrs.Append( KMPXMediaGeneralUri ); + attrs.Append( KMPXMediaGeneralTitle ); + + CMPXMediaArray* array=CMPXMediaArray::NewL(); + CleanupStack::PushL( array ); + + const TArray& tempRef = aAttrs.Count() == 0? attrs.Array() : aAttrs; + AddMediaL(*array, ids, tempRef); + FilterMediaArray(*array, aFilter); + + entries->SetCObjectValueL (TMPXAttribute(KMPXMediaIdContainer,EMPXMediaArrayContents),array); + entries->SetTObjectValueL (TMPXAttribute(KMPXMediaIdContainer,EMPXMediaArrayCount),array->Count()); + + iObs->HandleOpen (entries, KErrNone); + CleanupStack::PopAndDestroy(3, &ids); // attrs, array, ids + } + else if(aPath.Levels() == 2) + { + // Opening plugin's root menu + TInt topLevId = aPath.Id(1); + RArray ids; + CleanupClosePushL( ids ); + RArray attrs; + CleanupClosePushL( attrs ); + CMPXMediaArray* array=CMPXMediaArray::NewL(); + CleanupStack::PushL( array ); + + attrs.Append( KMPXMediaGeneralId ); + attrs.Append( KMPXMediaGeneralUri ); + attrs.Append( KMPXMediaGeneralTitle ); + if(topLevId == 11) + { + ids.Append( 211 ); + ids.Append( 212 ); + ids.Append( 213 ); + } + else if(topLevId == 12) + { + ids.Append( 221 ); + } + else if(topLevId == 13) + { + ids.Append( 231 ); + ids.Append( 232 ); + } + else if(topLevId == 990) + { + ids.Append( 9901 ); + ids.Append( 9902 ); + ids.Append( 9903 ); + ids.Append( 9904 ); + ids.Append( 9905 ); + ids.Append( 9906 ); + ids.Append( 9907 ); + } + const TArray& tempRef = aAttrs.Count() == 0? attrs.Array() : aAttrs; + AddMediaL(*array, ids, tempRef); + FilterMediaArray(*array, aFilter); + + entries->SetCObjectValueL (TMPXAttribute(KMPXMediaIdContainer,EMPXMediaArrayContents),array); + entries->SetTObjectValueL (TMPXAttribute(KMPXMediaIdContainer,EMPXMediaArrayCount),array->Count()); + + iObs->HandleOpen (entries, KErrNone); + CleanupStack::PopAndDestroy(3, &ids); // attrs, array, ids + } + else if(aPath.Levels() == 3) + { + // Opening plugin's 2nd + TInt secLevId = aPath.Id(2); + + RArray ids; + CleanupClosePushL( ids ); + RArray attrs; + CleanupClosePushL( attrs ); + CMPXMediaArray* array=CMPXMediaArray::NewL(); + CleanupStack::PushL( array ); + + attrs.Append( KMPXMediaGeneralId ); + attrs.Append( KMPXMediaGeneralUri ); + attrs.Append( KMPXMediaGeneralTitle ); + switch( secLevId ) + { + case 211: + ids.Append( 3111 ); + break; + case 212: + ids.Append( 3121 ); + break; + case 213: + ids.Append( 3131 ); + break; + case 221: + // Empty + break; + case 231: + ids.Append( 3311 ); + break; + case 232: + ids.Append( 3321 ); + break; + }; + const TArray& tempRef = aAttrs.Count() == 0? attrs.Array() : aAttrs; + AddMediaL(*array, ids, tempRef); + FilterMediaArray(*array, aFilter); + + entries->SetCObjectValueL (TMPXAttribute(KMPXMediaIdContainer,EMPXMediaArrayContents),array); + entries->SetTObjectValueL (TMPXAttribute(KMPXMediaIdContainer,EMPXMediaArrayCount),array->Count()); + + iObs->HandleOpen (entries, KErrNone); + CleanupStack::PopAndDestroy(3, &ids); // attrs, array, ids + } + else + { + User::Leave( KErrNotFound ); + } + CleanupStack::PopAndDestroy( entries ); + } + +// ---------------------------------------------------------------------------------------------------------- +// Get the extended properties of the current file (async) +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::MediaL (const CMPXCollectionPath& aPath, + const TArray& aAttrs, + const TArray& aCaps, + CMPXAttributeSpecs* aSpecs) + { + LOG1(_L("CTestCollectionPlugin::MediaL")); + LogPath( aPath ); + TMPXOpenMode openMode = aPath.OpenNextMode(); + //TInt idIndex = aPath.Levels() - 1; + LOG2(_L("TMPXOpendMode=%d"), openMode); + LOG2(_L("aAttrs.Count()=%d"), aAttrs.Count()); + LOG2(_L("aCaps.Count()=%d"), aCaps.Count()); + LOG2(_L("aSpecs=0x%x"), aSpecs); + + switch( (TInt)aPath.Id(1) ) + { + case 14: // Test0146 + { + iObs->HandleMedia(NULL, KErrNone); + break; + } + case 15: // Test0147 + { + CMPXMedia* media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + iObs->HandleMedia(media, KErrNone); + CleanupStack::PopAndDestroy( media ); + break; + } + case 16: // Test0148 + { + CMPXMedia* media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + iObs->HandleMedia(media, KErrNotFound); + CleanupStack::PopAndDestroy( media ); + break; + } + case 17: // Test0149 + { + CMPXMedia* media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + (*media) = *aSpecs; + iObs->HandleMedia(media, KErrNone); + CleanupStack::PopAndDestroy( media ); + break; + } + case 990: // Test data for playback framework teests + { + CMPXMedia* media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + + switch( (TInt)aPath.Id(2) ) + { + case 9901: + AddAttrbuteL(*media, 9901, _L("song9901"), _L("\\song9901.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9901, aAttrs); + break; + case 9902: + AddAttrbuteL(*media, 9902, _L("song9902"), _L("\\song9902.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9902, aAttrs); + break; + case 9903: + AddAttrbuteL(*media, 9903, _L("song9903"), _L("\\song9903.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9903, aAttrs); + break; + case 9904: + AddAttrbuteL(*media, 9904, _L("song9904"), _L("\\song9904.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9904, aAttrs); + break; + case 9905: + AddAttrbuteL(*media, 9905, _L("song9905"), _L("\\song9905.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9905, aAttrs); + break; + case 9906: + AddAttrbuteL(*media, 9906, _L("song9906"), _L("\\song9906.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9906, aAttrs); + break; + case 9907: + AddAttrbuteL(*media, 9907, _L("song9907"), _L("\\song9907.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9907, aAttrs); + break; + }; + iObs->HandleMedia(media, KErrNone); + CleanupStack::PopAndDestroy( media ); + break; + } + default: + User::Leave( KErrNotFound ); + }; + } + +// ---------------------------------------------------------------------------------------------------------- +// Cancel outstanding request +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::CancelRequest() + { + LOG1(_L("CTestCollectionPlugin::CancelRequest")); + } + +// ---------------------------------------------------------------------------------------------------------- +// Executes the given command on the collection +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::CommandL(TMPXCollectionCommand aCmd, TInt aArg ) + { + LOG1(_L("CTestCollectionPlugin::CommandL")); + LOG3(_L("TMPXCollectionCommand=%d; aArg=%d"), aCmd, aArg); + switch( aCmd ) + { + case EMcCmdClose: + LOG1( _L("McCmdClose command received")); + break; + case EMcCmdRefresh: + LOG1( _L("EMcCmdRefresh command received")); + break; + case EMcCmdRemoveAll: + LOG1( _L("EMcCmdRemoveAll command received")); + break; + case EMcCloseCollection: + LOG1( _L("EMcCloseCollection command received")); + break; + case EMcReOpenCollection: + LOG1( _L("EMcReOpenCollection command received")); + break; + case EMcRefreshStarted: + LOG1( _L("EMcRefreshStarted command received")); + break; + case EMcRefreshEnded: + LOG1( _L("EMcRefreshEnded command received")); + break; + case EMcCmdReCreateDB: + LOG1( _L("EMcCmdReCreateDB command received")); + break; + case EMcCmdSelect: + LOG1( _L("EMcCmdSelect command received")); + break; + case EMcCmdDbCorrupted: + LOG1( _L("EMcCmdDbCorrupted command received")); + break; + case EMcCmdCollectionInit: + LOG1( _L("EMcCmdCollectionInit command received")); + break; + case EMcCmdCollectionResyn: + LOG1( _L("EMcCmdCollectionResyn command received")); + break; + default: + break; + }; + } + +// ---------------------------------------------------------------------------------------------------------- +// Executes the given command on the collection +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::CommandL(CMPXCommand& aCmd) + { + LOG1(_L("CTestCollectionPlugin::CommandL")); + const TDesC& title = aCmd.ValueText( KMPXMediaGeneralTitle ); + TMPXCommandId cmdId = aCmd.ValueTObjectL(KMPXCommandGeneralId); + LOG2(_L("CommandId = %d"), cmdId); + + if(title == _L("CollectionPluginTest0175") ) + { + } + else if(title == _L("CollectionPluginTest0176") ) + { + iObs->HandleCommandComplete(NULL, KErrNone); + } + else if(title == _L("CollectionPluginTest0177") ) + { + iObs->HandleCommandComplete(NULL, KErrGeneral); + } + else if(title == _L("CollectionPluginTest0183") ) + { + } + else if(title == _L("CollectionPluginTest0184") ) + { + CMPXCommand* newCmd = CMPXCommand::NewL(); + CleanupStack::PushL( newCmd ); + *newCmd = aCmd; + iObs->HandleCommandComplete(newCmd, KErrNone); + CleanupStack::PopAndDestroy( newCmd ); + } + else + { + TBool syncOp(EFalse); + if( aCmd.IsSupported(KMPXCommandGeneralDoSync) ) + { + syncOp = *aCmd.Value(KMPXCommandGeneralDoSync); + } + + switch( cmdId ) + { + case KMPXCommandIdCollectionRetrieveUriForDeletion: + { // TODO + LOG1(_L("CTestCollectionPlugin::CommandL - KMPXCommandIdCollectionRetrieveUriForDeletion")); + //DoRetrieveUriForDeletionL(aCmd); + break; + } + case KMPXCommandIdCollectionRemove: + { + LOG1(_L("CTestCollectionPlugin::CommandL - KMPXCommandIdCollectionRemove")); + //DoRemovePathL(aCmd); + break; + } + case KMPXCommandIdCollectionRemoveMedia: + { + LOG1(_L("CTestCollectionPlugin::CommandL - KMPXCommandIdCollectionRemoveMedia")); + //DoRemoveMediaL(aCmd); + break; + } + case KMPXCommandIdCollectionCleanupDeletedMedias: + { + LOG1(_L("CTestCollectionPlugin::CommandL - KMPXCommandIdCollectionCleanupDeletedMedias")); + //DoCleanupDeletedMediasL(aCmd); + break; + } + case KMPXCommandIdCollectionAdd: + { + LOG1(_L("CTestCollectionPlugin::CommandL - KMPXCommandIdCollectioAdd")); + + CMPXMedia& media = *aCmd.Value(KMPXCommandColAddMedia); + AddL(media); + break; + } + case KMPXCommandIdCollectionSet: + { + LOG1(_L("CTestCollectionPlugin::CommandL - KMPXCommandIdCollectionSet")); + + CMPXMedia& media = *aCmd.Value(KMPXCommandColSetMedia); + SetL( media ); + break; + } + case KMPXCommandIdCollectionCompleteDelete: + { + LOG1(_L("CTestCollectionPlugin::CommandL - KMPXCommandIdCollectionCompleteDelete")); + //DoHandleDeleteCompleteL( aCmd ); + break; + } + default: + { + User::Panic(_L("CTestCollectionPlugin::CommandL panic"), 1); // magic number + } + } + if (!syncOp) + { + iObs->HandleCommandComplete( NULL, KErrNone ); + } + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Adds an item (song or playlist) to the collection +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddL (const CMPXMedia& aMedia) + { + LOG1(_L("CTestCollectionPlugin::AddL")); + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL( message ); + + const TDesC& title = aMedia.ValueText( KMPXMediaGeneralTitle ); + + if(title == _L("CollectionPluginTest0078") ) + { + FillItemChangeMessageL(*message, 78, EMPXItemInserted, EMPXOther); + } + else if(title == _L("CollectionPluginTest0079")) + { + FillItemChangeMessageL(*message, 79, EMPXItemInserted, EMPXSong); + } + else if(title == _L("CollectionPluginTest0080")) + { + FillItemChangeMessageL(*message, 80, EMPXItemInserted, EMPXPlaylist); + } + else + { + User::Panic(_L("CTestCollectionPlugin::AddL panic"), 1); // magic number + } + iObs->HandleMessage( *message ); + CleanupStack::PopAndDestroy( message ); + } + +// ---------------------------------------------------------------------------------------------------------- +// Remove an item from the collection database using the given path +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::RemoveL (const CMPXCollectionPath& aPath) + { + LOG1(_L("CTestCollectionPlugin::RemoveL")); + LogPath( aPath ); + CDesCArrayFlat* fp = new (ELeave) CDesCArrayFlat(8); + CleanupStack::PushL( fp ); + switch( aPath.Levels() ) + { + case 2: + if(aPath.Id() == 14) + { // Test0091 + iObs->HandleRemove( *fp, KErrNotFound ); + } + break; + case 3: + if(aPath.Id() == 212) + { // Test0090 + fp->AppendL( _L("\\song3121.ts") ); + fp->AppendL( _L("\\song3122.ts") ); + fp->AppendL( _L("\\song3123.tp") ); + iObs->HandleRemove( *fp, KErrNone ); + } + break; + case 4: + if(aPath.Id() == 3111) + { // Test0088 + fp->AppendL( _L("\\song3111.ts") ); + iObs->HandleRemove( *fp, KErrNone ); + } + break; + default: + User::Panic(_L("CTestCollectionPlugin::RemoveL panic"), 1); // magic number + } + CleanupStack::PopAndDestroy( fp ); + } + +// ---------------------------------------------------------------------------------------------------------- +// Remove an item from the collection database using the given media properties +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::RemoveL (const CMPXMedia& aMedia) + { + LOG1(_L("CTestCollectionPlugin::RemoveL")); + const TDesC& title = aMedia.ValueText( KMPXMediaGeneralTitle ); + + // a list of change event messages a result of the item being removed + CMPXMessageArray* itemChangedMessages = CMPXMessageArray::NewL(); + CleanupStack::PushL(itemChangedMessages); + + if(title == _L("CollectionPluginTest0099") ) + { + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 99, EMPXItemDeleted, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + } + else if(title == _L("CollectionPluginTest0100") ) + { + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 100, EMPXItemDeleted, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + message = NULL; + message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 100, EMPXItemDeleted, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + } + else + { + User::Panic(_L("CTestCollectionPlugin::RemoveL panic"), 1); // magic number + } + + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + + message->SetTObjectValueL( + TMPXAttribute(KMPXMessageContentIdGeneral, EMPXMessageGeneralId), KMPXMessageIdItemChanged); + message->SetCObjectValueL( + TMPXAttribute(KMPXMessageIdContainer, EMPXMessageArrayContents), itemChangedMessages); + message->SetTObjectValueL( + TMPXAttribute(KMPXMessageIdContainer, EMPXMessageArrayCount), itemChangedMessages->Count()); + + iObs->HandleMessage( *message ); + CleanupStack::PopAndDestroy(2, itemChangedMessages); // message, itemChangedMessages + } + +// ---------------------------------------------------------------------------------------------------------- +// Sets/updates the media for an item in the collection +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::SetL (const CMPXMedia& aMedia) + { + LOG1(_L("CTestCollectionPlugin::SetL")); + const TDesC& title = aMedia.ValueText( KMPXMediaGeneralTitle ); + + // a list of change event messages a result of the item being removed + CMPXMessageArray* itemChangedMessages = CMPXMessageArray::NewL(); + CleanupStack::PushL(itemChangedMessages); + + if(title == _L("CollectionPluginTest0108") ) + { + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 108, EMPXItemModified, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + } + else if(title == _L("CollectionPluginTest0109") ) + { + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 109, EMPXItemModified, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + message = NULL; + message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 109, EMPXItemModified, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + } + else if(title == _L("CollectionPluginTest0119") ) + { + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 119, EMPXItemModified, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + } + else if(title == _L("CollectionPluginTest0120") ) + { + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 120, EMPXItemModified, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + message = NULL; + message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + FillItemChangeMessageL(*message, 120, EMPXItemModified, EMPXSong); + itemChangedMessages->AppendL( *message ); + CleanupStack::PopAndDestroy(message); + } + else + { + // Playback Framework may call this function + //User::Panic(_L("CTestCollectionPlugin::SetL panic"), 1); // magic number + } + + CMPXMessage* message = CMPXMessage::NewL(); + CleanupStack::PushL(message); + + message->SetTObjectValueL( + TMPXAttribute(KMPXMessageContentIdGeneral, EMPXMessageGeneralId), KMPXMessageIdItemChanged); + message->SetCObjectValueL( + TMPXAttribute(KMPXMessageIdContainer, EMPXMessageArrayContents), itemChangedMessages); + message->SetTObjectValueL( + TMPXAttribute(KMPXMessageIdContainer, EMPXMessageArrayCount), itemChangedMessages->Count()); + + iObs->HandleMessage( *message ); + CleanupStack::PopAndDestroy(2, itemChangedMessages); // message, itemChangedMessages + } + +// ---------------------------------------------------------------------------------------------------------- +// Find the items matching the media specifications +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::FindAllL(const CMPXMedia& aCriteria, const TArray& aAttrs) + { + LOG1(_L("CTestCollectionPlugin::FindAllL")); + const TDesC& title = aCriteria.ValueText( KMPXMediaGeneralTitle ); + if(title == _L("CollectionPluginTest0128") || + title == _L("CollectionPluginTest0129") ) + { + // Return exact copy + CMPXMedia* media = CMPXMedia::NewL(); + (*media) = aCriteria; + CleanupStack::PushL( media ); + media->SetTObjectValueL(KMPXMediaGeneralSize, aAttrs.Count()); + iObs->HandleFindAll(media, KErrNone); + CleanupStack::PopAndDestroy( media ); + } + else if(title == _L("CollectionPluginTest0130") ) + { + // Return error + CMPXMedia* media = CMPXMedia::NewL(); + (*media) = aCriteria; + CleanupStack::PushL( media ); + media->SetTObjectValueL(KMPXMediaGeneralSize, aAttrs.Count()); + iObs->HandleFindAll(media, KErrArgument); + CleanupStack::PopAndDestroy( media ); + } + else + { + User::Panic(_L("CTestCollectionPlugin::FindAllL panic"), 1); // magic number + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Find the items matching the media specifications +// ---------------------------------------------------------------------------------------------------------- +// +CMPXMedia* CTestCollectionPlugin::FindAllSyncL(const CMPXMedia& aCriteria, const TArray& aAttrs) + { + LOG1(_L("CTestCollectionPlugin::FindAllSyncL")); + const TDesC& title = aCriteria.ValueText( KMPXMediaGeneralTitle ); + CMPXMedia* media = NULL; + if(title == _L("CollectionPluginTest0138") || + title == _L("CollectionPluginTest0139")) + { + // Return exact copy + media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + (*media) = aCriteria; + media->SetTObjectValueL(KMPXMediaGeneralSize, aAttrs.Count()); + CleanupStack::Pop( media ); + } + else if(title == _L("CollectionPluginTest0140") ) + { + media = NULL; + } + else + { + User::Panic(_L("CTestCollectionPlugin::FindAllL panic"), 1); // magic number + } + return media; + } + +// ---------------------------------------------------------------------------------------------------------- +// Get the list of supported capabilities +// ---------------------------------------------------------------------------------------------------------- +// +TCollectionCapability CTestCollectionPlugin::GetCapabilities() + { + LOG1(_L("CTestCollectionPlugin::GetCapabilities - EMcNotModifiable")); + return EMcNotModifiable; + } + +// ---------------------------------------------------------------------------------------------------------- +// Add specify attribute to Media +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddMediaL(CMPXMediaArray& aMediaArray, + const RArray aIdArray, + const TArray& aAttrs) + { + TInt idCnt = aIdArray.Count(); + for(TInt i = 0; i < idCnt; i++) + { + CMPXMedia* media = CMPXMedia::NewL(); + CleanupStack::PushL( media ); + switch( aIdArray[i] ) + { + case 11: + AddAttrbuteL(*media, 11, _L("level11"), KNullDesC, aAttrs); + break; + case 12: + AddAttrbuteL(*media, 12, _L("level12"), KNullDesC, aAttrs); + break; + case 13: + AddAttrbuteL(*media, 13, _L("level13"), KNullDesC, aAttrs); + break; + case 211: + AddAttrbuteL(*media, 211, _L("level211"), KNullDesC, aAttrs); + break; + case 212: + AddAttrbuteL(*media, 212, _L("level212"), KNullDesC, aAttrs); + break; + case 213: + AddAttrbuteL(*media, 213, _L("level213"), KNullDesC, aAttrs); + break; + case 221: + AddAttrbuteL(*media, 221, _L("level221"), KNullDesC, aAttrs); + break; + case 231: + AddAttrbuteL(*media, 231, _L("level231"), KNullDesC, aAttrs); + break; + case 232: + AddAttrbuteL(*media, 232, _L("level232"), KNullDesC, aAttrs); + break; + case 3111: + AddAttrbuteL(*media, 3111, _L("song3111"), _L("\\song3111.ts"), aAttrs); + break; + case 3121: + AddAttrbuteL(*media, 3121, _L("song3121"), _L("\\song3121.ts"), aAttrs); + break; + case 3131: + AddAttrbuteL(*media, 3131, _L("playlist3131"), _L("\\playlist3131.tp"), aAttrs); + break; + case 3311: + AddAttrbuteL(*media, 3311, _L("song3311"), _L("\\song3311.ts"), aAttrs); + break; + case 3321: + AddAttrbuteL(*media, 3321, _L("playlist3321"), _L("\\playlist3321.tp"), aAttrs); + break; + case 990: + AddAttrbuteL(*media, 990, _L("level990"), KNullDesC, aAttrs); + break; + case 9901: + AddAttrbuteL(*media, 9901, _L("song9901"), _L("\\song9901.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9901, aAttrs); + break; + case 9902: + AddAttrbuteL(*media, 9902, _L("song9902"), _L("\\song9902.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9902, aAttrs); + break; + case 9903: + AddAttrbuteL(*media, 9903, _L("song9903"), _L("\\song9903.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9903, aAttrs); + break; + case 9904: + AddAttrbuteL(*media, 9904, _L("song9904"), _L("\\song9904.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9904, aAttrs); + break; + case 9905: + AddAttrbuteL(*media, 9905, _L("song9905"), _L("\\song9905.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9905, aAttrs); + break; + case 9906: + AddAttrbuteL(*media, 9906, _L("song9906"), _L("\\song9906.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9906, aAttrs); + break; + case 9907: + AddAttrbuteL(*media, 9907, _L("song9907"), _L("\\song9907.ts"), aAttrs); + AddAttributePlaybackFwTestL(*media, 9907, aAttrs); + break; + }; + aMediaArray.AppendL( media ); + CleanupStack::Pop( media ); + } + } + + +// ---------------------------------------------------------------------------------------------------------- +// Add specify attribute to Media +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttrbuteL(CMPXMedia& aMedia, + const TInt aId, + const TDesC& aTitle, + const TDesC& aUri, + const TArray& aAttrs) + { + TInt attrCnt = aAttrs.Count(); + for(TInt i = 0; i < attrCnt; i++) + { + if(aAttrs[i].ContentId() == KMPXMediaIdGeneral) + { + TInt attrId = aAttrs[i].AttributeId(); + if(attrId & EMPXMediaGeneralId) + { + aMedia.SetTObjectValueL(KMPXMediaGeneralId, aId); + } + if(attrId & EMPXMediaGeneralTitle) + { + aMedia.SetTextValueL(KMPXMediaGeneralTitle, aTitle); + + } + if(attrId & EMPXMediaGeneralUri) + { + aMedia.SetTextValueL(KMPXMediaGeneralUri, aUri); + } + } + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Add specify attribute to Media specific for Playback framework +// test cases +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributePlaybackFwTestL(CMPXMedia& aMedia, + const TInt aId, + const TArray& aAttrs) + { + TInt attrCnt = aAttrs.Count(); + for(TInt i = 0; i < attrCnt; i++) + { + TInt attrId = aAttrs[i].AttributeId(); + if(aAttrs[i].ContentId() == KMPXMediaIdGeneral) + { + if(attrId & EMPXMediaGeneralType) + { + AddAttributeGeneralTypeL(aMedia, aId); + } + if(attrId & EMPXMediaGeneralCategory) + { + AddAttributeGeneralCategoryL(aMedia, aId); + } + if(attrId & EMPXMediaGeneralDuration) + { + AddAttributeGeneralDurationL(aMedia, aId); + } + if(attrId & EMPXMediaGeneralLastPlaybackPosition) + { + AddAttributeGeneralLastPlaybackPositionL(aMedia, aId); + } + } + else if(aAttrs[i].ContentId() == KMPXMediaIdMusic) + { + if(attrId & EMPXMediaMusicArtist) + { + AddAttributeMusicArtistL(aMedia, aId); + } + } + else if(aAttrs[i].ContentId() == KMPXMediaIdDrm) + { + if(attrId & EMPXMediaDrmType) + { + AddAttributeDrmTypeL(aMedia, aId); + } + if(attrId & EMPXMediaDrmProtected) + { + AddAttributeDrmProtectedL(aMedia, aId); + } + if(attrId & EMPXMediaDrmRightsStatus) + { + AddAttributeDrmRightsStatusL(aMedia, aId); + } + } + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Filter out media in aMediaArray which match aFilter +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::FilterMediaArray(CMPXMediaArray& aMediaArray, CMPXFilter* aFilter) + { + if(aFilter ) + { + TArray filterAttr = aFilter->Attributes(); + TInt arrCnt = aMediaArray.Count(); + for(TInt i = arrCnt-1; i >= 0; i--) // Remove from the back + { + CMPXMedia* media = aMediaArray[i]; + for(TInt ii = 0; ii < filterAttr.Count(); ii++) + { + TMPXAttribute attr = filterAttr[ii]; + if( media->IsSupported( attr ) ) + { + TBool match = EFalse; + if(attr == KMPXMediaGeneralId) + { + TInt filterId = *aFilter->Value( attr ); + TInt mediaId = *media->Value( attr ); + if(filterId == mediaId) + match = ETrue; + } + else if(attr == KMPXMediaGeneralTitle || attr == KMPXMediaGeneralUri) + { + const TDesC& filterText = aFilter->ValueText( attr ); + const TDesC& mediaText = media->ValueText( attr ); + if(filterText == mediaText) + match = ETrue; + } + if( match ) + { + aMediaArray.Remove( i ); + break; + } + } + } + } + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Fill up media with change message +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::FillItemChangeMessageL(CMPXMessage& aMessage, + TMPXItemId aId, + TMPXChangeEventType aChangeType, + TMPXGeneralCategory aCategory) + { + LOG1( _L("Preparing HandleMessage callback") ); + aMessage.SetTObjectValueL( + TMPXAttribute(KMPXMessageContentIdGeneral, EMPXMessageGeneralId), KMPXMessageIdItemChanged); + + aMessage.SetTObjectValueL( + TMPXAttribute(KMPXMessageIdItemChanged, EMPXMessageCollectionId), TUid::Uid(KCollectionTestPluginImpId)); + + aMessage.SetTObjectValueL( + TMPXAttribute(KMPXMessageIdItemChanged, EMPXMessageChangeEventType), aChangeType); + + aMessage.SetTObjectValueL( + TMPXAttribute(KMPXMessageIdItemChanged, EMPXMessageMediaGeneralCategory), aCategory); + + aMessage.SetTObjectValueL( + TMPXAttribute(KMPXMessageIdItemChanged, EMPXMessageMediaGeneralId), aId); + } + + +// ---------------------------------------------------------------------------------------------------------- +// Adding specific attribute +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributeGeneralTypeL(CMPXMedia& aMedia, const TInt aId) + { + switch( aId ) + { + case 9901: + case 9902: + case 9903: + case 9904: + case 9905: + case 9906: + case 9907: + aMedia.SetTObjectValueL(KMPXMediaGeneralType, EMPXItem); + break; + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Adding specific attribute +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributeGeneralCategoryL(CMPXMedia& aMedia, const TInt aId) + { + switch( aId ) + { + case 9901: + case 9902: + case 9903: + case 9904: + case 9905: + case 9906: + case 9907: + aMedia.SetTObjectValueL(KMPXMediaGeneralCategory, EMPXSong); + break; + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Adding specific attribute +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributeGeneralDurationL(CMPXMedia& aMedia, const TInt aId) + { + switch( aId ) + { + case 9901: + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, 0); // 0sec + break; + case 9902: + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, 1000); // 1sec + break; + case 9903: + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, 2000); // 2sec + break; + case 9904: + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, 5000); // 5sec + break; + case 9905: + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, 10000); // 10sec + break; + case 9906: + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, 20000); // 20sec + break; + case 9907: + aMedia.SetTObjectValueL(KMPXMediaGeneralDuration, 15000); // 15sec + break; + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Adding specific attribute +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributeGeneralLastPlaybackPositionL(CMPXMedia& aMedia, const TInt aId) + { + switch( aId ) + { + case 9901: + aMedia.SetTObjectValueL(KMPXMediaGeneralLastPlaybackPosition, 0); // 0sec + break; + case 9902: + aMedia.SetTObjectValueL(KMPXMediaGeneralLastPlaybackPosition, 0); // 0sec + break; + case 9903: + aMedia.SetTObjectValueL(KMPXMediaGeneralLastPlaybackPosition, 1000); // 1sec + break; + case 9904: + aMedia.SetTObjectValueL(KMPXMediaGeneralLastPlaybackPosition, 2500); // 2.5sec + break; + case 9905: + aMedia.SetTObjectValueL(KMPXMediaGeneralLastPlaybackPosition, 0); // 0sec + break; + case 9906: + aMedia.SetTObjectValueL(KMPXMediaGeneralLastPlaybackPosition, 0); // 0sec + break; + case 9907: + aMedia.SetTObjectValueL(KMPXMediaGeneralLastPlaybackPosition, 0); // 0sec + break; + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Adding specific attribute +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributeMusicArtistL(CMPXMedia& aMedia, const TInt aId) + { + switch( aId ) + { + case 9901: + aMedia.SetTextValueL(KMPXMediaMusicArtist, _L("artist9901")); + break; + case 9902: + aMedia.SetTextValueL(KMPXMediaMusicArtist, _L("artist9902")); + break; + case 9903: + aMedia.SetTextValueL(KMPXMediaMusicArtist, _L("artist9903")); + break; + case 9904: + aMedia.SetTextValueL(KMPXMediaMusicArtist, _L("artist9904")); + break; + case 9905: + aMedia.SetTextValueL(KMPXMediaMusicArtist, _L("artist9905")); + break; + case 9906: + aMedia.SetTextValueL(KMPXMediaMusicArtist, _L("artist9906")); + break; + case 9907: + aMedia.SetTextValueL(KMPXMediaMusicArtist, _L("artist9907")); + break; + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Adding specific attribute +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributeDrmTypeL(CMPXMedia& aMedia, const TInt aId) + { + switch( aId ) + { + case 9901: + // Specify nothing + break; + case 9902: + // Specify nothing + break; + case 9903: + aMedia.SetTObjectValueL(KMPXMediaDrmType, EMPXDrmTypeOMA); + break; + case 9904: + aMedia.SetTObjectValueL(KMPXMediaDrmType, EMPXDrmTypeWMA); + break; + case 9905: + // Specify nothing + break; + case 9906: + // Specify nothing + break; + case 9907: + // Specify nothing + break; + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Adding specific attribute +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributeDrmProtectedL(CMPXMedia& aMedia, const TInt aId) + { + switch( aId ) + { + case 9901: + aMedia.SetTObjectValueL(KMPXMediaDrmProtected, EFalse); + break; + case 9902: + aMedia.SetTObjectValueL(KMPXMediaDrmProtected, ETrue); + break; + case 9903: + aMedia.SetTObjectValueL(KMPXMediaDrmProtected, EFalse); + break; + case 9904: + aMedia.SetTObjectValueL(KMPXMediaDrmProtected, ETrue); + break; + case 9905: + aMedia.SetTObjectValueL(KMPXMediaDrmProtected, EFalse); + break; + case 9906: + aMedia.SetTObjectValueL(KMPXMediaDrmProtected, EFalse); + break; + case 9907: + aMedia.SetTObjectValueL(KMPXMediaDrmProtected, EFalse); + break; + } + } + +// ---------------------------------------------------------------------------------------------------------- +// Adding specific attribute +// ---------------------------------------------------------------------------------------------------------- +// +void CTestCollectionPlugin::AddAttributeDrmRightsStatusL(CMPXMedia& aMedia, const TInt aId) + { + switch( aId ) + { + case 9901: + // Specify nothing + break; + case 9902: + aMedia.SetTObjectValueL(KMPXMediaDrmRightsStatus, EMPXDrmRightsFull); + break; + case 9903: + aMedia.SetTObjectValueL(KMPXMediaDrmRightsStatus, EMPXDrmRightsExpired); + break; + case 9904: + aMedia.SetTObjectValueL(KMPXMediaDrmRightsStatus, EMPXDrmRightsPreview); + break; + case 9905: + // Specify nothing + break; + case 9906: + // Specify nothing + break; + case 9907: + // Specify nothing + break; + } + } + +// End of file