Revision: 201039 RCL_3 PDK_3.0.4
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:34:36 +0300
branchRCL_3
changeset 70 375929f879c2
parent 64 3eb824b18d67
child 73 f89a65650939
Revision: 201039 Kit: 201041
filedetails/filedetailsdialog/src/MPFileDetails.cpp
filedetails/filedetailsdialog/src/MPFileDetailsDialog.cpp
inc/IptvDebug.h
inc/mpxvideo_debug.h
mediasettings/mediasettingsengine/group/MPSettROPModel.mmp
tsrc/testing/ini/01-unit/TestFramework.ini
tsrc/testing/sis/fusion_engine_tests.pkg
tsrc/testing/sis/fusion_unit_tests.pkg
tsrc/testing/tools/builder.pl
tsrc/testing/tools/siscreator.pl
videocollection/hgmyvideos/inc/vcxhgmyvideoscategorymodelhandler.h
videocollection/hgmyvideos/inc/vcxhgmyvideoscollectionclient.h
videocollection/hgmyvideos/inc/vcxhgmyvideosthumbnailmanager.h
videocollection/hgmyvideos/inc/vcxhgmyvideosvideomodelhandler.h
videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp
videocollection/hgmyvideos/src/vcxhgmyvideoscollectionclient.cpp
videocollection/hgmyvideos/src/vcxhgmyvideosthumbnailmanager.cpp
videocollection/hgmyvideos/src/vcxhgmyvideosvideodataupdater.cpp
videocollection/hgmyvideos/src/vcxhgmyvideosvideomodelhandler.cpp
videocollection/mpxmyvideoscollection/inc/vcxmyvideoscategories.h
videocollection/mpxmyvideoscollection/src/vcxmyvideosasyncfileoperations.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideoscategories.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/bwins/ut_collectionplugintestu.def
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/conf/ut_collectionplugintest.cfg
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/eabi/ut_collectionplugintestu.def
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/group/bld.inf
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/group/ut_collectionplugintest.mmp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/group/ut_collectionplugintest.pkg
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/mpxlog.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/ut_collectionplugintest.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosactivetask.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosalbum.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosalbums.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosasyncfileoperations_stub.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideoscategories_stub.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideoscollectionutil.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosmdsalbums.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosmdsdb_stub.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosmessagelist_stub.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosopenhandler_stub.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosvideocache_stub.h
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/init/testframework.ini
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/ut_collectionplugintest.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/ut_collectionplugintestBlocks.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosactivetask_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosalbum_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosalbums_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosasyncfileoperations_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideoscategories_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideoscollectionutil_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosmdsalbums_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosmdsdb_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosmessagelist_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosopenhandler_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosvideocache_stub.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/group/bld.inf
videoplayback/inc/mpxvideobaseplaybackview.h
videoplayback/inc/mpxvideoplaybackcontrolscontroller.h
videoplayback/inc/mpxvideoplaybackmediadetailsviewer.h
videoplayback/videohelix/group/mpxvideohelixplayback.mmp
videoplayback/videohelix/inc/mpxcalldetector.h
videoplayback/videohelix/inc/mpxvideoplaybackcontroller.h
videoplayback/videohelix/inc/mpxvideoplaybackstate.h
videoplayback/videohelix/src/mpxcalldetector.cpp
videoplayback/videohelix/src/mpxvideoplaybackcontroller.cpp
videoplayback/videohelix/src/mpxvideoplaybackstate.cpp
videoplayback/videohelix/tsrc/ut_videohelixtest/conf/videohelixtest.cfg
videoplayback/videohelix/tsrc/ut_videohelixtest/group/videohelixtest.mmp
videoplayback/videohelix/tsrc/ut_videohelixtest/inc/videohelixtest.h
videoplayback/videohelix/tsrc/ut_videohelixtest/src/videohelixtestbody.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolpolicy.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolscontroller.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackmediadetailsviewer.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackprogressbar.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp
videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/conf/ui_videoplaybackcontrolstest.cfg
videoplayback/videoplaybackviews/src/mpxvideobaseplaybackview.cpp
videoplayerapp/mpxvideoplayer/group/mpxvideoplayer.mmp
videoplayerapp/mpxvideoplayer/inc/mpxvideoplayerappuiengine.h
videoplayerapp/mpxvideoplayer/inc/mpxvideoplayeriadupdate.h
videoplayerapp/mpxvideoplayer/sis/VideoPlayer.pkg
videoplayerapp/mpxvideoplayer/sis/VideoPlayer_stub.pkg
videoplayerapp/mpxvideoplayer/sis/depends.xml
videoplayerapp/mpxvideoplayer/sis/make_videoplayer_sisx.bat
videoplayerapp/mpxvideoplayer/src/mpxvideoplayerappuiengine.cpp
videoplayerapp/mpxvideoplayer/src/mpxvideoplayeriadupdate.cpp
videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/group/mpxvideoplayertest.mmp
videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/inc/mpxvideoplayeriadupdate_stub.h
videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/src/mpxvideoplayeriadupdate_stub.cpp
--- a/filedetails/filedetailsdialog/src/MPFileDetails.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/filedetails/filedetailsdialog/src/MPFileDetails.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
 */
 
 
-// Version : %version: 9 %
+// Version : %version: 8 %
 
 
 // INCLUDE FILES
@@ -35,6 +35,33 @@
     : iSeekable( ETrue ), iDRMExpireConstraint( EMediaPlayerNone ), iDRMhasInfoURL(EFalse)
 {
     MPX_ENTER_EXIT(_L("CMPFileDetails::CMPFileDetails()"));
+
+    //Initializing to make sure no garbage in the variables
+    iTitle = NULL;
+    iFileName = NULL;
+	iFilePath = NULL;
+    iUrl = NULL;
+    iFormat = NULL;
+    iCopyright = NULL;
+    iArtist = NULL;
+    iAlbum = NULL;
+    iYear = NULL;
+
+    iOriginalArtist = NULL;
+    iAlbumTrack = NULL;
+    iGenre = NULL;
+    iComposer = NULL;
+    iAudioFileWebPage = NULL;
+    iComment = NULL;
+    iProvider = NULL;
+    iDescription = NULL;
+
+    iArtistXpcs = NULL;
+    iTitleXpcs = NULL;
+    iAlbumXpcs = NULL ;
+    iInfoXpcs = NULL;
+
+    iDRMInfoURL = NULL;
 }
 
 // -----------------------------------------------------------------------------
--- a/filedetails/filedetailsdialog/src/MPFileDetailsDialog.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/filedetails/filedetailsdialog/src/MPFileDetailsDialog.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
 */
 
 
-// Version : %version: 21 %
+// Version : %version: 20 %
 
 // INCLUDE FILES
 #include <aknlists.h>
@@ -310,7 +310,7 @@
                     }
                 else if (!metaData->Name().CompareF(KMPArtist) || !metaData->Name().Compare(KMPAuthor))
                     {
-                    fileDetails->iArtist = metaData->Value().AllocL();
+                    fileDetails->iArtist = metaData->Value().Alloc();
                     }
                 else if (!metaData->Name().CompareF(KMPTitle))
                     {
@@ -1751,7 +1751,7 @@
 
     if( !aBuf && aDetail.Length())
         {
-        aBuf = HBufC::NewL( aDetail.Length() );
+        aBuf = HBufC::New( aDetail.Length() );
         aBuf->Des().Copy( aDetail );
         }
 }
--- a/inc/IptvDebug.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/inc/IptvDebug.h	Wed Oct 13 14:34:36 2010 +0300
@@ -173,7 +173,7 @@
 #else
 
 // ARMV5 BUILD:
-#define IPTV_LOGGING_METHOD  2  // RDebug is default with target device
+#define IPTV_LOGGING_METHOD  1  // Flogger is default with target device
 
 #endif
 
--- a/inc/mpxvideo_debug.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/inc/mpxvideo_debug.h	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
 */
 
 
-// Version : %version: ou1cpsw#4.1.1 %
+// Version : %version: ou1cpsw#3 %
 
 
 
@@ -35,13 +35,13 @@
 
 // #define _MPX_FILE_LOGGING_
 
-#ifndef _DEBUG
-    #define FU_DEBUG
+#ifdef _DEBUG
+    #define FU_DEBUG RDebug::Print
 #else
     #ifdef _MPX_FILE_LOGGING_
         #define FU_DEBUG MPXDebug::FileLog
     #else        
-        #define FU_DEBUG RDebug::Print
+        #define FU_DEBUG
     #endif
 #endif 
 
--- a/mediasettings/mediasettingsengine/group/MPSettROPModel.mmp	Wed Sep 15 12:15:24 2010 +0300
+++ b/mediasettings/mediasettingsengine/group/MPSettROPModel.mmp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 
 
 
-// Version : %version: 8 %
+// Version : %version: 6 %
 
 
 
--- a/tsrc/testing/ini/01-unit/TestFramework.ini	Wed Sep 15 12:15:24 2010 +0300
+++ b/tsrc/testing/ini/01-unit/TestFramework.ini	Wed Oct 13 14:34:36 2010 +0300
@@ -98,6 +98,9 @@
 TestCaseFile= c:\TestFramework\ui_videoplaybackcontrolstest.cfg
 TestCaseFile= c:\TestFramework\ui_userinputhandlertest.cfg
 TestCaseFile= c:\TestFramework\mpxvideoplayertest.cfg
+TestCaseFile= c:\TestFramework\ut_collectionplugintest.cfg
+TestCaseFile= c:\TestFramework\VcxMyVideosCollectionUtilTest.cfg
+TestCaseFile= c:\TestFramework\VcxMyVideosMdsDbTest.cfg
 [End_Module]
 
 #TestCaseFile= c:\TestFramework\ui_VcxHgMyVideosMainViewTest.cfg
--- a/tsrc/testing/sis/fusion_engine_tests.pkg	Wed Sep 15 12:15:24 2010 +0300
+++ b/tsrc/testing/sis/fusion_engine_tests.pkg	Wed Oct 13 14:34:36 2010 +0300
@@ -132,42 +132,6 @@
 "../../../../videoutils/videoutils_plat/videoconnutility_api/tsrc/conf/VCXConnUtilTest.inc" - "C:/TestFramework/VCXConnUtilTest.inc"
 "../../../../videoutils/videoutils_plat/videoconnutility_api/tsrc/conf/VCXConnUtilTestHelium.cfg" -  "C:/TestFramework/VCXConnUtilTestHelium.cfg"
 
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; VIDEOPLAYER UNIT TESTS
-
-; VIDEOHELIX
-;"/epoc32/release/armv5/udeb/videohelixtest.dll"   -   "!:/sys/bin/videohelixtest.dll"
-;"../../../videoplayback/videohelix/tsrc/ut_videohelixtest/conf/videohelixtest.cfg" - "c:/testframework/videohelixtest.cfg"
-;"../../../videoplayback/videohelix/tsrc/ut_videohelixtest/data/mmc/dcf.odf" - "e:/testing/data/dcf.odf"
-;"../../../videoplayback/videohelix/tsrc/ut_videohelixtest/data/mmc/sdp_test.sdp" - "e:/testing/data/sdp_test.sdp"
-;"../../../videoplayback/videohelix/tsrc/ut_videohelixtest/data/mmc/vhpp_test.3gp" - "e:/testing/data/vhpp_test.3gp"
-
-; MPXVIDEOPLAYER
-;"/epoc32/release/armv5/udeb/mpxvideoplayertest.dll" - "!:/sys/bin/mpxvideoplayertest.dll"
-;"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/conf/mpxvideoplayertest.cfg" - "c:/testframework/mpxvideoplayertest.cfg"
-
-;"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/local.3gp" - "e:/testing/data/local.3gp"
-;"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/sdp_test.sdp" - "e:/testing/data/sdp_test.sdp"
-;"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_local_hw.ram" - "e:/testing/data/test_local.ram"
-;"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_multilocal_hw.ram" - "e:/testing/data/test_multilocal.ram"
-;"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_streaming.ram" - "e:/testing/data/test_streaming.ram"
-;"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_multilink_v2.asx" - "e:/testing/data/test_multilink_v2.asx"
-;"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_seekSingle_v3.asx" - "e:/testing/data/test_seekSingle_v3.asx"
-
-; VIDEOPLAYBACKCONTROLS
-;"/epoc32/release/armv5/udeb/ui_videoplaybackcontrolstest.dll"      - "!:/sys/bin/ui_videoplaybackcontrolstest.dll"
-;"/epoc32/data/z/resource/apps/mpxvideoplaybackcontrols.rsc" - "!:/resource/apps/mpxvideoplaybackcontrols.rsc" 
-;"/epoc32/data/z/resource/apps/mpxvideoplaybackcontrols.mif" - "!:/resource/apps/mpxvideoplaybackcontrols.mif"
-;"../../../videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/conf/ui_videoplaybackcontrolstest.cfg" - "c:/testframework/ui_videoplaybackcontrolstest.cfg"
-;"../../../videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/data/mmc/test.3gp" - "e:/testing/data/test.3gp"
-;"../../../videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/data/mmc/test.rm" - "e:/testing/data/test.rm"
-
-; USERINPUTHANDLER
-;"/epoc32/release/armv5/udeb/ui_userinputhandlertest.dll" - "c:/sys/bin/ui_userinputhandlertest.dll"
-;"../../../videoplayback/videoplaybackviews/tsrc/ut_userinputhandlertest/conf/ui_userinputhandlertest.cfg" - "c:/testframework/ui_userinputhandlertest.cfg"
-
-
 ; Embedded SIS
 ; None
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/testing/sis/fusion_unit_tests.pkg	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,103 @@
+;
+; 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:   Package file for fusion engine STIF tests;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"Fusion unit tests"},(0x00000000),1,1,0,TYPE=SA, RU
+
+; Series60 product id for S60 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; VIDEOPLAYER UNIT TESTS
+
+; VIDEOHELIX
+"/epoc32/release/armv5/udeb/videohelixtest.dll"   -   "!:/sys/bin/videohelixtest.dll"
+"../../../videoplayback/videohelix/tsrc/ut_videohelixtest/conf/videohelixtest.cfg" - "c:/testframework/videohelixtest.cfg"
+"../../../videoplayback/videohelix/tsrc/ut_videohelixtest/data/mmc/dcf.odf" - "e:/testing/data/dcf.odf"
+"../../../videoplayback/videohelix/tsrc/ut_videohelixtest/data/mmc/sdp_test.sdp" - "e:/testing/data/sdp_test.sdp"
+"../../../videoplayback/videohelix/tsrc/ut_videohelixtest/data/mmc/vhpp_test.3gp" - "e:/testing/data/vhpp_test.3gp"
+
+; MPXVIDEOPLAYER
+"/epoc32/release/armv5/udeb/mpxvideoplayertest.dll" - "!:/sys/bin/mpxvideoplayertest.dll"
+"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/conf/mpxvideoplayertest.cfg" - "c:/testframework/mpxvideoplayertest.cfg"
+
+"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/local.3gp" - "e:/testing/data/local.3gp"
+"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/sdp_test.sdp" - "e:/testing/data/sdp_test.sdp"
+"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_local_hw.ram" - "e:/testing/data/test_local.ram"
+"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_multilocal_hw.ram" - "e:/testing/data/test_multilocal.ram"
+"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_streaming.ram" - "e:/testing/data/test_streaming.ram"
+"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_multilink_v2.asx" - "e:/testing/data/test_multilink_v2.asx"
+"../../../videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/data/mmc/test_seekSingle_v3.asx" - "e:/testing/data/test_seekSingle_v3.asx"
+
+; VIDEOPLAYBACKCONTROLS
+"/epoc32/release/armv5/udeb/ui_videoplaybackcontrolstest.dll"      - "!:/sys/bin/ui_videoplaybackcontrolstest.dll"
+"/epoc32/data/z/resource/apps/mpxvideoplaybackcontrols.rsc" - "!:/resource/apps/mpxvideoplaybackcontrols.rsc" 
+"/epoc32/data/z/resource/apps/mpxvideoplaybackcontrols.mif" - "!:/resource/apps/mpxvideoplaybackcontrols.mif"
+"../../../videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/conf/ui_videoplaybackcontrolstest.cfg" - "c:/testframework/ui_videoplaybackcontrolstest.cfg"
+"../../../videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/data/mmc/test.3gp" - "e:/testing/data/test.3gp"
+"../../../videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/data/mmc/test.rm" - "e:/testing/data/test.rm"
+
+; USERINPUTHANDLER
+"/epoc32/release/armv5/udeb/ui_userinputhandlertest.dll" - "c:/sys/bin/ui_userinputhandlertest.dll"
+"../../../videoplayback/videoplaybackviews/tsrc/ut_userinputhandlertest/conf/ui_userinputhandlertest.cfg" - "c:/testframework/ui_userinputhandlertest.cfg"
+
+; VCXMYVIDEOSMDSDB
+"/epoc32/release/armv5/udeb/VcxMyVideosMdsDbTest.dll" - "!:/Sys/Bin/VcxMyVideosMdsDbTest.dll"
+"../../../videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/conf/VcxMyVideosMdsDbTest.cfg" - "c:/testframework/VcxMyVideosMdsDbTest.cfg"
+
+; VCXMYVIDEOSCOLLECTIONUTILTEST
+"/epoc32/release/armv5/udeb/VcxMyVideosCollectionUtilTest.dll" - "!:/Sys/Bin/VcxMyVideosCollectionUtilTest.dll"
+"../../../videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideoscollectionutiltest/data/mmc/file.txt" - "c:/data/vcxmyvideoscollectionutiltest_file.txt"
+"../../../videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideoscollectionutiltest/conf/VcxMyVideosCollectionUtilTest.cfg" - "c:/testframework/VcxMyVideosCollectionUtilTest.cfg"
+
+; UT_COLLECTIONPLUGINTEST
+"/epoc32/release/armv5/udeb/ut_collectionplugintest.dll" - "c:/sys/bin/ut_collectionplugintest.dll"
+"../../../videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/conf/ut_collectionplugintest.cfg" - "c:/testframework/ut_collectionplugintest.cfg"
+
+; Embedded SIS
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- a/tsrc/testing/tools/builder.pl	Wed Sep 15 12:15:24 2010 +0300
+++ b/tsrc/testing/tools/builder.pl	Wed Oct 13 14:34:36 2010 +0300
@@ -45,7 +45,10 @@
 		"videoplayer\\videoplayback\\videoplaybackcontrols\\tsrc\\videoplaybackcontrols_test\\group",
 		"videoplayer\\videoplayback\\videoplaybackviews\\tsrc\\ut_userinputhandlertest\\group",
 		"videoplayer\\videoplayerapp\\mpxvideoplayer\\tsrc\\ut_mpxvideoplayertest\\group",
-		"videoplayer\\videocollection\\hgmyvideos\\tsrc\\ut_vcxhgmyvideosmainview\\group"
+		"videoplayer\\videocollection\\hgmyvideos\\tsrc\\ut_vcxhgmyvideosmainview\\group",
+		"videoplayer\\videocollection\\mpxmyvideoscollection\\tsrc\\ut_collectionplugintest\\group",
+		"videoplayer\\videocollection\\mpxmyvideoscollection\\tsrc\\ut_vcxmyvideoscollectionutiltest\\group",
+		"videoplayer\\videocollection\\mpxmyvideoscollection\\tsrc\\ut_vcxmyvideosmdsdb\\group"
 	);
 
 ########################################
--- a/tsrc/testing/tools/siscreator.pl	Wed Sep 15 12:15:24 2010 +0300
+++ b/tsrc/testing/tools/siscreator.pl	Wed Oct 13 14:34:36 2010 +0300
@@ -45,11 +45,15 @@
 	);
 
 my @unitTests = (
+		"videoplayer\\tsrc\\testing\\sis\\fusion_unit_tests.pkg",
 		"videoplayer\\videoplayback\\videohelix\\tsrc\\ut_videohelixtest\\group\\videohelixtest.pkg",
 		"videoplayer\\videoplayback\\videoplaybackcontrols\\tsrc\\videoplaybackcontrols_test\\group\\videoplaybackcontrolstest.pkg",
 		"videoplayer\\videoplayback\\videoplaybackviews\\tsrc\\ut_userinputhandlertest\\group\\userinputhandlertest.pkg",
 		"videoplayer\\videoplayerapp\\mpxvideoplayer\\tsrc\\ut_mpxvideoplayertest\\group\\mpxvideoplayertest.pkg",
-		"videoplayer\\videocollection\\hgmyvideos\\tsrc\\ut_vcxhgmyvideosmainview\\group\\VcxHgMyVideosMainViewTest.pkg"
+		"videoplayer\\videocollection\\hgmyvideos\\tsrc\\ut_vcxhgmyvideosmainview\\group\\VcxHgMyVideosMainViewTest.pkg",
+		"videoplayer\\videocollection\\mpxmyvideoscollection\\tsrc\\ut_collectionplugintest\\group\\ut_collectionplugintest.pkg",
+		"videoplayer\\videocollection\\mpxmyvideoscollection\\tsrc\\ut_vcxmyvideoscollectionutiltest\\group\\VcxMyVideosCollectionUtilTest.pkg",
+		"videoplayer\\videocollection\\mpxmyvideoscollection\\tsrc\\ut_vcxmyvideosmdsdb\\group\\VcxMyVideosMdsDbTest.pkg"
 	);
 
 ########################################
--- a/videocollection/hgmyvideos/inc/vcxhgmyvideoscategorymodelhandler.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/inc/vcxhgmyvideoscategorymodelhandler.h	Wed Oct 13 14:34:36 2010 +0300
@@ -271,7 +271,7 @@
          * Goes through given number of categories and
          * fills iCategoryIdArray from the accepted ones
          */
-        void MakeCategoryIdArrayL();
+        void MakeCategoryIdArray();
         
         /**
          * Checks if the given category is accepted or not.
@@ -351,24 +351,6 @@
          * @return ETrue if the preloaded does exist, otherwise EFalse
          */
         TBool PreloadedExistsL();
-        
-        /**
-         * Check if given application exists.
-         * 
-         * @param aAppUid Application UID
-         * @return ETrue if application exists in the system, EFalse otherwise.
-         */
-        TBool AppExistsL( const TUid& aAppUid );
-        
-        /**
-         * Check if extra item applications 2 and 3 exists in the system.
-         */
-        void CheckIfExtraItemsExistsL();
-        
-        /** 
-         * 2nd phase constructor.
-         */
-        void ConstructL();
 
     private:
     
@@ -412,16 +394,6 @@
          * Video indicator class instance. Own.
          */
         CMyVideosIndicator* iVideoIndicator;
-        
-        /**
-         * ETrue if extra item 2 exists, i.e. URL available or valid application UID.
-         */
-        TBool iExtraItem2Exists;
-        
-        /**
-         * ETrue if extra item 3 exists, i.e. URL available or valid application UID.
-         */
-        TBool iExtraItem3Exists;
     };
 
 #endif // VCXHGMYVIDEOSCATEGORYMODELHANDLER_H
--- a/videocollection/hgmyvideos/inc/vcxhgmyvideoscollectionclient.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/inc/vcxhgmyvideoscollectionclient.h	Wed Oct 13 14:34:36 2010 +0300
@@ -343,13 +343,6 @@
          * @param aError system error code.
          */
         void HandleGetVideoDetailsRespL( CMPXMessage* aMessage, TInt aError );
-        
-        /**
-         * Gets current collection path category level index
-         * 
-         * @return Index or KErrNotFound, if current path is not in video level
-         */
-        TInt CategoryIndexL();
 
     protected:
         
--- a/videocollection/hgmyvideos/inc/vcxhgmyvideosthumbnailmanager.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/inc/vcxhgmyvideosthumbnailmanager.h	Wed Oct 13 14:34:36 2010 +0300
@@ -98,13 +98,6 @@
          * @param aRequestId
          */
         void Cancel( TThumbnailRequestId aRequestId );
-        
-        /**
-         * Reset the generated thumbnails from given source
-         * 
-         * aSource Thumbnail source
-         */
-        void Reset( CThumbnailObjectSource& aSource );
 
         /**
          * Adds observer.
--- a/videocollection/hgmyvideos/inc/vcxhgmyvideosvideomodelhandler.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/inc/vcxhgmyvideosvideomodelhandler.h	Wed Oct 13 14:34:36 2010 +0300
@@ -458,16 +458,6 @@
          * This method resets iMarkedMediaList before returning.
          */
         void RestoreMarkingsL();
-        
-        /**
-         * Resets the empty thumbnail from DRM protected video clip.
-         * This causes the thumbnail to be attempted to be regenerated
-         * next time the thumbnail is fetched fron thumbnail manager.
-         *
-         * @param aMedia Media from which new video tag will be cleared.   
-         * @param aIndex Index of the visible item.
-         */
-        void ResetEmptyDrmThumnailL( CMPXMedia& aMedia, TInt aIndex );
 
     private:
         
--- a/videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -39,7 +39,6 @@
 #include <coemain.h>
 #include <aknappui.h>
 #include <bautils.h>
-#include <apgcli.h>
 
 #include <vcxhgmyvideosicons.mbg>
 #include <myvideosindicator.h>
@@ -69,9 +68,7 @@
     {
     CVcxHgMyVideosCategoryModelHandler* self = 
         new (ELeave) CVcxHgMyVideosCategoryModelHandler( aModel, aScroller );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
+
     return self;
     }
 
@@ -90,62 +87,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CVcxHgMyVideosCategoryModelHandler::ConstructL()
-// -----------------------------------------------------------------------------
-//
-void CVcxHgMyVideosCategoryModelHandler::ConstructL()
-    {
-    CheckIfExtraItemsExistsL();
-    }
-
-// -----------------------------------------------------------------------------
-// CVcxHgMyVideosCategoryModelHandler::CheckIfExtraItemsExistsL()
-// -----------------------------------------------------------------------------
-//
-void CVcxHgMyVideosCategoryModelHandler::CheckIfExtraItemsExistsL()
-    {
-    TInt value = 0;
-    TBuf<KMyVideosTitleUrlMaxLength> url;
-    // Check that cenrep exists and has some valid data
-    iModel.GetMyVideosCustomizationString( KCRVideoPlayerExtraItem2Url, url ); // ignore error code
-    if ( url.Length() == 0 )
-        {
-        TInt err = iModel.GetMyVideosCustomizationInt( KCRVideoPlayerExtraItem2Uid, value );
-        if ( err == KErrNone && value != 0 ) 
-            {
-            if ( AppExistsL( TUid::Uid( value ) ) )
-                {
-                iExtraItem2Exists = ETrue;
-                }
-            }
-        }
-    else
-        {
-        iExtraItem2Exists = ETrue;
-        }
-    
-    value = 0;
-    url.Zero();
-    iModel.GetMyVideosCustomizationString( KCRVideoPlayerExtraItem3Url, url ); // ignore error code
-    if ( url.Length() == 0 )
-        {
-        TInt err = iModel.GetMyVideosCustomizationInt( KCRVideoPlayerExtraItem3Uid, value );
-        if ( err == KErrNone && value != 0 )
-            {
-            if ( AppExistsL( TUid::Uid( value ) ) )
-                {
-                iExtraItem3Exists = ETrue;
-                }
-            }
-        }
-    else
-        {
-        iExtraItem3Exists = ETrue;
-        }
-    
-    }
-
-// -----------------------------------------------------------------------------
 // CVcxHgMyVideosCategoryModelHandler::~CVcxHgMyVideosCategoryModelHandler()
 // -----------------------------------------------------------------------------
 //
@@ -727,7 +668,7 @@
     {
     IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # UpdateCategoryListL() - Enter" );
     
-    MakeCategoryIdArrayL();
+    MakeCategoryIdArray();
     
     if ( iCategoryIdArray.Count() != iScroller.ItemCount() )
         {
@@ -817,12 +758,12 @@
     }
 
 // -----------------------------------------------------------------------------
-// CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArrayL()
+// CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArray()
 // -----------------------------------------------------------------------------
 //
-void CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArrayL()
+void CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArray()
     {
-    IPTVLOGSTRING_LOW_LEVEL("CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArrayL");
+    IPTVLOGSTRING_LOW_LEVEL("CVcxHgMyVideosCategoryModelHandler::MakeCategoryIdArray");
     
     iCategoryIdArray.Reset();    
     
@@ -835,7 +776,7 @@
     
     if ( error == KErrNone && value > EMyVideosListItemTypeEmpty )
         {
-        IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # MakeCategoryIdArrayL() Getting category items from cenrep" ); 
+        IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # MakeCategoryIdArray() Getting category items from cenrep" ); 
 
         for ( TInt i=KCRVideoPlayerItemLocation1; i<=KCRVideoPlayerItemLocation7; i++ )    
             {
@@ -872,17 +813,17 @@
                 
                 if ( AcceptCategory( categoryId ) )
                     {
-                    iCategoryIdArray.AppendL( categoryId );
+                    iCategoryIdArray.Append( categoryId );
                     }
                 }
             }
         }
     else
         {
-		iCategoryIdArray.AppendL( KCategoryIdLastWatched );
-		iCategoryIdArray.AppendL( KVcxMvcCategoryIdCaptured );	    
-        iCategoryIdArray.AppendL( KVcxMvcCategoryIdOther );  
-        iCategoryIdArray.AppendL( KCategoryIdExtraItem1 );
+		iCategoryIdArray.Append( KCategoryIdLastWatched );
+		iCategoryIdArray.Append( KVcxMvcCategoryIdCaptured );	    
+        iCategoryIdArray.Append( KVcxMvcCategoryIdOther );  
+        iCategoryIdArray.Append( KCategoryIdExtraItem1 );
         }
     }
 
@@ -900,20 +841,12 @@
         case KVcxMvcCategoryIdOther:
         case KCategoryIdLastWatched:
         case KCategoryIdExtraItem1:
+        case KCategoryIdExtraItem2:
+        case KCategoryIdExtraItem3:
             IPTVLOGSTRING2_LOW_LEVEL( 
                     "MPX My Videos UI # AcceptCategory() Accepted category: %d", aCategoryId );
             ret = ETrue;
             break;
-        case KCategoryIdExtraItem2:
-            ret = iExtraItem2Exists;
-            IPTVLOGSTRING2_LOW_LEVEL( 
-                    "MPX My Videos UI # AcceptCategory() extra item 2 accepted: %d", ret );
-            break;
-        case KCategoryIdExtraItem3:
-            ret = iExtraItem3Exists;
-            IPTVLOGSTRING2_LOW_LEVEL( 
-                    "MPX My Videos UI # AcceptCategory() extra item 3 accepted: %d", ret );
-            break;
         default:
             IPTVLOGSTRING2_LOW_LEVEL( 
                     "MPX My Videos UI # AcceptCategory() Unknown category: %d", aCategoryId );
@@ -1315,26 +1248,3 @@
         return EFalse;
         }
     }
-
-// ------------------------------------------------------------------------------
-// CVcxHgMyVideosVideoModelHandler::AppExistsL()
-// ------------------------------------------------------------------------------
-//
-TBool CVcxHgMyVideosCategoryModelHandler::AppExistsL( const TUid& aAppUid )
-    {
-    IPTVLOGSTRING_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::AppExistsL()" );
-    TBool retVal( EFalse );
-    RApaLsSession appArcSession;
-    User::LeaveIfError( appArcSession.Connect() );
-    CleanupClosePushL( appArcSession );
-    
-    TApaAppInfo appInfo;
-    TInt err = appArcSession.GetAppInfo( appInfo, aAppUid );
-    if ( err == KErrNone )
-        {
-        IPTVLOGSTRING_LOW_LEVEL( "CVcxHgMyVideosCategoryModelHandler::AppExistsL(): return TRUE" );
-        retVal = ETrue;
-        }
-    CleanupStack::PopAndDestroy( &appArcSession );
-    return retVal;
-    }
--- a/videocollection/hgmyvideos/src/vcxhgmyvideoscollectionclient.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideoscollectionclient.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -47,7 +47,6 @@
 const TInt KVcxHgEventLevelCategory = 2;
 const TInt KVcxHgEventLevelVideo    = 3;
 
-const TInt KVcxMpxLevelRoot       = 1;
 const TInt KVcxMpxLevelCategories = 2;
 const TInt KVcxMpxLevelVideos     = 3;
 
@@ -221,20 +220,9 @@
         }
     else if ( iCollectionLevel == KVcxMpxLevelVideos )
         {
-		TInt currentIndex = CategoryIndexL();
-		
-        if ( aIndex == currentIndex )
-            {
-            // OpenL() will return a list if there has been any changes.
-            // No reply if list is same as with previous OpenL().
-            iCollectionUtility->Collection().OpenL();
-            }
-        else
-            {
-            iCollectionUtility->Collection().BackL( );
-            iCollectionUtility->Collection().OpenL( aIndex );
-            iCollectionLevel = KErrNotFound;
-            }
+        // OpenL() will return a list if there has been any changes.
+        // No reply if list is same as with previous OpenL().
+        iCollectionUtility->Collection().OpenL();
         }
     else
         {
@@ -393,30 +381,16 @@
     IPTVLOGSTRING2_LOW_LEVEL( 
                 "CVcxHgMyVideosCollectionClient::PlayVideoL: Play video at collection index %d", aMpxItemId.iId1 );
     
-    CMPXCollectionPath* collectionPath = iCollectionUtility->Collection().PathL();
-    CleanupStack::PushL( collectionPath );
+    CMPXCollectionPath* path = CMPXCollectionPath::NewL();
+    CleanupStack::PushL(path);
     
-    if ( collectionPath->Levels() == KVcxMpxLevelVideos )
-        {
-        collectionPath->DeselectAll();
-        collectionPath->SelectL( aMpxItemId );
-        iCollectionUtility->Collection().OpenL( *collectionPath );
-	    }
-    else
-        {
-        CMPXCollectionPath* customPath = CMPXCollectionPath::NewL();
-        CleanupStack::PushL(customPath);
-        
-        customPath->AppendL( KVcxUidMyVideosMpxCollection );
-        customPath->AppendL( KVcxMvcCategoryIdAll );
-        customPath->AppendL( aMpxItemId );
-        customPath->SelectL( aMpxItemId );
-       
-        iCollectionUtility->Collection().OpenL( *customPath );
-        CleanupStack::PopAndDestroy( customPath );
-        }
-
-    CleanupStack::PopAndDestroy( collectionPath );
+    path->AppendL( KVcxUidMyVideosMpxCollection );
+    path->AppendL( KVcxMvcCategoryIdAll );
+    path->AppendL( aMpxItemId );
+    path->SelectL( aMpxItemId );
+    
+    iCollectionUtility->Collection().OpenL( *path );
+    CleanupStack::PopAndDestroy(path);
     }
 
 // -----------------------------------------------------------------------------
@@ -1166,24 +1140,6 @@
         }
     }
 
-// -----------------------------------------------------------------------------
-// CVcxHgMyVideosCollectionClient::CategoryIndexL()
-// -----------------------------------------------------------------------------
-//
-TInt CVcxHgMyVideosCollectionClient::CategoryIndexL()
-    {
-    CMPXCollectionPath* path = iCollectionUtility->Collection().PathL();
-    CleanupStack::PushL( path );
-    TInt index ( -1 );
-    if ( path->Levels() > KVcxMpxLevelCategories )
-        {
-        index = path->Index( KVcxMpxLevelRoot );
-        }
-    CleanupStack::PopAndDestroy( path );
-    
-    return index;
-    }
-
 #if defined(_DEBUG) && IPTV_LOGGING_METHOD != 0
 // -----------------------------------------------------------------------------
 // CVcxHgMyVideosCollectionClient::DebugPrintVideoListL()
--- a/videocollection/hgmyvideos/src/vcxhgmyvideosthumbnailmanager.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosthumbnailmanager.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -114,18 +114,6 @@
     }
 
 // -----------------------------------------------------------------------------
-// CVcxHgMyVideosThumbnailManager::Reset()
-// -----------------------------------------------------------------------------
-//
-void CVcxHgMyVideosThumbnailManager::Reset( CThumbnailObjectSource& aSource )
-    {
-    if ( iTnManager )
-        {
-        iTnManager->DeleteThumbnails( aSource );
-        }
-    }
-
-// -----------------------------------------------------------------------------
 // CVcxHgMyVideosThumbnailManager::AddObserverL()
 // -----------------------------------------------------------------------------
 //
--- a/videocollection/hgmyvideos/src/vcxhgmyvideosvideodataupdater.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosvideodataupdater.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -113,7 +113,8 @@
     iModel( aModel ),
     iScroller( aScroller ),
     iVideoArray( aVideoArray ),
-    iVideosIndicator( aVideosIndicator )
+    iVideosIndicator( aVideosIndicator ),
+    iPaused( EFalse )
     {
     CActiveScheduler::Add( this );
     }
--- a/videocollection/hgmyvideos/src/vcxhgmyvideosvideomodelhandler.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosvideomodelhandler.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -41,7 +41,6 @@
 #include "vcxhgmyvideosvideomodelhandler.h"
 #include "vcxhgmyvideosvideolistimpl.h"
 #include "vcxhgmyvideosvideodataupdater.h"
-#include "vcxhgmyvideosthumbnailmanager.h"
 
 #include "vcxhgmyvideos.hrh"
 #include "vcxhgmyvideoslistbase.h"
@@ -604,7 +603,6 @@
         TMPXItemId mpxItemId = media->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId );
         SetVideoLastWatchedL( *media );
         ClearNewVideoFlagL( *media );
-        ResetEmptyDrmThumnailL( *media, aIndex );
 		IPTVLOGSTRING3_LOW_LEVEL( "CVcxHgMyVideosVideoModelHandler::PlayVideoL() aIndex=%d mpxItemId=%d", aIndex, (TInt) mpxItemId );
         iModel.CollectionClient().PlayVideoL( mpxItemId );        
         }
@@ -1419,29 +1417,3 @@
 		    aMedia.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ), flags );   
         }    
     }
-
-// -----------------------------------------------------------------------------
-// CVcxHgMyVideosVideoModelHandler::ResetEmptyDrmThumnailL()
-// -----------------------------------------------------------------------------
-//
-void CVcxHgMyVideosVideoModelHandler::ResetEmptyDrmThumnailL( CMPXMedia& aMedia, TInt aIndex )
-    {
-    CHgItem& item = iScroller.ItemL( aIndex );
-    
-    if ( !item.Icon() )
-        {
-        if ( aMedia.IsSupported( KMPXMediaGeneralFlags ) && 
-             aMedia.ValueTObjectL<TUint32>( KMPXMediaGeneralFlags ) 
-                                                     == EVcxMyVideosVideoDrmProtected );
-            {
-            CThumbnailObjectSource* source = 
-               CThumbnailObjectSource::NewLC( aMedia.ValueText( KMPXMediaGeneralUri ), NULL );
-            
-            // We cannot know at this phase, do the user get the license 
-            // when playing the video, so we have to reset this every time.
-            iModel.ThumbnailManager().Reset( *source );
-            
-            CleanupStack::PopAndDestroy( source );
-            }
-        }
-    }
--- a/videocollection/mpxmyvideoscollection/inc/vcxmyvideoscategories.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideoscategories.h	Wed Oct 13 14:34:36 2010 +0300
@@ -216,12 +216,9 @@
         *                             calling function already has it available.
         * @param aVideosIncrements    How many new items were added to each category.
         * @param aNewVideosIncrements How many videos with new flag were added to each category.
-        * @param aForceUpdate         If set, the modify event is raised even though the count
-        *                             has not changed. ETrue, if update is to be forced.
         */
         void UpdateVideosCountL( CMPXMediaArray& aCategoryArray,
-                RArray<TInt>& aVideosIncrements, RArray<TInt>& aNewVideosIncrements,
-                TBool aForceUpdate );
+                RArray<TInt>& aVideosIncrements, RArray<TInt>& aNewVideosIncrements );
 
         /**
         * Increases/decreases aCountAttribute in aCategory. Adds event to
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideosasyncfileoperations.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosasyncfileoperations.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -602,20 +602,9 @@
         if ( iIsMoveOperation )
             {
             MPX_DEBUG2("CVcxMyVideosAsyncFileOperations:: move operation failed %d", aErr );
-
-            if ( ! BaflUtils::FileExists( iCollection.iFs, iSourcePath ) )
-                {
-                MPX_DEBUG1("CVcxMyVideosAsyncFileOperations:: mmc removed, deleting the old media" );
-                iCollection.iMyVideosMdsDb->RemoveVideo( iMediaForMoveOp->ValueTObjectL<TMPXItemId>(
-                        KMPXMediaGeneralId ).iId1 );
-                }
-            else
-                {
-                MPX_DEBUG1("CVcxMyVideosAsyncFileOperations:: setting media path back in MDS" );
-                iMediaForMoveOp->SetTextValueL( KMPXMediaGeneralUri, iSourcePath );
-                iCollection.SetVideoL( *iMediaForMoveOp );
-                }
-
+            MPX_DEBUG1("CVcxMyVideosAsyncFileOperations:: setting media path back in MDS" );
+            iMediaForMoveOp->SetTextValueL( KMPXMediaGeneralUri, iSourcePath );
+            iCollection.SetVideoL( *iMediaForMoveOp );
             MPX_DEBUG1("CVcxMyVideosAsyncFileOperations:: deleting target file");
             TInt delErr = BaflUtils::DeleteFile( iCollection.iFs, iTargetPath );
             if ( delErr != KErrNone )
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideoscategories.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideoscategories.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -256,8 +256,7 @@
         }
 
     // Update videos counts
-    UpdateVideosCountL( *categoryArray, videosIncrements,
-                        newVideosIncrements, !aNewItemsStartIndex );
+    UpdateVideosCountL( *categoryArray, videosIncrements, newVideosIncrements );
 
     CleanupStack::PopAndDestroy( &newVideosIncrements ); // <-1
     CleanupStack::PopAndDestroy( &videosIncrements ); // <-1
@@ -268,8 +267,7 @@
 // ----------------------------------------------------------------------------
 //
 void CVcxMyVideosCategories::UpdateVideosCountL( CMPXMediaArray& aCategoryArray,
-    RArray<TInt>& aVideosIncrements, RArray<TInt>& aNewVideosIncrements,
-    TBool aForceUpdate  )
+    RArray<TInt>& aVideosIncrements, RArray<TInt>& aNewVideosIncrements )
     {
     TBool modified = EFalse;
     TInt categoryCount = aCategoryArray.Count();
@@ -277,7 +275,7 @@
     
     for ( TInt i = 0; i < categoryCount; i++ )
         {
-        if ( aForceUpdate || aVideosIncrements[i] != 0 )
+        if ( aVideosIncrements[i] != 0 )
             {
             category = aCategoryArray.AtL( i );
 
@@ -289,7 +287,7 @@
             }
 
         //codescanner warning: aNewVideosIncrements count is same as aCategoryArray count, so the range is checked
-        if (  aForceUpdate || aNewVideosIncrements[i] != 0 )
+        if ( aNewVideosIncrements[i] != 0 )
             {
             category = aCategoryArray.AtL( i );
 
@@ -316,9 +314,10 @@
     if ( aIncrement != 0 )
         {
         AddToTUint32AttributeL( aCategory, aIncrement, aCountAttribute );
+                
+        iCollection.iMessageList->AddEventL( aCategory.ValueTObjectL<TMPXItemId>(
+                KMPXMediaGeneralId ), EMPXItemModified, aEventInfo );
         }
-    iCollection.iMessageList->AddEventL( aCategory.ValueTObjectL<TMPXItemId>(
-            KMPXMediaGeneralId ), EMPXItemModified, aEventInfo );
     }
 
 // ----------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/bwins/ut_collectionplugintestu.def	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/conf/ut_collectionplugintest.cfg	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,808 @@
+[Define]
+CollectionIdMyVideos "0"
+
+// STUBS
+EActiveTask 1
+EAlbums 2
+EAsyncFileOperations 3
+ECategories 4
+EMDSDB 5
+EMessageList 6
+EOpenHandler 7
+EVideoCache 8
+
+KInvalidId -100
+
+KSelectAll -2
+
+SYNC 1
+ASYNC 0
+
+KVcxCommandMyVideosStartDownload 							0 // obsolete?
+KVcxCommandMyVideosCancelDownload 						1 // obsolete?
+KVcxCommandMyVideosResumeDownload 						2 // obsolete?
+KVcxCommandMyVideosPauseDownload 							3 // obsolete?
+KVcxCommandMyVideosGetMediaFullDetailsByMpxId	4 // async
+KVcxCommandMyVideosGetMediasByMpxId 					5 // async
+KVcxCommandMyVideosMove 											6 // async
+KVcxCommandMyVideosCopy 											7 // async
+KVcxCommandMyVideosDelete 										8 // async
+KVcxCommandMyVideosAddToAlbum 								9 // async
+KVcxCommandMyVideosRemoveFromAlbum 						10 // async
+KVcxCommandMyVideosAddAlbum 									11 // async & sync
+KVcxCommandMyVideosRemoveAlbums 							12 // async
+KVcxCommandMyVideosCancelMoveOrCopy 					13 // sync
+KVcxCommandMyVideosCancelDelete 							14 // sync
+KVcxMessageMyVideosGetMediasByMpxIdResp				15 // async
+KVcxMessageMyVideosItemsAppended 							16 // event
+KVcxMessageMyVideosListComplete 							17 // event
+KVcxMessageMyVideosMoveOrCopyStarted 					18 // event
+KVcxMessageMyVideosDeleteStarted 							19 // event
+KVcxMessageMyVideosMoveResp 									20 // event 
+KVcxMessageMyVideosCopyResp 									21 // event
+KVcxMessageMyVideosDeleteResp 								22 // event
+KVcxMessageMyVideosMessageArray 							23
+
+KVcxCommandIdMyVideos "20016BA0"
+KMPXCommandIdCollectionSet "10282963"
+KMPXCommandIdCollectionRemoveMedia "10282949"
+KMPXCommandIdCollectionAdd "10282962"
+
+EMPXItemDeleted 1
+EMPXItemInserted 2
+EMPXItemModified 3
+
+// special variables used with vcxmyvideoscache_stub
+KMPXIdLeave 999
+KMPXIdNotFound 998
+KMPXIdChanged 997
+
+EMediaTypeVideo 0
+EMediaTypeCategory 1
+EMediaTypeAlbum 2
+
+EMediaGeneralId 1
+EMediaGeneralTitle 2
+
+[Enddefine]
+
+[Test]
+title OpenL CollectionIdMyVideos
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+delete CPTest
+[Endtest]
+
+[Test]
+title MediaL no medias
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+CPTest InsertToPath 1 EMediaTypeVideo
+CPTest InsertToPath 2 EMediaTypeVideo
+CPTest SelectPath 1
+CPTest SelectAttributes EMediaGeneralId
+CPTest MediaL
+delete CPTest
+[Endtest]
+
+[Test]
+title MediaL select one, video in cache
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 1 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest SetMediaAttribute EMediaGeneralId 2 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest InsertToPath 1 EMediaTypeVideo
+CPTest InsertToPath 2 EMediaTypeVideo
+CPTest SelectPath 1
+CPTest SelectAttributes EMediaGeneralId
+CPTest MediaL
+delete CPTest
+[Endtest]
+
+[Test]
+title MediaL select one, video not in cache
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+CPTest InsertToPath KMPXIdNotFound EMediaTypeVideo
+CPTest SelectPathId KMPXIdNotFound
+CPTest SelectAttributes EMediaGeneralId
+CPTest MediaL
+delete CPTest
+[Endtest]
+
+[Test]
+title MediaL select one, all attributes
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 1 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest SetMediaAttribute EMediaGeneralId 2 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest InsertToPath 1 EMediaTypeVideo
+CPTest InsertToPath 2 EMediaTypeVideo
+CPTest SelectPath 1
+CPTest SelectAttributes -1
+CPTest MediaL
+delete CPTest
+[Endtest]
+
+[Test]
+title MediaL select one, no video in mds
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId KMPXIdNotFound EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest InsertToPath KMPXIdNotFound EMediaTypeVideo
+CPTest SelectPathId KMPXIdNotFound
+CPTest SelectAttributes -1
+CPTest MediaL
+delete CPTest
+[Endtest]
+
+[Test]
+title MediaL select none
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+CPTest SelectPath -1
+CPTest SelectAttributes EMediaGeneralId
+CPTest MediaL
+delete CPTest
+[Endtest]
+
+[Test]
+title MediaL select all
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 1 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 2 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest InsertToPath 1 EMediaTypeVideo
+CPTest InsertToPath 2 EMediaTypeVideo
+CPTest SelectPath KSelectAll
+CPTest SelectAttributes EMediaGeneralId
+CPTest MediaL
+delete CPTest
+[Endtest]
+
+[Test]
+title MediaL select all, all attributes
+create ut_collectionplugintest CPTest
+CPTest OpenL CollectionIdMyVideos
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 1 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 2 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest InsertToPath 1 EMediaTypeVideo
+CPTest InsertToPath 2 EMediaTypeVideo
+CPTest SelectPath KSelectAll
+CPTest SelectAttributes -1
+CPTest MediaL
+delete CPTest
+[Endtest]
+
+[Test]
+title CancelRequest
+create ut_collectionplugintest CPTest
+CPTest CancelRequest
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL no cmd
+create ut_collectionplugintest CPTest
+allownextresult -6
+CPTest CommandL SYNC
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL invalid cmd
+create ut_collectionplugintest CPTest
+allownextresult -5
+CPTest CommandL SYNC "000001"
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL no sync value
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL -1 KMPXCommandIdCollectionAdd 
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL mv cmd, not supported
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 1 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+CPTest CreateNewCmd ASYNC KVcxCommandIdMyVideos -1
+CPTest SetNewCmd
+allownextresult -6
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test] 
+title CommandL get full details
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 1 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test] 
+title CommandL get full details, no id
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+allownextresult -6
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test] 
+title CommandL get full details, no video found
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId KInvalidId EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+allownextresult -1
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL get medias
+create ut_collectionplugintest CPTest
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediasByMpxId 1 2 3
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediasByMpxId
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL get medias, no ids
+create ut_collectionplugintest CPTest
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediasByMpxId -1
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosGetMediasByMpxId
+allownextresult -6
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL move
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosMove
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosMove
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL move, asyncfileoperations deleted
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosMove
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosMove
+CPTest DeleteStub EAsyncFileOperations
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL copy
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosCopy
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosCopy
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL copy, asyncfileoperations deleted
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosCopy
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosCopy
+CPTest DeleteStub EAsyncFileOperations
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL delete
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosDelete
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosDelete
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL delete, asyncfileoperations deleted
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosDelete
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosDelete
+CPTest DeleteStub EAsyncFileOperations
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL add album sync
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeAlbum 
+CPTest SetMediaAttribute EMediaGeneralTitle "Album1"
+CPTest CommandL SYNC KVcxCommandIdMyVideos KVcxCommandMyVideosAddAlbum
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL add album async
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeAlbum
+CPTest SetMediaAttribute EMediaGeneralTitle "Album1"
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosAddAlbum
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosAddAlbum
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL add album sync, albums deleted
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeAlbum 
+CPTest SetMediaAttribute EMediaGeneralTitle "Album1"
+CPTest DeleteStub EAlbums
+CPTest CommandL SYNC KVcxCommandIdMyVideos KVcxCommandMyVideosAddAlbum
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL add album async, albums deleted
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeAlbum
+CPTest SetMediaAttribute EMediaGeneralTitle "Album1"
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosAddAlbum
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosAddAlbum
+CPTest DeleteStub EAlbums
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL remove albums
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeAlbum
+CPTest SetMediaAttribute EMediaGeneralTitle "Album1"
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosRemoveAlbums
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosRemoveAlbums
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL add to album
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeAlbum
+CPTest SetMediaAttribute EMediaGeneralTitle "Album1"
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosAddToAlbum
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosAddToAlbum
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL remove from album
+create ut_collectionplugintest CPTest
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosRemoveFromAlbum
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosRemoveFromAlbum
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL cancel move or copy SYNC
+create ut_collectionplugintest CPTest
+CPTest CommandL SYNC KVcxCommandIdMyVideos KVcxCommandMyVideosCancelMoveOrCopy
+CPTest CheckCurrentCmd -1
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL cancel move or copy ASYNC
+create ut_collectionplugintest CPTest
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosCancelMoveOrCopy
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosCancelMoveOrCopy
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL cancel delete SYNC
+create ut_collectionplugintest CPTest
+CPTest CommandL SYNC KVcxCommandIdMyVideos KVcxCommandMyVideosCancelDelete
+CPTest CheckCurrentCmd -1
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL cancel delete ASYNC
+create ut_collectionplugintest CPTest
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosCancelDelete
+CPTest CheckCurrentCmd KVcxCommandIdMyVideos KVcxCommandMyVideosCancelDelete
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL remove media
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia 
+CPTest SetMediaAttribute EMediaGeneralId 1 EMediaTypeVideo
+CPTest CommandL ASYNC KMPXCommandIdCollectionRemoveMedia
+CPTest CheckCurrentCmd KMPXCommandIdCollectionRemoveMedia
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL KMPXCommandIdCollectionAdd
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL SYNC KMPXCommandIdCollectionAdd
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL KMPXCommandIdCollectionSet video SYNC
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL SYNC KMPXCommandIdCollectionSet
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL KMPXCommandIdCollectionSet album SYNC
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeAlbum
+CPTest CommandL SYNC KMPXCommandIdCollectionSet
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL KMPXCommandIdCollectionSet invalid SYNC
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 -1
+allownextresult -1
+CPTest CommandL SYNC KMPXCommandIdCollectionSet
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL KMPXCommandIdCollectionSet video ASYNC
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeVideo
+CPTest CommandL ASYNC KMPXCommandIdCollectionSet
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL KMPXCommandIdCollectionSet album ASYNC
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 EMediaTypeAlbum
+CPTest CommandL ASYNC KMPXCommandIdCollectionSet
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title CommandL KMPXCommandIdCollectionSet invalid ASYNC
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 0 -1
+CPTest CommandL ASYNC KMPXCommandIdCollectionSet
+CPTest HandleStepL
+delete CPTest
+[Endtest]
+
+[Test]
+title FindAllL
+create ut_collectionplugintest CPTest
+CPTest FindAllL
+delete CPTest
+[Endtest]
+
+[Test]
+title FindAllSyncL
+create ut_collectionplugintest CPTest
+CPTest FindAllSyncL
+delete CPTest
+[Endtest]
+
+[Test]
+title GetCapabilities
+create ut_collectionplugintest CPTest
+CPTest GetCapabilities
+delete CPTest
+[Endtest]
+
+[Test]
+title AddL
+create ut_collectionplugintest CPTest
+CPTest AddL
+delete CPTest
+[Endtest]
+
+[Test]
+title RemoveL
+create ut_collectionplugintest CPTest
+CPTest RemoveL
+delete CPTest
+[Endtest]
+
+[Test]
+title SetL
+create ut_collectionplugintest CPTest
+CPTest SetL
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleOperationCompleted
+create ut_collectionplugintest CPTest
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosMove
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosCopy
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosDelete
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleOperationCompleted asyncfileoperations deleted
+create ut_collectionplugintest CPTest
+CPTest DeleteStub EAsyncFileOperations
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosMove
+CPTest DeleteStub EAsyncFileOperations
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosCopy
+CPTest DeleteStub EAsyncFileOperations
+CPTest CommandL ASYNC KVcxCommandIdMyVideos KVcxCommandMyVideosDelete
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemDeleted
+create ut_collectionplugintest CPTest
+CPTest HandleMyVideosDbEvent EMPXItemDeleted 0 1
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemDeleted, categories deleted
+create ut_collectionplugintest CPTest
+CPTest DeleteStub ECategories
+CPTest HandleMyVideosDbEvent EMPXItemDeleted 0 1
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemDeleted messagelist leaves
+create ut_collectionplugintest CPTest
+CPTest SetVideoListFetching 0
+CPTest HandleMyVideosDbEvent EMPXItemDeleted KMPXIdLeave 2
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemInserted
+create ut_collectionplugintest CPTest
+CPTest SetVideoListFetching 0
+CPTest HandleMyVideosDbEvent EMPXItemInserted 1 2
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemInserted, list fetching
+create ut_collectionplugintest CPTest
+CPTest SetVideoListFetching 1
+CPTest HandleMyVideosDbEvent EMPXItemInserted 1 2
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemInserted, cancel cache list fetching
+create ut_collectionplugintest CPTest
+CPTest CancelCacheListFetching 1
+CPTest HandleMyVideosDbEvent EMPXItemInserted 1 2
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemInserted messagelist leaves
+create ut_collectionplugintest CPTest
+CPTest SetVideoListFetching 0
+CPTest HandleMyVideosDbEvent EMPXItemInserted KMPXIdLeave 2
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemModified
+create ut_collectionplugintest CPTest
+CPTest HandleMyVideosDbEvent EMPXItemModified 2 3
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemModified, invalid video
+create ut_collectionplugintest CPTest
+CPTest HandleMyVideosDbEvent EMPXItemModified KInvalidId
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemModified, invalid and valid videos
+create ut_collectionplugintest CPTest
+CPTest HandleMyVideosDbEvent EMPXItemModified 1 KInvalidId 2
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleMyVideosDbEvent EMPXItemModified messagelist leaves
+create ut_collectionplugintest CPTest
+CPTest SetVideoListFetching 0
+CPTest HandleMyVideosDbEvent EMPXItemModified KMPXIdLeave 2
+delete CPTest
+[Endtest]
+
+[Test]
+title AddVideoToMdsAndCacheL
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia EMediaGeneralId 1 EMediaTypeVideo
+CPTest AddVideoToMdsAndCacheL
+delete CPTest
+[Endtest]
+
+[Test]
+title SetVideoL id found
+create ut_collectionplugintest CPTest
+CPTest CreateNewMedia
+CPTest SetMediaAttribute EMediaGeneralId 1 EMediaTypeVideo
+CPTest AddMediaToCache
+CPTest SetVideoL 1
+delete CPTest
+[Endtest]
+
+[Test]
+title SetVideoL leave
+create ut_collectionplugintest CPTest
+allownextresult -20
+CPTest SetVideoL KMPXIdLeave
+delete CPTest
+[Endtest]
+
+[Test]
+title SetVideoL id not found
+create ut_collectionplugintest CPTest
+CPTest SetVideoL KMPXIdNotFound
+delete CPTest
+[Endtest]
+
+[Test]
+title SetVideoL item changed
+create ut_collectionplugintest CPTest
+CPTest SetVideoL KMPXIdChanged
+delete CPTest
+[Endtest]
+
+[Test]
+title SendMyVideosMessageL
+create ut_collectionplugintest CPTest
+CPTest SendMyVideosMessageL 0 KVcxCommandMyVideosGetMediaFullDetailsByMpxId
+delete CPTest
+[Endtest]
+
+[Test]
+title SendMyVideosMessageL no cmd
+create ut_collectionplugintest CPTest
+CPTest SendMyVideosMessageL 0
+delete CPTest
+[Endtest]
+
+[Test]
+title SendMessages
+create ut_collectionplugintest CPTest
+CPTest SendMessages
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleObjectPresentNotification
+create ut_collectionplugintest CPTest
+CPTest HandleObjectPresentNotification
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleObjectPresentNotification, cache leaves on reset
+create ut_collectionplugintest CPTest
+CPTest HandleObjectPresentNotification 1
+delete CPTest
+[Endtest]
+
+[Test]
+title NotifyNewVideosCountDecreasedL
+create ut_collectionplugintest CPTest
+CPTest NotifyNewVideosCountDecreasedL
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleCreateVideoListResp list incomplete
+create ut_collectionplugintest CPTest
+CPTest HandleCreateVideoListResp 0
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleCreateVideoListResp list complete
+create ut_collectionplugintest CPTest
+CPTest HandleCreateVideoListResp 1
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleCreateVideoListResp list complete, leaves
+create ut_collectionplugintest CPTest
+CPTest HandleCreateVideoListResp 1 -1
+delete CPTest
+[Endtest]
+
+[Test]
+title HandleCreateVideoListResp list incomplete, leaves
+create ut_collectionplugintest CPTest
+CPTest HandleCreateVideoListResp 0 -1
+delete CPTest
+[Endtest]
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/eabi/ut_collectionplugintestu.def	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,5 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+	_ZTI22CVcxMdsShutdownMonitor @ 2 NONAME
+	_ZTV22CVcxMdsShutdownMonitor @ 3 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/group/bld.inf	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* 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:  Build information file for Collection Plugin unit test module
+*
+*/
+
+// Version : %version: 1 %
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+PRJ_TESTEXPORTS
+../conf/ut_collectionplugintest.cfg	/epoc32/winscw/c/testframework/ut_collectionplugintest.cfg
+../init/testframework.ini		/epoc32/winscw/c/testframework/testframework.ini
+
+
+
+PRJ_MMPFILES
+PRJ_TESTMMPFILES
+ut_collectionplugintest.mmp
+
+
+
+//  End of File
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/group/ut_collectionplugintest.mmp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2008 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:  Project definition file for project ut_collectionplugintest
+*
+*/
+
+// Version : %version: 1 %
+
+
+
+#include <platform_paths.hrh>
+
+EPOCALLOWDLLDATA
+
+TARGET          ut_collectionplugintest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+
+DEFFILE         ut_collectionplugintest.def
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../../inc
+USERINCLUDE     ../../../../inc
+USERINCLUDE     ../../../../../inc
+
+SOURCEPATH      ../src
+
+SOURCE          ut_collectionplugintest.cpp
+SOURCE          ut_collectionplugintestBlocks.cpp
+SOURCE          vcxmyvideosasyncfileoperations_stub.cpp
+SOURCE          vcxmyvideoscategories_stub.cpp
+SOURCE          vcxmyvideosmdsdb_stub.cpp
+SOURCE          vcxmyvideosmessagelist_stub.cpp
+SOURCE          vcxmyvideosopenhandler_stub.cpp
+SOURCE          vcxmyvideosvideocache_stub.cpp
+SOURCE          vcxmyvideoscollectionutil_stub.cpp
+SOURCE          vcxmyvideosactivetask_stub.cpp
+SOURCE			vcxmyvideosalbums_stub.cpp
+SOURCE 			vcxmyvideosalbum_stub.cpp 
+SOURCE 			vcxmyvideosmdsalbums_stub.cpp
+
+SOURCEPATH      ../../../src
+SOURCE			vcxmyvideoscollectionplugin.cpp
+
+APP_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE   ../inc/
+SYSTEMINCLUDE   /epoc32/include/ecom
+
+LIBRARY         ws32.lib
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib
+LIBRARY         bafl.lib
+LIBRARY         efsrv.lib
+LIBRARY         Flogger.lib
+LIBRARY         mpxcommon.lib
+LIBRARY         ecom.lib
+LIBRARY         estor.lib
+LIBRARY         mdeclient.lib
+
+LANG            SC
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/group/ut_collectionplugintest.pkg	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,42 @@
+;
+; 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: Package file for Video Playback User Input Handler STIF Unit Test component
+;
+; Version : %version: %
+;
+; Installation file for STIF Video Playback User Input Handler in Platform Security Environments
+;
+
+; Languages
+&EN
+
+; Package header
+#{"MyVideos Collection Plugin Unit Test"}, (0x101FB3E3), 1, 0, 1, TYPE=SA, RU
+
+; *Unique (Non-Localized) Vendor name
+; This is used in combination with signing to prevent the unauthroized
+; upgrade of a a package by someone other than the rightful vendor.
+:"Nokia"
+
+; Series60 product id for S60 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia Test EN"}
+
+; Install files
+"/epoc32/release/armv5/udeb/ut_collectionplugintest.dll" - "c:/sys/bin/ut_collectionplugintest.dll"
+
+"../conf/ut_collectionplugintest.cfg" - "c:/testframework/ut_collectionplugintest.cfg"
+"../init/testframework.ini" - "c:/testframework/testframework.ini"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/mpxlog.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,221 @@
+/*
+* ============================================================================
+*  Name        : mpxlog.h
+*  Part of     : MPX / Common framework
+*  Description : Debug print macros
+*  Version     : %version: 1 % 
+*
+*  Copyright ?2006 Nokia.  All rights reserved.
+*  This material, including documentation and any related computer
+*  programs, is protected by copyright controlled by Nokia.  All
+*  rights are reserved.  Copying, including reproducing, storing,
+*  adapting or translating, any or all of this material requires the
+*  prior written consent of Nokia.  This material also contains
+*  confidential information which may not be disclosed to others
+*  without the prior written consent of Nokia.
+* ============================================================================
+* Template version: 4.1
+*/
+
+// !! README README README !! 
+
+// This is a modified version for Video Center of the original mpxlog.h file.
+// Use enable.cmd to take this version into use and disable.cmd to start
+// using the original. Notice that you have to compile sw again to get trace
+// changes active.
+
+// !! README README README !! 
+
+#ifndef MPXLOG_H
+#define MPXLOG_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32svr.h>
+
+#ifdef _DEBUG
+#define MPX_PERFORMANCE_LOG
+#endif
+
+// MACROS
+#ifdef _DEBUG
+
+// SELECT LOG TYPE FROM HERE
+// 0 = RDebug
+// 1 = file logging
+// 2 = no logging
+#define LOGTYPE 0
+
+
+#if LOGTYPE == 0
+
+#define MPX_DEBUG1(s)               { TBuf<250> buf; buf.Append(_L("20016B96: ")); buf.Append(_L(#s)); RDebug::Print( buf ); }
+#define MPX_DEBUG2(s, a)            { TBuf<250> buf; buf.Append(_L("20016B96: ")); buf.Append(_L(#s)); RDebug::Print( buf, a ); }
+#define MPX_DEBUG3(s, a, b)         { TBuf<250> buf; buf.Append(_L("20016B96: ")); buf.Append(_L(#s)); RDebug::Print( buf, a, b ); }
+#define MPX_DEBUG4(s, a, b, c)      { TBuf<250> buf; buf.Append(_L("20016B96: ")); buf.Append(_L(#s)); RDebug::Print( buf, a, b, c ); }
+#define MPX_DEBUG5(s, a, b, c, d)   { TBuf<250> buf; buf.Append(_L("20016B96: ")); buf.Append(_L(#s)); RDebug::Print( buf, a, b, c, d ); }
+
+#define MPX_FUNC(fn)                TFunctionTrace _s(_L(fn));
+#define MPX_FUNC_EX(fn)             TFunctionTrace _s(_L(fn), this);
+
+#endif
+
+#if LOGTYPE == 1
+
+#include <flogger.h>
+
+_LIT(KIPTVLogFolder2,"IPTV");
+_LIT(KIPTVLogFile2,"IPTVLOG.TXT");
+
+#define MPX_DEBUG1(AAA)                  { _LIT(tempIPTVLogDes,AAA); RFileLogger::Write(KIPTVLogFolder2(),KIPTVLogFile2(),EFileLoggingModeAppend,tempIPTVLogDes()); }
+#define MPX_DEBUG2(AAA,BBB)              { _LIT(tempIPTVLogDes,AAA); RFileLogger::WriteFormat(KIPTVLogFolder2(),KIPTVLogFile2(),EFileLoggingModeAppend,TRefByValue<const TDesC>(tempIPTVLogDes()),BBB); }
+#define MPX_DEBUG3(AAA,BBB,CCC)          { _LIT(tempIPTVLogDes,AAA); RFileLogger::WriteFormat(KIPTVLogFolder2(),KIPTVLogFile2(),EFileLoggingModeAppend,TRefByValue<const TDesC>(tempIPTVLogDes()),BBB,CCC); }
+#define MPX_DEBUG4(AAA,BBB,CCC,DDD)      { _LIT(tempIPTVLogDes,AAA); RFileLogger::WriteFormat(KIPTVLogFolder2(),KIPTVLogFile2(),EFileLoggingModeAppend,TRefByValue<const TDesC>(tempIPTVLogDes()),BBB,CCC,DDD); }
+#define MPX_DEBUG5(AAA,BBB,CCC,DDD,EEE)  { _LIT(tempIPTVLogDes,AAA); RFileLogger::WriteFormat(KIPTVLogFolder2(),KIPTVLogFile2(),EFileLoggingModeAppend,TRefByValue<const TDesC>(tempIPTVLogDes()),BBB,CCC,DDD,EEE); }
+
+#define MPX_FUNC(fn)                TFunctionTrace _s(_L(fn));
+#define MPX_FUNC_EX(fn)             TFunctionTrace _s(_L(fn), this);
+
+#endif
+
+#if LOGTYPE == 2
+
+#define MPX_DEBUG1(AAA)
+#define MPX_DEBUG2(AAA,BBB)
+#define MPX_DEBUG3(AAA,BBB,CCC)
+#define MPX_DEBUG4(AAA,BBB,CCC,DDD)
+#define MPX_DEBUG5(AAA,BBB,CCC,DDD,EEE)
+
+#define MPX_FUNC(fn)
+#define MPX_FUNC_EX(fn)
+
+#endif
+
+
+class TFunctionTrace
+    {
+    public:
+        TFunctionTrace(TRefByValue<const TDesC> aName, TAny* aThis=NULL):
+            iStr(aName), iThis(aThis)
+            {
+            if ( iThis )
+                {
+                MPX_DEBUG3("-->%S, 0x%08x",&iStr, iThis);
+                }
+            else
+                {
+                MPX_DEBUG2("-->%S",&iStr);
+                }
+            }
+        ~TFunctionTrace()
+            {
+            if ( iThis )
+                {
+                MPX_DEBUG3("<--%S, 0x%08x",&iStr, iThis);
+                }
+            else
+                {
+                MPX_DEBUG2("<--%S",&iStr);
+                }
+            }
+    private:
+        TPtrC iStr;
+        TAny* iThis;
+    };
+
+// print out (index, id) for each level and the first 15 ids at top level
+#define MPX_DEBUG_PATH(aPath) { \
+    TInt dlevels = (aPath).Levels();\
+    TInt dcount = (aPath).Count();\
+    MPX_DEBUG3("Collection Path debug: levels=  %d, count = %d", dlevels, dcount);\
+    for (TInt i=0; i<dlevels;++i)\
+        {\
+        MPX_DEBUG4("Collection Path debug: Level[%d] = (index %d, id 0x%08x)", i, (aPath).Index(i), (aPath).Id(i).iId1);\
+        }\
+    if (dcount > 0)\
+        {\
+        TInt index = (aPath).Index();\
+        MPX_DEBUG2("Collection Path debug current index %d", index);\
+        if (index>=0 && index<dcount)\
+            {\
+            CMPXCollectionPath* dpath = const_cast<CMPXCollectionPath*>(&aPath);\
+            dpath->SetToFirst();\
+            TInt ditem(0);\
+            do\
+                {\
+                MPX_DEBUG3("Collection Path debug top level: item %d = id 0x%08x", ditem, dpath->Id().iId1);\
+                } while (++(*dpath) && ++ditem < 15 );\
+            dpath->Set(index);\
+            }\
+        else\
+            {\
+            MPX_DEBUG1("Collection Path debug: Invalid current index");\
+            }\
+        }\
+    }
+
+#define MPX_DEBUG_THREAD(ss) { \
+    RProcess process; \
+    TFullName fullName; \
+    process.FullName( fullName ); \
+    RThread thisThread; \
+    _LIT(_ss, ss); \
+    MPX_DEBUG5("%S: process=%S, thread=%d, this=0x%08x", &_ss, &fullName, (TUint)thisThread.Id(), this); \
+    }
+
+#define MPX_S(a) _S(a)
+#else
+#define MPX_DEBUG1(s)
+#define MPX_DEBUG2(s, a)
+#define MPX_DEBUG3(s, a, b)
+#define MPX_DEBUG4(s, a, b, c)
+#define MPX_DEBUG5(s, a, b, c, d)
+#define MPX_FUNC(s)
+#define MPX_FUNC_EX(fn)
+#define MPX_DEBUG_PATH(aPath)
+#define MPX_DEBUG_THREAD(ss)
+// Copy constant _KMPXErrorInfo and Macros MPX_S and MPX_ERROR_LOG from
+// _DEBUG section if intend to log error in release build.
+#define MPX_ERROR_LOG(aErr)
+#endif
+
+#ifdef MPX_PERFORMANCE_LOG
+#define MPX_PERF_CHECKPT(s)     RDebug::Print(_L("--- PERFORMANCE CHECK POINT ---"));\
+                                RDebug::Print(_L(#s));
+#define MPX_PERF_START(fn) TPerfTrace perf__##fn (_L(#fn)); perf__##fn.Start();
+#define MPX_PERF_END(fn) perf__##fn.End();
+class TPerfTrace
+    {
+    public:
+        TPerfTrace(TRefByValue<const TDesC> aName):
+            iStr(aName)
+            {
+            }
+        void TPerfTrace::Start()
+            {
+            iTime.UniversalTime();
+            MPX_DEBUG2("-->%S",&iStr);
+            }
+        void TPerfTrace::End()
+            {
+            TTime now;
+            now.UniversalTime();
+            TInt delta = I64INT(now.MicroSecondsFrom(iTime).Int64());
+            MPX_DEBUG3("<--%S, time taken %d us", &iStr, delta);
+            }
+    private:
+        TPtrC iStr;
+        TTime iTime;
+    };
+#else
+#define MPX_PERF_CHECKPT(s)
+#define MPX_PERF_START(fn)
+#define MPX_PERF_END(fn)
+#endif
+
+#define MPX_TRAP(_r, _s) TRAP(_r,_s);MPX_ERROR_LOG(_r);
+#define MPX_TRAPD(_r, _s) TRAPD(_r,_s);MPX_ERROR_LOG(_r);
+
+#endif  // MPXLOG_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/ut_collectionplugintest.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,236 @@
+/*
+* 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:  video Playback User Input Handler test class for STIF testing
+*
+*/
+
+// Version : %version: 1 %
+
+#ifndef COLLECTIONPLUGIN_TEST_H
+#define COLLECTIONPLUGIN_TEST_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <TestclassAssert.h>
+#include <e32base.h>
+#include <e32def.h>
+#include <StifItemParser.h>
+#include <W32STD.H>
+
+//#include "mpxlog.h"
+//#include "mpxvideo_debug.h"
+#include <mpxcollectionpluginobserver.h>
+
+#include <mpxcollectionplugin.h>
+#include <mpxcollectionpath.h>
+#include <mpxcollectionmessagedefs.h>
+#include <vcxmyvideosdefs.h>
+#include "vcxmyvideosactivetask.h"
+#include "vcxmyvideosmdsdb_stub.h"
+#include "vcxmyvideosvideocache_stub.h"
+
+#define private public
+#include "vcxmyvideoscollectionplugin.h"
+#undef private
+
+// CLASS DECLARATION
+
+class CMPXMedia;
+class CVcxMyVideosMdsDb;
+class CMPXResource;
+class CMPXMediaArray;
+//class CVcxMyVideosDownloadUtil;
+class CVcxMyVideosVideoCache;
+class CVcxMyVideosCategories;
+class CVcxMyVideosMessageList;
+class CVcxMyVideosAsyncFileOperations;
+class CVcxMyVideosOpenHandler;
+class CCollectionPluginTest;
+class CVcxMyVideosCollectionPlugin;
+class MMPXCollectionPluginObserver;
+
+// DATA
+
+// CONSTANTS
+
+
+// MACROS
+#define TEST_CLASS_VERSION_MAJOR 0
+#define TEST_CLASS_VERSION_MINOR 0
+#define TEST_CLASS_VERSION_BUILD 0
+
+// Logging path
+_LIT( KCollectionplugintest_LogPath, "\\logs\\testframework\\collectionplugintest\\" );
+
+// Log file
+_LIT( KCollectionplugintest_LogFile, "collectionplugintest.txt" );
+_LIT( KCollectionplugintest_LogFileWithTitle, "collectionplugintest[%S].txt" );
+
+
+/**
+*  CCollectionPluginTest class for STIF Test Framework TestScripter.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since ?Series60_version
+*/
+NONSHARABLE_CLASS(CCollectionPluginTest) : public CScriptBase, MMPXCollectionPluginObserver
+{
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CCollectionPluginTest* NewL( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CCollectionPluginTest();
+
+    public: // Functions from base classes
+
+        /**
+        * From CScriptBase Runs a script line.
+        * @since ?Series60_version
+        * @param aItem Script line containing method name and parameters
+        * @return Symbian OS error code
+        */
+        virtual TInt RunMethodL( CStifItemParser& aItem );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CCollectionPluginTest( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void CreateL();
+        
+        /**
+        * Frees all resources allocated from test methods.
+        * @since ?Series60_version
+        */
+        void Delete();
+
+        /**
+        * LogMethod
+        */
+        void LogMethod( TPtrC aMethod );
+
+        /**
+        * DeleteStubL
+        */
+        TInt DeleteStubL( CStifItemParser& aItem );
+        
+        /**
+        * CheckCurrentCmd
+        * 
+        * Checks current command in vcxmyvideosactivetask
+        */        
+        TInt CheckCurrentCmdL( CStifItemParser& aItem );
+        
+        /**
+         * Method used to log version of test class
+         */
+        void SendTestClassVersion();
+        
+        virtual TInt SetVideoListFetchingL( CStifItemParser& aItem );
+        virtual TInt CancelCacheListFetchingL( CStifItemParser& aItem );
+        
+        CMPXCommand* CreateMpxCommandLC( TInt aCommandGeneralId, TInt aMyVideosCommandId, TBool aSync );
+        virtual TInt CreateNewCmdL( CStifItemParser& aItem );
+        virtual TInt SetNewCmdL( CStifItemParser& /*aItem*/ );
+        virtual TInt CreateNewMediaL( CStifItemParser& aItem );
+        virtual TInt AddMediaToCacheL( CStifItemParser& /*aItem*/ );
+        virtual TInt SetMediaAttributeL( CStifItemParser& aItem );
+        virtual TInt SelectAttributesL( CStifItemParser& aItem );
+        
+        /**
+         * Set iPath
+         */
+        virtual TInt InsertToPathL( CStifItemParser& aItem );
+        virtual TInt SelectPathL( CStifItemParser& aItem );
+        virtual TInt SelectPathIdL( CStifItemParser& aItem );
+        virtual TInt RemoveMediaFromCacheL( CStifItemParser& aItem );
+        virtual TInt CheckMediaCountL( CStifItemParser& aItem );
+
+        // TEST FUNCS
+        virtual TInt OpenL( CStifItemParser& aItem );
+        virtual TInt MediaL( CStifItemParser& aItem );
+        virtual TInt CancelRequest( CStifItemParser& aItem );
+        virtual TInt CommandL( CStifItemParser& aItem );
+        virtual TInt FindAllL( CStifItemParser& aItem );
+        virtual TInt FindAllSyncL( CStifItemParser& aItem );
+        virtual TInt GetCapabilities( CStifItemParser& aItem );
+        virtual TInt AddL( CStifItemParser& aItem );
+        virtual TInt RemoveL( CStifItemParser& aItem );
+        virtual TInt SetL( CStifItemParser& aItem );
+        virtual TInt HandleStepL( CStifItemParser& aItem );
+        virtual TInt HandleMyVideosDbEvent( CStifItemParser& aItem );
+        virtual TInt HandleCreateVideoListResp( CStifItemParser& aItem );
+        virtual TInt HandleObjectPresentNotificationL( CStifItemParser& aItem );
+        virtual TInt AddVideoToMdsAndCacheL( CStifItemParser& aItem );
+        virtual TInt SetVideoL( CStifItemParser& aItem );
+        virtual TInt SendMyVideosMessageL( CStifItemParser& aItem );
+        virtual TInt SendMessages( CStifItemParser& aItem );
+        virtual TInt CategoriesL( CStifItemParser& aItem );
+        virtual TInt NotifyNewVideosCountDecreasedL( CStifItemParser& aItem );        
+        virtual TInt AlbumsL( CStifItemParser& aItem );
+
+        
+    public: // from observer
+        virtual void HandleMessage(const CMPXMessage& aMsg)
+            {
+            HandleMessage(const_cast<CMPXMessage*>(&aMsg), KErrNone);
+            }
+        virtual void HandleMessage(CMPXMessage* /*aMsg*/, TInt /*aError*/);
+        virtual void HandleOpen(CMPXMedia* aMedia, TInt aErr);
+        virtual void HandleOpen(CMPXCollectionPath* aPath, TInt aErr);
+        virtual void HandleOpen(CMPXMedia* aMedia, const CMPXCollectionPath* aPath, TInt aErr);
+        
+        virtual void HandleMedia(CMPXMedia* aMedia, TInt aError);
+        virtual void HandleCommandComplete(CMPXCommand* aCommandResult, TInt aError);
+        virtual void HandleRemove(const CDesCArray& aUriArray, TInt aError);
+        virtual void HandleFindAll(CMPXMedia* aMedia, TInt aError);        
+        
+    private:    
+
+        TUid iCollectionUid;
+        
+        // Tested class
+        CVcxMyVideosCollectionPlugin*   iCollection;
+        
+        CMPXCollectionPath* iPath;
+        RArray<TMPXAttribute> iAttrs;
+        
+        CMPXMediaArray* iMessageList;
+        
+        CMPXMedia* iMedia;
+        CMPXCommand* iCommand;
+};
+
+#endif      // COLLECTIONPLUGIN_TEST_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosactivetask.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Active object to split up long running tasks*
+*/
+
+
+
+#ifndef VCXMYVIDEOSACTIVETASK_H
+#define VCXMYVIDEOSACTIVETASK_H
+
+#include <mpxcommand.h>
+#include <mpxmessage2.h>
+
+/**
+* Observer class to the active task object
+*/
+NONSHARABLE_CLASS( MVcxMyVideosActiveTaskObserver )
+    {
+public:
+    
+    enum TStepResult
+        {
+        EMoreToCome,
+        EDone,
+        /**
+         * Observer is responsible for calling Done or ContinueStepping if returning this.
+         */
+        EStopStepping
+        };
+    
+    /**
+    * Handle the execution of a step
+    * @return TStepResult
+    */
+    virtual TStepResult HandleStepL() = 0;
+    /**
+    * Handle the completion of the operation
+    */
+    virtual void HandleOperationCompleted( TInt aErr ) = 0;
+    };
+
+/**
+ *  Active object to execute tasks in multiple steps.
+ *  Each collection plugin has its own task queue, which serializes all
+ *  operations for a plugin.
+ */
+NONSHARABLE_CLASS( CVcxMyVideosActiveTask ) : public CActive
+    {
+public:
+    /**
+    * Two-phased constructor
+    */
+    static CVcxMyVideosActiveTask* NewL( MVcxMyVideosActiveTaskObserver& aObserver );
+
+    /**
+    * Destructor
+    */
+    virtual ~CVcxMyVideosActiveTask();
+
+public:    // Accessor functions
+
+    /**
+    * Start the async command task
+    * @param aTask task id
+    * @param aCommand command for the operation
+    */
+    void StartL( TMPXCommandId aTask, const CMPXCommand& aCommand );
+
+    /**
+    * Get the current step for the current task
+    * @return the current step
+    */
+    TInt GetStep();
+
+    /*
+    * Get the command for the current task
+    * @return the current task
+    */
+    TMPXCommandId GetTask();
+
+    /**
+    * Get the command for the current task
+    * @return the current command
+    */
+    CMPXCommand& GetCommand();
+
+    /**
+    * Get the command for the current task.
+    * @return the current command, ownership does not move.
+    */        
+    CMPXMedia* Command();
+    
+    /**
+     * If observer returns EStopStepping from HandleStepL, then observer must call
+     * this or ContinueStepping when sub operation is finished.
+     * Can be used to run async operations.
+     */
+    void Done();
+
+    /**
+     * If observer returns EStopStepping from HandleStepL, then observer must call
+     * this or Done when sub operation is finished.
+     * Can be used to run async operations.
+     */
+    void ContinueStepping();
+
+    /**
+     * Add some functionality to CActive::Cancel
+     */
+    void Cancel();
+    
+    /*
+     * Test function; set new command
+     */
+    void SetNewCommandL( const CMPXCommand& aCommand );
+
+protected: // From base class
+
+    /**
+    * From CActive
+    */
+    void RunL();
+    
+    /**
+    * From CActive
+    */
+    void DoCancel();
+
+    /**
+    * From CActive
+    */
+    TInt RunError( TInt aError );
+
+private:
+
+    /**
+    * Default Constructor
+    */
+    CVcxMyVideosActiveTask(MVcxMyVideosActiveTaskObserver& aObserver);
+
+    /**
+    * 2nd-phase Constructor
+    */
+    void ConstructL();
+
+public:
+    /**
+     * Set to ETrue when stepping is stopped.
+     * Cancel or Done has to be called.
+     */
+    TBool iStopped;
+
+private: // data
+
+    CMPXCommand*  iCurCommand;  // Current Command
+    TMPXCommandId iCurTask;  // The task command id
+    TInt          iCurStep;  // The n-th stop in the operation
+    MVcxMyVideosActiveTaskObserver& iObserver; // Observer
+    
+public:     // Friend classes
+    
+    friend class CCollectionPluginTest;    
+    };
+
+#endif // VCXMYVIDEOSACTIVETASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosalbum.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Class representing album in My Videos collection.
+*/
+
+
+#ifndef CVCXMYVIDEOSALBUM_H
+#define CVCXMYVIDEOSALBUM_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+class CMPXMedia;
+class CVcxMyVideosCollectionPlugin;
+
+// CLASS DECLARATION
+
+/**
+ * Contains information about video which belongs to some album.
+ * These are stored to CVcxMyVideosAlbum::iVideoList.
+ */
+NONSHARABLE_CLASS(TVcxMyVideosAlbumVideo)
+    {
+    public:
+
+        /**
+         * Constructor.
+         */
+        TVcxMyVideosAlbumVideo();
+
+        /**
+        * = operator.
+        */        
+        TVcxMyVideosAlbumVideo& operator=( const TVcxMyVideosAlbumVideo& aVideo );
+    private:
+        
+        /**
+        * Set values.
+        */
+        void Set( TUint32 aMdsId, TUint32 aRelationMdsId, CMPXMedia* aVideo );
+
+    public:
+        TUint32    iMdsId;         //Video object ID in MDS.
+        TUint32    iRelationMdsId; //Relation ID in MDS, this is used when removing items from album.
+        CMPXMedia* iMedia;
+    };
+
+/**
+ * Contains list of videos belonging to an album. Videos can be searched, added and
+ * removed. Videos are kept in sorting order by MDS ID to speed up access. Pointers
+ * to media objects in collection cache are also stored to speed up access.
+ * Contains also logic for keeping album media attributes up to date.
+ */
+NONSHARABLE_CLASS(CVcxMyVideosAlbum) : public CBase
+    {    
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CVcxMyVideosAlbum();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CVcxMyVideosAlbum* NewL( CVcxMyVideosCollectionPlugin& aCollectionPlugin );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CVcxMyVideosAlbum* NewLC( CVcxMyVideosCollectionPlugin& aCollectionPlugin );
+
+    // new methods
+    
+    /**
+     * Sets up this album.
+     * 
+     * @param aAlbum  Media class to set from.
+     */
+    void SetL( /*CMPXMedia& aAlbum*/ );
+    
+    /**
+     * Sorts iVideoList by MDS ID.
+     */
+    void Sort();
+    
+    /**
+     * Checks if aMdsId belongs to this album. Checking is
+     * done using bisection method.
+     * 
+     * @param aMdsId  Id to check.
+     */
+    TBool BelongsToAlbum( TUint32 aMdsId );
+
+    /**
+     * Finds video from iVideoList. Uses bisection method, ie
+     * is fast.
+     * 
+     * @param aMdsId  Video to find.
+     * @param aVideo  If found, this is filled with data.
+     * @param aIndex  Position in iVideoList where from the video
+     *                was found.
+     * @return        System-wide error code. If != KErrNone, then
+     *                aVideo and aIndex won't contain valid data.
+     */
+    TInt Video( TUint32 aMdsId, TVcxMyVideosAlbumVideo& aVideo, TInt& aIndex );
+
+    /**
+     * Adds aVideo to this album. The id array is kept in ascending order.
+     * 
+     * @param aVideo  Video to add.
+     */
+    void AddL( TVcxMyVideosAlbumVideo aVideo );
+
+    /**
+     * Removes videos from this album.
+     * 
+     * @param aMdsIds Array containing IDs of the videos to remove.
+     */
+    void Remove( RArray<TUint32>& aMdsIds );
+
+    /**
+     * Removes aMdsId from this album.
+     * 
+     * @param aMdsId    ID to remove.
+     * @param aCompress If ETrue, then Compress is called to iVideoList.
+     *                  ETrue as default.
+     */
+    void Remove( TUint32 aMdsId, TBool aCompress = ETrue );
+    
+    /**
+     * Used for keeping RArray<TVcxMyVideosAlbumVideo> in integer order by
+     * TVcxMyVideosAlbumVideo::iMdsId.
+     * 
+     * @param aVideo1 Video to compare
+     * @param aVideo2 Video to compare
+     * @return -1 if aVideo1 is smaller than aVideo2, 1 if aVideo1 is larger than
+     *         aVideo2.
+     */
+    static TInt CompareVideosByMdsId( const TVcxMyVideosAlbumVideo& aVideo1,
+            const TVcxMyVideosAlbumVideo& aVideo2 );
+
+    /**
+     * Creates video list belonging to this album. Ownership goes to caller.
+     * 
+     * @return Media containing media array. Array items are videos.
+     */
+    CMPXMedia* CreateVideoListL();
+
+    /**
+     * Appends items from aFromVideoList to aToVideoList if they belong to
+     * this album.
+     * 
+     * @param aFromVideoList     From list.
+     * @param aToVideoList       To List.
+     * @param aNewItemStartIndex Start index of the copy. Items in aFromVideoList before this
+     *                           value are ignored.
+     */
+    void AppendToVideoListL( CMPXMedia& aFromVideoList,
+            CMPXMedia& aToVideoList, TInt aNewItemStartIndex );
+
+    /**
+     * Calculates KVcxMediaMyVideosCategoryItemCount, KVcxMediaMyVideosCategoryNewItemCount,
+     * KVcxMediaMyVideosCategoryNewItemName and KMPXMediaGeneralDate attributes to iMedia.
+     * 
+     * @return Returns ETrue if album attributes were modified, EFalse otherwise.
+     */
+    TBool CalculateAttributesL();
+    
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    CVcxMyVideosAlbum( CVcxMyVideosCollectionPlugin& aCollectionPlugin );
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+private: //data
+    CVcxMyVideosCollectionPlugin& iCollection;
+    
+public: //data
+    
+    /**
+     * MDS ID of this album.
+     */
+    TUint32 iMdsId;
+
+    /**
+     * MPX media object representing this album in collection, not own.
+     * The item is owned by CVcxMyVideosAlbums::iAlbumList
+     */
+    CMPXMedia* iMedia;
+
+    /**
+     * Array containing info about videos belonging to this album.
+     */
+    RArray<TVcxMyVideosAlbumVideo> iVideoList;
+            
+    };
+
+#endif // CVCXMYVIDEOSALBUM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosalbums.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,371 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Albums related collection functionality.
+*/
+
+
+
+#ifndef VCXMYVIDEOSALBUMS_H
+#define VCXMYVIDEOSALBUMS_H
+
+// INCLUDES
+#include <mdequery.h>
+#include "vcxmyvideosmdsdb_stub.h"
+#include "vcxmyvideosalbum.h"
+
+// FORWARD DECLARATIONS
+class CVcxMyVideosMdsDb;
+class CMPXMedia;
+class CVcxMyVideosCollectionPlugin;
+class CVcxMyVideosAlbum;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* Albums related collection functionality.
+*
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosAlbums) : public CBase, public MVcxMyVideosMdsAlbumsObserver
+    {    
+    public: // Constructors and destructor
+        
+        /**
+        * Two-phased constructor
+        * @return object constructed
+        */
+        static CVcxMyVideosAlbums* NewL( CVcxMyVideosCollectionPlugin& aCollectionPlugin );
+
+        /**
+        * Destructor
+        */
+        virtual ~CVcxMyVideosAlbums();
+
+    public: // new methods
+
+        /**
+         * Returns album from iAlbums array by MDS ID. Ownership does not move.
+         * 
+         * @param aMdsId  MDS ID of the album to get.
+         * @param aPos    If given, then the position index in iAlbums is written here.
+         *                Ownership does not move.
+         * @return        Pointer to album or NULL if not found.
+         */
+        CVcxMyVideosAlbum* Album( TUint32 aMdsId, TInt* aPos = NULL );
+        
+        /**
+        * Creates iAlbumList if it doesn't exist yet. The list is populated
+        * from async callback, HandleGetAlbumsResp().
+        */
+        void CreateAlbumListL();
+                
+        /**
+         * Fetches MDS IDs from MDS for all videos belonging to albums.
+         * Ie fills iAlbums[*]->iVideoList[*].iMdsId (and iAlbums[*]->iVideoList[*].iRelationMdsId) fields.
+         * Causes several async calls to MDS. 
+         */
+        void GetAlbumContentIdsL();
+
+        /**
+         * Adds videos to album.
+         * 
+         * @param aCmd  See attribute usage from vcxmyvideosdefs.h.
+         */
+        void AddVideosToAlbumL( CMPXMedia* aCmd );
+
+        /**
+         * Removes videos from album.
+         * 
+         * @param aCmd  See attribute usage from vcxmyvideosdefs.h.
+         */
+        void RemoveVideosFromAlbumL( CMPXMedia* aCmd );
+
+        /**
+         * Adds album to MDS and to this class. KMPXMediaGeneralTitle
+         * should be set in aCmd. Upon completion, the KMPXMediaGeneralId
+         * attribute contains the new MPX item ID. Leaves if could
+         * not add to MDS.
+         * 
+         * @param aCmd  Command object received from collection client.
+         */
+        void AddAlbumL( CMPXMedia& aCmd );
+        
+        /**
+         * Removes albums from MDS. MDS delete events will clean up albums
+         * from this class.
+         * 
+         * @param aCmd  MPX command received from the client. Contains media array,
+         *              which contains medias with album IDs set to KMPXMediaGeneralId.
+         *              Ownership does not move. 
+         */
+        void RemoveAlbumsFromMdsOnlyL( CMPXMedia* aCmd );
+        
+        /**
+         * Removes albums from this object (iAlbumList and iAlbums).
+         * Called from MDS delete event. Album IDs which were removed are
+         * also removed from aAlbumIds array. After the call aAlbumIds
+         * will contain items which were not found and not deleted.
+         * Sends appropriate events to collection client.
+         * 
+         * @param aAlbumIds  Album IDs to be removed.
+         */
+        void RemoveAlbumsL( RArray<TUint32>& aAlbumIds );
+
+        /**
+         * Removes album from this class (iAlbumList and iAlbums).
+         * Adds event to message list but does not send it.
+         * 
+         * @param aMdsIds    Album MDS ID to be removed.
+         * @param aCompress  If ETrue, then iAlbums is compressed,
+         *                   otherwise not.
+         * @return           ETrue if album was found and removed.
+         */
+        TBool RemoveAlbumL( TUint32 aMdsId, TBool aCompress );
+        
+        /**
+         * Fetches albums from MDS. This is called from MDS insert event.
+         * 
+         * @param aAlbumIds  Album IDs to fetch.
+         */
+        void AddAlbumsFromMdsL( RArray<TUint32>& aAlbumIds );
+
+        /**
+         * Updates albums from MDS. This is called from MDS modify event.
+         * 
+         * @param aAlbumIds  Album IDs to update.
+         */
+        void UpdateAlbumsFromMdsL( RArray<TUint32>& aAlbumIds );
+
+        /**
+         * Updates album attributes, does not write to MDS. Adds
+         * modify event to iCollection.iMessageList if necessarry.
+         * 
+         * @param aAlbum  New values are read from this.
+         * @return        ETrue if album was modified, EFalse otherwise.
+         */
+        TBool UpdateAlbumL( const CMPXMedia& aAlbum );
+
+        /**
+         * Calculates and updates album media attributes.
+         * Adds events to iCollection.iMessageList if albums
+         * are modified. Does not send them.
+         * 
+         * @return  Returns ETrue if events were added to iCollection.iMessageList,
+         *          EFalse otherwise.
+         */
+        TBool CalculateAttributesL();
+        
+        /**
+         * Called when video's New Video flag changes. Calculates
+         * album attributes for the affected albums. Adds events
+         * to iCollection.iMessageList but does not send them.
+         * 
+         * @param aMdsId  MDS ID of the changed video.
+         */
+        void NewVideoFlagChangedL( TUint32 aMdsId );
+
+        /**
+         * Called when video's title changes. Calculates
+         * album attributes for the affected albums. Adds events
+         * to iCollection.iMessageList but does not send them.
+         * 
+         * @param aMdsId  MDS ID of the changed video.
+         */
+        void VideoTitleChangedL( TUint32 aMdsId );
+        
+        /**
+         * Called when video is added or removed from cache. Adds changed
+         * album indexes to iChangedAlbums.
+         */
+        void VideoAddedOrRemovedFromCacheL( CMPXMedia& video );
+
+        /**
+         * Goes through iChangedAlbums and updates album attributes and adds
+         * changed events.
+         */
+        void UpdateChangedAlbumsL();
+
+protected:
+        
+        /**
+         * From MVcxMyVideosMdsAlbumsObserver.
+         * Process albums arriving from MDS. Response to VcxMyVideosMdsAlbums::GetAlbumsL.
+         */
+        void HandleGetAlbumsRespL( CMPXMedia* aAlbumList );
+
+        /**
+         * From MVcxMyVideosMdsAlbumsObserver.
+         * Process content ids arriving from MDS. Response to VcxMyVideosMdsAlbums::GetAlbumContentIdsL.
+         * 
+         * @param aAlbumId      ID of the album.
+         * @param aAlbumContent Array containing MDS object IDs. This array is the same which
+         *                      was given in GetAlbumContentIdsL call.
+         */
+        void HandleGetAlbumContentIdsRespL( TUint32 aAlbumId,
+                RArray<TVcxMyVideosAlbumVideo>& aAlbumContentIds );
+        
+        /**
+        * From MVcxMyVideosMdsAlbumsObserver.
+        * Response to VcxMyVideosMdsAlbums::GetAlbumsL.
+        * Sends insert events to collection clients.
+        * 
+        * @param aAlbumList  Pointer to same array which was given in GetAlbums call.
+        */
+        void HandleGetAlbumsResp( CMPXMedia* aAlbumList );
+ 
+        /**
+         * From MVcxMyVideosMdsAlbumsObserver.
+         * Process content ids arriving from MDS. Response to CVcxMyVideosMdsAlbums::GetAlbumContentIdsL.
+         * 
+         * @param aAlbumId      ID of the album.
+         * @param aAlbumContent Array containing MDS object IDs. This array is the same which
+         *                      was given in GetAlbumContentL call.
+         */
+        void HandleGetAlbumContentIdsResp( TUint32 aAlbumId,
+                RArray<TVcxMyVideosAlbumVideo>& aAlbumContentIds );
+
+        /**
+         * From MVcxMyVideosMdsAlbumsObserver.
+         * Process content videos arriving from MDS. Response to CVcxMyVideosMdsAlbums::GetAlbumContentVideosL.
+         * 
+         * @param aAlbumId    Album ID.
+         * @param aVideoList  Media containing media array, array items are videos.
+         * @param aError      Error code in case of failure.
+         * @param aFirstNewItemIndex The index of the first new item.
+         * @param aNewItemCount      How many new items since the last results.
+         * @param aComplete          ETrue is query is complete, EFalse if there is new to come.
+         */
+        void HandleGetAlbumContentVideosResp( TUint32 /*aAlbumId*/, CMPXMedia& /*aVideoList*/,
+                TInt /*aError*/, TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/, TBool /*aComplete*/ ) {}
+        
+        /**
+         * From MVcxMyVideosMdsAlbumsObserver.
+         * Response to CVcxMyVideosMdsAlbums::AddVideosToAlbumL.
+         * 
+         * @param aCmd  Pointer to object which was given in AddVideosToAlbumL
+         *              function call. Ownership does not move.
+         * @param aItemArray  Item array which was tried to add to MDS.
+         */        
+        void HandleAddVideosToAlbumResp( CMPXMedia* aCmd,
+                RPointerArray<CMdEInstanceItem>& aItemArray );
+
+        /**
+         * From MVcxMyVideosMdsAlbumsObserver.
+         * Response to CVcxMyVideosMdsAlbums::RemoveRelationsL.
+         */
+        void HandleRemoveRelationsResp( RArray<TUint32>& aRelationIds,
+                RArray<TUint32>& aResults );
+
+        /**
+         * From MVcxMyVideosMdsAlbumsObserver.
+         * Response to CVcxMyVideosMdsAlbums::RemoveAlbumsL.
+         */
+        void HandleRemoveAlbumsResp( CMPXMedia* aCmd,
+                RArray<TUint32>& aResultIds );
+
+        /**
+         * From MVcxMyVideosMdsAlbumsObserver.
+         * Relation events from MDS. This object is set as an observer at
+         * iCollection.ConstructL, CVcxMyVideosMdsDb::NewL(..,aAlbumsObserver,..).
+         */
+        void HandleRelationEvent( TObserverNotificationType aType,
+                const RArray<TMdERelation>& aRelationArray );
+        
+    private:
+
+        /**
+         * Fills in iAlbums array. This is called when iAlbumList is ready.
+         * Pointers to CVcxMyVideosVideoCache::iVideoList are not filled
+         * in yet.
+         */
+        void CreateAlbumsL();
+
+        /**
+        * Constructor
+        */
+        CVcxMyVideosAlbums( CVcxMyVideosCollectionPlugin& aCollectionPlugin );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL();
+
+        /**
+         * Leaving version of HandleAddVideosToAlbumResp.
+         */
+        void DoHandleAddVideosToAlbumRespL( CMPXMedia* aCmd,
+                RPointerArray<CMdEInstanceItem>& aItemArray );
+
+    public:
+
+        /**
+        * Album list. This is given to client when categorylevel items are requested. Own.
+        * If this is destroyed/edited, then pointers have to be updated in iAlbums.
+        */
+        CMPXMedia* iAlbumList;
+        
+        /**
+         * Array containing MDS IDs and pointers to album and video media items.
+         * Album media items are in iAlbumList and video media items are in
+         * CVcxMyVideosVideoCache::iVideoList.
+         */
+        RArray<CVcxMyVideosAlbum*> iAlbums;
+    
+        /**
+         * ETrue when iAlbumList is ready and iAlbums contains video IDs.
+         */
+        TBool iAlbumListIsComplete;
+        
+    private:
+        
+        /**
+         * Owner of this object.
+         */
+        CVcxMyVideosCollectionPlugin& iCollection;
+        
+        /**
+         * Used in MDS operations to store MDS video (or relation) IDs.
+         */
+        RArray<TUint32> iMdsOpTargetIds;
+        
+        /**
+         * Stores album video data during relation deletion. This is to
+         * avoid second search when resp arrives.
+         */
+        RArray<TVcxMyVideosAlbumVideo> iRemoveFromAlbumVideos;
+        
+        /**
+         * Used in MDS operations to store operation results. Is in sync with iMdsOpTargetIds. 
+         */
+        RArray<TInt> iMdsOpResults;
+
+        /**
+         * Used in MDS operations to store operation results. Is in sync with iMdsOpTargetIds. 
+         */
+        RArray<TUint32> iMdsOpResultsUint32;
+        
+        /**
+         * When videos are removed or added from cache, the indexes of the
+         * changed albums are stored here. Reason is to calculate new attributes
+         * only once per changed album.
+         */
+        RArray<TInt> iChangedAlbums;
+        
+    };
+
+#endif   // VCXMYVIDEOSALBUMS_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosasyncfileoperations_stub.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 for MPX My Videos Collection Move, Copy and Delete operations.*
+*/
+
+
+
+
+#ifndef VCXMYVIDEOSASYNCFILEOPERATIONS_H
+#define VCXMYVIDEOSASYNCFILEOPERATIONS_H
+
+// INCLUDES
+
+#include <mpxcollectionplugin.h>
+#include <mpxcollectionpath.h>
+#include <mpxcollectionmessagedefs.h>
+#include <vcxmyvideosdefs.h>
+
+// FORWARD DECLARATIONS
+class CVcxMyVideosCollectionPlugin;
+class CVcxMyVideosAsyncFileCopy;
+class CMPXMedia;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosAsyncFileOperations) :
+    public CBase
+    {    
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor
+        * @return object constructed
+        */
+        static CVcxMyVideosAsyncFileOperations* NewL( CVcxMyVideosCollectionPlugin& aCollection );
+
+        /**
+        * Destructor
+        */
+        virtual ~CVcxMyVideosAsyncFileOperations();
+
+    public: // from base classes
+                 
+    private:
+        /**
+        * Constructor
+        */
+        CVcxMyVideosAsyncFileOperations( CVcxMyVideosCollectionPlugin& aCollection );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL ();
+
+    public:
+    
+        /**
+        * Deletes the file and removes media item from the collection.
+        *
+        * @param aMdsId        MDS id of the item to be deleted.
+        * @param aForce        If ETrue, the video will be deleted even if download is ongoing.
+        */
+        void DeleteVideoL( TUint32 aMdsId, TBool aForce = EFalse );
+                
+        /**
+        * Performs one Move or Copy operation. Called by HandleStep.
+        *
+        * @return MVcxMyVideosActiveTaskObserver::EDone if was last operation,
+        *         MVcxMyVideosActiveTaskObserver::EMoreToCome otherwise.
+        */
+        MVcxMyVideosActiveTaskObserver::TStepResult HandleMoveOrCopyStepL();
+
+        /**
+        * Moves or copies video to another drive.
+        *
+        * @param aMdsId        MDS id of the item to be moved.
+        * @param aMove         If ETrue, the source file is deleted.
+        */
+        void MoveOrCopyVideoL( TUint32 aMdsId );
+                       
+        /**
+        * Generates and sends resp message for Move,Copy and Delete operations.
+        * Does nothing if there is some other operation going on.
+        * This function is called when operation is interrupted from a leave or
+        * cancel request.
+        * Leaves with KErrNotFound if no operation was in progress.
+        *
+        * @param aErr  Error code which is set for non handled items in the resp array.
+        */
+        void CancelOperationL( TInt aErr );
+ 
+        /**
+        * Performs one Delete operation. Called by HandleStep.
+        *
+        * @return MVcxMyVideosActiveTaskObserver::EDone if was last operation,
+        *         MVcxMyVideosActiveTaskObserver::EMoreToCome otherwise.
+        */
+        MVcxMyVideosActiveTaskObserver::TStepResult HandleDeleteStepL();
+
+    private:
+        
+        /**
+        * Called when file is going to be moved or copied to aDrive.
+        * Checks if target drive has enough free space.
+        *
+        * @param aPath  File path of the file which is going to be moved or copied.
+        * @param aDrive Target drive.
+        * @return ETrue If target drive has enough space, EFalse otherwise.
+        */
+        TBool DriveHasEnoughFreeSpaceL( const TDesC& aPath, TInt aDrive );
+
+        /**
+        * Sends response array for Move, Copy or Delete operation.
+        *
+        * @param aMessageId  Response message ID.
+        */
+        void SendOperationRespL( TInt aCmdId );
+
+        /**
+        * Generates target path for move and copy operations.
+        *
+        * @param aSourcePath  Full source path.
+        * @param aTargetPath  Target path is written here.
+        * @param aTargetDrive Target drive.
+        */
+        void GenerateTargetPathForMoveOrCopyL(
+                const TDesC& aSourcePath, TDes& aTargetPath, TInt aTargetDrive );
+
+        /**
+        * Initializes member variables for the Copy or Move operations.
+        *
+        * @param aCmd  Command received from collection client.
+        */                
+        void InitMoveOrCopyOperationsL( CMPXMedia& aCmd );
+        
+        /**
+        * Called when file copying completes in Move or Copy operations.
+        *
+        * @param aErr Result code of the file copy.
+        */
+        void HandleFileCopyCompletedL( TInt aErr );
+        
+        /**
+        * Initializes MDS and collection cache before the actual file copy.
+        * Does some sanity checks also.
+        *
+        * @param aMdsId        MDS ID of the video being moved/copied.
+        */
+        void InitSingleMoveOrCopyL( TUint32 aMdsId );
+
+    public:
+
+        /**
+        * Array containing item ids which are being moved/copied or deleted.
+        */
+        RArray<TUint32> iOperationIdArray;
+    
+        /**
+        * Array containing results for move/copy/delete operations. Array positions
+        * are in sync with iOperationIdArray.
+        */
+        RArray<TInt> iOperationResult;
+                
+    private:
+
+        /**
+        * File server session.
+        */
+        RFs iFs;
+            
+        /**
+        * The item currently being moved/copied or deleted.
+        */
+        TInt iCurrentOperationIndex;
+                        
+        /**
+        * Target drive for Move or Copy operation.
+        */
+        TInt iTargetDrive;
+
+        /**
+        * Set to ETrue if current operation is Move.
+        */
+        TBool IsMoveOperation;
+        
+        /**
+        * Owner of this class.
+        */
+        CVcxMyVideosCollectionPlugin& iCollection;
+        
+        /**
+        * Performs single file copy in multiple steps.
+        * Used to avoid long blockings when copying large files.
+        * Own.
+        */
+        CVcxMyVideosAsyncFileCopy* iFileCopier;
+        
+        /**
+        * New media which is created to collection cache in copy operation.
+        * It is stored in memeber variable in case that file operations
+        * fail and we have to roll MDS and cache back. Own.
+        */
+        CMPXMedia* iMediaForCopyOp;
+        
+        /**
+        * Updated media which is changed in move operation.
+        * It is stored in memeber variable in case that file operations
+        * fail and we have to roll MDS and cache back. Own.
+        */        
+        CMPXMedia* iMediaForMoveOp;
+        
+        /**
+        * Source path for move or copy operation.
+        */
+        TFileName iSourcePath;
+        
+        /**
+        * Target path for move or copy operation.
+        */
+        TFileName iTargetPath;
+        
+        /**
+        * Flag for move operation is stored just to avoid accessing
+        * CMPXMedia object too much.
+        */
+        TBool iIsMoveOperation;
+                                
+    public:     // Friend classes
+        
+        friend class CCollectionPluginTest;        
+    };
+
+#endif   // VCXMYVIDEOSASYNCFILEOPERATIONS_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideoscategories_stub.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,374 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:    Categories related functionality*
+*/
+
+
+
+
+#ifndef VCXMYVIDEOSCATEGORIES_H
+#define VCXMYVIDEOSCATEGORIES_H
+
+// INCLUDES
+
+#include <vcxmyvideosdefs.h>
+
+// FORWARD DECLARATIONS
+class CMPXMedia;
+class CVcxMyVideosCollectionPlugin;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* MPX My Videos collection categories implementation.
+*
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosCategories) : CBase
+    {    
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor
+        * @return object constructed
+        */
+        static CVcxMyVideosCategories* NewL ( CVcxMyVideosCollectionPlugin& aCollection );
+
+        /**
+        * Destructor
+        */
+        virtual ~CVcxMyVideosCategories();
+
+        /**
+        * Creates Media container with categories.
+        */
+        CMPXMedia* CreateCategoryListL();
+
+    public: // new methods
+    
+        /**
+        * When CVcxMyVideosVideoCache::iCache->iVideoList is grown (appended),
+        * this is called to update category attributes.
+        *
+        * @param aVideoList          Current video list cache.
+        * @param aNewItemsStartIndex Start position of new items.
+        */
+        void UpdateCategoriesL( CMPXMedia& aVideoList, TInt aNewItemsStartIndex );
+ 
+        /**
+        * Called after video is added to iCollection.iCache.
+        * Updates category variables accordingly.
+        * Modify events to iCollection.iMessageList are added, but the list
+        * is not sent.
+        *
+        * @param aMdsId Item which was added.
+        */
+        void VideoAddedL( TUint32 aMdsId );
+
+
+        /**
+        * Called after video is added to iCollection.iCache.
+        * Updates category variables accordingly.
+        * Modify events to iCollection.iMessageList are added, but the list
+        * is not sent.
+        *
+        * @param aVideo Item which was added.
+        */
+        void VideoAddedL( CMPXMedia& aVideo );
+
+        /**
+        * Called after videos are added to iCollection.iCache.
+        * Updates category variables accordingly.
+        * Modify events to iCollection.iMessageList are added, but the list
+        * is not sent.
+        *
+        * @param aIds Items which were added.
+        */
+        void VideosAddedL( RArray<TUint32>& aIds );
+
+        /**
+        * Called just _before_ video is removed from iCollection.iCache.
+        * Updates category variables accordingly.
+        * Modify events to iCollection.iMessageList are added, but the list
+        * is not sent.
+        *
+        * @param aMdsId Item which is being removed.
+        */
+        void VideoRemovedL( TUint32 aMdsId );
+
+        /**
+        * Called just _before_ video is removed from iCollection.iCache.
+        * Updates category variables accordingly.
+        * Modify events to iCollection.iMessageList are added, but the list
+        * is not sent.
+        *
+        * @param aVideo Item which is being removed.
+        */
+        void VideoRemovedL( CMPXMedia& aVideo );
+
+        /**
+        * Called just _before_ videos are removed from iCollection.iCache.
+        * Updates category variables accordingly.
+        * Modify events to iCollection.iMessageList are added, but the list
+        * is not sent.
+        *
+        * @param aIds Items which are being removed.
+        */
+        void VideosRemovedL( RArray<TUint32>& aIds );
+
+        /**
+        * Resets video counters to 0 from categories. Does not
+        * send events.
+        */
+        void ResetVideoCountersL();
+
+        /**
+        * Updates categories' New Video Name fields.
+        * Sends iCollection.iMessageList if any of the categories is modified.
+        */
+        void UpdateCategoriesNewVideoNamesL();
+        
+        
+        /**
+        * Called when video is updated in a way it affects New Video Name (and date) in category.
+        * This updates the category accordinly. This function adds modify events to
+        * collections message list if category is edited. Does not flush the message list.
+        *
+        * @param aVideo     Video which was changed.
+        * @param aModified  Set to ETrue if categories were modified.
+        */
+        void UpdateCategoryNewVideoNameAndDateL( CMPXMedia& aVideo, TBool& aModified );
+        
+        /**
+        * Called when items New Video Flag is updated in iCollection.iCache.
+        * This function updates video counters only, no New Video Name.
+        *
+        * @param aOldFlags  Items flags before update.
+        * @param aNewFlags  Items flags after update.
+        * @param aOrigin    Which origin is affected.
+        * @param aModified  Set to ETrue if category counters were edited and events
+        *                   were added to message list. This does not flush the message list.
+        */
+        void NewVideoFlagChangedL( TUint32 aOldFlags, TUint32 aNewFlags,
+                TUint8 aOrigin, TBool& aModified );        
+
+        /**
+        * Checks in which categories the video belongs to and sends modified events for them.
+        *
+        * @param aVideo             Video which was modified.
+        * @param aFlushMessageList  If ETrue, then the collections message list is sent to clients.
+        * @param aExtraInfo         Extra information about the event, this value is written to
+        *                           KVcxMediaMyVideosInt32Value attribute. If aExtraInfo
+        *                           is 0, nothing is written.
+        */
+        void GenerateCategoryModifiedEventL( CMPXMedia& aVideo, TBool aFlushMessageList,
+                TInt32 aExtraInfo = 0 );
+
+        /**
+        * Called when videos origin is changed in iCollection.iCache.
+        * Updates category variables and sends necessarry events.
+        *
+        * @param aVideo       Video which is changed, flags variable is read from here.
+        * @param aPrevOrigin  Previous origin.
+        * @param aNewOrigin   New origin.
+        */
+        void OriginChangedL( CMPXMedia& aVideo, TUint8 aPrevOrigin, TUint8 aNewOrigin );
+                    
+    private:
+        /**
+        * Constructor
+        */
+        CVcxMyVideosCategories( CVcxMyVideosCollectionPlugin& aCollectionPlugin );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL ();
+        
+        /**
+        * Creates CMPXMedia object with category values and appends it to
+        * aCategoryArray.
+        *
+        * @param aTitle         Category title.
+        * @param aId            Collection item ID
+        * @param aCategoryArray New CMPXMedia category object is appended here. 
+        */
+        void AppendCategoryToArrayL( const TDesC& aTitle, TMPXItemId aId,
+                CMPXMediaArray& aCategoryArray );
+                
+        /**
+        * Updates video counts in categories.
+        *
+        * @param aCategoryArray       Category array, provided as function parameter since the
+        *                             calling function already has it available.
+        * @param aVideosIncrements    How many new items were added to each category.
+        * @param aNewVideosIncrements How many videos with new flag were added to each category.
+        */
+        void UpdateVideosCountL( CMPXMediaArray& aCategoryArray,
+                RArray<TInt>& aVideosIncrements, RArray<TInt>& aNewVideosIncrements );
+
+        /**
+        * Increases/decreases aCountAttribute in aCategory. Adds event to
+        * iCollection.iMessageList if category is modified. aEventInfo is written
+        * to event's extra info. Does not flush iCollection.iMessageList.
+        *
+        * @param aCategory       Category being modified.
+        * @param aIncrement      This is added to category's current attribute value.
+        * @param aCountAttribute Attribute ID.
+        * @param aEventInfo      This is written to generated event's extra info attribute.
+        * 
+        */
+        void UpdateVideosCountL( CMPXMedia& aCategory, TInt aIncrement,
+                TMPXAttributeData aCountAttribute, TInt aEventInfo );
+
+        /**
+        * aVideo is added(or removed) to aCategory. Updates category variables accordingly. 
+        *
+        * @param aCategory      Category
+        * @param aCategoryIndex Category index in iList
+        * @param aAdded         ETrue if aVideo was added to iList, EFalse if being removedo.
+        */
+        void UpdateCategoryL( CMPXMedia& aCategory, TInt aCategoryIndex,
+                CMPXMedia& aVideo, TBool aAdded );
+
+        /**
+        * Adds aAddition to aAttribute in aCategory.
+        *
+        * @param aCategory  Category to modify.
+        * @param aAddition  How much increase/decrease the attribute.
+        * @param aAttribute Which attribute to modify.
+        */
+        void AddToTUint32AttributeL( CMPXMedia& aCategory, TInt aAddition,
+                TMPXAttributeData aAttribute );
+
+        /**
+        * Returns the corresponding category index in category list (=iList) for aOrigin.
+        * Notice that category index is the same as categorys MPXIDs iId1 value.
+        * They should be kept the same.
+        *
+        * @param aOrigin  Origin, see values from TVcxMyVideosOrigin, if -1 given, then
+        *                 index for All category is returned.
+        * @return         Index in category list (=iList)
+        */
+        TInt CategoryIndex( TInt aOrigin );
+                
+        /**
+        * Updates categorys New Video Name and Creation date fields. Sets aModified to
+        * ETrue if value is changed, also adds modify event to event list,
+        * but does not send it.
+        *
+        * @param aOrigin     Identifies the category, -1 is used for All category.
+        * @param aModified   Set to ETrue if category item is modified. Otherwise
+        *                    the value is not touched.
+        * @param aIgnoredIds Items with these MDS ids are ignored on the update.
+        *                    Usefull if items are being deleted but are still on the
+        *                    video list.
+        */
+        void UpdateCategoryNewVideoNameAndDateL( TInt aOrigin, TBool& aModified,
+                RArray<TUint32>& aIgnoredIds );
+        
+        /**
+        * Goes through aVideoList and checks all videos which have new video
+        * flag set and returns the latest ones name. Pointer to latest video
+        * object is written to aNewVideo.
+        *
+        * @param aVideoList  Video list
+        * @param aOrigin     Can be used to filter search. Only items which have
+        *                    matching origin are included to the operation.
+        *                    If -1, then all items are included.
+        * @param aIgnoredIds Items with these MDS ids are ignored on the update.
+        *                    Usefull if items are being deleted but are still on the
+        *                    video list.
+        * @param aNewVideo   Pointer to media object containing the new video name is
+        *                    written here. NULL is written if not found. Ownership
+        *                    does not move (stays in aVideoList).
+        *                   
+        */
+        const TDesC& CalculateNewVideoNameL( CMPXMedia& aVideoList, TInt aOrigin,
+                RArray<TUint32>& aIgnoredIds, CMPXMedia*& aNewVideo );
+
+        /**
+        * Video was added or is being removed in iCollection.iCache. Update
+        * Categories accordingly.
+        *
+        * @param aMdsId Item which was added or removed.
+        * @param aAdded ETrue if add operation, EFalse if remove.
+        */
+        void VideoAddedOrRemovedL( TUint32 aMdsId, TBool aAdded );
+
+        /**
+        * Video was added or is being removed in iCollection.iCache. Update
+        * Categories accordingly.
+        *
+        * @param aVideo Item which was added or removed.
+        * @param aAdded ETrue if add operation, EFalse if remove.
+        */
+        void VideoAddedOrRemovedL( CMPXMedia& aVideo, TBool aAdded );
+
+        /**
+        * Videos were added or are being removed in iCollection.iCache. Update
+        * Categories accordingly.
+        *
+        * @param aIds Items which were added or are being removed.
+        * @param aAdded ETrue if add operation, EFalse if remove.
+        */
+        void VideosAddedOrRemovedL( RArray<TUint32>& aIds, TBool aAdded );
+
+        /**
+        * Resets iModifiedCategories
+        */
+        void ResetModifiedCategoriesArray();
+
+        /**
+        * Creates events from iModifiedCategories and adds them
+        * to iCollection.iMessageList. Does not send.
+        */
+        void AddEventsFromModifiedCategoriesArrayL();
+        
+    public:
+    
+        /**
+        * Contains category list, this is kept in memory to speed things up.
+        * Own.
+        */
+        CMPXMedia* iList;
+        
+        /**
+        * Media array of iList, owned by iList.
+        */
+        CMPXMediaArray* iListArray;
+    
+    private:
+        
+        /**
+        * Owner of this object.
+        */
+        CVcxMyVideosCollectionPlugin& iCollection;
+        
+        /**
+        * Array containing boolean for each category, if set ETrue, then modified event
+        * has been added for the category (to iCollection.iMessageList).
+        */
+        RArray<TBool> iModifiedCategories;
+
+    public:     // Friend classes
+        
+        friend class CCollectionPluginTest;        
+    };
+
+#endif   // VCXMYVIDEOSCATEGORIES_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideoscollectionutil.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,315 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+*
+*/
+
+
+
+#ifndef VCXMYVIDEOSCOLLECTIONUTIL_H
+#define VCXMYVIDEOSCOLLECTIONUTIL_H
+
+// INCLUDES
+#include <vcxmyvideosdefs.h>
+
+// FORWARD DECLARATIONS
+class CMPXMedia;
+class RFs;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* Util functions.
+*
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(TVcxMyVideosCollectionUtil)
+    {
+    public:
+    
+        /**
+        * Creates media container and sets up empty media array to it.
+        *
+        * @return CMPXMedia media list.
+        */
+        static CMPXMedia* CreateEmptyMediaListL();
+
+        /**
+        * Creates message list and sets up empty message array to it.
+        *
+        * @return CMPXMessage message list.
+        */
+        static CMPXMedia* CreateEmptyMessageListL();
+        
+        /**
+        * Tries to find aMdsIds from aFromList and if found, copies them
+        * to aToList. KMPXMediaArrayContents arrays must be set for aFromList
+        * and aToList, othewise leave (KErrArgument) occurs.
+        *
+        * @param aFromList Items are copied from here.
+        * @param aToList   Items are copied here.
+        * @param aMdsIds   Item IDs which are copied.
+        */
+        static void CopyFromListToListL(
+                CMPXMedia& aFromList,
+                CMPXMedia& aToList,
+                RArray<TUint32>& aMdsIds );
+
+        /**
+        * Tries to find aMdsIds from aFromArray and if found, copies them
+        * to aToList. KMPXMediaArrayContents arrays must be set for aToList,
+        * othewise leave (KErrArgument) occurs.
+        *
+        * @param aFromArray Items are copied from here.
+        * @param aToList    Items are copied here.
+        * @param aMdsIds    Item IDs which are copied.
+        */
+        static void CopyFromListToListL(
+                RArray<CMPXMedia*>& aFromArray,
+                CMPXMedia& aToList,
+                RArray<TUint32>& aMdsIds );
+
+        /**
+        * Appends all items from aFromList to aToList. New items will point to
+        * same shared memory.
+        *
+        * @param aToList   List in which items are appended to.
+        * @param aFromList List in which items are copied from.
+        */
+        static void AppendToListL( CMPXMedia& aToList, CMPXMedia& aFromList );
+
+        /**
+        * Converts drive letter to drive number.
+        *
+        * @param aDrive drive letter
+        * @return       drive number
+        */
+        static TInt DriveLetter2DriveNumber( const TDesC &aDrive );
+
+        /**
+        * Checks that file system does not have aPath file already, if it does
+        * then the aPath is changed to unique by adding digits to it. Result
+        * is stored to aUniquePath, (event if it is the same as aPath).
+        *
+        * @param aFs          Open session to file server.
+        * @param aPath        File name to make unique.
+        * @param aUniquePath  Generated unique path.
+        */
+        static void MakeUniqueFileNameL( RFs& aFs, const TDesC& aPath, TDes& aUniquePath );
+        
+        /**
+        * Gets KVcxMediaMyVideosOrigin attribute of aVideo.
+        *
+        * @param aVideo  Media object to fetch parameter from.
+        * @return        Origin, see values from TVcxMyVideosOrigin in vcxmyvideosdefs.h
+        */
+        static TUint8 OriginL( CMPXMedia& aVideo );
+
+        /**
+        * Gets KMPXMediaGeneralFlags attribute of aVideo.
+        *
+        * @param aVideo  Media object to fetch parameter from.
+        * @return        Flags, see values from TVcxMyVideosVideoFlags in vcxmyvideosdefs.h
+        */        
+        static TUint32 FlagsL( CMPXMedia& aVideo );
+
+        /**
+         * Gets KMPXMediaGeneralDate (creation date) of aVideo.
+         * 
+         * @param aVideo  Media object to fetch parameter from.
+         * @return        Creation date, works with TTime.
+         */
+        static TInt64 CreationDateL( CMPXMedia& aVideo );
+
+        /**
+        * Gets KVcxMediaMyVideosDownloadId attribute of aVideo.
+        *
+        * @param aVideo  Media object to fetch parameter from.
+        * @return        Download ID in Download Manager.
+        */        
+        static TUint32 DownloadIdL( CMPXMedia& aVideo );
+
+        /**
+        * Gets KVcxMediaMyVideosDownloadState attribute of aVideo.
+        *
+        * @param aVideo  Media object to fetch parameter from.
+        * @return        Download state.
+        */        
+        static TVcxMyVideosDownloadState DownloadStateL( CMPXMedia& aVideo );
+
+        /**
+        * Gets KMPXMediaGeneralId attribute of aVideo.
+        *
+        * @param aVideo  Media object to fetch parameter from.
+        * @return        ID.
+        */
+        static TMPXItemId IdL( const CMPXMedia& aVideo );
+
+        /**
+        * Gets KVcxMediaMyVideosDuration attribute of aVideo.
+        *
+        * @param aVideo  Media object to fetch parameter from.
+        * @return        Duration.
+        */        
+        static TReal32 DurationL( CMPXMedia& aVideo );
+        
+        /**
+        * Gets KMPXMediaGeneralTitle attribute of the video.
+        *
+        * @return  KMPXMediaGeneralTitle value. If attribute is not supported,
+        *          then KNullDesC is returned.
+        */
+        static const TDesC& Title( const CMPXMedia& aVideo );
+
+        /**
+        * Gets KVcxMediaMyVideosRating attribute of the video.
+        *
+        * @param aVideo  Media object to fetch parameter from.
+        * @return        KVcxMediaMyVideosRating value. If attribute is not supported,
+        *                then 0 is returned.
+        */        
+        static TUint8 RatingL( CMPXMedia& aVideo );
+
+        /**
+        * Gets KVcxMediaMyAudioFourCc attribute of the video.
+        *
+        * @param aVideo  Media object to fetch parameter from.
+        * @return        KVcxMediaMyAudioFourCc value. If attribute is not supported,
+        *                then 0 is returned.
+        */
+        static TUint32 AudioFourCcL( CMPXMedia& aVideo );
+
+        /**
+        * Checks if aAttrs contains attributes which are not supported in aVideo.
+        *
+        * @param aVideo   Attributes to check from.
+        * @param aAttrs   Attributes to check.
+        * @param aNonSupportedAttrCanBeFoundFromMds  Set to ETrue if at least one of non supported
+        *                                            attributes can be found from MDS.
+        * @return         ETrue if all aAttrs attributes are supported in aVideo, EFalse
+        *                 otherwise.
+        */
+        static TBool AreSupported( CMPXMedia& aVideo, const TArray<TMPXAttribute>& aAttrs,
+                TBool& aNonSupportedAttrCanBeFoundFromMds );
+
+        /**
+        * Checks if aAttrs belongs to "full" set of parameters which is saved to MDS but not
+        * cached by collection.
+        *
+        * @param aAttr    Attribute to check.
+        * @return         ETrue if aAttr belongs to full set and can be found from MDS, EFalse
+        *                 otherwise.
+        */
+        static TBool AttrBelongsToFullSet( const TMPXAttribute& aAttr );
+        
+        /**
+        * Converts collection category ID to origin.
+        *
+        * @param aCategoryId  Category ID
+        * @return             Returns Origin or KErrNotFound if not found. KVcxMvcCategoryIdAll
+        *                     returns also KErrNotFound.
+        */
+        static TInt Origin( TInt aCategoryId );
+
+        /**
+         * Gets KMPXMediaArrayContents attribute from aMedia. Leaves
+         * with KErrArgument is attribute is not supported.
+         * 
+         * @param aMedia  Media where from the attribute is fetched.
+         * @return        Pointer to media array.
+         */
+        static CMPXMediaArray* MediaArrayL( const CMPXMedia& aMedia );
+        
+        /**
+         * Gets KVcxMediaMyVideosInt32Value attribute from aMedia. Leaves
+         * with KErrArgument if attribute is not supported.
+         * 
+         * @param aMedia  Media where from the attribute is fetched.
+         * @return        Value of KVcxMediaMyVideosInt32Value attribute.
+         */
+        static TInt32 Int32ValueL( CMPXMedia& aMedia );
+
+        /**
+         * Gets KVcxMediaMyVideosUint32Value attribute from aMedia. Leaves
+         * with KErrArgument if attribute is not supported.
+         * 
+         * @param aMedia  Media where from the attribute is fetched.
+         * @return        Value of KVcxMediaMyVideosUint32Value attribute.
+         */
+        static TUint32 Uint32ValueL( CMPXMedia& aMedia );
+        
+        /**
+         * Gets KVcxMediaMyVideosCategoryItemCount attribute from aVideo.
+         *
+         * @param aMedia  Media where from the attribute is fetched.
+         * @return        Returns 0, if attribute is not supported.
+         */
+        static TUint32 CategoryItemCountL( CMPXMedia& aVideo );
+
+        /**
+         * Gets KVcxMediaMyVideosCategoryNewItemCount attribute from aVideo.
+         * 
+         * @param aMedia  Media where from the attribute is fetched.
+         * @return        Returns 0, if attribute is not supported.
+         */
+        static TUint32 CategoryNewItemCountL( CMPXMedia& aVideo );
+        
+        /**
+         * Gets KVcxMediaMyVideosCategoryNewItemName attribute from aVideo.
+         *
+         * @param aMedia  Media where from the attribute is fetched.
+         * @return        Category new video name.
+         */
+        static const TDesC& CategoryNewVideoName( const CMPXMedia& aVideo );
+        
+        /**
+         * Gets KMPXMediaGeneralId attributes from aMediaArray and
+         * puts them to aIdArray. aIdArray is reset before adding.
+         * 
+         * @param aMediaArray  Media array containing media items which
+         *                     have KMPXMediaGeneralId attribute set.
+         * @param aIdArray     Array where to the IDs are written to.
+         */
+        static void GetIdsFromMediaArrayL( CMPXMediaArray& aMediaArray,
+                RArray<TUint32>& aIdArray );
+        
+#ifdef _DEBUG
+        /**
+        * Prints process names which have file handle open to aFileName
+        *
+        * @param aFileName  File to check for open file handles.
+        */
+        static void PrintOpenFileHandlesL( const TDesC& aFileName, RFs& aFs );
+        
+        /**
+        * Gets process name.
+        *
+        * @param aThreadId    Thread ID
+        * @param aProcessName Upon completion process name is written here.
+        */
+        static void GetProcessName( TInt aThreadId, TFullName& aProcessName );
+
+    private:
+        TBuf<500> iProcessName;        
+#endif
+        
+    public:     // Friend classes
+        
+        friend class CCollectionPluginTest;        
+    };
+#endif   // VCXMYVIDEOSCOLLECTIONUTIL_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosmdsalbums.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,528 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Provides albums support from MDS*
+*/
+
+
+
+#ifndef VCXMYVIDEOSMDSALBUMS_H
+#define VCXMYVIDEOSMDSALBUMS_H
+
+// INCLUDES
+#include <mdequery.h>
+#include <mpxmedia.h>
+#include "vcxmyvideosalbum.h"
+#include "vcxmyvideosmdsdb.h"
+
+// FORWARD DECLARATIONS
+class CMPXMedia;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* Provides albums support, uses MDS.
+*
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosMdsAlbums) :
+        public CActive,
+        public MMdEQueryObserver,
+        public MMdERelationItemObserver
+#if 0
+        ,
+        public MMdERelationObserver
+#endif
+    {    
+    public: // Constructors and destructor
+        
+        friend class CVcxMyVideosMdsCmdQueue;
+        friend class CVcxMyVideosMdsDb;
+        
+        enum TVcxAsyncOperation
+            {
+            EVcxNone,
+            EVcxAddVideosToAlbum,
+            EVcxRemoveRelations,
+            EVcxRemoveAlbums
+            };
+        
+        /**
+        * Constructor.
+        * 
+        * @param aMdsDb    Owner of this object.
+        * @param aObserver Object which is listening album related events. If NULL, then
+        *                  no observer is set.
+        */
+        static CVcxMyVideosMdsAlbums* NewL( CVcxMyVideosMdsDb& aMdsDb,
+                MVcxMyVideosMdsAlbumsObserver* aObserver );
+
+        /**
+        * Destructor
+        */
+        virtual ~CVcxMyVideosMdsAlbums();
+
+    public: // new methods
+
+        /**
+         * From CActive.
+         * Cancels possible ongoing asynchronous request.
+         * 
+         * @param aType Defines what kind of request is cancelled.
+         */
+        void DoCancel( CVcxMyVideosMdsDb::TRequestType aType = CVcxMyVideosMdsDb::EAll );
+
+        /**
+         * Cancels queries.
+         *
+         * @param aType Defines what kind of request is cancelled.
+         */
+        void CancelQueries( CVcxMyVideosMdsDb::TRequestType aType = CVcxMyVideosMdsDb::EAll );
+        
+        /**
+        * Gets My Videos albums from MDS asynchronously.
+        * HandleGetAlbumsResp() callback function is called when ready.
+        * Utilizes CVcxMyVideosMdsCmdQueue.
+        *
+        * @param aAlbumList  Album list is written here. Caller owns this, ownership
+        *                    does not move.
+        * @param aClient     Response call is done to this object.
+        */
+        void GetAlbumsL( CMPXMedia* aAlbumList, MVcxMyVideosMdsAlbumsObserver& aClient );
+
+        /**
+         * Gets album from MDS synchronously.
+         * 
+         * @param aId  MDS ID of the album to be fetched.
+         * @returm     MPX media containing album data. Ownership
+         *             moves to caller. NULL if not found.
+         */
+        CMPXMedia* GetAlbumL( TUint32 aId );
+
+        /**
+         * Gets album content IDs asynchronously.
+         * HandleGetAlbumContentIdsResp() callback function is called when ready.
+         * Utilizes CVcxMyVideosMdsCmdQueue.
+         *
+         * @param aAlbumId      Album ID.
+         * @param aContentArray Item IDs which belog to aAlbum are written here. Caller must
+         *                      keep aContentArray available until HandleGetAlbumContentIdsResp
+         *                      has been called.
+        * @param aClient        Response call is done to this object.
+         */
+        void GetAlbumContentIdsL( TUint32 aAlbumId, RArray<TVcxMyVideosAlbumVideo>& aContentArray,
+                MVcxMyVideosMdsAlbumsObserver& aClient );
+        
+        /**
+         * Gets album content videos asynchronously.
+         * HandleGetAlbumContentVideosResp() callback function is called when ready.
+         * Utilizes CVcxMyVideosMdsCmdQueue.
+         * 
+         * @param aAlbumId    Album ID.
+         * @param aVideoList  Media containing media array. Video media objects are added to media array.
+         *                    Caller must keep aVideoList available until callback has been called.
+         * @param aClient     Response call is done to this object.
+         */
+        void GetAlbumContentVideosL( TUint32 aAlbumId, CMPXMedia& aVideoList,
+                MVcxMyVideosMdsAlbumsObserver& aClient );
+        
+        /**
+         * Adds videos to album asynchronously. HandleAddVideosToAlbumResp() callback function
+         * is called when operation finishes.
+         * Utilizes CVcxMyVideosMdsCmdQueue.
+         *
+         * @param aMpxCmd    Media containing command parameters: album ID and video ID list.
+         *                   Results are also written to this object. See media structure and
+         *                   used attributes from vcxmyvideosdef.c file,
+         *                   KVcxCommandMyVideosAddToAlbum command. Ownership does not move.
+         *                   
+         * @param aClient    Response call is done to this object.
+         */
+        void AddVideosToAlbumL( CMPXMedia* aMpxCmd, MVcxMyVideosMdsAlbumsObserver& aClient );
+        
+        /**
+         * Removes relations asynchronously.
+         * Utilizes CVcxMyVideosMdsCmdQueue.
+         * 
+         * @param aRelationIds  Relations which are removed.
+         * @param aResults      In sync with aRelationIds. Result codes, KErrNone if successful,
+         *                      KErrGeneral if failed.
+         * @param aClient       Response call is done to this object.
+         */
+        void RemoveRelationsL( RArray<TUint32>& aRelationIds,
+                RArray<TUint32>& aResults, MVcxMyVideosMdsAlbumsObserver& aClient );
+ 
+        /**
+         * Adds album to MDS. aAlbum should have KMPXMediaGeneralTitle attribute
+         * set. The MDS item ID of the created album is written to KMPXMediaGeneralId
+         * attribute.
+         * 
+         * @param aAlbum  Album which is added to database. 
+         */
+        void AddAlbumL( CMPXMedia& aAlbum );
+        
+        /**
+         * Removes albums asynchronously. HandleRemoveAlbumsResp() callback function
+         * is called when operation finishes.
+         * Utilizes CVcxMyVideosMdsCmdQueue.
+         *
+         * @param aMpxCmd    Media containing command parameters: media array containing album IDs.
+         *                   Results are also written to this object. See media structure and
+         *                   used attributes from vcxmyvideosdef.c file,
+         *                   KVcxCommandMyVideosRemoveAlbums command. Ownership does not move.
+         *                   
+         * @param aClient    Response call is done to this object.
+         */        
+        void RemoveAlbumsL( CMPXMedia* aMpxCmd, MVcxMyVideosMdsAlbumsObserver& aClient );
+        
+        /**
+         * Sets album attributes.
+         * 
+         * @param aVideo  Values from aVideo are written to MDS.
+         */
+        void SetAlbumL( CMPXMedia& aVideo );
+        
+    protected:
+        
+        /**
+        * From CActive.
+        * Called when operation completes.
+        */
+        void RunL();
+
+        /**
+        * From CActive.
+        * Actual implementation for cancelling.
+        */
+        void DoCancel();
+        
+    private:
+
+        /**
+        * Constructor
+        */
+        CVcxMyVideosMdsAlbums( CVcxMyVideosMdsDb& aMdsDb,
+                MVcxMyVideosMdsAlbumsObserver* aObserver );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL();
+
+        /**
+        * Copies album data from aObject to aAlbum.
+        *
+        * @param aObject  MDS object to copy data from.
+        * @param aAlbum   MPX media to copy data to.
+        */
+        void Object2MediaL( CMdEObject& aObject, CMPXMedia& aAlbum );
+        
+        /**
+         * Copies album data from aAlbum to aObject.
+         * 
+         * @param aAlbum MPX media to copy data from.
+         * @param aObject MDS object to copy data to.
+         */
+        void Media2ObjectL( CMPXMedia& aAlbum, CMdEObject& aObject);
+
+        /**
+        * Gets various defintions from MDS and stores them to member variables.
+        */
+        void GetSchemaDefinitionsL();
+
+        /**
+        * Gets My Videos albums from MDS asynchronously.
+        * HandleGetAlbumsResp() callback function is called when ready.
+        *
+        * @param aAlbumList  Album list is written here. Caller owns this, ownership
+        *                    does not move.
+        * @param aClient     Callback is done to this object.
+        */
+        void DoGetAlbumsL( CMPXMedia* aAlbumList, MVcxMyVideosMdsAlbumsObserver& aClient );
+
+        /**
+         * Gets album content IDs from MDS asynchronously.
+         * HandleGetAlbumContentIdsResp() callback function is called when ready.
+         *
+         * @param aAlbumId      Album ID.
+         * @param aContentArray Array containing MDS IDs which belong to aAlbum.
+         *                      Caller is responsible to keep array available
+         *                      until HandleGetAlbumContentResp has been called. 
+        * @param aClient        Callback is done to this object.
+         */
+        void DoGetAlbumContentIdsL( TUint32 aAlbumId,
+                RArray<TVcxMyVideosAlbumVideo>& aContentArray,
+                MVcxMyVideosMdsAlbumsObserver& aClient );
+
+        /**
+         * Gets album content videos from MDS asynchronously.
+         * HandleGetAlbumContentVideosResp() callback function is called when ready.
+         * 
+         * @param aAlbumId   Album ID.
+         * @param aVideoList Media containing empty media array. Videos are added to array. Caller
+         *                   must keep aVideoList available until HandleGetAlbumContentVideosResp
+         *                   is called.
+         * @param aClient    Callback is done to this object.
+         */
+        void DoGetAlbumContentVideosL( TUint32 aAlbumId, CMPXMedia& aVideoList,
+                MVcxMyVideosMdsAlbumsObserver& aClient );
+
+        /**
+         * Adds videos to album asynchronously. HandleAddVideosToAlbumResp() callback function
+         * is called when operation finishes.
+         * 
+         * @param aMpxCmd    Media containing command parameters: album ID and video ID list.
+         *                   Results are also written to this object. See media structure and
+         *                   used attributes from vcxmyvideosdef.c file,
+         *                   KVcxCommandMyVideosAddToAlbum command. Ownership does not move.
+         * @param aClient    Response call is done to this object.
+         */
+        void DoAddVideosToAlbumL( CMPXMedia* aMpxCmd, MVcxMyVideosMdsAlbumsObserver& aClient );
+        
+        /**
+         * Removes relations asynchronously.
+         * 
+         * @param aRelationIds  Relations which are removed.
+         * @param aResults      In sync with aRelationIds. Result codes, KErrNone if successful,
+         *                      KErrGeneral if failed.
+         * @param aClient       Response call is done to this object.
+         */
+        void DoRemoveRelationsL( RArray<TUint32>& aRelationIds,
+                RArray<TUint32>& aResults, MVcxMyVideosMdsAlbumsObserver& aClient );
+        
+        /**
+         * Removes albums asynchronously.
+         * 
+         * @param aMpxCmd  Media containing command parameters: array with albums IDs.
+         * @param aClient  Response call is done to this object.
+         */
+        void DoRemoveAlbumsL( CMPXMedia* aMpxCmd,
+                MVcxMyVideosMdsAlbumsObserver& aClient );
+
+        /**
+        * Handles album query responses.
+        * 
+        * @param aQuery  Query instance.
+        * @param aError  <code>KErrNone</code>, if the query was completed
+        *                successfully. Otherwise one of the system-wide error 
+        *                codes.
+        */
+        void HandleAlbumQueryCompletedL(CMdEQuery& aQuery, TInt aError);
+
+        /**
+        * Handles video query responses.
+        * 
+        * @param aQuery  Query instance.
+        * @param aError  <code>KErrNone</code>, if the query was completed
+        *                successfully. Otherwise one of the system-wide error 
+        *                codes.
+        * @param aFirstNewItemIndex Index of the first new item in the query.
+        * @param aNewItemCount      How many new items were added.
+        * @param aComplete          ETrue if query is complete, EFalse if new to come.
+        */
+        void HandleVideoQueryResultsL( CMdEQuery& aQuery, TInt aError,
+                TInt aFirstNewItemIndex, TInt aNewItemCount, TBool aComplete );
+
+        /**
+         * Handles relation query responses.
+         * 
+         * @param aQuery Query instance.
+         * @param aError  <code>KErrNone</code>, if the query was completed
+         *                successfully. Otherwise one of the system-wide error 
+         *                codes.
+         */
+        void HandleRelationQueryCompletedL( CMdEQuery& aQuery, TInt aError );
+
+        /**
+         * Called from RunL when video adding to album completes.
+         */
+        void HandleAddVideosToAlbumCompletedL();
+
+        /**
+         * Called from RunL when relations remove completes.
+         */
+        void HandleRemoveRelationsCompletedL();
+
+        /**
+         * Called from RunL when albums remove completes.
+         */
+        void HandleRemoveAlbumsCompletedL();
+
+        /**
+         * Registers observing to MDS session.
+         */
+        void SetObservingL();
+        
+    protected:
+
+        /**
+        * From MMdEQueryObserver.
+        * Called to notify the observer that new results have been received 
+        * in the query.
+        *
+        * @param aQuery              Query instance that received new results.
+        * @param aFirstNewItemIndex  Index of the first new item that was added
+        *                            to the result item array.
+        * @param aNewItemCount       Number of items added to the result item 
+        *                            array.
+        */
+        void HandleQueryNewResults(CMdEQuery& aQuery,
+                TInt aFirstNewItemIndex,
+                TInt aNewItemCount);
+
+        /**
+        * From MMdEQueryObserver.
+        * Called to notify the observer that the query has been completed,
+        * or that an error has occured.
+        *
+        * @param aQuery  Query instance.
+        * @param aError  <code>KErrNone</code>, if the query was completed
+        *                successfully. Otherwise one of the system-wide error 
+        *                codes.
+        */
+        void HandleQueryCompleted(CMdEQuery& aQuery, TInt aError);
+
+        /**
+         * From MMdERelationItemObserver
+         */
+        void HandleRelationItemNotification(CMdESession& aSession, 
+                    TObserverNotificationType aType,
+                    const RArray<TMdERelation>& aRelationArray);
+
+        /**
+         * From MMdERelationObserver
+         */
+        void HandleRelationNotification(CMdESession& aSession, 
+                TObserverNotificationType aType,
+                const RArray<TItemId>& aRelationIdArray);
+        
+    private:
+        
+        /**
+         * Main class for Mds operations. Owns session to MDS.
+         */
+        CVcxMyVideosMdsDb& iMdsDb;
+        
+        /**
+         * Observer of albums related events. May be NULL.
+         * not own.
+         */
+        MVcxMyVideosMdsAlbumsObserver* iObserver;
+        
+        /**
+        * Asynchronous album object fetching query is stored here. Own.
+        */
+        CMdEObjectQuery* iAlbumQuery;
+
+        /**
+        * Asynchronous video object fetching query is stored here. Own.
+        */
+        CMdEObjectQuery* iVideoQuery;
+
+        /**
+        * Asynchronous relation fetching query is stored here. Own.
+        */
+        CMdERelationQuery* iRelationQuery;
+                
+        /**
+        * The default namespace definition, not own.
+        */
+        CMdENamespaceDef* iNamespaceDef;
+        
+        /**
+        * Album object definition, not own.
+        */
+        CMdEObjectDef* iAlbumObjectDef;
+        
+        /**
+        * Album type property definition, not own.
+        */
+        CMdEPropertyDef* iTypePropertyDef;
+        
+        /**
+         * "Contains" relation definition, not own.
+         */
+        CMdERelationDef* iContainsRelationDef;
+        
+        /**
+        * Pointer to album list which is being fetched from MDS. Not own.
+        */
+        CMPXMedia* iAlbumList;
+
+        /**
+        * Pointer to video list which is being fetched from MDS. Not own.
+        */
+        CMPXMedia* iVideoList;
+
+        /**
+         * When doing some async operation to MDS, the album ID is stored here.
+         */
+        TUint32 iAlbumId;
+        
+        /**
+         * When fetching album content from MDS, the pointer to content array is stored here.
+         * Only MDS ID is filled to TVideo.
+         * Not own.
+         */
+        RArray<TVcxMyVideosAlbumVideo>* iAlbumContent;
+
+        /**
+         * The pending async operation ID is stored here.
+         */
+        TVcxAsyncOperation iAsyncOperation;
+
+        /**
+         * Used for storing items during async mds operations.
+         */
+        RPointerArray<CMdEInstanceItem> iItemArray;
+        
+        /**
+         * Used for storing result buffer during async mds operations.
+         */
+        RMdEDataBuffer iResultBuffer;
+
+        /**
+         * Used in async operations to store
+         * pointer to result array (which is owned by the user). 
+         */
+        RArray<TInt>* iResultArray;
+
+        /**
+         * Used in async operations to store
+         * pointer to result array (which is owned by the user). 
+         */
+        RArray<TUint32>* iResultArrayUint32;
+        
+        /**
+         * Used in async oprations (EVcxAddVideosToAlbum and EVcxRemoveVideosFromAlbum) to store
+         * pointer to item ID array (which is owned by the user). 
+         */
+        RArray<TUint32>* iIdArray;
+                
+        /**
+         * Used to store command parameters during async MDS operations. Not owned.
+         */
+        CMPXMedia* iMpxCmd;
+        
+        /**
+         * Used to store pointer to client who initiated the async operation.
+         */
+        MVcxMyVideosMdsAlbumsObserver* iClient;
+
+    };
+
+#endif   // VCXMYVIDEOSMDSALBUMS_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosmdsdb_stub.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,807 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   MPX My Videos collection plugins' MDS database class*
+*/
+
+
+
+#ifndef VCXMYVIDEOSMDSDB_H
+#define VCXMYVIDEOSMDSDB_H
+
+
+#include <mdesession.h>
+#include <mdequery.h>
+#include <harvesterclient.h>
+#include <mpxcollectionmessagedefs.h>
+#include <vcxmyvideosdefs.h>
+#include <e32property.h>
+#include "vcxmyvideosalbum.h"
+#include <f32file.h>
+
+class CVcxMyVideosMdsAlbums;
+class CMPXMedia;
+class CVcxMyVideosMdsCmdQueue;
+
+const TUid KHarvesterPSShutdown = { 0x200009F5 } ;
+const TInt KMdSShutdown = 0x00000002; // values 1 = shutdown, 0 = restart, normal state
+
+static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy);
+static _LIT_SECURITY_POLICY_C1(KPowerMgmtPolicy,ECapabilityPowerMgmt);
+
+/**
+ *  MPX My Videos collection MDS database observer class.
+ *  Part of ECOM Plugin.
+ */
+NONSHARABLE_CLASS(MVcxMyVideosMdsDbObserver)
+    {        
+    public:
+    
+        /* 
+        
+        Defined in mpxcollectionmessagedefs.h:  
+        
+        enum TMPXChangeEventType
+            {
+            EMPXItemDeleted,      // item/playlist deleted
+            EMPXItemInserted,     // item/playlist added
+            EMPXItemModified      // item/playlist/artist/album/genre/composer modified
+            };
+        */
+        
+        /**
+        * Handler function for database events.
+        *
+        * @param aEvent       Event type.
+        * @param aId          Array of IDs in database.
+        * @param aEventsLeft  How many events are still coming.
+        */
+        virtual void HandleMyVideosDbEvent( TMPXChangeEventType aEvent, RArray<TUint32>& aId, TInt aEventsLeft ) = 0;
+
+        /**
+        * Handler function for video list fetching events. This callback is called as a response
+        * to CreateVideoList( aSync = EFalse ).
+        *
+        * @param aVideoList          List of videos fetched from MDS.
+        * @param aNewItemsStartIndex Start position for the new items added. If -1, then no new
+        *                            items were added.
+        * @param aComplete           ETrue if list is complete and no more items are expected,
+        *                            EFalse if there are more to come.
+        */
+        virtual void HandleCreateVideoListResp( CMPXMedia* aVideoList,
+                TInt aNewItemsStartIndex, TBool aComplete ) = 0;
+
+        /**
+        * Handler function for media remove/insert events. This is called every time
+        * media is removed or inserted (objects become present or non present).
+        */
+        virtual void HandleObjectPresentNotification() = 0;
+    };
+
+
+/**
+ *  MPX My Videos collection MDS albums related functionality observer class.
+ *  Part of ECOM Plugin.
+ */
+NONSHARABLE_CLASS(MVcxMyVideosMdsAlbumsObserver)
+    {        
+    public:
+            
+        /**
+        * This callback is called as a response to GetAlbumsL.
+        *
+        * @param aAlbumList List of albums fetched from MDS.
+        */
+        virtual void HandleGetAlbumsResp( CMPXMedia* aAlbumList ) = 0;
+
+        /**
+        * This callback is called as a response to GetAlbumContentIdsL.
+        *
+        * @param aAlbumId      Album ID which was fetched.
+        * @param aContentArray Array containing MDS object IDs. This array is the same which
+        *                      was given in GetAlbumContentIdsL call.
+        */
+        virtual void HandleGetAlbumContentIdsResp( TUint32 aAlbumId,
+                RArray<TVcxMyVideosAlbumVideo>& aContentArray ) = 0;
+
+        /**
+         * Called as a response to GetAlbumContentVideosL.
+         * 
+         * @param aAlbumId           ID of the album containing the result videos.
+         * @param aVideoList         Media containing array of videos.
+         * @param aError             Error code in case of failure.
+         * @param aFirstNewItemIndex Index of the first new item.
+         * @param aNewItemCount      How many new items in the query since the last results.
+         * @param aComplete          ETrue if query is complete, EFalse if there is more to come.
+         */
+        virtual void HandleGetAlbumContentVideosResp( TUint32 aAlbumId, CMPXMedia& aVideoList,
+                TInt aError, TInt aFirstNewItemIndex, TInt aNewItemCount, TBool aComplete ) = 0;
+
+        /**
+         * Called as a response to AddVideosToAlbumL. Results are written from aItemArray
+         * to aCmd (KVcxMediaMyVideosInt32Value attribute). KErrNone if operation was successful,
+         * KErrGeneral otherwise.
+         * 
+         * @param aCmd        Pointer to same object which was given in AddVideosToAlbumL function call.
+         * @param aItemArray  Array of relation items that were added to MDS.
+         */
+        virtual void HandleAddVideosToAlbumResp( CMPXMedia* aCmd,
+                RPointerArray<CMdEInstanceItem>& aItemArray ) = 0;
+
+        /**
+         * Called as a response to RemoveRelationsL.
+         * 
+         * @param aRelationIds  Relations which were tried to be removed.
+         * @param aResults      Result codes, in sync with aRelationIds. KErrNone if successful,
+         *                      KErrGeneral if failed.
+         */
+        virtual void HandleRemoveRelationsResp( RArray<TUint32>& aRelationIds,
+                RArray<TUint32>& aResults ) = 0;
+
+        /**
+         * Called as a response to RemoveAlbumsL.
+         * 
+         * @param aCmd      Cmd which was given in RemoveAlbumsL call.
+         * @param aResults  Result IDs.
+         */
+        virtual void HandleRemoveAlbumsResp( CMPXMedia* aCmd,
+                RArray<TUint32>& aResultIds ) = 0;
+
+        /**
+         * Event handler function for relation delete events.
+         * 
+         * @param aType           Event type
+         * @param aRelationArray  Array containing relations.
+         */
+        virtual void HandleRelationEvent( TObserverNotificationType aType,
+                const RArray<TMdERelation>& aRelationArray ) = 0;
+
+#if 0
+        /**
+         * Event handler function for relation add events.
+         * 
+         * @param aType           Event type
+         * @param aRelationArray  Array containing relations.
+         */
+        virtual void HandleRelationIdEvent( TObserverNotificationType aType,
+                const RArray<TUint32>& aRelationIdArray ) = 0;
+#endif
+        
+    };
+
+/**
+ * PSCW Listener Observer interface for signaling that MDS has Shutdown/restarted
+ */
+class MVcxMdsShutdownMonitorObserver
+    {
+public:
+
+    virtual void ShutdownNotification( TInt aShutdownState ) = 0;
+    };
+
+/**
+ *  Active object for observing P&S keys
+ */
+class CVcxMdsShutdownMonitor: public CActive
+    {
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @return Instance of CVcxMdsShutdownMonitor.
+     */
+    static CVcxMdsShutdownMonitor* NewL( MVcxMdsShutdownMonitorObserver& aObserver,
+            const TUid& aKeyCategory, const TInt aPropertyKey, TBool aDefineKey);
+
+    /**
+     * Destructor
+     */
+    virtual ~CVcxMdsShutdownMonitor();
+    
+protected:
+
+    /**
+     * Handles an active object's request completion event.
+     */
+    void RunL();
+
+    /**
+     * Implements cancellation of an outstanding request.
+     */
+    void DoCancel();
+
+private:
+
+    /**
+     * C++ default constructor
+     *
+     * @return Instance of CVcxMdsShutdownMonitor.
+     */
+    CVcxMdsShutdownMonitor( MVcxMdsShutdownMonitorObserver& aObserver,
+            const TUid& aKeyCategory, const TInt iPropertyKey, TBool aDefineKey );
+
+    /**
+     * Symbian 2nd phase constructor can leave.
+     */
+    void ConstructL();
+
+private:
+    
+    // not own
+    MVcxMdsShutdownMonitorObserver& iObserver;
+    
+    const TUid& iKeyCategory;
+    RProperty iProperty;
+    TInt iPropertyKey;
+    
+    TBool iDefineKey;
+};
+
+/**
+ *  MPX My Videos collection ECOM plugin's MDS database class.
+ */
+NONSHARABLE_CLASS(CVcxMyVideosMdsDb) :
+                                public CBase,
+                                public MMdESessionObserver,
+                                public MMdEQueryObserver,
+                                public MMdEObjectObserver,
+                                public MMdEObjectPresentObserver,
+                                public MVcxMdsShutdownMonitorObserver
+    {
+        
+public:
+
+    friend class CVcxMyVideosMdsAlbums;
+    friend class CVcxMyVideosMdsCmdQueue;
+
+    enum TRequestType
+        {
+        EAll,
+        EGetVideoList,
+        EGetAlbums,
+        EGetAlbumContentIds,
+        EGetAlbumContentVideos,
+        EAddVideosToAlbum,
+        ERemoveRelations,
+        ERemoveAlbums
+        };
+    
+    class TEvent
+        {
+    public:
+        
+        TUint32 iMdsId;
+        TInt    iEventType;
+        };
+    
+    /**
+     * Two-phased constructor.
+     * @param aObserver The db change observer.
+     */
+    static CVcxMyVideosMdsDb* NewL( MVcxMyVideosMdsDbObserver* aObserver,
+            RFs& aFs, MVcxMyVideosMdsAlbumsObserver* aAlbumsObserver = NULL );
+
+    /**
+     * Two-phased constructor.
+     * @param aObserver The db change observer.
+     */
+    static CVcxMyVideosMdsDb* NewLC( MVcxMyVideosMdsDbObserver* aObserver,
+            RFs& aFs, MVcxMyVideosMdsAlbumsObserver* aAlbumsObserver = NULL );
+
+
+    /**
+    * Destructor.
+    */
+    virtual ~CVcxMyVideosMdsDb();
+
+    /**
+    * Cancels possible ongoing asynchronous operations.
+    * 
+    * @param aType What kind of requests are cancelled. 
+    */
+    void Cancel( TRequestType aType = EAll );
+
+    /**
+     * Creates list of videos from MDS. This function utilizes CVcxMyVideosMdsQueue, ie
+     * commands are put in queue if there are other commands pending.
+     *
+     * @param aSortingOrder Sorting order, see values from TSortingOrder.
+     * @param aAscending    Sort direction, if ETrue then ascending, else descending.
+     * @param aFullDetails  If ETrue, then all details will be filled to media objects,
+     *                      if EFalse, then only subset.
+     * @param aVideoList    Reference to pointer variable. Container type CMPXMedia class, contains
+     *                      CMPXMediaArray filled with CMPXMedia objects. If aVideoList
+     *                      pointer variable is NULL, then new medialist is created.
+     *                      If pointer variable already contains value, then the given medialist
+     *                      should have empty media array. New items are appended to it.
+     *                      Caller naturally owns the data.
+     *                      
+     */
+    void CreateVideoListL( TVcxMyVideosSortingOrder aSortingOrder,
+            TBool aAscending, TBool aFullDetails, CMPXMedia*& aVideoList );
+
+    /**
+     * Add new video.
+     *
+     * @param aVideo    Reference to CMPXMedia object.
+     * @param aMdsId    New mds id is inserted to aMdsId
+     */
+    void AddVideoL( CMPXMedia& aVideo, TUint32& aMdsId );
+
+    /**
+     * Remove video.
+     *
+     * @param aMdsId ID of the item to be removed.
+     * @return       KErrNotFound if video was not found, KErrNone if found and deleted.
+     *               If failed, system-wide error code.
+     */
+    TInt RemoveVideo( TUint32 aMdsId );
+
+    /**
+     * Update video.
+     *
+     * @param aVideo Video to update in MDS database.
+     */
+    void UpdateVideoL( CMPXMedia& aVideo );
+
+    /**
+     * Get one video item from MDS and create a new media
+     * object from it.
+     *
+     * @param aId          Video identifier in MDS database.
+     * @param aFullDetails If ETrue, then all details are fetched, othewise only subset.
+     * @return             Pointer to media object, ownership moves. NULL if
+     *                     not found.
+     */
+    CMPXMedia* CreateVideoL( TUint32 aId, TBool aFullDetails = ETrue );
+
+    /**
+     * Called by iEventProcessor.
+     */
+    static TInt ProcessEvents( TAny* aPtr );
+    
+protected:
+    
+// from MMdESessionObserver
+
+	/**
+	 * Called to notify the observer that opening the session has been
+	 * completed and, if the opening succeeded, the session is ready for use.
+	 *
+	 * @param aSession  session
+	 * @param aError    <code>KErrNone</code>, if opening the session succeeded
+	 *     or one of the system-wide error codes, if opening the session failed
+	 */
+	void HandleSessionOpened(CMdESession& aSession, TInt aError);
+
+	/**
+	 * Called to notify the observer about errors, which are not a direct
+	 * consequence of the operations initiated by the client but caused by some
+	 * external source (e.g., other clients). The error cannot be recovered and
+	 * all on-going operations initiated by the client have been aborted.
+	 * Any attempts to continue using the session will cause a panic. The
+	 * client should close the session immediately and try to open a new
+	 * session if it needs to continue using the metadata engine.
+	 *
+	 * @param aSession  session
+	 * @param aError    one of the system-wide error codes
+	 */
+	void HandleSessionError(CMdESession& aSession, TInt aError);
+
+
+//  from MMdEQueryObserver
+
+    /**
+     * Called to notify the observer that new results have been received 
+     * in the query.
+     *
+     * @param aQuery              Query instance that received new results.
+     * @param aFirstNewItemIndex  Index of the first new item that was added
+     *                            to the result item array.
+     * @param aNewItemCount       Number of items added to the result item 
+     *                            array.
+     */
+    void HandleQueryNewResults(CMdEQuery& aQuery,
+                                       TInt aFirstNewItemIndex,
+                                       TInt aNewItemCount);
+
+    /**
+     * Called to notify the observer that the query has been completed,
+     * or that an error has occured.
+     *
+     * @param aQuery  Query instance.
+     * @param aError  <code>KErrNone</code>, if the query was completed
+     *                successfully. Otherwise one of the system-wide error 
+     *                codes.
+     */
+    void HandleQueryCompleted(CMdEQuery& aQuery, TInt aError);
+
+
+// from MMdEObjectObserver
+
+    void HandleObjectNotification( CMdESession& aSession,
+            TObserverNotificationType aType,
+            const RArray<TItemId>& aObjectIdArray);
+
+// from MMdEObjectPresentObserver
+    void HandleObjectPresentNotification(CMdESession& aSession, 
+			TBool aPresent, const RArray<TItemId>& aObjectIdArray);
+			
+// from MVcxMdsShutdownMonitorObserver
+    void ShutdownNotification( TInt aShutdownState );
+
+private:
+
+    /**
+     * Constructor.
+     * @param aObserver The db change observer.
+     * @param aFs      Session to file server.
+     */
+    CVcxMyVideosMdsDb( MVcxMyVideosMdsDbObserver* aObserver,
+            RFs& aFs, MVcxMyVideosMdsAlbumsObserver* aAlbumsObserver = NULL );
+
+    void ConstructL();
+
+    /**
+     * Gets object from MDS.
+     *
+     * @param aId      The ID of the object to get.
+     * @param aIsVideo Set to ETrue if the object to be fetched is video. If set to
+     *                 EFalse, then the object is assumed to be album.
+     * @return         The object if found, NULL otherwise.
+     */
+    CMdEObject* ObjectL( const TItemId aId, TBool aIsVideo = ETrue );
+
+    /**
+     * Read the video details from the given object to the media class.
+     *
+     * @param aObject       The object to read from.
+     * @param aVideo        The media object to write to.
+     * @param aFullDetails  If ETrue, then all parameters are copied, if
+     *                      EFalse, then only subset which is (usually) needed when
+     *                      showing videolist on UI.
+     */
+    void Object2MediaL(
+            CMdEObject& aObject,
+            CMPXMedia& aVideo,
+            TBool aFullDetails = EFalse );
+
+    /**
+     * Fill the object from media.
+     *
+     * @param aMedia  The media class to read from.
+     * @param aObject The object to modify.
+     */
+    void Media2ObjectL( CMPXMedia& aVideo, CMdEObject& aObject );
+
+    /*
+     * Get the schema definitions needed.
+     */
+    void GetSchemaDefinitionsL();
+
+    /**
+    * Handles MDS object changes.
+    *
+    * @param aType           Type of the event.
+    * @param aObjectIdArray  MDS IDs.
+    */
+    void DoHandleObjectNotificationL(
+            TObserverNotificationType aType,
+            const RArray<TItemId>& aObjectIdArray );
+
+    /**
+     * Leaving version of HandleQueryNewResults.
+     * Called to notify the observer that new results have been received 
+     * in the query.
+     *
+     * @param aQuery              Query instance that received new results.
+     * @param aFirstNewItemIndex  Index of the first new item that was added
+     *                            to the result item array.
+     * @param aNewItemCount       Number of items added to the result item 
+     *                            array.
+     */
+    void DoHandleQueryNewResultsL(CMdEQuery& aQuery,
+            TInt aFirstNewItemIndex, TInt aNewItemCount);
+
+    /**
+     * Creates list of videos from MDS.
+     *
+     * @param aSortingOrder Sorting order, see values from TSortingOrder.
+     * @param aAscending    Sort direction, if ETrue then ascending, else descending.
+     * @param aFullDetails  If ETrue, then all details will be filled to media objects,
+     *                      if EFalse, then only subset.
+     * @param aVideoList    Reference to pointer variable. Container type CMPXMedia class, contains
+     *                      CMPXMediaArray filled with CMPXMedia objects. If aVideoList
+     *                      pointer variable is NULL, then new medialist is created.
+     *                      If pointer variable already contains value, then the given medialist
+     *                      should have empty media array. New items are appended to it.
+     *                      Caller naturally owns the data.
+     *                      
+     */
+    void DoCreateVideoListL( TVcxMyVideosSortingOrder aSortingOrder,
+            TBool aAscending, TBool aFullDetails, CMPXMedia*& aVideoList );
+
+    /**
+     * Handles query complete events asynchronously.
+     */
+    static TInt AsyncHandleQueryCompleted( TAny* aPtr );
+
+    /**
+     * Sets Creation Date and Modified properties to object. Uses current date
+     * value.
+     * 
+     * @param aObject  Object to modify.
+     */
+    void SetCreationAndModifiedDatesL( CMdEObject& aObject );
+
+    /**
+     * Sets creation date to aObject from aVideo.
+     * 
+     * @param aVideo  Creation date is copied from here.
+     * @param aObject Creation date is written here.
+     */
+    void SetCreationDateToObjectL( const CMPXMedia& aVideo, CMdEObject& aObject );
+
+    /**
+     * Opens MDS session.
+     */
+    void OpenMdsSessionL();
+
+    /**
+    * @return MDS session.
+    */
+    CMdESession& MdsSessionL();
+    
+    /**
+     * Called by ProcessEvents.
+     */
+    TInt DoProcessEvents();
+    
+public:
+
+    /**
+    * Set to ETrue when starting to fetch media list from MDS.
+    * Set to EFalse when fetching is finished.
+    */
+    TBool iVideoListFetchingIsOngoing;
+
+    /**
+    * Album related functionality.
+    */
+    CVcxMyVideosMdsAlbums* iAlbums;
+        
+private: // data
+
+    /**
+    * Command queue. Own.
+    */
+    CVcxMyVideosMdsCmdQueue* iCmdQueue;
+
+    /**
+     * The MDS session object. Own.
+     */
+    CMdESession* iMdsSession;
+
+    /**
+     * The sessions error state.
+     */
+    TInt iMdsSessionError;
+
+    /**
+    * Asynchronous video list fetching query is stored here.
+    */
+    CMdEObjectQuery* iVideoQuery;
+    
+    /**
+    * Pointer to video list which is being fetched from the MDS.
+    * Not own.
+    */
+    CMPXMedia* iVideoList;
+    
+    /**
+     * Requested detail level is stored here during the asynchronous video list fetching.
+     */
+    TBool iFullDetails;
+    
+    /**
+    * The default namespace definition. Not own.
+    */
+    CMdENamespaceDef* iNamespaceDef;
+
+    /**
+     * The Video object definition. Not own.
+     */
+    CMdEObjectDef* iVideoObjectDef;
+
+    /**
+     * 2.
+     * The Title property definition. Not own.
+     */
+    CMdEPropertyDef* iTitlePropertyDef;
+
+    /**
+     * 3.
+     * The Description property definition. Not own.
+     */
+    CMdEPropertyDef* iDescriptionPropertyDef;
+
+    // 4. URI ( = file path ), set with SetUriL method
+
+    /**
+     * 5.
+     * The Size property definition. Not own.
+     */
+    CMdEPropertyDef* iSizePropertyDef;
+
+    /**
+     * 6.
+     * The Creation Date property definition. Not own.
+     */
+    CMdEPropertyDef* iCreationDatePropertyDef;
+    
+    /**
+    * Time offset from the universal time. Not own.
+    */
+    CMdEPropertyDef* iTimeOffsetPropertyDef;
+
+    /**
+     * 7.
+     * The Flags property definition. Not own.
+     */
+    CMdEPropertyDef* iFlagsPropertyDef;
+
+    /**
+     * 8.
+     * The Copyright property definition. Not own.
+     */
+    CMdEPropertyDef* iCopyrightPropertyDef;
+
+    /**
+     * 9.
+     * The Item Type property definition. Not own.
+     */
+    CMdEPropertyDef* iItemTypePropertyDef;
+
+    /**
+     * 10.
+     * The Modified Date property definition. Not own.
+     */
+    CMdEPropertyDef* iLastModifiedDatePropertyDef;
+
+    /**
+     * 11.
+     * The Age Profile property definition. Not own.
+     */
+    CMdEPropertyDef* iAgeProfilePropertyDef;
+
+    /**
+     * 12.
+     * The Audio Language property definition. Not own.
+     */
+    CMdEPropertyDef* iAudioLanguagePropertyDef;
+
+    /**
+     * 13.
+     * The Author property definition. Not own.
+     */
+    CMdEPropertyDef* iAuthorPropertyDef;
+
+    /**
+     * 14.
+     * The Origin property definition. Not own.
+     */
+    CMdEPropertyDef* iOriginPropertyDef;
+
+    /**
+     * 15.
+     * The Duration property definition. Not own.
+     */
+    CMdEPropertyDef* iDurationPropertyDef;
+
+    /**
+     * 16.
+     * The Last Play Point property definition. Not own.
+     */
+    CMdEPropertyDef* iLastPlayPositionPropertyDef;
+    
+    /**
+    * 18.
+    * Rating property definition, not own.
+    */
+    CMdEPropertyDef* iRatingPropertyDef;
+    
+    /**
+    * 19.
+    * Bitrate property definition, not own.
+    */
+    CMdEPropertyDef* iBitratePropertyDef;
+    
+    /**
+    * DRM protection flag, not own.
+    */
+    CMdEPropertyDef* iDrmPropertyDef;
+
+    /**
+    * Not own.
+    */
+    CMdEPropertyDef* iAudioFourCcPropertyDef;
+    
+    /**
+    * 22.
+    * Resolution Y-axis unit. Not own.
+    */
+    CMdEPropertyDef* iWidthPropertyDef;
+    
+    /**
+    * 23. 
+    * Resolution X-axis unit. Not own.
+    */
+    CMdEPropertyDef* iHeightPropertyDef;
+    
+    /**
+     * 24.
+     * The artist property definition. Not own.
+     */
+    CMdEPropertyDef* iArtistPropertyDef;
+    
+    /**
+     * Active scheduled waiter Own..
+     */
+    CActiveSchedulerWait* iActiveSchedulerWait;
+
+    /**
+     * The file server session.
+     */
+    RFs& iFs;
+
+    /**
+    * The observer for db changes. Not own.
+    */
+    MVcxMyVideosMdsDbObserver* iMdsDbObserver;
+    
+    /**
+     * The observer for albums related database events. Not own.
+     */
+    MVcxMyVideosMdsAlbumsObserver* iAlbumsObserver;
+    
+    /**
+     * Used to handle complete events asynchronously.
+     * This avoids problems like deleting query objects in the
+     * handler or starting new query from the handler.
+     */
+    CAsyncCallBack* iAsyncHandleQueryCompleteCaller;
+
+    /**
+    * Monitors Mds server shutdown states.
+    */
+    CVcxMdsShutdownMonitor* iMdsShutdownMonitor;
+
+    /**
+     * Used for handling events on background.
+     */
+    CIdle* iEventProcessor;
+    
+    /**
+     * Incoming events are stored here and "slowly" fed to observer.
+     */
+    RArray<TEvent> iEvents;
+        
+public:     // Friend classes
+    
+    friend class CCollectionPluginTest;
+    
+    };
+
+#endif // VCXMYVIDEOSMDSDB_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosmessagelist_stub.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:    Groups messages and sends them to clients.*
+*/
+
+
+
+
+#ifndef VCXMYVIDEOSMESSAGELIST_H
+#define VCXMYVIDEOSMESSAGELIST_H
+
+// INCLUDES
+
+#include <mpxcollectionmessagedefs.h>
+#include <vcxmyvideosdefs.h>
+
+// FORWARD DECLARATIONS
+class CVcxMyVideosCollectionPlugin;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* Groups messages and sends them to clients.
+*
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosMessageList) :
+    public CBase
+    {    
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor
+        *
+        * @param aCollection Collection, owner of this object.  
+        * @return            Object constructed
+        */
+        static CVcxMyVideosMessageList* NewL ( CVcxMyVideosCollectionPlugin& aCollection );
+
+        /**
+        * Destructor
+        */
+        virtual ~CVcxMyVideosMessageList();
+ 
+    private:
+    
+        /**
+        * Constructor
+        */
+        CVcxMyVideosMessageList( CVcxMyVideosCollectionPlugin& aCollection );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL ();
+        
+        /**
+        * Creates iMessageList if not created already.
+        */
+        void CreateMessageListL();
+
+        /**
+        * Checks if this event is already on the message list. Used for
+        * optimizing duplicate events.
+        *
+        * @param aId         MPX Item ID.
+        * @param aChange     Change type.
+        * @param aExtraInfo  Event extra info, see TVcxMyVideosEventInfo enum
+        *                    from vcxmyvideosdefs.h for values.
+        * @return            ETrue if the event is already on the list,
+        *                    EFalse otherwise.
+        */
+        TBool AlreadyInMessageListL( const TMPXItemId& aId,
+                TMPXChangeEventType aChange, TInt32 aExtraInfo );    
+    public:
+    
+        /**
+        * Creates collection change event and appends it to iMessageList.
+        *
+        * @param aId        Context that was changed
+        * @param aChange    Change type, see values from mpxcollectionmessagedefs.h.
+        * @param aExtraInfo Extra information about the event, this value is written to
+        *                   KVcxMediaMyVideosInt32Value attribute. If aExtraInfo
+        *                   is 0, nothing is written. See TVcxMyVideosEventInfo enum
+        *                   from vcxmyvideosdefs.h for values.
+        * @param aVideo     Video object which is in cache already.
+        */
+        void AddEventL(const TMPXItemId& aId, TMPXChangeEventType aChange, TInt32 aExtraInfo = 0, CMPXMedia* aVideo = NULL );
+
+        /**
+        * Creates My Videos custom event and appends it to iMessageList.
+        *
+        * @param aEvent Event ID, see values from vcxmyvideosdefs.h.
+        */
+        void AddEventL( TInt aEvent );
+
+        /**
+        * Adds message to iMessageList.
+        *
+        * @param aMessage  Message to add, may contain media array as a parameter.
+        */
+        void AddL( CMPXMessage* aMessage );
+                
+        /**
+        * Sends iMessageList to clients.
+        */
+        void SendL();
+
+    private:
+            
+        /**
+        * Messages are collected here before sending.
+        */
+        CMPXMessage* iMessageList;        
+
+        /**
+        * Array item of iMessageList, stored as member to speed things up.
+        * Owned by iMessageList.
+        */
+        CMPXMessageArray* iMessageArray;
+
+        /**
+        * Count of messages in iMessageList, main object plus items in array.
+        */
+        TInt iMessageCount;
+        
+        /**
+        * My Videos collection plugin, owner of this object.
+        */
+        CVcxMyVideosCollectionPlugin& iCollection;
+
+    public:     // Friend classes
+        
+        friend class CCollectionPluginTest;
+        
+    };
+
+#endif   // VCXMYVIDEOSMESSAGELIST_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosopenhandler_stub.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Handles collection Open operation related functionality
+*
+*/
+
+
+#ifndef VCXMYVIDEOSOPENHANDLER_H
+#define VCXMYVIDEOSOPENHANDLER_H
+
+class CVcxMyVideosCollectionPlugin;
+class MMPXCollectionPluginObserver;
+class CVcxMyVideosMdsDb;
+
+#include "vcxmyvideosmdsdb_stub.h"
+/**
+ */
+NONSHARABLE_CLASS( CVcxMyVideosOpenHandler ) : public CBase, public MVcxMyVideosMdsAlbumsObserver
+    {
+    friend class CVcxMyVideosVideoCache;
+    
+public:
+    
+    /**
+    * Two-phased constructor
+    */
+    static CVcxMyVideosOpenHandler* NewL( CVcxMyVideosCollectionPlugin& aCollection,
+            CVcxMyVideosVideoCache& aCache,
+            CVcxMyVideosMdsDb& aMds );
+
+    /**
+    * Destructor
+    */
+    virtual ~CVcxMyVideosOpenHandler();
+
+public:
+
+    /**
+    * Handle collection Open operation.
+    *
+    * @param aPath  Path to open.
+    */
+    void OpenL( const CMPXCollectionPath& aPath );
+
+    /**
+     * From MVcxMyVideosMdsAlbumsObserver.
+     */
+    void HandleAlbumOpenL();
+
+    /**
+     * From MVcxMyVideosMdsAlbumsObserver, no implementation.
+     */
+    void HandleGetAlbumsResp( CMPXMedia* /*aAlbumList*/ ) {}
+
+    /**
+     * From MVcxMyVideosMdsAlbumsObserver, no implementation.
+     */
+    void HandleGetAlbumContentIdsResp( TUint32 /*aAlbumId*/,
+            RArray<TVcxMyVideosAlbumVideo>& /*aContentArray*/ ) {}
+
+    /**
+     * From MVcxMyVideosMdsAlbumsObserver, no implementation.
+     */
+    void HandleAddVideosToAlbumResp( CMPXMedia* /*aCmd*/,
+            RPointerArray<CMdEInstanceItem>& /*aItemArray*/ ) {}
+
+    /**
+     * From MVcxMyVideosMdsAlbumsObserver, no implementation.
+     */
+    void HandleRemoveRelationsResp( RArray<TUint32>& /*aRelationIds*/,
+            RArray<TUint32>& /*aResults*/ ) {}
+
+    /**
+     * From MVcxMyVideosMdsAlbumsObserver, no implementation.
+     */
+    void HandleRemoveAlbumsResp( CMPXMedia* /*aCmd*/,
+            RArray<TUint32>& /*aResultIds*/ ) {}
+
+    /**
+     * From MVcxMyVideosMdsAlbumsObserver, no implementation.
+     */
+    void HandleRelationEvent( TObserverNotificationType /*aType*/,
+            const RArray<TMdERelation>& /*aRelationArray*/ ) {}
+    
+    /**
+     * Called as a response to GetAlbumContentVideosL.
+     * 
+     * @param aAlbumId           ID of the album containing the result videos.
+     * @param aVideoList         Media containing array of videos.
+     * @param aError             Error code in case of failure.
+     * @param aFirstNewItemIndex Index of the first new item.
+     * @param aNewItemCount      How many new items in the query since the last results.
+     * @param aComplete          ETrue if query is complete, EFalse if there is more to come.
+     */
+    void HandleGetAlbumContentVideosResp( TUint32 aAlbumId, CMPXMedia& aVideoList,
+            TInt aError, TInt aFirstNewItemIndex, TInt aNewItemCount, TBool aComplete );
+
+
+    void DoHandleCreateVideoListRespL(
+            CMPXMedia* aVideoList, TInt aNewItemsStartIndex, TBool aComplete );
+
+private:
+    /**
+    * 2nd-phase Constructor
+    */
+    void ConstructL();
+
+    /**
+    * Default Constructor
+    */
+    CVcxMyVideosOpenHandler( CVcxMyVideosCollectionPlugin& aCollection,
+            CVcxMyVideosVideoCache& aCache,
+            CVcxMyVideosMdsDb& aMds );
+
+    /**
+     * Opens category.
+     * 
+     * @param aCategoryId  Category to open.
+     */
+    void OpenCategoryL( TUint32 aCategoryId );
+
+    /**
+     * Leaving version of HandleGetAlbumContentVideosResp.
+     */
+    void HandleGetAlbumContentVideosRespL(
+            TUint32 aAlbumId, CMPXMedia& /*aVideoList*/, TInt aError,
+            TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/, TBool aComplete );
+public:
+
+    /**
+     * If album is opened when the album list is not yet complete,
+     * then the album ID which is tried to open is stored here.
+     * The open processing is continued when album list is received
+     * from MDS. There can't be several album opens pending since
+     * we do not call HandleOpen before we get the album list.
+     */
+    TUint32 iPendingAlbumOpenId;
+
+    /**
+     * for testing, temp
+     */
+    CMPXMedia* iAlbumVideoList;
+
+private: // data
+
+    /**
+    * Collection plugin main class. Owner of this object.
+    */
+    CVcxMyVideosCollectionPlugin& iCollection;
+        
+    /**
+    * Videos cache, owned by iCollection. Reference is stored here
+    * just to avoid one pointer access.
+    */
+    CVcxMyVideosVideoCache& iCache;
+    
+    /**
+    * Object for accessing MDS database, owned by iCollection. Reference is stored here
+    * just to avoid one pointer access.
+    */
+    CVcxMyVideosMdsDb& iMds;
+
+    /**
+    * The category ids being opened are stored here. These values are used
+    * to filter list when items arrive from MDS. KVcxMvcCategoryIdAll category is not listed here.
+    * This is in sync with iVideoListsBeingOpened.
+    */
+    RArray<TInt> iCategoryIdsBeingOpened;
+    
+    /**
+    * Video lists for categories being opened are stored here.
+    * This is in sync with iCategoryIdsBeingOpened.
+    */
+    RArray<CMPXMedia*> iVideoListsBeingOpened;
+
+    /**
+    * The album IDs being opened are stored here. These values are used
+    * to filter list when items arrive from MDS.
+    * This is in sync with iAlbumVideoListsBeingOpened.
+    */
+    RArray<TInt> iAlbumIdsBeingOpened;
+
+    /**
+    * Video lists for albums being opened are stored here.
+    * This is in sync with iAlbumIdsBeingOpened.
+    */
+    RArray<CMPXMedia*> iAlbumVideoListsBeingOpened;
+    
+    /**
+     * Path being opened is stored here for the HandleOpenL call.
+     * Not Own.
+     */
+    const CMPXCollectionPath* iPath;
+	
+public:     // Friend classes
+    
+    friend class CCollectionPluginTest;         
+    
+    };
+
+#endif // VCXMYVIDEOSACTIVETASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/inc/vcxmyvideosvideocache_stub.h	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,534 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Contains cached MDS media items*
+*/
+
+
+
+#ifndef VCXMYVIDEOSVIDEOCACHE_H
+#define VCXMYVIDEOSVIDEOCACHE_H
+
+// INCLUDES
+#include "vcxmyvideosmdsdb.h"
+
+// FORWARD DECLARATIONS
+class CVcxMyVideosCollectionPlugin;
+class CMPXMedia;
+class CRepository;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+ * Contains information about video.
+ * These are stored to CVcxMyVideosVideoListIndex::iVideoArray.
+ */
+NONSHARABLE_CLASS(TVcxMyVideosVideo)
+    {
+    public:
+
+        /**
+         * Constructor.
+         */        
+        TVcxMyVideosVideo();
+        
+        /**
+        * = operator.
+        */        
+        TVcxMyVideosVideo& operator=( const TVcxMyVideosVideo& aVideo );
+    public:
+        
+        /**
+        * Set values.
+        * 
+        * @param aMdsId  MDS ID
+        * @param aPos    Position in CVcxMyVideosVideoCache::iVideoList
+        * @param aVideo  Pointer to CVcxMyVideosVideoCache::iVideoList item,
+        *                ownership does not move.
+        */
+        void Set( TUint32 aMdsId, TInt aPos, CMPXMedia* aVideo );
+
+    public:
+        TUint32    iMdsId; // Video object ID in MDS.
+        CMPXMedia* iVideo; // Pointer to CVcxMyVideosVideoCache::iVideoList item
+        TInt       iPos;   // Items position in CVcxMyVideosVideoCache::iVideoList
+    };
+
+/**
+* Used for keeping videos in MDS ID order for fast access.
+* (Indexes CVcxMyVideosVideoCache::iVideoList).
+*
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosVideoListIndex) : public CBase
+    {    
+public: // Constructors and destructor
+
+    /**
+    * Two-phased constructor
+    * @return Object constructed
+    */
+    static CVcxMyVideosVideoListIndex* NewL();
+    
+    /**
+    * Destructor
+    */
+    virtual ~CVcxMyVideosVideoListIndex();
+
+public:
+    
+    /**
+     * Sets up iVideoArray from aVideoList. Sorting is also done.
+     * 
+     * @param aVideoList  Video list to use for constructing iVideoArray. 
+     */
+    void SetL( const CMPXMedia& aVideoList );
+    
+    /**
+     * Finds video by MDS ID from the index. Uses bisection method.
+     * 
+     * @param aVideo  The found video data is written here.
+     * @return        KErrNotFound if not found, index of the item in iVideoArray
+     *                otherwise.
+     */
+    TInt Find( TUint32 aMdsId, TVcxMyVideosVideo& aVideo );
+    
+    /**
+     * Removes video from index.
+     * 
+     * @param aMdsId     ID if the item to be removed.
+     * @param aCompress  If ETrue, compresses the video array.
+     * @return           KErrNotFound if not found, index of the removed item otherwise.
+     */
+    TInt Remove( TUint32 aMdsId, TBool aCompress = ETrue );
+    
+    /**
+     * Adds video to index. Keeps sorting order.
+     * 
+     * @param aVideo  Video to be added, ownership does not move.
+     * @param aPos    aVideo's position in CVcxMyVideosVideoCache::iVideoList.
+     */
+    void AddL( CMPXMedia* aVideo, TInt aPos );
+
+#ifdef _DEBUG
+    /**
+     * Returns reference to video array.
+     */
+    const RArray<TVcxMyVideosVideo>& VideoArray();
+#endif
+    
+private:
+    /**
+    * Constructor
+    */
+    CVcxMyVideosVideoListIndex();
+    
+    /**
+    * Symbian 2nd phase constructor.
+    */
+    void ConstructL ();
+
+    /**
+     * Sorts iVideoArray by MDS ID.
+     */
+    void Sort();
+    
+    /**
+     * Used for keeping RArray<TVcxMyVideosVideo> in integer order by
+     * TVcxMyVideosVideo::iMdsId.
+     * 
+     * @param aVideo1 Video to compare
+     * @param aVideo2 Video to compare
+     * @return -1 if aVideo1 is smaller than aVideo2, 1 if aVideo1 is larger than
+     *         aVideo2.
+     */
+    static TInt CompareVideosByMdsId( const TVcxMyVideosVideo& aVideo1,
+            const TVcxMyVideosVideo& aVideo2 );
+
+private:
+    
+    /**
+     * Video array which is kept in order by MDS ID.
+     */
+    RArray<TVcxMyVideosVideo> iVideoArray;
+    };
+
+/**
+* Used for storing MDS items to RAM for fast access.
+*
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosVideoCache) : public CBase
+    {    
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor
+        * @param aMyVideosCollectionPlugin  Owner of this object.
+        * @return                           Object constructed
+        */
+        static CVcxMyVideosVideoCache* NewL (
+                CVcxMyVideosCollectionPlugin& aMyVideosCollectionPlugin );
+
+        /**
+        * Destructor
+        */
+        virtual ~CVcxMyVideosVideoCache();
+ 
+    public:
+        
+        /**
+         * @return  ETrue if iVideoList is complete. (All items have
+         *          been fetched from MDS.)
+         */
+        TBool IsComplete();
+        
+        /**
+         * Set to ETrue when all items have been fetched from MDS.
+         */
+        void SetComplete( TBool aComplete );
+
+    private:
+        /**
+        * Constructor
+        */
+        CVcxMyVideosVideoCache( CVcxMyVideosCollectionPlugin& aMyVideosCollectionPlugin );
+
+        /**
+        * Symbian 2nd phase constructor.
+        */
+        void ConstructL ();
+        
+        /**
+        * Finds correct position in iVideoList for the new video.
+        *
+        * @param aMedia        Video to be inserted to the list.
+        * @param aSortingOrder Sorting order.
+        * @return              Position in the cache.
+        */
+        TInt FindCorrectPositionL( CMPXMedia& aMedia, TVcxMyVideosSortingOrder aSortingOrder );
+
+        /**
+        * Compares aNewVideo and aVideoInList in sizes, creation dates
+        * or titles.
+        *
+        * @param aNewVideo     Video to be added to the list.
+        * @param aVideoInList  Video in cache video list which is currently compared against
+        *                      aNewVideo.
+        * @param aSortingOrder Defines which attributes are compared. Size, Creation Date and Title
+        *                      are possible.
+        * @return              -1 if aVideoInList has smaller value, 1 if greater and 0 if equal.
+        */
+        TInt CompareL( CMPXMedia& aNewVideo, CMPXMedia& aVideoInList,
+                TVcxMyVideosSortingOrder aSortingOrder );
+
+        /**
+        * Adds video to iVideoList to the correct position, according to sorting order.
+        * MDS ID is used to identify the video.
+        *
+        * @param aVideo            Video to add.
+        * @param aSortingOrder     Sorting order used.
+        * @param aUpdateCategories If ETrue, then categories are updated.
+        * @return                  KErrNone if added, KErrAlreadyExists if already exists and
+        *                          was not added.
+        */
+        TInt AddToCorrectPlaceL( CMPXMedia& aVideo, TVcxMyVideosSortingOrder aSortingOrder,
+                TBool aUpdateCategories = ETrue );
+
+        /**
+        * Moves a video to correct place on iVideoList, according to sorting order.
+        * aVideo should be a refrence to iVideoList item. After the call the referenced
+        * item is gone and the reference shouldn't be used anymore.
+        *
+        * @param aVideo        Video to move.
+        * @param aSortingOrder Sorting order used.
+        */                
+        void MoveToCorrectPlaceL( CMPXMedia& aVideo,
+                TVcxMyVideosSortingOrder aSortingOrder );
+
+        /**
+        * Removes video from iVideoList or iPartialVideoList.
+        * MDS ID is used to identify the video.
+        *
+        * @param aVideo            Video to remove, MDS ID is read from here.
+        * @param aUpdateCategories If ETrue, then categories are updated.
+        * @return                  KErrNotFound if not found, KErrNone otherwise.
+        */
+        TInt RemoveL( CMPXMedia& aVideo, TBool aUpdateCategories = ETrue );
+                
+        /**
+        * Fetches sorting order from Cenrep.
+        * @return Sorting order.
+        */
+        TVcxMyVideosSortingOrder SortingOrderL();
+
+        /**
+        * Called when Title in video cache has been modified. 
+        * Updates sorting order and category attributes if necessarry.
+        * NOTICE that aVideoInCache is not allowed to own the media object, since this
+        * function may change the pointer value to point to a new object.
+        *
+        * @param aVideoInCache  Video in cache which Title has been modified. aVideoInCache
+        *                       is not allowed to own the data.
+        */
+        void HandleVideoTitleModifiedL( CMPXMedia*& aVideoInCache );
+       
+        /**
+        * Deletes iPartialList.
+        */ 
+        void DeletePartialList();
+
+        /**
+        * Adds video to cache (iVideoList or iPartialVideoList). Ownership moves.
+        *
+        * @param aVideo             Video to add.
+        * @param aSortingOrder      Sorting order.
+        * @param aUpdateCategores   If ETrue, then category and album attributes are updated.
+        * @return                   KErrNone if added, KErrAlreadyExists if already exists and
+        *                           was not added.
+        */
+        TInt AddL( CMPXMedia* aVideo, TVcxMyVideosSortingOrder aSortingOrder,
+                TBool aUpdateCategories = ETrue );
+        
+        /**
+        * Adds video to iPartialVideoList. Ownership moves.
+        *
+        * @param aVideo  Video to add.
+        * @return        KErrNone if item was added, KErrAlreadyExists if video
+        *                was already on the list and was not added.
+        */       
+        TInt AddToPartialListL( CMPXMedia* aVideo );
+
+        /**
+        * Finds the array position of aVideo in iPartialVideoList .
+        *
+        * @param aVideo  Video which position is searched.
+        * @return        Position, KErrNotFound if item is not in iPartialVideoList.
+        */
+        TInt PosOnPartialVideoListL( CMPXMedia& aVideo );
+
+        /**
+        * Finds the array position of aVideo in iVideoList.
+        *
+        * @param aVideo  Video which position is searched.
+        * @return        Position, KErrNotFound if item is not in iVideoList.
+        */
+        TInt PosOnVideoListL( CMPXMedia& aVideo );
+
+#ifdef _DEBUG
+        /**
+         * Checks that iVideoListIndex is correctly formed.
+         */
+        void CheckVideoListIndexL();
+#endif
+        
+    public:            
+        /**
+        * Creates filtered video list from iVideoList. This is used for
+        * showing video categories by origin.
+        *
+        * @param aOrigin Only videos with this origin are added to list,
+        *                see values from TVcxMyVideosOrigin (in vcxmyvideosdefs.h).                
+        * @return        New video list, containing videos from aOrigin.
+        */
+        CMPXMedia* CreateVideoListByOriginL( TUint8 aOrigin );
+
+        /**
+        * Appends items from aFromList to aToList if items origin is equal with
+        * aOrigin. This is used when fetching other than All category from MDS.
+        *
+        * @param aToList    List to append
+        * @param aFromList  List to append from.
+        * @param aOrigin    Only items with this origin are copied.
+        * @param aNewItemsStartIndex Start index in aFromList where from the copying is started.
+        */
+        void AppendToListL( CMPXMedia& aToList, CMPXMedia& aFromList,
+                TUint8 aOrigin, TInt aNewItemsStartIndex );
+                
+        /**
+        * Tries to find media with matching URI from the cached video list.
+        *
+        * @param aUri URI to compare
+        * @return     Contains pointer to media if match found, NULL otherwise.
+        *             Pointer ownership is not moved to the caller.
+        */
+        CMPXMedia* FindVideoByUriL( const TDesC& aUri );
+
+        /**
+        * Tries to find media with matching MdsId from iVideoList and iPartialVideoList.
+        *
+        * @param aMdsId ID to compare
+        * @param aPos   If found from iVideoList, the position index is written here,
+        *               KErrNotFound otherwise. If found from iPartialVideoList, then
+        *               the value is still set to KErrNotFound.
+        * @return       Contains pointer to media if match found, NULL otherwise.
+        *               Pointer ownership is not moved to the caller.
+        */
+        CMPXMedia* FindVideoByMdsIdL( TUint32 aMdsId, TInt& aPos );
+        
+        /**
+        * Gets medias from iVideoList and iPartialVideoList.
+        *
+        * @param aMdsIds  IDs of the items to fetch.
+        * @return         Pointer to fetched items, KMPXMediaArrayContents
+        *                 attribute contains the media items. Ownership
+        *                 moves to caller.
+        */
+        CMPXMedia* GetVideosL( RArray<TUint32>& aMdsIds );
+
+        /**
+        * Removes video from iVideoList (or from iPartialVideoList).
+        *
+        * @param aMdsId             MDS ID of the video to be removed.
+        * @param aUpdateCategories  If ETrue, then categories are updated.
+        * @return                   KErrNotFound if not found, KErrNone otherwise.
+        */
+        TInt RemoveL( TUint32 aMdsId, TBool aUpdateCategories = ETrue );
+
+        /**
+        * Removes videos from iVideoList.
+        *
+        * @param aUpdateCategories  If ETrue, then categories are updated.
+        * @param aMdsIds            Array containing MDS IDs of the videos to be deleted.
+        */
+        void RemoveL( RArray<TUint32>& aMdsIds, TBool aUpdateCategories = ETrue );
+
+        /**
+        * Adds videos to cache (iVideoList or iPartialVideoList). After the function call aMdsIds
+        * will contain only those items which were actually added to cache.
+        *
+        * @param aMdsIds                   Array containing MDS IDs of the videos to be added.
+        * @param aListFetchingWasCanceled  This is set to EFalse if video list fetching from mds
+        *                                  had to be cancelled. EFalse otherwise. 
+        * @param aNonVideoIds              If argument given then Ids which were detected to not be
+        *                                  videos are written here. Caller owns the array, ownership
+        *                                  does not move.
+        * @param aUpdateCategories         If ETrue, then category/album attributes are updated.
+        */
+        void AddVideosFromMdsL( RArray<TUint32>& aMdsIds, TBool& aListFetchingWasCanceled,
+                RArray<TUint32>* aNonVideoIds = NULL, TBool aUpdateCategories = ETrue );
+
+        /**
+        * Deletes old and creates new iVideoList. After the function call iVideoList exists,
+        * but it might not contain any media items yet, only empty array.
+        * Media items are added to the list asynchronoysly in
+        * VcxMyVideosColletionPlugin::HandleCreateVideoListResp(), called by
+        * VcxMyVideosMdsDb. Once iVideoList is complete, iVideoListIsPartial
+        * is set to EFalse. During the video list fetching
+        * VcxMyVideosMdsDb::iVideoListFetchingIsOngoing is ETrue.
+        * If there is video list creation already ongoing
+        * and the aSortingOrder is the same, nothing is done.
+        * During the video list fetching iPartialVideoList items are moved to
+        * iVideoList. When fetch is complete, iPartialVideoList is empty.
+        *
+        * @param aForce  If ETrue, then the list is always created from scratch, possible
+        *                ongoing fetch is cancelled.
+        */
+        void CreateVideoListL( TBool aForce = EFalse );
+    
+        /**
+        * Resets iVideoList (removes items, empty list is left) and cancels possible ongoing
+        * asynchronous videolist fetching. iVideoListIsPartial is set to ETrue.
+        * CVcxMyVideosCollection plugin variables are not touched. Caller is responsible to
+        * either cancel the fetch from plugin, or restart fetch from mds in a way that
+        * client gets its list. iVideoList media object remains pointing to same shared data.
+        */
+        void ResetVideoListL();
+        
+        /**
+        * Updates video attributes in cache from aVideo. NOTE: iVideoList might be changed
+        * if Size or Title values are modified and matching sorting order is currently on.
+        * Pointers to iVideoList items should be refreshed after calling this with size and title
+        * parameters.
+        *
+        * @param aVideo  Attributes are read from here and updated to cache if difference exists. 
+        * @return        ETrue if any parameter was changed. 
+        */
+        TBool UpdateVideoL( CMPXMedia& aVideo );
+
+        /**
+        * iVideoList and its media array are deleted and recreated. New instances point to
+        * different global heap position. Media objects stay the same and point to
+        * same global heap.
+        */
+        void ReCreateVideoListL();
+
+        /**
+         * Replaces items in iVideoList with items from iPartialVideoList.
+         * Called by iCollection when fetching videolist.
+         */
+        void CheckForPartialVideoListItemsL( TInt aNewItemsStartIndex );
+        
+    public:
+    
+        /**
+        * Contains list of all videos in MDS. Used for caching MDS to RAM.
+        */
+        CMPXMedia* iVideoList;
+
+        /**
+        * Items fetched by MDS ID which don't (yet) have instance in iVideoList
+        * are added here. When iVideoList instance is received from MDS, it is
+        * replaced by item from iPartialVideoList and instance from iPartialVideoList
+        * is removed.
+        */
+        RArray<CMPXMedia*> iPartialVideoList;
+                                
+        /**
+        * Sorting order which was used last time when list was queryed from MDS.
+        */
+        TVcxMyVideosSortingOrder iLastSortingOrder;
+        
+        /**
+         * Set to ETrue when doing videolist fetching.
+         */
+        TBool iIsFetchingVideoList;
+        
+    private:
+
+        /**
+        * If ETrue then iVideoList contains all items from MDS.
+        */
+        TBool iVideoListIsComplete;
+        
+        /**
+        * My Videos collection plugin, owner of this object.
+        */
+        CVcxMyVideosCollectionPlugin& iCollection;
+        
+        /**
+         * Index which keeps TVcxMyVidesVideo items indexed in MDS ID
+         * order for fast access.
+         */
+        CVcxMyVideosVideoListIndex* iVideoListIndex;
+        
+        /**
+        * Provides access to the sorting order key in cenrep. Own.
+        */
+        CRepository* iCenRep;
+        
+    public:     // Friend classes
+        
+        // used in testing
+        TBool iLeaveOnReset;
+        TBool iCancelListFetching;
+        
+        friend class CCollectionPluginTest;        
+
+    };
+
+#endif   // VCXMYVIDEOSVIDEOCACHE_H
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/init/testframework.ini	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,197 @@
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport		# Possible values are: 'Empty', 'Summary', 'Environment',
+                                                               'TestCases' or 'FullReport'
+
+CreateTestReport= YES			# Possible values: YES or NO
+
+TestReportFilePath= c:\logs\testframework\
+TestReportFileName= testreport
+
+TestReportFormat= TXT			# Possible values: TXT or HTML
+TestReportOutput= FILE			# Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE	# Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone	# Possible values are:
+						# 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+					  	# 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+					  	# 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+					  	# 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+UITestingSupport= YES
+SeparateProcesses= YES 
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= XXXXXXXXX
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= TestScripter
+TestCaseFile= c:\TestFramework\ut_collectionplugintest.cfg
+[End_Module]
+
+
+# Load testmoduleXXX, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleXXX used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleXXX used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+CreateLogDirectories= YES    # Possible values: YES or NO
+
+EmulatorBasePath= C:\
+EmulatorFormat= TXT         # Possible values: TXT or HTML
+EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+HardwareBasePath= f:\
+HardwareFormat= TXT         # Possible values: TXT or HTML
+HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+ThreadIdToLogFile= YES       # Possible values: YES or NO
+WithTimeStamp= YES           # Possible values: YES or NO
+WithLineBreak= YES           # Possible values: YES or NO
+WithEventRanking= YES        # Possible values: YES or NO
+
+FileUnicode= YES             # Possible values: YES or NO
+AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/ut_collectionplugintest.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,164 @@
+/*
+* 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:  Video Playback User Input Handler test class for STIF testing
+*
+*/
+
+// Version : %version: 1 %
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include <ecom.h>
+#include <SettingServerClient.h>
+
+#include <mpxcollectionplugin.h>
+#include <mpxcollectionmessagedefs.h>
+#include <vcxmyvideosdefs.h>
+#include "vcxmyvideosactivetask.h"
+#include "vcxmyvideosmdsdb.h"
+#include "vcxmyvideosvideocache_stub.h"
+#include "ut_collectionplugintest.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCollectionPluginTest::CCollectionPluginTest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCollectionPluginTest::CCollectionPluginTest( CTestModuleIf& aTestModuleIf )
+    : CScriptBase( aTestModuleIf )
+{
+}
+
+// -----------------------------------------------------------------------------
+// CCollectionPluginTest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::ConstructL()
+{
+    //Read logger settings to check whether test case name is to be
+    //appended to log file name.
+    RSettingServer settingServer;
+
+    TInt ret = settingServer.Connect();
+
+    if ( ret != KErrNone )
+    {
+        User::Leave(ret);
+    }
+
+    // Struct to StifLogger settigs.
+    TLoggerSettings loggerSettings; 
+
+    // Parse StifLogger defaults from STIF initialization file.
+    ret = settingServer.GetLoggerSettings(loggerSettings);
+
+    if ( ret != KErrNone )
+    {
+        User::Leave(ret);
+    } 
+
+    // Close Setting server session
+    settingServer.Close();
+
+    TFileName logFileName;
+    
+    if ( loggerSettings.iAddTestCaseTitle )
+    {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL(title);
+        logFileName.Format(KCollectionplugintest_LogFileWithTitle, &title);
+    }
+    else
+    {
+        logFileName.Copy(KCollectionplugintest_LogFile);
+    }
+
+    iLog = CStifLogger::NewL( KCollectionplugintest_LogPath, 
+                              logFileName,
+                              CStifLogger::ETxt,
+                              CStifLogger::EFile,
+                              EFalse );
+    
+    SendTestClassVersion();
+    
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );
+    
+    CreateL();
+}
+
+// -----------------------------------------------------------------------------
+// CCollectionPluginTest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCollectionPluginTest* CCollectionPluginTest::NewL( CTestModuleIf& aTestModuleIf )
+{
+CCollectionPluginTest* self = new (ELeave) CCollectionPluginTest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+}
+
+// Destructor
+CCollectionPluginTest::~CCollectionPluginTest()
+{ 
+    // Delete resources allocated from test methods
+    Delete();
+
+    // Delete logger
+    delete iLog; 
+    
+    REComSession::FinalClose();
+}
+
+//-----------------------------------------------------------------------------
+// CCollectionPluginTest::SendTestClassVersion
+// Method used to send version of test class
+//-----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::SendTestClassVersion()
+{
+    TVersion moduleVersion;
+    moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+    moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+    moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+    
+    TFileName moduleName;
+    moduleName = _L("ut_collectionplugintest.dll");
+
+    TBool newVersionOfMethod = ETrue;
+    TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod);
+}
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( CTestModuleIf& aTestModuleIf ) 
+{
+    return ( CScriptBase* ) CCollectionPluginTest::NewL( aTestModuleIf );
+}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/ut_collectionplugintestBlocks.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,1301 @@
+/*
+* Copyright (c) 2008 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:  Video Playback User Input Handler Test class for STIF unit testing
+*
+*/
+
+// Version : %version: 1 %
+
+
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <e32std.h>
+#include <w32std.h>
+#include <coeaui.h>
+#include <aknutils.h>
+#include <aknviewappui.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+
+#include "ut_collectionplugintest.h"
+
+#include "mpxlog.h"
+#include <vcxmyvideosuids.h>
+#include <vcxmyvideosdefs.h>
+#include <mpxcommandgeneraldefs.h>
+#include <mpxcollectioncommanddefs.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmessagecontainerdefs.h>
+#include <mpxmessagegeneraldefs.h>
+
+#include <mpxcollectionplugin.h>
+#include <mpxcollectionpath.h>
+#include <mpxcollectionmessagedefs.h>
+#include <vcxmyvideosdefs.h>
+#include "vcxmyvideosactivetask.h"
+#include "vcxmyvideosmdsdb.h"
+#include "vcxmyvideosvideocache_stub.h"
+
+#define private public
+#include "vcxmyvideoscollectionplugin.h"
+#undef private
+
+_LIT( KTestModuleName, "CollectionPluginTest" );
+_LIT( KLogLocation, "In %S" );
+
+const TInt KInvalidId( -100 );
+const TInt KSelectAll( -2 );
+
+enum EMPXMediaAttribute
+    {
+    ETestMediaGeneralId = 1,
+    ETestMediaTitle
+    };
+
+enum EStubs
+    {
+    EActiveTask = 1,
+    EAlbums,
+    EAsyncFileOperations,
+    ECategories,
+    EMDSDB,
+    EMessageList,
+    EOpenHandler,
+    EVideoCache
+    };
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCollectionPluginTest::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::Delete()
+{
+    if( iCollection )
+        {
+        delete iCollection;
+        iCollection = NULL;
+        }
+    
+    if( iPath )
+        {
+        delete iPath;
+        iPath = NULL;
+        }
+    
+    if( iMessageList )
+        {
+        iMessageList->Reset();
+        delete iMessageList;
+        iMessageList = NULL;
+        }
+    
+    if( iMedia )
+        {
+        delete iMedia;
+        iMedia = NULL;
+        }
+
+    if( iCommand )
+        {
+        delete iCommand;
+        iCommand = NULL;
+        }
+    
+    iAttrs.Close();
+}
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::CreateL
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::CreateL()
+{
+    TInt arguments( 0 );
+    iCollection = CVcxMyVideosCollectionPlugin::NewL( &arguments );
+    iCollection->SetObserver( *this );
+    iMessageList = CMPXMediaArray::NewL();
+    iPath = CMPXCollectionPath::NewL();
+}
+
+
+// -----------------------------------------------------------------------------
+// CCollectionPluginTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::RunMethodL( CStifItemParser& aItem )
+{
+    static TStifFunctionInfo const KFunctions[] =
+    {
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function.
+        ENTRY( "CreateNewMedia", CCollectionPluginTest::CreateNewMediaL ),
+        ENTRY( "SetMediaAttribute", CCollectionPluginTest::SetMediaAttributeL ),
+        ENTRY( "AddMediaToCache", CCollectionPluginTest::AddMediaToCacheL ),
+        ENTRY( "RemoveMediaFromCache", CCollectionPluginTest::RemoveMediaFromCacheL ),
+        ENTRY( "CheckMediaCount", CCollectionPluginTest::CheckMediaCountL ),
+        ENTRY( "OpenL", CCollectionPluginTest::OpenL ),
+        ENTRY( "SelectPath", CCollectionPluginTest::SelectPathL ),
+        ENTRY( "SelectPathId", CCollectionPluginTest::SelectPathIdL ),
+        ENTRY( "InsertToPath", CCollectionPluginTest::InsertToPathL ),
+        ENTRY( "SelectAttributes", CCollectionPluginTest::SelectAttributesL ),
+        ENTRY( "MediaL", CCollectionPluginTest::MediaL ),
+        ENTRY( "CancelRequest", CCollectionPluginTest::CancelRequest ),
+        ENTRY( "CommandL", CCollectionPluginTest::CommandL ),
+        ENTRY( "FindAllL", CCollectionPluginTest::FindAllL ),
+        ENTRY( "FindAllSyncL", CCollectionPluginTest::FindAllSyncL ),
+        ENTRY( "GetCapabilities", CCollectionPluginTest::GetCapabilities ),
+        ENTRY( "AddL", CCollectionPluginTest::AddL ),
+        ENTRY( "RemoveL", CCollectionPluginTest::RemoveL ),
+        ENTRY( "SetL", CCollectionPluginTest::SetL ),
+        ENTRY( "HandleStepL", CCollectionPluginTest::HandleStepL ),
+        ENTRY( "CreateNewCmd", CCollectionPluginTest::CreateNewCmdL ),
+        ENTRY( "CheckCurrentCmd", CCollectionPluginTest::CheckCurrentCmdL ),
+        ENTRY( "SetNewCmd", CCollectionPluginTest::SetNewCmdL ),
+        ENTRY( "SetVideoListFetching", CCollectionPluginTest::SetVideoListFetchingL ),
+        ENTRY( "CancelCacheListFetching", CCollectionPluginTest::CancelCacheListFetchingL ),
+        ENTRY( "HandleMyVideosDbEvent", CCollectionPluginTest::HandleMyVideosDbEvent ),
+        ENTRY( "HandleCreateVideoListResp", CCollectionPluginTest::HandleCreateVideoListResp ),
+        ENTRY( "HandleObjectPresentNotification", CCollectionPluginTest::HandleObjectPresentNotificationL ),
+        ENTRY( "AddVideoToMdsAndCacheL", CCollectionPluginTest::AddVideoToMdsAndCacheL ),
+        ENTRY( "SetVideoL", CCollectionPluginTest::SetVideoL ),
+        ENTRY( "SendMyVideosMessageL", CCollectionPluginTest::SendMyVideosMessageL ),
+        ENTRY( "SendMessages", CCollectionPluginTest::SendMessages ),
+        ENTRY( "CategoriesL", CCollectionPluginTest::CategoriesL ),
+        ENTRY( "NotifyNewVideosCountDecreasedL", CCollectionPluginTest::NotifyNewVideosCountDecreasedL ),
+        ENTRY( "DeleteStub", CCollectionPluginTest::DeleteStubL ),
+        ENTRY( "AlbumsL", CCollectionPluginTest::AlbumsL ),
+    };
+
+    const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+}
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::LogMethod( TPtrC aMethod )
+    {
+    // Print to UI
+    TBuf< 64 > buffer;
+    buffer.Format( KLogLocation, &aMethod );
+    TestModuleIf().Printf( 0, KTestModuleName, buffer );
+    // Print to log file
+    iLog->Log( buffer );
+    }
+
+// -----------------------------------------------------------------------------
+//  CCollectionPluginTest::SetMessageResponse
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::DeleteStubL( CStifItemParser& aItem )
+    {
+    TInt error( KErrNone );
+    TInt stub( KErrNotFound );
+    aItem.GetNextInt( stub );
+    
+    switch( stub )
+        {
+        case EActiveTask:
+            TRAP( error, delete iCollection->iActiveTask );
+            break;
+        case EAlbums:
+            TRAP( error, delete iCollection->iAlbums );
+            break;
+        case EAsyncFileOperations:
+            TRAP( error, delete iCollection->iAsyncFileOperations );
+            break;
+        case ECategories:
+            TRAP( error, delete iCollection->iCategories );
+            break;
+        case EMDSDB:
+            TRAP( error, delete iCollection->iMyVideosMdsDb );
+            break;
+        case EMessageList:
+            TRAP( error, delete iCollection->iMessageList );
+            break;
+        case EOpenHandler:
+            TRAP( error, delete iCollection->iOpenHandler );
+            break;
+        case EVideoCache:
+            TRAP( error, delete iCollection->iCache );
+            break;
+        default:
+            break;
+        }
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//  CCollectionPluginTest::CheckMessageResponse
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::CheckCurrentCmdL( CStifItemParser& aItem )
+    {
+    TInt error( KErrNone );
+    
+    aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing );
+    
+    // CMD ID
+    TUint32 cmdId( 0 );
+    TPtrC cmdIdStr;
+    if( aItem.GetNextString( cmdIdStr ) == KErrNone )
+        {
+        TLex lex( cmdIdStr );
+        lex.Val( cmdId, EHex );
+        }
+    
+    // MV CMD ID
+    TInt cmdMV( KErrNotFound );
+    if( cmdId == KVcxCommandIdMyVideos )
+        {
+        aItem.GetNextInt( cmdMV );
+        }
+    
+    if( iCollection->iActiveTask->iCurCommand == NULL && !cmdId )
+        {
+        return KErrNone;
+        }
+    
+    TMPXCommandId commandId = iCollection->iActiveTask->iCurCommand->ValueTObjectL<TMPXCommandId>( KMPXCommandGeneralId );
+    if( commandId != cmdId )
+        {
+        error = KErrCorrupt;
+        }
+
+    if( commandId == KVcxCommandIdMyVideos )
+        {
+        TInt currCmdMV = iCollection->iActiveTask->iCurCommand->ValueTObjectL<TUint32>( KVcxMediaMyVideosCommandId );
+        if( currCmdMV != cmdMV )
+            {
+            error = KErrCorrupt;
+            }
+        }
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//  CCollectionPluginTest::CreateNewMediaL
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::CreateNewMediaL( CStifItemParser& /*aItem*/ )
+    {    
+    delete iMedia;
+    iMedia = NULL;
+    iMedia = CMPXMedia::NewL(); // NULL;
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+//  CCollectionPluginTest::CreateNewMediaL
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SetMediaAttributeL( CStifItemParser& aItem )
+    {
+    CleanupStack::PushL( iMedia );
+    
+    aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing );
+    TInt attribute( KErrNotFound );
+    aItem.GetNextInt( attribute );
+    switch( attribute )
+        {
+        case ETestMediaGeneralId:
+            {
+            TInt mediaId( 0 );
+            aItem.GetNextInt( mediaId );
+            TInt mediaType( KVcxMvcMediaTypeVideo );
+            aItem.GetNextInt( mediaType );
+            TMPXItemId mpxId( mediaId, mediaType );
+            iMedia->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, mpxId );
+            }
+            break;
+            
+        case ETestMediaTitle:
+            {
+            TPtrC value;
+            aItem.GetNextString( value );
+            iMedia->SetTextValueL( KMPXMediaGeneralTitle, value );                
+            }
+            break;
+        default:
+            break;
+        }
+    CleanupStack::Pop( iMedia );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+//  CCollectionPluginTest::CreateNewCmdL
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::CreateNewCmdL( CStifItemParser& aItem )
+    {
+    TInt error( KErrNone );
+    
+    aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing );
+
+    // COMMAND SYNC
+    TInt paramSync( 0 );
+    aItem.GetNextInt( paramSync );
+    
+    // CMD ID
+    TUint32 cmdId( 0 );
+    TPtrC cmdIdStr;
+    if( aItem.GetNextString( cmdIdStr ) == KErrNone )
+        {
+        TLex lex( cmdIdStr );
+        User::LeaveIfError( lex.Val( cmdId, EHex ) );
+        }
+    
+    // MV CMD ID
+    TInt cmdMV( KErrNotFound );
+    if( cmdId == KVcxCommandIdMyVideos )
+        {
+        aItem.GetNextInt( cmdMV );
+        }
+
+    delete iCommand;
+    iCommand = NULL;
+    iCommand = CreateMpxCommandLC( cmdId, cmdMV, paramSync );
+    
+    switch( cmdId )
+        {
+        case KMPXCommandIdCollectionAdd: // SYNC
+            {
+            iCommand->SetCObjectValueL<CMPXMedia>( KMPXCommandColAddMedia, iMedia );
+            }
+            break;
+        
+        case KMPXCommandIdCollectionSet: // SYNC
+            {
+            iCommand->SetCObjectValueL<CMPXMedia>( KMPXCommandColSetMedia, iMedia );
+            }
+            break;
+        
+        case KMPXCommandIdCollectionRemoveMedia:
+            {
+            TMPXItemId itemId = iMedia->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId );
+            iCommand->SetTObjectValueL( KMPXMediaGeneralId, itemId );
+            }
+            break;
+        default:
+            break;
+        }
+
+    switch( cmdMV )
+        {
+        case KVcxCommandMyVideosGetMediaFullDetailsByMpxId:
+            {
+            TMPXItemId itemId = iMedia->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId );
+            iCommand->SetTObjectValueL( KMPXMediaGeneralId, itemId );
+            }
+            break;
+        case KVcxCommandMyVideosGetMediasByMpxId:
+            {
+            CMPXMediaArray* mediaArray = CMPXMediaArray::NewL();
+            CleanupStack::PushL( mediaArray );
+
+            TInt id( 0 );
+            
+            while( aItem.GetNextInt( id ) == KErrNone )
+                {
+                CMPXMedia* item = CMPXMedia::NewL();
+                CleanupStack::PushL( item ); 
+                TMPXItemId itemId;
+                itemId.iId1 = id;
+                itemId.iId2 = KVcxMvcMediaTypeVideo;
+                item->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, itemId );
+                mediaArray->AppendL( *item );
+                CleanupStack::PopAndDestroy( item );
+                }
+            if( id != KErrNotFound )
+                {
+                iCommand->SetCObjectValueL<CMPXMediaArray>( KMPXMediaArrayContents, mediaArray );
+                }
+            CleanupStack::Pop( mediaArray );
+            }
+            break;
+        case KVcxCommandMyVideosMove:
+        case KVcxCommandMyVideosCopy:
+        case KVcxCommandMyVideosDelete:
+        case KVcxCommandMyVideosCancelMoveOrCopy: // SYNC
+        case KVcxCommandMyVideosCancelDelete: // SYNC
+        case KVcxCommandMyVideosAddAlbum: // SYNC
+        case KVcxCommandMyVideosAddToAlbum: // ASYNC
+        case KVcxCommandMyVideosRemoveFromAlbum: // ASYNC
+            {
+            if( iMedia )
+                {
+                iCommand->SetCObjectValueL<CMPXMedia>( KMPXCommandColSetMedia, iMedia );
+                }
+            }
+            break;
+        default:
+            break;
+        }
+    
+    CleanupStack::Pop( iCommand );
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SetNewCmdL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("SetNewCmdL"));
+    TRAPD( error, iCollection->iActiveTask->SetNewCommandL( *iCommand ) );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::SetListCacheFetching
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::CancelCacheListFetchingL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("CancelCacheListFetchingL"));
+    TInt value( KErrNotFound );
+    aItem.GetNextInt( value );
+    TBool enabled( value );
+    TRAPD( error, iCollection->iCache->iCancelListFetching = enabled );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//  CCollectionPluginTest::AddMediaToCacheL
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::AddMediaToCacheL( CStifItemParser& /*aItem*/ )
+    {
+    CMPXMediaArray* cache = iCollection->iCache->iVideoList->Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    TRAPD( error, cache->AppendL( *iMedia ) );
+    iCollection->iCache->iVideoList->SetCObjectValueL<CMPXMediaArray>( KMPXMediaArrayContents, cache);
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+/*
+TInt CCollectionPluginTest::AddMediaToCacheL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("AddMediaToCache"));
+    
+    TInt err( 0 );
+    
+    CMPXMedia* media = CMPXMedia::NewL();
+    TInt mediaId( 0 );
+    aItem.GetNextInt( mediaId );
+    TMPXItemId mpxId( mediaId, 0 );
+    media->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, mpxId );
+    
+    CMPXMediaArray* medias = iCollection->iCache->iVideoList->Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    medias->AppendL(*media);
+    delete media;
+    
+    return err;
+    }*/
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::RemoveMediaFromCacheL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("RemoveMediaFromCache"));
+    
+    TInt err = ( -1 );
+    
+    TInt mediaId( 0 );
+    aItem.GetNextInt( mediaId );
+    
+    CMPXMediaArray* medias = iCollection->iCache->iVideoList->Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    for ( TInt i = 0; i < medias->Count(); i++ )
+        {
+        CMPXMedia* media = (*medias)[i];    
+        TMPXItemId itemId = *(media->Value<TMPXItemId>( KMPXMediaGeneralId ));
+        if( itemId.iId1 == mediaId )
+            {
+            medias->Remove(i);
+            err = KErrNone;
+            break;
+            }
+        }
+    
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::OpenL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("OpenL"));
+
+    aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing );
+    TInt32 collectionId( KErrNotFound );
+    TPtrC collectionIdStr;
+    if( aItem.GetNextString( collectionIdStr ) == KErrNone )
+        {
+        TLex lex( collectionIdStr );
+        lex.Val( collectionId, EHex );
+        }
+    
+    CleanupStack::PushL( iPath );
+    
+    iPath->Reset();
+    
+    switch( collectionId )
+        {
+        case KErrNotFound:
+            break;
+        case KInvalidId:
+            iPath->AppendL( TMPXItemId::InvalidId() );
+            break;
+        case 0:
+            iPath->AppendL( KVcxUidMyVideosMpxCollection );
+            break;
+        default:
+            iPath->AppendL( collectionId );
+            break;
+        }
+    
+    TMPXItemId item(1, 1);
+    iPath->AppendL(item);
+
+    RArray<TMPXAttribute> attrs;
+    CMPXFilter* filter = CMPXFilter::NewL();
+    
+    TRAPD( error, iCollection->OpenL( *iPath, attrs.Array(), filter ) );
+    
+    CleanupStack::Pop( iPath );
+    attrs.Reset();
+    attrs.Close();
+    delete filter;
+    return error; // error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::InsertToPathL
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::InsertToPathL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("InsertToPathL"));
+    
+    //aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing );
+    TInt id( KErrNotFound );
+    TInt type( KErrNotFound );
+
+    aItem.GetNextInt( id );
+    aItem.GetNextInt( type );
+    TMPXItemId itemId( id, type );
+    CleanupStack::PushL( iPath );
+    TRAPD( error, iPath->InsertL(itemId, iPath->Count()-1) );   
+    CleanupStack::Pop( iPath );
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::SelectPathL
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SelectPathL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("SelectPathL"));
+    
+    CleanupStack::PushL( iPath );
+    
+    //aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing );
+    TInt index( KErrNotFound );
+    aItem.GetNextInt( index );
+    
+    TInt pathcount = iPath->Count();
+    
+    TInt error( KErrNotFound );
+    switch( index )
+        {
+        case KSelectAll:
+            TRAP( error, iPath->SelectAllL() );
+            break;
+        case KErrNotFound:
+            TRAP( error, iPath->DeselectAll() );
+            break;
+        case KInvalidId:
+            TRAP( error, iPath->SelectL( TMPXItemId::InvalidId() ) );
+            break;
+        default:
+            TRAP( error, iPath->SelectL( index ) );
+            break;
+        }
+    
+    CleanupStack::Pop( iPath );
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::SelectPathL
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SelectPathIdL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("SelectPathL"));
+    CleanupStack::PushL( iPath );
+    TInt id( KErrNotFound );
+    aItem.GetNextInt( id );
+    TInt pathcount = iPath->Count();
+    TMPXItemId itemId( id, KVcxMvcMediaTypeVideo );
+    TRAPD( error, iPath->SelectL( itemId ) );
+    CleanupStack::Pop( iPath );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::SelectPathL
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SelectAttributesL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("SelectAttributesL"));
+    
+    //aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing );
+    iAttrs.Reset();
+    TInt attr( KErrNotFound );
+    aItem.GetNextInt( attr );
+    switch( attr )
+        {
+        case ETestMediaGeneralId:
+            iAttrs.AppendL( KMPXMediaGeneralId );
+            break;
+        default:
+            break;
+        }        
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::MediaL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("MediaL"));
+    
+    RArray<TCapability> caps;
+    CleanupClosePushL(caps);
+    caps.AppendL(ECapability_None);
+    /*if (aCaps.HasCapability(ECapabilityDRM))
+        {
+        caps.AppendL(ECapabilityDRM);
+        }*/
+    // else add further "relevant" capabilities here
+
+    // Add "none" capability, if no caps listed
+    /*if (caps.Count() == 0)
+        {
+        caps.AppendL(ECapability_None);
+        }*/
+    
+    CMPXMedia* specs = CMPXMedia::NewL();
+    
+    TRAPD( error, iCollection->MediaL( *iPath, iAttrs.Array(), caps.Array(), specs ) );
+    delete specs;
+    CleanupStack::PopAndDestroy(&caps);
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::CheckMediaCountL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("CheckMediaCount"));
+    
+    TInt err( 0 );
+    
+    TInt expected( 0 );
+    aItem.GetNextInt( expected );
+    
+    CMPXMediaArray* medias = iCollection->iCache->iVideoList->Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    if( medias->Count() != expected )
+        {
+        err = KErrCorrupt;
+        }
+    
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::CancelRequest( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("CancelRequest"));
+	
+    iCollection->CancelRequest();
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::CommandL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("CommandL"));
+    CreateNewCmdL( aItem );
+    TRAPD( error, iCollection->CommandL( *iCommand ) );
+    
+#ifndef _DEBUG
+    // KMPXCommandIdCollectionAdd leaves with KErrNotSupported if the build is not udeb
+    // and it cannot be checked with STIF, so here's a solution 
+    
+    TMPXCommandId cmdId = iCollection->iActiveTask->iCurCommand->ValueTObjectL<TMPXCommandId>( KMPXCommandGeneralId );
+    if( cmdId == KMPXCommandIdCollectionAdd && error == KErrNotSupported )
+        {
+        error = KErrNone;
+        }
+#endif
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+// CVCXMyVideosCollectionPluginTester::CreateMpxCommandLC
+// -----------------------------------------------------------------------------
+//
+CMPXCommand* CCollectionPluginTest::CreateMpxCommandLC( TInt aCommandGeneralId, 
+                                                        TInt aMyVideosCommandId, 
+                                                        TInt aSync )
+    {
+    CMPXCommand* cmd = CMPXCommand::NewL();
+    CleanupStack::PushL( cmd );
+
+    if( aCommandGeneralId != 0 )
+        {
+        cmd->SetTObjectValueL( KMPXCommandGeneralId, aCommandGeneralId );
+        if( aCommandGeneralId == KVcxCommandIdMyVideos && aMyVideosCommandId != KErrNotFound )
+            {
+            cmd->SetTObjectValueL( KVcxMediaMyVideosCommandId, aMyVideosCommandId );
+            }
+        }
+    
+    if( aSync != KErrNotFound )
+        {
+        TBool asyncBool( aSync );
+        cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, asyncBool );
+        }
+
+    /*
+    if( !aSync )
+        {
+        iTransactions->NextTransactionId();
+
+        if( aCommandGeneralId == KVcxCommandIdMyVideos )
+            {
+            cmd->SetTObjectValueL( KVcxMediaMyVideosTransactionId, iTransactions->TransactionId() );
+            iTransactions->AddTransactionId( aMyVideosCommandId );
+            }
+        }
+
+    VCXLOGLO2("CVCXMyVideosCollectionPluginTester::CreateMpxCommandLC: collectionId: 0x%x", iCollectionUid.iUid);
+    */
+    cmd->SetTObjectValueL( KMPXCommandGeneralCollectionId, iCollectionUid.iUid );
+
+    return cmd;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::FindAllL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("FindAllL"));
+    TInt error( 0 );
+    CMPXMedia* media = CMPXMedia::NewL();
+    RArray<TMPXAttribute> array;
+    TRAP( error, iCollection->FindAllL(*media, array.Array()) );
+    delete media;
+    array.Close();
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::FindAllSyncL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("FindAllSyncL"));
+    TInt error( 0 );
+    CMPXMedia* media = CMPXMedia::NewL();
+    RArray<TMPXAttribute> array;
+    TRAP( error, iCollection->FindAllSyncL( *media, array.Array() ) );
+    delete media;
+    array.Close();
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::GetCapabilities( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("GetCapabilities"));
+
+    TInt error( 0 );
+    TCollectionCapability cap;
+    cap = iCollection->GetCapabilities();
+    if( cap != EMcSearch )
+        {
+        error = KErrCorrupt;
+        }
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::AddL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("AddL"));
+    CMPXMedia* media = CMPXMedia::NewL();
+    TRAPD( error, iCollection->AddL( *media ) );
+    delete media;
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::RemoveL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("RemoveL"));
+    CMPXMedia* media = CMPXMedia::NewL();
+    TRAPD( error, iCollection->RemoveL( *media ) );
+    delete media;
+    return error;;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SetL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("SetL"));
+    CMPXMedia* media = CMPXMedia::NewL();
+    TRAPD( error, iCollection->SetL( *media ) ); // SetL is obsolete, so just set a null media
+    delete media;
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::HandleStepL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("HandleStepL"));
+    TRAPD( error, iCollection->iActiveTask->RunL() );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SetVideoListFetchingL( CStifItemParser& aItem )
+    {
+    TInt value( KErrNotFound );
+    aItem.GetNextInt( value );
+    TBool enabled( value );
+    TRAPD( error, iCollection->iMyVideosMdsDb->iVideoListFetchingIsOngoing = enabled );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::HandleMyVideosDbEvent( CStifItemParser& aItem )
+    {
+    LogMethod(_L("HandleMyVideosDbEvent"));
+
+    //CVcxMyVideosCollectionPlugin::HandleMyVideosDbEvent(
+    //        TMPXChangeEventType aEvent,
+    //        RArray<TUint32>& aId )
+    
+    TMPXChangeEventType event;
+    
+    TInt eventEnum( 0 );
+    aItem.GetNextInt( eventEnum );
+    switch( eventEnum )
+        {
+        case 1:
+            event = EMPXItemDeleted;
+            break;
+        case 2:
+            event = EMPXItemInserted;
+            break;
+        case 3:
+            event = EMPXItemModified;
+            break;
+        default:
+            break;
+        }
+
+    //RArray<TUint32> ids;
+    RArray<TItemId> ids;
+    TInt id( 0 );
+    while( aItem.GetNextInt( id ) == KErrNone )
+        {
+        ids.Append( id );
+        }
+
+    TRAPD( error, iCollection->HandleMyVideosDbEvent( event, ids, 0 ) );
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::HandleCreateVideoListResp( CStifItemParser& aItem )
+    {
+    LogMethod(_L("HandleCreateVideoListResp"));
+
+    TInt complete( 0 );
+    aItem.GetNextInt( complete );
+
+    TBool isComplete( (complete > 0 ) ? ETrue : EFalse );
+    
+    TInt startIndex( 0 );
+    aItem.GetNextInt( startIndex );
+    
+    CMPXMedia* media = CMPXMedia::NewL();
+    TRAPD( error, iCollection->HandleCreateVideoListResp(media, startIndex, isComplete) );
+    delete media;
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::HandleObjectPresentNotificationL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("HandleObjectPresentNotification"));
+
+    TInt cacheLeave( 0 );
+    aItem.GetNextInt( cacheLeave );
+    iCollection->iCache->iLeaveOnReset = (cacheLeave > 0) ? ETrue : EFalse;    
+    TRAPD( error, iCollection->HandleObjectPresentNotification() );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::AddVideoToMdsAndCacheL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("AddVideoToMdsAndCacheL"));
+    TRAPD( error, iCollection->AddVideoToMdsAndCacheL( *iMedia ) );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SetVideoL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("SetVideoL"));
+
+    TInt mpxid( 0 );
+    aItem.GetNextInt( mpxid );
+
+    TInt type( 0 );
+    aItem.GetNextInt( type );
+    
+    TMPXItemId mpxId( mpxid, type );
+    
+    CMPXMedia* media = CMPXMedia::NewL();
+    CleanupStack::PushL( media );
+    media->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, mpxId );
+    TRAPD( error, iCollection->SetVideoL( *media ) );
+    CleanupStack::PopAndDestroy( media );
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SendMyVideosMessageL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("SendMyVideosMessageL"));
+
+    //void CVcxMyVideosCollectionPlugin::SendMyVideosMessageL(
+    //        TUint32 aMessageId, CMPXCommand* aCommand )
+    
+    TInt msgId( 0 );
+    aItem.GetNextInt( msgId );
+    
+    CMPXCommand* cmd = NULL;
+    TInt createCommand( KErrNone );
+    aItem.GetNextInt( createCommand );
+    if( createCommand != KErrNone )
+        {
+        cmd = CMPXCommand::NewL();
+        }
+    
+    iCollection->SendMyVideosMessageL( (TUint32)msgId, cmd );
+    
+    if( cmd )
+        {
+        delete cmd;
+        }
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::SendMessages( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("SendMessages"));
+    
+    CMPXMessage* msg = CMPXMessage::NewL();
+    /*
+    CleanupStack::PushL( msg );
+
+    CMPXMediaArray* mediaArray = CMPXMediaArray::NewL();
+    CleanupStack::PushL( mediaArray );
+
+    TInt msgId( 0 );
+    
+    while( aItem.GetNextInt( msgId ) == KErrNone )
+        {
+        CMPXMessage* message = CMPXMessage::NewL();
+        CleanupStack::PushL( message ); 
+    
+        // Set message attributes
+        //
+        TMPXItemId itemId;
+        itemId.iId1 = KVcxCommandIdMyVideos;
+        message->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId, itemId );
+        message->SetTObjectValueL<TInt>( KVcxMediaMyVideosCommandId, msgId );
+        mediaArray->AppendL( *message );
+        CleanupStack::PopAndDestroy( message );
+        }
+    //msg->SetCObjectValueL( KMPXMediaArrayContents, mediaArray );
+    msg->SetCObjectValueL( KMPXMessageArrayContents, mediaArray );
+    CleanupStack::PopAndDestroy( mediaArray );
+    CleanupStack::Pop( msg );
+    */
+    iCollection->SendMessages( *msg );
+    delete msg;
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::CategoriesL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("CategoriesL"));
+
+    TInt error( 0 );
+    TInt deleteCategories( 0 );
+    aItem.GetNextInt( deleteCategories );
+    if( deleteCategories )
+        {
+        delete iCollection->iCategories;
+        }
+    TRAP( error, iCollection->CategoriesL() );
+    
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::NotifyNewVideosCountDecreasedL( CStifItemParser& /*aItem*/ )
+    {
+    LogMethod(_L("NotifyNewVideosCountDecreasedL"));
+
+    TInt error( 0 );
+    CMPXMedia* media = CMPXMedia::NewL();
+    TRAP( error, iCollection->NotifyNewVideosCountDecreasedL( *media ) );
+    delete media;
+    return error;
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::HandleMessage(CMPXMessage* aMsg, TInt /*aError*/)
+    {
+    // LOOK! WE HANDLE!
+    // TODO: lisää messagearray
+    
+    if ( aMsg->IsSupported( KMPXMessageArrayContents ) )
+        {
+        const CMPXMessageArray* messageArray = 
+                aMsg->Value<CMPXMessageArray>(KMPXMessageArrayContents);
+            
+        for( TInt i = 0; i < messageArray->Count(); i++ )
+            {
+            iMessageList->AppendL(*(messageArray->AtL( i )));
+            }
+        }
+    else
+        {
+        iMessageList->AppendL( *aMsg );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::HandleOpen( CMPXMedia* /*aMedia*/, TInt /*aErr*/ )
+    {
+    // LOOK! WE HANDLE!
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::HandleOpen(CMPXCollectionPath* /*aPath*/, TInt /*aErr*/ )
+    {
+    // LOOK! WE HANDLE!
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------o------------
+//
+void CCollectionPluginTest::HandleOpen(
+        CMPXMedia* /*aMedia*/, 
+        const CMPXCollectionPath* /*aPath*/, 
+        TInt /*aErr*/)
+    {
+    TInt a = 0;
+    a = a+1;
+    // LOOK! WE HANDLE!
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::HandleMedia( CMPXMedia* /*aMedia*/, TInt /*aError*/ )
+    {
+    TInt a = 0;
+    a = a+1;
+    // LOOK! WE HANDLE!
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::HandleCommandComplete( CMPXCommand* /*aCommandResult*/, 
+                                                   TInt /*aError*/)
+    {
+    // LOOK! WE HANDLE!
+    Signal();
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::HandleRemove( const CDesCArray& /*aUriArray*/, TInt /*aError*/ )
+    {
+    // LOOK! WE HANDLE!
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+void CCollectionPluginTest::HandleFindAll( CMPXMedia* /*aMedia*/, TInt /*aError*/ )
+    {
+    // LOOK! WE HANDLE!
+    }
+
+// -----------------------------------------------------------------------------
+//   CCollectionPluginTest::
+// -----------------------------------------------------------------------------
+//
+TInt CCollectionPluginTest::AlbumsL( CStifItemParser& aItem )
+    {
+    LogMethod(_L("AlbumsL"));
+    
+    TInt error( 0 );
+    TInt deleteAlbums( 0 );
+    aItem.GetNextInt( deleteAlbums );
+    if( deleteAlbums )
+        {
+        delete iCollection->iAlbums;
+        }
+
+    // Just check that iCollection->AlbumsL() doesn't leave
+    TRAP( error, iCollection->AlbumsL() );
+    
+    return error;
+    }
+
+//  [End of File] - Do not remove
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosactivetask_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Active object to split up long running db tasks*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <mpxlog.h>
+#include "vcxmyvideosactivetask.h"
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosActiveTask::CVcxMyVideosActiveTask( MVcxMyVideosActiveTaskObserver& aObserver ) :
+    CActive( CActive::EPriorityStandard ),
+    iObserver( aObserver )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 2nd-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosActiveTask::ConstructL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Two-Phase Constructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosActiveTask* CVcxMyVideosActiveTask::NewL( MVcxMyVideosActiveTaskObserver& aObserver )
+    {
+    CVcxMyVideosActiveTask* self = new(ELeave) CVcxMyVideosActiveTask( aObserver);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosActiveTask::~CVcxMyVideosActiveTask()
+    {
+    Cancel();
+    delete iCurCommand;
+    }
+
+// ---------------------------------------------------------------------------
+// Start the operation
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosActiveTask::StartL( TMPXCommandId aTask, const CMPXCommand& aCommand )
+    {
+    MPX_FUNC("CVcxMyVideosActiveTask::StartL");
+    delete iCurCommand;
+    iCurCommand = NULL;
+    iCurCommand = CMPXMedia::NewL( aCommand );
+    iCurTask = aTask;
+    iCurStep = 0;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets current command, unit test function
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosActiveTask::SetNewCommandL( const CMPXCommand& aCommand )
+    {
+    delete iCurCommand;
+    iCurCommand = NULL;
+    iCurCommand = CMPXMedia::NewL( aCommand );
+    }
+
+// ---------------------------------------------------------------------------
+// Get the current step
+// ---------------------------------------------------------------------------
+//
+TInt CVcxMyVideosActiveTask::GetStep()
+    {
+    return iCurStep;
+    }
+
+// ---------------------------------------------------------------------------
+// Get the current task
+// ---------------------------------------------------------------------------
+//
+TMPXCommandId CVcxMyVideosActiveTask::GetTask()
+    {
+    return iCurTask;
+    }
+
+// ---------------------------------------------------------------------------
+// Get the current media
+// ---------------------------------------------------------------------------
+//
+CMPXMedia& CVcxMyVideosActiveTask::GetCommand()
+    {
+    return *iCurCommand;
+    }
+
+// ---------------------------------------------------------------------------
+// Get the current media
+// ---------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosActiveTask::Command()
+    {
+    return iCurCommand;
+    }
+
+// ---------------------------------------------------------------------------
+// From CActive
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosActiveTask::RunL()
+    {
+    switch ( iObserver.HandleStepL() )
+        {
+        case MVcxMyVideosActiveTaskObserver::EDone:
+            Done();
+            break;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosActiveTask::Done
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosActiveTask::Done()
+    {
+    iObserver.HandleOperationCompleted( KErrNone );
+    delete iCurCommand;
+    iCurCommand = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosActiveTask::ContinueStepping
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosActiveTask::ContinueStepping()
+    {
+    }
+
+void CVcxMyVideosActiveTask::Cancel()
+    {
+    if( iCurCommand )
+        {
+        iObserver.HandleOperationCompleted( KErrCancel );
+        delete iCurCommand;
+        iCurCommand = NULL;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From CActive
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosActiveTask::DoCancel()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// From CActive
+// ---------------------------------------------------------------------------
+//
+TInt CVcxMyVideosActiveTask::RunError( TInt /*aError*/ )
+    {
+    return KErrNone;
+    }
+
+// END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosalbum_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Class representing album in My Videos collection.
+*/
+
+#include <mpxlog.h>
+#include <mpxmedia.h>
+#include <mpxmediaarray.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediageneraldefs.h>
+#include "vcxmyvideosalbum.h"
+#include "vcxmyvideoscollectionplugin.h"
+#include "vcxmyvideosvideocache.h"
+#include "vcxmyvideoscollectionutil.h"
+
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosAlbumVideo::TVcxMyVideosAlbumVideo
+// ---------------------------------------------------------------------------
+//
+TVcxMyVideosAlbumVideo::TVcxMyVideosAlbumVideo()
+    {
+    Set( 0, 0, 0 );
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosAlbumVideo::operator=
+// ---------------------------------------------------------------------------
+//                
+TVcxMyVideosAlbumVideo& TVcxMyVideosAlbumVideo::operator=( const TVcxMyVideosAlbumVideo& aVideo )
+    {
+    Set( aVideo.iMdsId, aVideo.iRelationMdsId, aVideo.iMedia );
+    return *this;
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosAlbumVideo::Set
+// ---------------------------------------------------------------------------
+//            
+void TVcxMyVideosAlbumVideo::Set( TUint32 aMdsId, TUint32 aRelationMdsId, CMPXMedia* aVideo )
+    {
+    iMdsId         = aMdsId;
+    iRelationMdsId = aRelationMdsId;
+    iMedia         = aVideo;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::CVcxMyVideosAlbum
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosAlbum::CVcxMyVideosAlbum( CVcxMyVideosCollectionPlugin& aCollectionPlugin )
+: iCollection( aCollectionPlugin )
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::~CVcxMyVideosAlbum
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosAlbum::~CVcxMyVideosAlbum()
+    {
+    iVideoList.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::NewLC
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosAlbum* CVcxMyVideosAlbum::NewLC( CVcxMyVideosCollectionPlugin& aCollectionPlugin )
+    {
+    CVcxMyVideosAlbum* self = new (ELeave) CVcxMyVideosAlbum( aCollectionPlugin );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::NewL
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosAlbum* CVcxMyVideosAlbum::NewL( CVcxMyVideosCollectionPlugin& aCollectionPlugin )
+    {
+    CVcxMyVideosAlbum* self = CVcxMyVideosAlbum::NewLC( aCollectionPlugin );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbum::ConstructL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::Sort
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbum::Sort()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::SetL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbum::SetL( /*CMPXMedia& aAlbum*/ )
+    {
+    //TODO:
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::BelongsToAlbum
+// ---------------------------------------------------------------------------
+//
+TBool CVcxMyVideosAlbum::BelongsToAlbum( TUint32 /*aMdsId*/ )
+    {
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::Video
+// ---------------------------------------------------------------------------
+//
+TInt CVcxMyVideosAlbum::Video( TUint32 /*aMdsId*/, TVcxMyVideosAlbumVideo& /*aVideo*/, TInt& /*aIndex*/ )
+    {
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::AddL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbum::AddL( TVcxMyVideosAlbumVideo /*aVideo*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::Remove
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbum::Remove( RArray<TUint32>& /*aMdsIds*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::Remove
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbum::Remove( TUint32 /*aMdsId*/, TBool /*aCompress*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::CompareVideosByMdsId
+// ---------------------------------------------------------------------------
+//
+TInt CVcxMyVideosAlbum::CompareVideosByMdsId( const TVcxMyVideosAlbumVideo& /*aVideo1*/,
+        const TVcxMyVideosAlbumVideo& /*aVideo2*/ )
+    {
+    return 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::CreateVideoListL
+// Creates album video list from iCollection.iCache->iVideoList.
+// ---------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosAlbum::CreateVideoListL()
+    {
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::CreateVideoListL
+// Appends to video list the items which belong to this album.
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbum::AppendToVideoListL( CMPXMedia& /*aFromVideoList*/,
+        CMPXMedia& /*aToVideoList*/, TInt /*aNewItemStartIndex*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosAlbum::CalculateAttributesL
+// ---------------------------------------------------------------------------
+//
+TBool CVcxMyVideosAlbum::CalculateAttributesL()
+    {
+    return EFalse;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosalbums_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,311 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Albums related collection functionality (except db operations).
+*
+*/
+
+
+// INCLUDE FILES
+#include "vcxmyvideosalbums.h"
+#include "vcxmyvideoscollectionplugin.h"
+
+const TInt KMPXIdNotFound = 998;
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosAlbums::CVcxMyVideosAlbums( CVcxMyVideosCollectionPlugin& aCollection )
+: iCollection( aCollection )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 2nd-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::ConstructL()
+    {
+    iAlbums.Reset();
+    iChangedAlbums.Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// Two-Phase Constructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosAlbums* CVcxMyVideosAlbums::NewL( CVcxMyVideosCollectionPlugin& aCollection )
+    {
+    CVcxMyVideosAlbums* self = new(ELeave) CVcxMyVideosAlbums( aCollection );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosAlbums::~CVcxMyVideosAlbums()
+    {
+    delete iAlbumList;
+    TInt count = iAlbums.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        delete iAlbums[i];
+        }
+    iAlbums.Close();
+    iMdsOpTargetIds.Close();
+    iMdsOpResults.Close();
+    iMdsOpResultsUint32.Close();
+    iRemoveFromAlbumVideos.Close();
+    iChangedAlbums.Close();
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::CreateAlbumListL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::CreateAlbumListL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::CreateAlbumsL
+// Called when iAlbumList is ready, fills iAlbums.
+// Pointers to CVcxMyVideosVideoCache::iVideoList are not filled in yet.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::CreateAlbumsL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::GetAlbumContentIdsL
+// Fetches MDS IDs for all albums.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::GetAlbumContentIdsL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::Album
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosAlbum* CVcxMyVideosAlbums::Album( TUint32 /*aMdsId*/, TInt* /*aPos*/ )
+    {
+    return NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::AddVideosToAlbumL
+// Command from MPX client.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::AddVideosToAlbumL( CMPXMedia* /*aCmd*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::RemoveVideosFromAlbumL
+// Converts video mpx ids to relation ids and calls RemoveRelationsL.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::RemoveVideosFromAlbumL( CMPXMedia* /*aCmd*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::AddAlbumL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::AddAlbumL( CMPXMedia& /*aCmd*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::RemoveAlbumsFromMdsOnlyL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::RemoveAlbumsFromMdsOnlyL( CMPXMedia* /*aCmd*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::RemoveAlbumsL
+// From MDS delete event.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::RemoveAlbumsL( RArray<TUint32>& /*aAlbumIds*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::RemoveAlbumL
+// ----------------------------------------------------------------------------
+//
+TBool CVcxMyVideosAlbums::RemoveAlbumL( TUint32 aMdsId, TBool /*aCompress*/ )
+    {
+    return ( aMdsId == KMPXIdNotFound ) ? EFalse : ETrue;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::CalculateAttributesL
+// ----------------------------------------------------------------------------
+//
+TBool CVcxMyVideosAlbums::CalculateAttributesL()
+    {
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::AddAlbumsFromMdsL
+// From MDS insert event, no need to fetch content since the album was just
+// created.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::AddAlbumsFromMdsL( RArray<TUint32>& /*aAlbumIds*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::HandleGetAlbumsRespL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::HandleGetAlbumsRespL( CMPXMedia* /*aAlbumList*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::HandleGetAlbumContentIdsRespL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::HandleGetAlbumContentIdsRespL( TUint32 /*aAlbumId*/,
+        RArray<TVcxMyVideosAlbumVideo>& /*aAlbumContentIds*/ )
+    {    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::HandleGetAlbumsResp
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::HandleGetAlbumsResp( CMPXMedia* /*aAlbumList*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::HandleGetAlbumContentIdsResp
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::HandleGetAlbumContentIdsResp( TUint32 /*aAlbumId*/,
+        RArray<TVcxMyVideosAlbumVideo>& /*aAlbumContent*/ )
+    {   
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::HandleAddVideosToAlbumResp
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::HandleAddVideosToAlbumResp( CMPXMedia* /*aCmd*/,
+        RPointerArray<CMdEInstanceItem>& /*aItemArray*/ )
+    {    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::DoHandleAddVideosToAlbumResp
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::DoHandleAddVideosToAlbumRespL( CMPXMedia* /*aCmd*/,
+        RPointerArray<CMdEInstanceItem>& /*aItemArray*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::HandleRemoveRelationsResp
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::HandleRemoveRelationsResp( RArray<TUint32>& /*aRelationIds*/,
+        RArray<TUint32>& /*aResults*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::HandleRemoveAlbumsResp
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::HandleRemoveAlbumsResp( CMPXMedia* /*aCmd*/,
+        RArray<TUint32>& /*aResultIds*/ )
+    {    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::HandleRelationEvent
+// Only relation removed events are received here.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::HandleRelationEvent( TObserverNotificationType /*aType*/,
+        const RArray<TMdERelation>& /*aRelationArray*/ )
+    {    
+    }
+
+//HandleRelationIdEvent
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::UpdateAlbumL
+// Updates album attributes from aAlbum, if album is not found from memory,
+// nothing is done (no fetching from MDS).
+// This func is also called (by MDS modified event) when items are added or
+// removed from album.
+// ----------------------------------------------------------------------------
+//
+TBool CVcxMyVideosAlbums::UpdateAlbumL( const CMPXMedia& /*aAlbum*/ )
+    {
+    return ETrue;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::NewVideoFlagChangedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::NewVideoFlagChangedL( TUint32 /*aMdsId*/ )
+    {    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::VideoTitleChangedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::VideoTitleChangedL( TUint32 /*aMdsId*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::VideoAddedOrRemovedFromCacheL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::VideoAddedOrRemovedFromCacheL( CMPXMedia& /*aVideo*/ )
+    {
+    }
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAlbums::UpdateChangedAlbumsL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAlbums::UpdateChangedAlbumsL()
+    {
+    }
+// END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosasyncfileoperations_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 for MPX My Videos Collection Move, Copy and Delete operations.*
+*/
+
+
+
+
+// INCLUDE FILES
+#include "vcxmyvideoscollectionplugin.h"
+#include "vcxmyvideosasyncfileoperations_stub.h"
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosAsyncFileOperations* CVcxMyVideosAsyncFileOperations::NewL(
+    CVcxMyVideosCollectionPlugin& aCollection )
+    {
+    CVcxMyVideosAsyncFileOperations* self = new (ELeave) CVcxMyVideosAsyncFileOperations(
+            aCollection );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// Destructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosAsyncFileOperations::~CVcxMyVideosAsyncFileOperations()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// Constructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosAsyncFileOperations::CVcxMyVideosAsyncFileOperations( CVcxMyVideosCollectionPlugin& aCollection )
+: iCollection( aCollection )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAsyncFileOperations::ConstructL ()
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCollectionPlugin::DeleteVideoL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAsyncFileOperations::DeleteVideoL( TUint32 /*aMdsId*/, TBool /*aForce*/ )
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::HandleMoveOrCopyStepL
+// ----------------------------------------------------------------------------
+//
+MVcxMyVideosActiveTaskObserver::TStepResult
+        CVcxMyVideosAsyncFileOperations::HandleMoveOrCopyStepL()
+    {
+    return MVcxMyVideosActiveTaskObserver::EDone;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::InitMoveOrCopyOperationsL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAsyncFileOperations::InitMoveOrCopyOperationsL( CMPXMedia& /*aCmd*/ )
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::CancelOperationL
+// Called when leave or cancel occurs for the operation, generates resp msg.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAsyncFileOperations::CancelOperationL( TInt /*aErr*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::SendOperationRespL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAsyncFileOperations::SendOperationRespL( TInt /*aCmdId*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::MoveOrCopyVideoL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAsyncFileOperations::MoveOrCopyVideoL( TUint32 /*aMdsId*/ )
+    {
+    }    
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::InitSingleMoveOrCopyL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAsyncFileOperations::InitSingleMoveOrCopyL( TUint32 /*aMdsId*/ )
+    {
+    }
+
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::HandleFileCopyCompletedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosAsyncFileOperations::HandleFileCopyCompletedL( TInt /*aErr*/ )
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::DriveHasEnoughFreeSpaceL
+// ----------------------------------------------------------------------------
+//
+TBool CVcxMyVideosAsyncFileOperations::DriveHasEnoughFreeSpaceL( const TDesC& /*aPath*/, TInt /*aDrive*/ )
+    {
+    return ETrue;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::GenerateTargetPathForMoveOrCopyL
+// ----------------------------------------------------------------------------
+//    
+void CVcxMyVideosAsyncFileOperations::GenerateTargetPathForMoveOrCopyL(
+        const TDesC& /*aSourcePath*/, TDes& /*aTargetPath*/, TInt /*aTargetDrive*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosAsyncFileOperations::HandleDeleteStepL
+// ----------------------------------------------------------------------------
+//
+MVcxMyVideosActiveTaskObserver::TStepResult CVcxMyVideosAsyncFileOperations::HandleDeleteStepL()
+    {
+    return MVcxMyVideosActiveTaskObserver::EDone;
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideoscategories_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,308 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:    Categories related functionality*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <mpxmediageneraldefs.h>
+#include "vcxmyvideoscollectionplugin.h"
+#include "vcxmyvideoscategories_stub.h"
+#include "vcxmyvideoscollectionutil.h"
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosCategories* CVcxMyVideosCategories::NewL(
+    CVcxMyVideosCollectionPlugin& aCollection )
+    {
+    CVcxMyVideosCategories* self = new (ELeave) CVcxMyVideosCategories( aCollection );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// Destructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosCategories::~CVcxMyVideosCategories()
+    {
+    delete iList;
+    iModifiedCategories.Close();
+    }
+
+// ----------------------------------------------------------------------------
+// Constructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosCategories::CVcxMyVideosCategories( CVcxMyVideosCollectionPlugin& aCollection )
+: iCollection( aCollection )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::ConstructL ()
+    {
+    }
+    
+// ----------------------------------------------------------------------------------------------------------
+// CVcxMyVideosCategories::CreateCategoryListL
+// ----------------------------------------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosCategories::CreateCategoryListL()
+    {
+    return NULL;
+    }
+
+// ----------------------------------------------------------------------------------------------------------
+// CVcxMyVideosCategories::AppendCategoryToArrayL
+// ----------------------------------------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::AppendCategoryToArrayL( const TDesC& /*aTitle*/, TMPXItemId /*aId*/,
+        CMPXMediaArray& /*aCategoryArray*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::UpdateCategoriesL
+// Called by iCollection when fetching the video list from mds incrementally.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::UpdateCategoriesL( CMPXMedia& /*aVideoList*/,
+        TInt /*aNewItemsStartIndex*/ )
+    {    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::UpdateVideosCountL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::UpdateVideosCountL( CMPXMediaArray& /*aCategoryArray*/,
+    RArray<TInt>& /*aVideosIncrements*/, RArray<TInt>& /*aNewVideosIncrements*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::UpdateVideosCountL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::UpdateVideosCountL( CMPXMedia& /*aCategory*/,
+    TInt /*aIncrement*/, TMPXAttributeData /*aCountAttribute*/, TInt /*aEventInfo*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideosAddedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideosAddedL( RArray<TUint32>& /*aIds*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideosRemovedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideosRemovedL( RArray<TUint32>& /*aIds*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideoAddedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideoAddedL( TUint32 /*aMdsId*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideoAddedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideoAddedL( CMPXMedia& /*aVideo*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideoRemovedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideoRemovedL( TUint32 /*aMdsId*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideoRemovedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideoRemovedL( CMPXMedia& /*aVideo*/ )
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideosAddedOrRemovedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideosAddedOrRemovedL(
+        RArray<TUint32>& /*aIds*/, TBool /*aAdded*/ )
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideoAddedOrRemovedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideoAddedOrRemovedL( TUint32 /*aMdsId*/, TBool /*aAdded*/ )
+    {    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::VideoAddedOrRemovedL
+// All remove&add calls eventually come here.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::VideoAddedOrRemovedL( CMPXMedia& /*aVideo*/, TBool /*aAdded*/ )
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::UpdateCategoryL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::UpdateCategoryL( CMPXMedia& /*aCategory*/, TInt /*aCategoryIndex*/,
+        CMPXMedia& /*aVideo*/, TBool /*aAdded*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::AddToTUint32AttributeL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::AddToTUint32AttributeL( CMPXMedia& /*aCategory*/, TInt /*aAddition*/,
+        TMPXAttributeData /*aAttribute*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::CategoryIndex
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosCategories::CategoryIndex( TInt /*aOrigin*/ )
+    {
+    return 0;
+    }     
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::NewVideoFlagChangedL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::NewVideoFlagChangedL( TUint32 /*aOldFlag*/, TUint32 /*aNewFlag*/,
+        TUint8 /*aOrigin*/, TBool& /*aModified*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::ResetVideoCountersL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::ResetVideoCountersL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::UpdateCategoriesNewVideoNamesL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::UpdateCategoriesNewVideoNamesL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::UpdateCategoryNewVideoNameAndDateL
+// ----------------------------------------------------------------------------
+//    
+void CVcxMyVideosCategories::UpdateCategoryNewVideoNameAndDateL( TInt /*aOrigin*/, TBool& /*aModified*/,
+        RArray<TUint32>& /*aIgnoredIds*/ )
+    {   
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::CalculateNewVideoNameL
+// ----------------------------------------------------------------------------
+//    
+const TDesC& CVcxMyVideosCategories::CalculateNewVideoNameL( CMPXMedia& /*aVideoList*/,
+        TInt /*aOrigin*/, RArray<TUint32>& /*aIgnoredIds*/, CMPXMedia*& /*aNewVideo*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::UpdateCategoryNewVideoNameAndDateL
+// Called when video is updated in a way that it affects category new
+// video name.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::UpdateCategoryNewVideoNameAndDateL( CMPXMedia& /*aVideo*/,
+        TBool& /*aModified*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::GenerateCategoryModifiedEventL
+// Called when video is updated in a way that it modifies categories in a way
+// that event is sent.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::GenerateCategoryModifiedEventL( CMPXMedia& /*aMedia*/,
+        TBool /*aFlushMessageList*/, TInt32 /*aExtraInfo*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::OriginChangedL
+// Called when videos origin is changed (Video moves from one category to other).
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::OriginChangedL( CMPXMedia& /*aVideo*/, TUint8 /*aPrevOrigin*/,
+        TUint8 /*aNewOrigin*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::ResetModifiedCategoriesArray
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::ResetModifiedCategoriesArray()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCategories::AddEventsFromModifiedCategoriesArrayL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosCategories::AddEventsFromModifiedCategoriesArrayL()
+    {
+    }
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideoscollectionutil_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,567 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <mpxmedia.h>
+#include <mpxmediaarray.h>
+#include <mpxlog.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediageneraldefs.h>
+#include <vcxmyvideosdefs.h>
+#include <mpxmessagecontainerdefs.h>
+#include <bautils.h>
+#include <mpxmediavideodefs.h>
+#ifdef _DEBUG
+#include <flogger.h>
+#include <f32file.h> 
+#endif
+#include "vcxmyvideoscollectionutil.h"
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCollectionUtil::CreateEmptyMediaListL
+// ----------------------------------------------------------------------------
+//
+CMPXMedia* TVcxMyVideosCollectionUtil::CreateEmptyMediaListL()
+    {
+    RArray<TInt> supportedIds;
+    CleanupClosePushL( supportedIds ); // 1->
+                
+    supportedIds.AppendL( KMPXMediaIdContainer );
+    supportedIds.AppendL( KMPXMediaIdGeneral );
+
+    //create container
+    CMPXMedia* container = CMPXMedia::NewL( supportedIds.Array() );
+    CleanupStack::PushL( container ); // 2->
+
+    CMPXMediaArray* mediaArray = CMPXMediaArray::NewL();
+    CleanupStack::PushL( mediaArray ); // 3->
+
+    container->SetCObjectValueL( KMPXMediaArrayContents, mediaArray );
+
+    CleanupStack::PopAndDestroy( mediaArray );    // <-3
+    CleanupStack::Pop( container );               // <-2    
+    CleanupStack::PopAndDestroy( &supportedIds ); // <-1
+    return container;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCollectionUtil::CreateEmptyMessageListL
+// ----------------------------------------------------------------------------
+//
+CMPXMedia* TVcxMyVideosCollectionUtil::CreateEmptyMessageListL()
+    {
+    RArray<TInt> supportedIds;
+    CleanupClosePushL( supportedIds ); // 1->
+                
+    supportedIds.AppendL( KMPXMediaIdContainer );
+
+    //create container
+    CMPXMedia* container = CMPXMedia::NewL( supportedIds.Array() );
+    CleanupStack::PushL( container ); // 2->
+
+    CMPXMediaArray* messageArray = CMPXMediaArray::NewL();
+    CleanupStack::PushL( messageArray ); // 3->
+
+    container->SetCObjectValueL( KMPXMessageArrayContents, messageArray );
+
+    CleanupStack::PopAndDestroy( messageArray );  // <-3
+    CleanupStack::Pop( container );               // <-2
+    CleanupStack::PopAndDestroy( &supportedIds ); // <-1
+    return container;
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CopyFromListToListL
+// ---------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::CopyFromListToListL(
+        CMPXMedia& aFromList,
+        CMPXMedia& aToList,
+        RArray<TUint32>& aMdsIds )
+    {
+    MPX_FUNC("TVcxMyVideosCollectionUtil::CopyFromListToListL ()");
+    
+    if ( !aFromList.IsSupported( KMPXMediaArrayContents ) ||
+            !aToList.IsSupported( KMPXMediaArrayContents ) )
+        {
+        MPX_DEBUG1("TVcxMyVideosCollectionUtil::CopyFromListToListL left, media array(s) missing. ");
+        User::Leave( KErrArgument );
+        }
+
+    TInt mdsIdsCount          = aMdsIds.Count();
+    CMPXMediaArray* fromArray = aFromList.Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    CMPXMediaArray* toArray   = aToList.Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    TInt fromArrayCount       = fromArray->Count();
+    TMPXItemId fromId;
+    TMPXItemId toId;
+
+    for ( TInt i = 0; i < mdsIdsCount; i++ )
+        {
+        for ( TInt j = 0; j < fromArrayCount; j++ )
+            {
+            if ( aMdsIds[i] ==
+                    fromArray->AtL( j )->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ).iId1 )
+                {
+                toArray->AppendL( *fromArray->AtL( j ) );
+                MPX_DEBUG3("TVcxMyVideosCollectionUtil:: copying %d (from pointer %x)", aMdsIds[i], fromArray->AtL( j ));
+                break;
+                }                
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CopyFromListToListL
+// ---------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::CopyFromListToListL(
+        RArray<CMPXMedia*>& aFromArray,
+        CMPXMedia& aToList,
+        RArray<TUint32>& aMdsIds )
+    {
+    MPX_FUNC("TVcxMyVideosCollectionUtil::CopyFromListToListL( RArray version )");
+    
+    if ( !aToList.IsSupported( KMPXMediaArrayContents ) )
+        {
+        MPX_DEBUG1("TVcxMyVideosCollectionUtil::CopyFromListToListL left, media array missing. ");
+        User::Leave( KErrArgument );
+        }
+
+    TInt mdsIdsCount          = aMdsIds.Count();
+    CMPXMediaArray* toArray   = aToList.Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    TInt fromArrayCount       = aFromArray.Count();
+    TMPXItemId fromId;
+    TMPXItemId toId;
+
+    for ( TInt i = 0; i < mdsIdsCount; i++ )
+        {
+        for ( TInt j = 0; j < fromArrayCount; j++ )
+            {
+            if ( aMdsIds[i] ==
+                    aFromArray[j]->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ).iId1 )
+                {
+                toArray->AppendL( *aFromArray[j] );
+                MPX_DEBUG3("TVcxMyVideosCollectionUtil:: copying %d (from pointer %x)", aMdsIds[i], aFromArray[j]);
+                break;
+                }                
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::AppendToListL
+// New items in aToList will point to same shared memory as items in aFromList.
+// ---------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::AppendToListL( CMPXMedia& aToList, CMPXMedia& aFromList )
+    {
+    CMPXMedia* media;
+    CMPXMediaArray* toArray   = aToList.Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    CMPXMediaArray* fromArray = aFromList.Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    TInt count = fromArray->Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        media = CMPXMedia::NewL( *(fromArray->AtL( i )) ); // points to same shared memory
+        toArray->AppendL( media ); //ownership moves
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// This helper function converts drive letter to drive number
+// ---------------------------------------------------------------------------
+//
+TInt TVcxMyVideosCollectionUtil::DriveLetter2DriveNumber( const TDesC &aDrive )
+    {
+    TInt    retVal = KErrArgument;
+
+    if (aDrive.Length() > 0)
+        {
+        TChar letter = aDrive[0];
+    	letter.UpperCase();
+    	if (letter >= 'A' && letter <= 'Z')
+    		{
+    		retVal = (TInt)letter - 'A';
+    		}
+        }
+
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::MakeUniqueFileNameL
+// ---------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::MakeUniqueFileNameL( RFs& aFs, const TDesC& aPath,
+        TDes& aUniquePath )
+    {
+    const TInt KMaxDigits     = 7;
+    TBuf<KMaxDigits> counterDigits;
+    
+    aUniquePath = aPath;
+    TInt counter = 1;
+    //TInt zeros   = 0;
+    TInt pos     = 0;
+    while( BaflUtils::FileExists( aFs, aUniquePath ) )
+        {
+        pos   = aPath.Locate( '.' );
+        if ( pos == KErrNotFound )
+            {
+            aUniquePath  = aPath;
+            }
+        else
+            {
+            aUniquePath  = aPath.Mid( 0, pos );
+            }
+        _LIT(KPercentD, "%d");
+        counterDigits.Format( KPercentD, counter++ );
+        aUniquePath.Append( '_' );
+        aUniquePath.Append( '(' );
+        aUniquePath.AppendJustify( counterDigits, KMaxDigits, TAlign( ERight ), '0' );
+        aUniquePath.Append( ')' );
+        if ( pos != KErrNotFound )
+            {
+            aUniquePath.Append( aPath.Mid( pos ) );
+            }
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::OriginL
+// ----------------------------------------------------------------------------
+//
+TUint8 TVcxMyVideosCollectionUtil::OriginL( CMPXMedia& aVideo )
+    {
+    TUint8 origin = EVcxMyVideosOriginOther;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosOrigin ) )
+        {
+        origin = aVideo.ValueTObjectL<TUint8>( KVcxMediaMyVideosOrigin );                
+#ifndef VCX_DOWNLOADS_CATEGORY
+        if ( origin != EVcxMyVideosOriginCapturedWithCamera )
+            {
+            origin = EVcxMyVideosOriginOther;
+            }
+#else
+        if ( origin != EVcxMyVideosOriginCapturedWithCamera &&
+				 origin != EVcxMyVideosOriginDownloaded
+				)
+            {
+            origin = EVcxMyVideosOriginOther;
+            }
+#endif
+        }
+    return origin;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::FlagsL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::FlagsL( CMPXMedia& aVideo )
+    {
+    TUint32 flags = 0;
+                            
+    if ( aVideo.IsSupported( KMPXMediaGeneralFlags ) )
+        {
+        flags = aVideo.ValueTObjectL<TUint32>( KMPXMediaGeneralFlags );                
+        }
+    return flags;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CreationDateL
+// ----------------------------------------------------------------------------
+//
+TInt64 TVcxMyVideosCollectionUtil::CreationDateL( CMPXMedia& aVideo )
+    {
+    TInt64 creationDate = 0;
+                            
+    if ( aVideo.IsSupported( KMPXMediaGeneralDate ) )
+        {
+        creationDate = aVideo.ValueTObjectL<TInt64>( KMPXMediaGeneralDate );                
+        }
+    return creationDate;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::DownloadIdL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::DownloadIdL( CMPXMedia& aVideo )
+    {
+    TUint32 downloadId = 0;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosDownloadId ) )
+        {
+        downloadId = aVideo.ValueTObjectL<TUint32>( KVcxMediaMyVideosDownloadId );                
+        }
+    return downloadId;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::DownloadStateL
+// ----------------------------------------------------------------------------
+//
+TVcxMyVideosDownloadState TVcxMyVideosCollectionUtil::DownloadStateL( CMPXMedia& aVideo )
+    {
+    TVcxMyVideosDownloadState downloadState = EVcxMyVideosDlStateNone;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosDownloadState ) )
+        {
+        downloadState = static_cast<TVcxMyVideosDownloadState>(
+                aVideo.ValueTObjectL<TUint8>( KVcxMediaMyVideosDownloadState ) );
+        }
+    return downloadState;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::IdL
+// ----------------------------------------------------------------------------
+//
+TMPXItemId TVcxMyVideosCollectionUtil::IdL( const CMPXMedia& aVideo )
+    {
+    TMPXItemId id( 0, 0 );
+                            
+    if ( aVideo.IsSupported( KMPXMediaGeneralId ) )
+        {
+        id = aVideo.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId );
+        }
+    return id;
+    }
+
+
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::DurationL
+// ----------------------------------------------------------------------------
+//
+TReal32 TVcxMyVideosCollectionUtil::DurationL( CMPXMedia& aVideo )
+    {
+    TReal32 duration = -1;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosDuration ) )
+        {
+        duration = aVideo.ValueTObjectL<TReal32>( KVcxMediaMyVideosDuration );
+        }
+    return duration;
+    }
+
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::Title
+// ----------------------------------------------------------------------------
+//
+const TDesC& TVcxMyVideosCollectionUtil::Title( const CMPXMedia& aVideo )
+    {                            
+    if ( aVideo.IsSupported( KMPXMediaGeneralTitle ) )
+        {
+        return aVideo.ValueText( KMPXMediaGeneralTitle );
+        }
+    else
+        {
+        return KNullDesC;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::RatingL
+// ----------------------------------------------------------------------------
+//
+TUint8 TVcxMyVideosCollectionUtil::RatingL( CMPXMedia& aVideo )
+    {
+    TUint8 rating = 0;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosRating ) )
+        {
+        rating = aVideo.ValueTObjectL<TUint8>( KVcxMediaMyVideosRating );                
+        }
+    return rating;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::AudioFourCcL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::AudioFourCcL( CMPXMedia& aVideo )
+    {
+    TUint32 audioFourCc = 0;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosAudioFourCc ) )
+        {
+        audioFourCc = aVideo.ValueTObjectL<TUint32>( KVcxMediaMyVideosAudioFourCc );                
+        }
+    return audioFourCc;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::AreSupported
+// ----------------------------------------------------------------------------
+//
+TBool TVcxMyVideosCollectionUtil::AreSupported( CMPXMedia& aVideo,
+        const TArray<TMPXAttribute>& aAttrs,
+        TBool& aNonSupportedAttrCanBeFoundFromMds )
+    {
+    MPX_FUNC("TVcxMyVideosCollectionUtil::AreSupported()");
+
+    TBool areSupported( ETrue );
+    aNonSupportedAttrCanBeFoundFromMds = EFalse;
+    
+    for ( TInt i = 0; i < aAttrs.Count(); i++ )
+        {
+        if ( !aVideo.IsSupported( aAttrs[i] ) )
+            {
+            MPX_DEBUG3("  attr (%x)(%x) not supported in media object", aAttrs[i].ContentId(),
+                    aAttrs[i].AttributeId() );
+
+            areSupported = EFalse;
+            
+            if ( AttrBelongsToFullSet( aAttrs[i] ) )
+                {
+                MPX_DEBUG1("  attr can be found from mds");
+                aNonSupportedAttrCanBeFoundFromMds = ETrue;
+                return areSupported; // We can return since areSupported and aNonSupportedAttrCanBeFoundFromMds
+                                     // won't change anymore, no matter what rest of the attributes are.
+                                     // Fetching from MDS is justified.
+                }
+            else
+                {
+                MPX_DEBUG1("  attr can NOT be found from mds");
+                }
+            }
+        }
+
+    return areSupported;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::AttrBelongsToFullSet
+// ----------------------------------------------------------------------------
+//
+TBool TVcxMyVideosCollectionUtil::AttrBelongsToFullSet( const TMPXAttribute& aAttr )
+    {
+    // these attributes are saved to MDS but not to cache.
+    if ( aAttr == KMPXMediaGeneralComment ||
+        aAttr == KMPXMediaGeneralCopyright ||
+        aAttr == KMPXMediaGeneralMimeType ||
+        aAttr == KMPXMediaGeneralLastPlaybackPosition ||
+        aAttr == KVcxMediaMyVideosModifiedDate ||
+        aAttr == KVcxMediaMyVideosAudioLanguage ||
+        aAttr == KVcxMediaMyVideosAuthor ||
+        aAttr == KMPXMediaVideoBitRate ||
+        aAttr == KMPXMediaVideoHeight ||
+        aAttr == KMPXMediaVideoWidth ||
+        aAttr == KMPXMediaVideoArtist )
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::Origin
+// ----------------------------------------------------------------------------
+//
+TInt TVcxMyVideosCollectionUtil::Origin( TInt /*aCategoryId*/ )
+    {
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::MediaArrayL
+// ----------------------------------------------------------------------------
+//
+CMPXMediaArray* TVcxMyVideosCollectionUtil::MediaArrayL( const CMPXMedia& /*aMedia*/ )
+    {
+    return NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::Int32ValueL
+// ----------------------------------------------------------------------------
+//
+TInt32 TVcxMyVideosCollectionUtil::Int32ValueL( CMPXMedia& /*aMedia*/ )
+    {
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::Uint32ValueL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::Uint32ValueL( CMPXMedia& /*aMedia*/ )
+    {
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CategoryItemCountL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::CategoryItemCountL( CMPXMedia& /*aVideo*/ )
+    {
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CategoryNewItemCountL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::CategoryNewItemCountL( CMPXMedia& /*aVideo*/ )
+    {
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CategoryNewVideoName
+// ----------------------------------------------------------------------------
+//
+const TDesC& TVcxMyVideosCollectionUtil::CategoryNewVideoName( const CMPXMedia& /*aVideo*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::GetIdsFromMediaArrayL
+// ----------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::GetIdsFromMediaArrayL( CMPXMediaArray& /*aMediaArray*/,
+        RArray<TUint32>& /*aIdArray*/ )
+    {
+    }
+
+#ifdef _DEBUG
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::PrintOpenFileHandlesL
+// ----------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::PrintOpenFileHandlesL( const TDesC& /*aFileName*/, RFs& /*aFs*/ )
+    {
+    }   
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::GetProcessName
+// ----------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::GetProcessName( TInt /*aThreadId*/, TFullName& /*aProcessName*/ )
+    {
+    }   
+#endif
+   
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosmdsalbums_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,364 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Provides albums support utilizing MDS.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <mpxlog.h>
+#include <mpxmedia.h>
+#include <mpxmediaarray.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediageneraldefs.h>
+#include "vcxmyvideosmdsalbums.h"
+#include "vcxmyvideosmdsdb_stub.h"
+#include "vcxmyvideoscollectionutil.h"
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosMdsAlbums::CVcxMyVideosMdsAlbums( CVcxMyVideosMdsDb& aMdsDb,
+        MVcxMyVideosMdsAlbumsObserver* aObserver )
+: CActive( EPriorityStandard ), iMdsDb( aMdsDb ), iObserver(aObserver) 
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 2nd-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::ConstructL()
+    {
+    GetSchemaDefinitionsL();
+    SetObservingL();
+    //CActiveScheduler::Add( this );    
+    }
+
+// ---------------------------------------------------------------------------
+// Two-Phase Constructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosMdsAlbums* CVcxMyVideosMdsAlbums::NewL( CVcxMyVideosMdsDb& aMdsDb,
+        MVcxMyVideosMdsAlbumsObserver* aObserver )
+    {
+    CVcxMyVideosMdsAlbums* self = new(ELeave) CVcxMyVideosMdsAlbums( aMdsDb, aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosMdsAlbums::~CVcxMyVideosMdsAlbums()
+    {
+    CancelQueries();
+    delete iAlbumQuery;
+    delete iVideoQuery;
+    delete iRelationQuery;
+    iItemArray.Close();
+    iResultBuffer.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::CancelQueries
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::CancelQueries( CVcxMyVideosMdsDb::TRequestType /*aType*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// From CActive
+// CVcxMyVideosMdsAlbums::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::DoCancel()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::SetObservingL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::SetObservingL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::GetAlbumsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::GetAlbumsL( CMPXMedia* /*aAlbumList*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::GetAlbumL
+// ---------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosMdsAlbums::GetAlbumL( TUint32 /*aId*/ )
+    {
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::DoGetAlbumsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::DoGetAlbumsL( CMPXMedia* /*aAlbumList*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::GetAlbumContentIdsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::GetAlbumContentIdsL( TUint32 /*aAlbumId*/,
+        RArray<TVcxMyVideosAlbumVideo>& /*aContentArray*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::DoGetAlbumContentIdsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::DoGetAlbumContentIdsL( TUint32 /*aAlbumId*/,
+        RArray<TVcxMyVideosAlbumVideo>& /*aContentArray*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::GetAlbumContentVideosL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::GetAlbumContentVideosL( TUint32 /*aAlbumId*/, CMPXMedia& /*aVideoList*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::DoGetAlbumContentVideosL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::DoGetAlbumContentVideosL( TUint32 /*aAlbumId*/, CMPXMedia& /*aVideoList*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::GetSchemaDefinitionsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::GetSchemaDefinitionsL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::Object2MediaL
+// For album objects only.
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::Object2MediaL(
+        CMdEObject& /*aObject*/,
+        CMPXMedia& /*aAlbum*/ )
+    {    
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::Media2ObjectL
+// Called by AddAlbumL()
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::Media2ObjectL(
+        CMPXMedia& /*aAlbum*/,
+        CMdEObject& /*aObject*/)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::GetSchemaDefinitionsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleQueryNewResults(CMdEQuery& /*aQuery*/,
+            TInt /*aFirstNewItemIndex*/,
+            TInt /*aNewItemCount*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::HandleQueryCompleted
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleQueryCompleted( CMdEQuery& /*aQuery*/, TInt /*aError*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::HandleAlbumQueryCompletedL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleAlbumQueryCompletedL( CMdEQuery& /*aQuery*/, TInt /*aError*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::HandleVideoQueryCompletedL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleVideoQueryResultsL( CMdEQuery& /*aQuery*/, TInt /*aError*/,
+    TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/, TBool /*aComplete*/  )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::HandleRelationQueryCompletedL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleRelationQueryCompletedL( CMdEQuery& /*aQuery*/, TInt /*aError*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::AddVideosToAlbumL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::AddVideosToAlbumL( CMPXMedia* /*aCmd*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::DoAddVideosToAlbumL
+// Called by iMdsDb.iCmdQueue
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::DoAddVideosToAlbumL( CMPXMedia* /*aCmd*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::RemoveRelationsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::RemoveRelationsL( RArray<TUint32>& /*aRelationIds*/,
+        RArray<TUint32>& /*aResults*/, MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::DoRemoveRelationsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::DoRemoveRelationsL( RArray<TUint32>& /*aRelationIds*/,
+        RArray<TUint32>& /*aResults*/, MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::AddAlbumL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::AddAlbumL( CMPXMedia& /*aAlbum*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::SetAlbumL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::SetAlbumL( CMPXMedia& /*aVideo*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::RemoveAlbumsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::RemoveAlbumsL( CMPXMedia* /*aMpxCmd*/, MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    { 
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::DoRemoveAlbumsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::DoRemoveAlbumsL( CMPXMedia* /*aMpxCmd*/,
+        MVcxMyVideosMdsAlbumsObserver& /*aClient*/ )
+    { 
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::RunL
+// From CActive.
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::RunL()
+    {
+    }
+
+//TODO: implement RunError
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::HandleAddVideosToAlbumCompletedL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleAddVideosToAlbumCompletedL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::HandleRemoveRelationsCompletedL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleRemoveRelationsCompletedL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::HandleRemoveAlbumsCompletedL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleRemoveAlbumsCompletedL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosMdsAlbums::HandleRelationItemNotification
+// From MMdERelationItemObserver
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsAlbums::HandleRelationItemNotification(CMdESession& /*aSession*/, 
+        TObserverNotificationType aType,
+        const RArray<TMdERelation>& aRelationArray)
+    {
+    if ( iObserver )
+        {
+        iObserver->HandleRelationEvent( aType, aRelationArray );
+        }
+    }
+
+// END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosmdsdb_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,430 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:    MPX My Videos collection plugin's MDS database class*
+*/
+
+
+
+
+//#include <harvesterclient.h>
+//#include <mpxlog.h>
+#include <mdequery.h>
+#include <mdeconstants.h>
+#include <mdequery.h>
+#include <mpxmedia.h>
+#include <vcxmyvideosdefs.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxmediageneralextdefs.h>
+#include <mpxmediaarray.h>
+#include <mpxmediavideodefs.h>
+#include "vcxmyvideosmdsdb_stub.h"
+#include "vcxmyvideoscollectionutil.h"
+
+
+const TInt KInvalidId( -100 );
+const TInt KMPXIdNotFound( 998 );
+
+// ---------------------------------------------------------------------------
+// CVcxMdsShutdownMonitor::NewL()
+// ---------------------------------------------------------------------------
+//
+CVcxMdsShutdownMonitor* CVcxMdsShutdownMonitor::NewL( MVcxMdsShutdownMonitorObserver& aObserver,
+                                                const TUid& aKeyCategory,
+                                                const TInt aPropertyKey,
+                                                TBool aDefineKey)
+    {
+    CVcxMdsShutdownMonitor* self = new( ELeave )CVcxMdsShutdownMonitor( aObserver, 
+                                                                  aKeyCategory,
+                                                                  aPropertyKey,
+                                                                  aDefineKey);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMdsShutdownMonitor::CVcxMdsShutdownMonitor()
+// ---------------------------------------------------------------------------
+//
+CVcxMdsShutdownMonitor::CVcxMdsShutdownMonitor( MVcxMdsShutdownMonitorObserver& aObserver,
+                                          const TUid& aKeyCategory,
+                                          const TInt aPropertyKey,
+                                          TBool aDefineKey)
+    : CActive( CActive::EPriorityStandard ), iObserver( aObserver ),
+      iKeyCategory( aKeyCategory ), iPropertyKey(aPropertyKey), iDefineKey( aDefineKey )
+    {   
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMdsShutdownMonitor::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CVcxMdsShutdownMonitor::ConstructL()
+    { 
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMdsShutdownMonitor::~CVcxMdsShutdownMonitor()
+// ---------------------------------------------------------------------------
+//
+CVcxMdsShutdownMonitor::~CVcxMdsShutdownMonitor()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMdsShutdownMonitor::RunL()
+// ---------------------------------------------------------------------------
+//
+void CVcxMdsShutdownMonitor::RunL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMdsShutdownMonitor::DoCancel()
+// ---------------------------------------------------------------------------
+//
+void CVcxMdsShutdownMonitor::DoCancel()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::CVcxMyVideosMdsDb
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosMdsDb::CVcxMyVideosMdsDb( MVcxMyVideosMdsDbObserver* aObserver,
+        RFs& aFs, MVcxMyVideosMdsAlbumsObserver* aAlbumsObserver )
+: iFs( aFs ), iMdsDbObserver(aObserver), iAlbumsObserver(aAlbumsObserver) 
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::ConstructL()
+    {
+    //iCmdQueue = CVcxMyVideosMdsCmdQueue::NewL( *this );
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::OpenMdsSessionL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::OpenMdsSessionL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::HandleObjectPresentNotification( CMdESession& /*aSession*/,
+        TBool /*aPresent*/, const RArray<TItemId>& /*aObjectIdArray*/)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosMdsDb* CVcxMyVideosMdsDb::NewL( MVcxMyVideosMdsDbObserver* aObserver,
+        RFs& aFs, MVcxMyVideosMdsAlbumsObserver* aAlbumsObserver )
+    {
+    CVcxMyVideosMdsDb* self =
+            CVcxMyVideosMdsDb::NewLC( aObserver, aFs, aAlbumsObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosMdsDb* CVcxMyVideosMdsDb::NewLC( MVcxMyVideosMdsDbObserver* aObserver,
+        RFs& aFs, MVcxMyVideosMdsAlbumsObserver* aAlbumsObserver )
+    {
+    CVcxMyVideosMdsDb* self = new( ELeave ) CVcxMyVideosMdsDb( aObserver, aFs, aAlbumsObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosMdsDb::~CVcxMyVideosMdsDb()
+    {
+    delete iVideoQuery;
+    delete iMdsSession;
+    delete iActiveSchedulerWait;
+    delete iAsyncHandleQueryCompleteCaller;
+    delete iMdsShutdownMonitor;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::Cancel
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::Cancel( TRequestType /*aType*/ )
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::AddVideoL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::AddVideoL(
+        CMPXMedia& /*aVideo*/, 
+        TUint32& /*aMdsId*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::RemoveVideo
+// ---------------------------------------------------------------------------
+//
+TInt CVcxMyVideosMdsDb::RemoveVideo( TUint32 /*aMdsId*/ )
+    {
+    return 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::UpdateVideoL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::UpdateVideoL( CMPXMedia& /*aVideo*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::CreateVideoListL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::CreateVideoListL( TVcxMyVideosSortingOrder /*aSortingOrder*/,
+        TBool /*aAscending*/, TBool /*aFullDetails*/, CMPXMedia*& /*aVideoList*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::DoCreateVideoListL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::DoCreateVideoListL( TVcxMyVideosSortingOrder /*aSortingOrder*/,
+        TBool /*aAscending*/, TBool /*aFullDetails*/, CMPXMedia*& aVideoList )
+    {
+    iVideoList = aVideoList;
+    CMPXMediaArray* mediaArray = iVideoList->Value<CMPXMediaArray>(KMPXMediaArrayContents);
+    CleanupStack::PushL( mediaArray );
+    for( TInt i = 0; i < 10; i++ )
+        {
+        TMPXItemId mpxId( i, 0 );
+
+        CMPXMedia* newMedia = CMPXMedia::NewL();
+        CleanupStack::PushL( newMedia );
+        newMedia->SetTObjectValueL( KMPXMessageMediaGeneralId, mpxId );
+        newMedia->SetTObjectValueL( KMPXMediaGeneralId, mpxId );
+        mediaArray->AppendL( *newMedia );
+        CleanupStack::PopAndDestroy( newMedia );
+        }
+    CleanupStack::Pop( mediaArray );
+    
+    iVideoList->SetTObjectValueL( KMPXMediaArrayCount, mediaArray->Count() );
+    }
+
+// ---------------------------------------------------------------------------
+// From class MMdEQueryObserver.
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::HandleQueryNewResults(
+        CMdEQuery& /*aQuery*/,
+        TInt /*aFirstNewItemIndex*/,
+        TInt /*aNewItemCount*/ )
+    {
+    }
+    
+// ---------------------------------------------------------------------------
+// Leaving version of HandleQueryNewResults.
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::DoHandleQueryNewResultsL(
+        CMdEQuery& /*aQuery*/,
+        TInt /*aFirstNewItemIndex*/,
+        TInt /*aNewItemCount*/ )
+    {
+    }
+
+
+            
+// ---------------------------------------------------------------------------
+// From class MMdEQueryObserver.
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::HandleQueryCompleted(
+        CMdEQuery& /*aQuery*/,
+        TInt /*aError*/)
+    {
+    //iAsyncHandleQueryCompleteCaller->CallBack();
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::AsyncHandleQueryCompleted
+// ---------------------------------------------------------------------------
+//
+TInt CVcxMyVideosMdsDb::AsyncHandleQueryCompleted( TAny* /*aThis*/ )
+    {
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::CreateVideoL
+// ---------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosMdsDb::CreateVideoL( TUint32 aId, TBool /*aFullDetails*/ )
+    {
+    if( aId == KInvalidId )
+        {
+        return NULL;
+        }
+    
+    if( aId == KMPXIdNotFound )
+        {
+        return NULL;
+        }
+    
+    CMPXMedia* video = CMPXMedia::NewL( );
+    CleanupStack::PushL( video );
+    TMPXItemId id( aId, KVcxMvcMediaTypeVideo );
+    video->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, id );
+    CleanupStack::Pop( video );
+    return video;
+    }
+
+// ---------------------------------------------------------------------------
+// From class MMdESessionObserver.
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::HandleSessionOpened(
+        CMdESession& /*aSession*/,
+        TInt /*aError*/)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// From class MMdESessionObserver.
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::HandleSessionError(
+        CMdESession& /*aSession*/,
+        TInt aError)
+    {
+    iMdsDbObserver->HandleCreateVideoListResp( iVideoList, aError, ETrue );
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::HandleObjectNotification
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::HandleObjectNotification(
+        CMdESession& /*aSession*/,
+        TObserverNotificationType /*aType*/,
+        const RArray<TItemId>& /*aObjectIdArray*/)
+    {
+    //TRAP_IGNORE( DoHandleObjectNotificationL( aType, aObjectIdArray ));
+    }
+    
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::ObjectL
+// ---------------------------------------------------------------------------
+//
+CMdEObject* CVcxMyVideosMdsDb::ObjectL( const TItemId /*aId*/, TBool /*aIsVideo*/ )
+    {
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::Object2MediaL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::Object2MediaL(
+        CMdEObject& /*aObject*/,
+        CMPXMedia& /*aVideo*/,
+        TBool /*aFullDetails*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::Media2ObjectL
+// Called by AddVideoL()
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::Media2ObjectL(
+        CMPXMedia& /*aVideo*/,
+        CMdEObject& /*aObject*/)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::SetCreationDateToObjectL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::SetCreationDateToObjectL( const CMPXMedia& /*aVideo*/, CMdEObject& /*aObject*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::GetSchemaDefinitionsL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::GetSchemaDefinitionsL()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::DoHandleObjectNotificationL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::DoHandleObjectNotificationL(
+        TObserverNotificationType /*aType*/,
+        const RArray<TItemId>& /*aObjectIdArray*/ )
+    {     
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::SetCreationAndModifiedDatesL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosMdsDb::SetCreationAndModifiedDatesL( CMdEObject& /*aObject*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::MdsSessionL
+// ---------------------------------------------------------------------------
+//
+CMdESession& CVcxMyVideosMdsDb::MdsSessionL()
+    {
+    return *iMdsSession;
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::ShutdownNotification
+// From MVcxMdsShutDownMonitorObserver
+// ---------------------------------------------------------------------------
+//    
+void CVcxMyVideosMdsDb::ShutdownNotification( TInt /*aShutdownState*/ )
+    {
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosmessagelist_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,312 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:    Groups messages and sends them to clients.*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32cmn.h>
+#include <mpxvideo_debug.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxmessagegeneraldefs.h>
+#include <mpxcommandgeneraldefs.h>
+#include <mpxcollectioncommanddefs.h>
+#include <mpxmessagecontainerdefs.h>
+#include <vcxmyvideosuids.h>
+#include "vcxmyvideoscollectionplugin.h"
+#include "vcxmyvideoscollectionutil.h"
+#include "vcxmyvideosmessagelist_stub.h"
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+const TInt KMPXIdLeave = 999;
+
+// ----------------------------------------------------------------------------
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosMessageList* CVcxMyVideosMessageList::NewL(
+    CVcxMyVideosCollectionPlugin& aCollection )
+    {
+    CVcxMyVideosMessageList* self = new (ELeave) CVcxMyVideosMessageList( aCollection );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// Destructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosMessageList::~CVcxMyVideosMessageList()
+    {    
+    //delete iMessageList;
+    }
+
+// ----------------------------------------------------------------------------
+// Constructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosMessageList::CVcxMyVideosMessageList( CVcxMyVideosCollectionPlugin& aCollection )
+: iCollection( aCollection )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosMessageList::ConstructL ()
+    {
+    }
+
+// ----------------------------------------------------------------------------------------------------------
+// CVcxMyVideosMessageList::AddEventL
+// ----------------------------------------------------------------------------------------------------------
+//
+void CVcxMyVideosMessageList::AddEventL( const TMPXItemId& aId,
+        TMPXChangeEventType aChange, TInt32 aExtraInfo, CMPXMedia* aVideo )
+    {
+    //MPX_FUNC("CVcxMyVideosMessageList::AddEventL");
+    
+    if( aId.iId1 == KMPXIdLeave )
+        User::Leave( KErrCorrupt );
+    
+    CreateMessageListL(); //does nothing if already created
+
+#if _DEBUG
+    //MPX_DEBUG1("CVcxMyVideosMessageList:: ----------------------------------------------." );
+
+    switch ( aChange )
+        {
+        case EMPXItemDeleted:
+            //MPX_DEBUG4("CVcxMyVideosMessageList:: MPXID(%d,%d), aChange = EMPXItemDeleted, aExtraInfo = %d",
+                    //aId.iId1, aId.iId2, aExtraInfo );
+            break;
+        case EMPXItemInserted:
+            //MPX_DEBUG4("CVcxMyVideosMessageList:: MPXID(%d,%d), aChange = EMPXItemInserted, aExtraInfo = %d",
+                    //aId.iId1, aId.iId2, aExtraInfo );
+            break;
+        case EMPXItemModified:
+            //MPX_DEBUG4("CVcxMyVideosMessageList:: MPXID(%d,%d), aChange = EMPXItemModified, aExtraInfo = %d",
+                    //aId.iId1, aId.iId2, aExtraInfo );
+            break;
+        }
+    
+    //MPX_DEBUG1("CVcxMyVideosMessageList:: ----------------------------------------------'" );
+#endif
+    
+    if ( AlreadyInMessageListL( aId, aChange, aExtraInfo ) )
+        {
+        //MPX_DEBUG1("CVcxMyVideosMessageList:: already in message list, skipping add");
+        return;
+        }
+     
+    CMPXMessage* message = CMPXMedia::NewL();
+    CleanupStack::PushL( message ); // 1->
+
+    message->SetTObjectValueL<TMPXMessageId>(KMPXMessageGeneralId, KMPXMessageIdItemChanged);
+    message->SetTObjectValueL<TUid>(KMPXMessageCollectionId, TUid::Uid(KVcxUidMyVideosMpxCollection));        
+    message->SetTObjectValueL<TMPXChangeEventType>(KMPXMessageChangeEventType, aChange);        
+    message->SetTObjectValueL<TMPXItemId>(KMPXMessageMediaGeneralId, aId);
+    message->SetTObjectValueL<TMPXGeneralCategory>( KMPXMessageMediaGeneralCategory, EMPXCollection );
+    
+    if ( aVideo && aChange == EMPXItemInserted )
+        {
+        message->SetCObjectValueL<CMPXMedia>( KMPXCommandColAddMedia, aVideo );
+        }
+        
+    if ( aExtraInfo )
+        {
+        message->SetTObjectValueL<TInt32>( KVcxMediaMyVideosInt32Value, aExtraInfo );
+        }
+        
+    //MPX_DEBUG1("CVcxMyVideosMessageList:: appending to message array");
+    
+    iMessageArray->AppendL( message ); // ownership moves
+
+    CleanupStack::Pop( message ); // <-1        
+
+    iMessageCount++;
+    iMessageList->SetTObjectValueL<TInt>( KMPXMessageArrayCount, iMessageCount );
+    }
+
+// ----------------------------------------------------------------------------------------------------------
+// CVcxMyVideosMessageList::AddEventL
+// ----------------------------------------------------------------------------------------------------------
+//
+void CVcxMyVideosMessageList::AddEventL( TInt aEvent )
+    {
+    TMPXItemId itemId;
+    itemId.iId1 = KVcxCommandIdMyVideos;
+    CMPXMedia* msg = CMPXMedia::NewL();
+    CleanupStack::PushL( msg ); // 1->
+    msg->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId, itemId );
+    msg->SetTObjectValueL<TUid>(KMPXMessageCollectionId, TUid::Uid(KVcxUidMyVideosMpxCollection));        
+
+    msg->SetTObjectValueL<TInt>( KVcxMediaMyVideosCommandId, aEvent );
+    AddL( msg );
+    CleanupStack::Pop( msg ); // <-1
+    }
+
+// ----------------------------------------------------------------------------------------------------------
+// CVcxMyVideosMessageList::AlreadyInMessageListL
+// ----------------------------------------------------------------------------------------------------------
+//
+TBool CVcxMyVideosMessageList::AlreadyInMessageListL( const TMPXItemId& aId,
+        TMPXChangeEventType aChange, TInt32 aExtraInfo )
+    {
+    TMPXItemId itemId;
+    TMPXChangeEventType event;
+    TInt32 extraInfo;
+    CMPXMedia* media;    
+    TInt count = iMessageArray->Count();
+    
+    for ( TInt i = 0; i < count; i++ )
+        {
+        media = iMessageArray->AtL( i );
+        
+        if ( media->IsSupported( KMPXMessageMediaGeneralId ) &&
+                media->IsSupported( KMPXMessageChangeEventType ) )
+            {
+            itemId = media->ValueTObjectL<TMPXItemId>( KMPXMessageMediaGeneralId );
+            event  = media->ValueTObjectL<TMPXChangeEventType>( KMPXMessageChangeEventType );
+            
+            if ( aId == itemId && aChange == event )
+                {
+                extraInfo = 0;
+                if ( media->IsSupported( KVcxMediaMyVideosInt32Value ) )
+                    {
+                    extraInfo = media->ValueTObjectL<TInt32>( KVcxMediaMyVideosInt32Value );
+                    }
+                if ( aExtraInfo == extraInfo )
+                    {
+                    return ETrue;
+                    }
+                else
+                    {
+                    return EFalse;
+                    }
+                }
+            }
+        }
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------------------------------------
+// CVcxMyVideosMessageList::AddL
+// ----------------------------------------------------------------------------------------------------------
+//
+void CVcxMyVideosMessageList::AddL( CMPXMessage* aMessage )
+    {
+    if ( !aMessage )
+        {
+        //MPX_DEBUG1("CVcxMyVideosMessageList::AddL aMessage is NULL!!");
+        return;
+        }
+
+#ifdef _DEBUG
+    if ( aMessage->IsSupported( KVcxMediaMyVideosCommandId ) )
+        {
+        switch ( aMessage->ValueTObjectL<TUint32>( KVcxMediaMyVideosCommandId ) )
+            {
+            case KVcxMessageMyVideosItemsAppended:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL adding msg KVcxMessageMyVideosItemsAppended");
+                break;
+
+            case KVcxMessageMyVideosListComplete:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL adding msg KVcxMessageMyVideosListComplete");
+                break;
+
+            case KVcxMessageMyVideosMoveOrCopyStarted:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL adding msg KVcxMessageMyVideosMoveOrCopyStarted");
+                break;
+
+            case KVcxMessageMyVideosDeleteStarted:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL adding msg KVcxMessageMyVideosDeleteStarted");
+                break;
+
+            case KVcxMessageMyVideosMoveResp:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL adding msg KVcxMessageMyVideosMoveResp");
+                break;
+
+            case KVcxMessageMyVideosGetMediasByMpxIdResp:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL adding msg KVcxMessageMyVideosGetMediasByMpxIdResp");
+                break;
+
+            case KVcxMessageMyVideosCopyResp:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL adding msg KVcxMessageMyVideosCopyResp");
+                break;
+
+            case KVcxMessageMyVideosDeleteResp:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL adding msg KVcxMessageMyVideosDeleteResp");
+                break;
+            default:
+                //MPX_DEBUG1("CVcxMyVideosMessageList::AddL unknown message");
+                break;
+            }
+        }
+#endif
+
+    CreateMessageListL(); //does nothing if already created
+    iMessageArray->AppendL( aMessage ); // ownership moves
+    iMessageCount++;
+    iMessageList->SetTObjectValueL<TInt>( KMPXMessageArrayCount, iMessageCount );
+    }
+
+// ----------------------------------------------------------------------------------------------------------
+// CVcxMyVideosMessageList::SendL
+// ----------------------------------------------------------------------------------------------------------
+//
+void CVcxMyVideosMessageList::SendL()
+    {
+    //MPX_FUNC("CVcxMyVideosMessageList::SendL()");
+    if ( iMessageCount == 0 || !iMessageList )
+        {
+        //MPX_DEBUG1("CVcxMyVideosMessageList:: iMessageList is empty or NULL, skipping send");
+        return;
+        }
+            
+    iCollection.SendMessages( *iMessageList );
+    delete iMessageList;
+    iMessageList  = NULL;
+    iMessageArray = NULL;
+    iMessageCount = 0;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosMessageList::CreateMessageListL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosMessageList::CreateMessageListL()
+    {
+    if ( !iMessageList )
+        {
+        iMessageList  = TVcxMyVideosCollectionUtil::CreateEmptyMessageListL();
+        iMessageArray = iMessageList->Value<CMPXMessageArray>( KMPXMessageArrayContents ); 
+
+        iMessageList->SetTObjectValueL<TMPXMessageId>(KMPXMessageGeneralId, KVcxCommandIdMyVideos);
+        iMessageList->SetTObjectValueL<TInt>(KVcxMediaMyVideosCommandId, KVcxMessageMyVideosMessageArray );
+        iMessageList->SetTObjectValueL<TUid>(KMPXMessageCollectionId, TUid::Uid(KVcxUidMyVideosMpxCollection));        
+        //iMessageList->SetTObjectValueL<TMPXChangeEventType>(KMPXMessageChangeEventType, aChange);        
+        //iMessageList->SetTObjectValueL<TMPXItemId>(KMPXMessageMediaGeneralId, TMPXItemId(0, 0) );
+        iMessageCount = 0;
+        }
+    }
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosopenhandler_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Handles collection Open operation related functionality.*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <mpxlog.h>
+#include <mpxcollectionplugin.h>
+#include <mpxcollectionpluginobserver.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediageneraldefs.h>
+
+#include "vcxmyvideoscollectionplugin.h"
+#include "vcxmyvideosopenhandler_stub.h"
+#include "vcxmyvideosvideocache_stub.h"
+#include "vcxmyvideosmdsdb.h"
+#include "vcxmyvideoscategories.h"
+#include "vcxmyvideosmessagelist.h"
+#include "vcxmyvideoscollectionutil.h"
+#include "vcxmyvideosalbums.h"
+#include "vcxmyvideosmdsalbums.h"
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosOpenHandler::CVcxMyVideosOpenHandler( CVcxMyVideosCollectionPlugin& aCollection,
+        CVcxMyVideosVideoCache& aCache,
+        CVcxMyVideosMdsDb& aMds )
+: iCollection( aCollection ), iCache( aCache ), iMds( aMds )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 2nd-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosOpenHandler::ConstructL()
+    {
+    iCategoryIdsBeingOpened.Reset();
+    iVideoListsBeingOpened.Reset();
+    iAlbumIdsBeingOpened.Reset();
+    iAlbumVideoListsBeingOpened.Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// Two-Phase Constructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosOpenHandler* CVcxMyVideosOpenHandler::NewL( CVcxMyVideosCollectionPlugin& aCollection,
+        CVcxMyVideosVideoCache& aCache,
+        CVcxMyVideosMdsDb& aMds )
+    {
+    CVcxMyVideosOpenHandler* self = new(ELeave) CVcxMyVideosOpenHandler( aCollection,
+            aCache, aMds );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CVcxMyVideosOpenHandler::~CVcxMyVideosOpenHandler()
+    {
+    iCategoryIdsBeingOpened.Close();
+    
+    TInt count = iVideoListsBeingOpened.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        delete iVideoListsBeingOpened[i];
+        iVideoListsBeingOpened[i] = NULL; 
+        }
+    iVideoListsBeingOpened.Close();
+
+    iAlbumIdsBeingOpened.Close();
+    
+    count = iAlbumVideoListsBeingOpened.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        delete iAlbumVideoListsBeingOpened[i];
+        iAlbumVideoListsBeingOpened[i] = NULL; 
+        }
+    iAlbumVideoListsBeingOpened.Close();    
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosOpenHandler::OpenL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosOpenHandler::OpenL(
+    const CMPXCollectionPath& /*aPath*/ )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosOpenHandler::OpenCategoryL
+// ---------------------------------------------------------------------------
+//
+void CVcxMyVideosOpenHandler::OpenCategoryL( TUint32 /*aCategoryId*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosOpenHandler::DoHandleCreateVideoListRespL
+// New items fetched from MDS. iCache.iVideoList = aVideoList.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosOpenHandler::DoHandleCreateVideoListRespL(
+        CMPXMedia* /*aVideoList*/, TInt aNewItemsStartIndex, TBool /*aComplete*/ )
+    {
+    if ( aNewItemsStartIndex == KErrNotFound )
+        User::Leave( KErrNotFound );
+    
+    return;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosOpenHandler::HandleAlbumOpenL
+// Album list has been fetched already.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosOpenHandler::HandleAlbumOpenL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosOpenHandler::HandleGetAlbumContentVideosResp
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosOpenHandler::HandleGetAlbumContentVideosResp(
+        TUint32 /*aAlbumId*/, CMPXMedia& /*aVideoList*/, TInt /*aError*/,
+        TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/, TBool /*aComplete*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosOpenHandler::HandleGetAlbumContentVideosRespL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosOpenHandler::HandleGetAlbumContentVideosRespL(
+        TUint32 /*aAlbumId*/, CMPXMedia& /*aVideoList*/, TInt /*aError*/,
+        TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/, TBool /*aComplete*/ )
+    {
+    }
+
+// END OF FILE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_collectionplugintest/src/vcxmyvideosvideocache_stub.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -0,0 +1,613 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Video list cache. Contains cached data from MDS.*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <mpxmedia.h>
+#include <mpxmediageneraldefs.h>
+#include <mpxmediacontainerdefs.h>
+#include "vcxmyvideosvideocache_stub.h"
+#include "vcxmyvideoscollectionplugin.h"
+#include "vcxmyvideoscollectionutil.h"
+#include "vcxmyvideosopenhandler_stub.h"
+
+// constants used for testing
+const TInt KMPXIdLeave = 999;
+const TInt KMPXIdNotFound = 998;
+const TInt KMPXIdChanged = 997;
+
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// constructor.
+// ----------------------------------------------------------------------------
+//
+TVcxMyVideosVideo::TVcxMyVideosVideo()
+:iMdsId( 0 ), iVideo( NULL ), iPos( KErrNotFound )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosVideo::operator=
+// ---------------------------------------------------------------------------
+//                
+TVcxMyVideosVideo& TVcxMyVideosVideo::operator=( const TVcxMyVideosVideo& aVideo )
+    {
+    Set( aVideo.iMdsId, aVideo.iPos, aVideo.iVideo );
+    return *this;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosVideo::Set
+// ----------------------------------------------------------------------------
+//
+void TVcxMyVideosVideo::Set( TUint32 aMdsId, TInt aPos, CMPXMedia* aVideo )
+    {
+    iMdsId = aMdsId;
+    iPos   = aPos;
+    iVideo = aVideo;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::NewL
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosVideoListIndex* CVcxMyVideosVideoListIndex::NewL()
+    {
+    CVcxMyVideosVideoListIndex* self = new (ELeave) CVcxMyVideosVideoListIndex();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::CVcxMyVideosVideoListIndex
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosVideoListIndex::CVcxMyVideosVideoListIndex()
+    {
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoListIndex::ConstructL ()
+    {
+    iVideoArray.Reset();
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::~CVcxMyVideosVideoListIndex
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosVideoListIndex::~CVcxMyVideosVideoListIndex()
+    {
+    iVideoArray.Close();
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::~CVcxMyVideosVideoListIndex
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoListIndex::SetL( const CMPXMedia& /*aVideoList*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::Find
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoListIndex::Find( TUint32 aMdsId, TVcxMyVideosVideo& aVideo )
+    {
+    return KErrNone;
+    
+    const TLinearOrder<TVcxMyVideosVideo> KOrderByMdsId(
+            CVcxMyVideosVideoListIndex::CompareVideosByMdsId );
+    
+    TInt index;
+    TVcxMyVideosVideo video;
+    video.iMdsId = aMdsId;
+    TInt err = iVideoArray.FindInOrder( video, index, KOrderByMdsId );
+    
+    if ( err != KErrNone )
+        {
+        return KErrNotFound;
+        }
+    
+    aVideo = iVideoArray[index];
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::Remove
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoListIndex::Remove( TUint32 aMdsId, TBool aCompress )
+    {
+    const TLinearOrder<TVcxMyVideosVideo> KOrderByMdsId(
+            CVcxMyVideosVideoListIndex::CompareVideosByMdsId );
+
+    TVcxMyVideosVideo video;
+    video.iMdsId = aMdsId;
+    TInt pos;
+    TInt posInVideoList;
+    TInt err = iVideoArray.FindInOrder( video, pos, KOrderByMdsId );
+    if ( err == KErrNone )
+        {
+        posInVideoList = iVideoArray[pos].iPos;
+        iVideoArray.Remove( pos );
+
+        // update all indexes which are bigger than posInVideoList
+        TInt count = iVideoArray.Count();
+        for ( TInt i = 0; i < count; i++ )
+            {
+            if ( iVideoArray[i].iPos > posInVideoList )
+                {
+                iVideoArray[i].iPos--;
+                }
+            }
+        }
+    
+    if ( aCompress )
+        {
+        iVideoArray.Compress();
+        }
+    
+    return err;
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::AddL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoListIndex::AddL( CMPXMedia* aVideo, TInt aPos )
+    {
+    TVcxMyVideosVideo video;
+    video.Set( TVcxMyVideosCollectionUtil::IdL( *aVideo ).iId1, aPos, aVideo );
+
+    const TLinearOrder<TVcxMyVideosVideo> KOrderByMdsId(
+            CVcxMyVideosVideoListIndex::CompareVideosByMdsId );
+
+    // update indexes
+    TInt count = iVideoArray.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        if ( iVideoArray[i].iPos >= aPos )
+            {
+            iVideoArray[i].iPos++;
+            }
+        }
+
+    iVideoArray.InsertInOrderAllowRepeatsL( video, KOrderByMdsId );
+
+    }
+
+#ifdef _DEBUG
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::VideoArray
+// ----------------------------------------------------------------------------
+//
+const RArray<TVcxMyVideosVideo>& CVcxMyVideosVideoListIndex::VideoArray()
+    {
+    return iVideoArray;
+    }
+#endif
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::Sort
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoListIndex::Sort()
+    {
+    const TLinearOrder<TVcxMyVideosVideo> KOrderByMdsId(
+            CVcxMyVideosVideoListIndex::CompareVideosByMdsId );
+
+    iVideoArray.Sort( KOrderByMdsId );    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoListIndex::CompareVideosByMdsId
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoListIndex::CompareVideosByMdsId( const TVcxMyVideosVideo& aVideo1,
+            const TVcxMyVideosVideo& aVideo2 )
+    {
+    if ( aVideo1.iMdsId == aVideo2.iMdsId )
+        {
+        return 0;
+        }
+
+    if ( aVideo1.iMdsId < aVideo2.iMdsId )
+        {
+        return -1;
+        }
+    return 1;    
+    }
+
+// ----------------------------------------------------------------------------
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosVideoCache* CVcxMyVideosVideoCache::NewL(
+    CVcxMyVideosCollectionPlugin& aMyVideosCollectionPlugin )
+    {
+    CVcxMyVideosVideoCache* self = new (ELeave) CVcxMyVideosVideoCache( aMyVideosCollectionPlugin );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// Destructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosVideoCache::~CVcxMyVideosVideoCache()
+    {
+    delete iVideoList;
+    DeletePartialList();
+    delete iVideoListIndex;
+    }
+
+// ----------------------------------------------------------------------------
+// Constructor.
+// ----------------------------------------------------------------------------
+//
+CVcxMyVideosVideoCache::CVcxMyVideosVideoCache(
+        CVcxMyVideosCollectionPlugin& aMyVideosCollectionPlugin )
+: iCollection( aMyVideosCollectionPlugin )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::ConstructL ()
+    {
+    iVideoList          = TVcxMyVideosCollectionUtil::CreateEmptyMediaListL();
+    SetComplete( EFalse );
+    
+    iPartialVideoList.Reset();
+    iVideoListIndex = CVcxMyVideosVideoListIndex::NewL();
+    
+    iCancelListFetching = EFalse; // TESTING STUFF
+    iLeaveOnReset = EFalse; // TESTING STUFF
+    }
+
+// ----------------------------------------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::CreateVideoListByOriginL
+// ----------------------------------------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosVideoCache::CreateVideoListByOriginL( TUint8 /*aOrigin*/ )
+    {
+    return NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::AppendToListL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::AppendToListL( CMPXMedia& /*aToList*/, CMPXMedia& /*aFromList*/,
+        TUint8 /*aOrigin*/, TInt /*aNewItemsStartIndex*/ )
+    {
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::FindVideoByUriL
+// ----------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosVideoCache::FindVideoByUriL( const TDesC& /*aUri*/ )
+    {    
+    return NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::FindVideoByMdsIdL
+// ----------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosVideoCache::FindVideoByMdsIdL( TUint32 aMdsId, TInt& /*aPos*/ )
+    {
+    if( aMdsId == KMPXIdNotFound )
+        {
+        return NULL;
+        }
+        
+    CMPXMediaArray* videoarray = iVideoList->Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    if( videoarray->Count() > 0 )
+        {
+        return videoarray->AtL(0);
+        }
+        
+    return NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::GetVideosL
+// ----------------------------------------------------------------------------
+//
+CMPXMedia* CVcxMyVideosVideoCache::GetVideosL( RArray<TUint32>& aMdsIds )
+    {
+    CMPXMessage* videoList = TVcxMyVideosCollectionUtil::CreateEmptyMediaListL();
+    CleanupStack::PushL( videoList ); // 1->
+
+    // copy from iVideoList
+    TVcxMyVideosCollectionUtil::CopyFromListToListL(
+            *iVideoList, *videoList, aMdsIds );
+
+    // copy from iPartialVideoList
+    TVcxMyVideosCollectionUtil::CopyFromListToListL(
+            iPartialVideoList, *videoList, aMdsIds );
+    
+    CleanupStack::Pop( videoList ); // <-1
+    return videoList;
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::AddVideosFromMdsL
+// Called when item inserted events arrive from mds or from
+// KVcxCommandMyVideosGetMediasByMpxId cmd handler.
+// If mpx item is already in cache, or MDS does not contain the item (or was not video item),
+// then it is removed from aMdsIds. Ie after this function call aMdsIds contains
+// only IDs which are actually added to cache. aNonVideoIds will contain IDs
+// which were not video objects.
+// ----------------------------------------------------------------------------
+//    
+void CVcxMyVideosVideoCache::AddVideosFromMdsL( RArray<TUint32>& /*aMdsIds*/,
+        TBool& aListFetchingWasCanceled, RArray<TUint32>* /*aNonVideoIds*/, TBool /*aUpdateCategories*/  )
+    {
+    aListFetchingWasCanceled = iCancelListFetching;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::AddL()
+// This is for single adds, video list fetching does not call this.
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::AddL( CMPXMedia* /*aVideo*/, TVcxMyVideosSortingOrder /*aSortingOrder*/,
+        TBool /*aUpdateCategories*/ )
+    {
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::CheckForPartialVideoListItemsL()
+// This is called by iCollection during video list fetching.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::CheckForPartialVideoListItemsL( TInt /*aNewItemsStartIndex*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::PosOnPartialVideoListL()
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::PosOnPartialVideoListL( CMPXMedia& /*aVideo*/ )
+    {
+    return KErrNotFound;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::PosOnVideoListL()
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::PosOnVideoListL( CMPXMedia& /*aVideo*/ )
+    {
+    return KErrNotFound;
+    }
+    
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::AddToPartialListL()
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::AddToPartialListL( CMPXMedia* /*aVideo*/ )
+    {
+    return KErrNotFound;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::DeletePartialList()
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::DeletePartialList()
+    {
+    TInt count( iPartialVideoList.Count() );
+    for ( TInt i = count -1; i >= 0; i-- )
+        {
+        delete iPartialVideoList[i];
+        iPartialVideoList[i] = NULL;
+        }
+    iPartialVideoList.Close();
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::CreateVideoListL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::CreateVideoListL( TBool /*aForce*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::UpdateVideoL
+// ----------------------------------------------------------------------------
+//
+TBool CVcxMyVideosVideoCache::UpdateVideoL( CMPXMedia& aVideo )
+    {
+    TBool changed( EFalse );
+    
+    TMPXItemId mpxId = aVideo.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId );
+    
+    switch( mpxId.iId1 )
+        {
+        case KMPXIdLeave: // Leave
+            User::Leave( KErrCorrupt );
+            break;
+        case KMPXIdNotFound: // Not found
+            User::Leave( KErrNotFound );
+            break;
+        case KMPXIdChanged: // Changed
+            changed = ETrue;
+        }
+    
+    return changed;    
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::HandleVideoTitleModifiedL
+// Updates sorting order and category attributes if necessarry
+// NOTICE that aVideoInCache is not allowed to own the media object, since this
+// function may change the pointer value to point to a new object.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::HandleVideoTitleModifiedL( CMPXMedia*& /*aVideoInCache*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::FindCorrectPositionL
+// Finds the correct position using bisection method.
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::FindCorrectPositionL( CMPXMedia& /*aMedia*/,
+        TVcxMyVideosSortingOrder /*aSortingOrder*/ )
+    {
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::CompareL
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::CompareL( CMPXMedia& /*aNewVideo*/, CMPXMedia& /*aVideoInList*/,
+        TVcxMyVideosSortingOrder /*aSortingOrder*/ )
+    {
+    return 0;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::SortingOrderL
+// ----------------------------------------------------------------------------
+//    
+TVcxMyVideosSortingOrder CVcxMyVideosVideoCache::SortingOrderL()
+    {
+    return EVcxMyVideosSortingNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::AddToCorrectPlaceL
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::AddToCorrectPlaceL( CMPXMedia& aVideo,
+        TVcxMyVideosSortingOrder aSortingOrder, TBool aUpdateCategories )
+    {    
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::MoveToCorrectPlaceL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::MoveToCorrectPlaceL( CMPXMedia& /*aVideo*/,
+        TVcxMyVideosSortingOrder /*aSortingOrder*/ )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::RemoveL
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::RemoveL( CMPXMedia& aVideo, TBool aUpdateCategories )
+    {
+    return RemoveL( TVcxMyVideosCollectionUtil::IdL( aVideo ).iId1, aUpdateCategories );
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::RemoveL
+// All removes end up here (except ResetVideoListL).
+// ----------------------------------------------------------------------------
+//
+TInt CVcxMyVideosVideoCache::RemoveL( TUint32 aMdsId, TBool aUpdateCategories )
+    {
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::RemoveL
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::RemoveL( RArray<TUint32>& /*aMdsIds*/, TBool /*aUpdateCategories*/ )
+    {        
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::ResetVideoListL
+// iVideoList stays the same, media array is deleted and recreated to 0 length,
+// media items are deleted.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::ResetVideoListL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::ReCreateVideoListL
+// iVideoList and its media array are deleted and recreated. New instances point to
+// different global heap position. Media objects stay the same and point to
+// same global heap.
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::ReCreateVideoListL()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::IsComplete
+// ----------------------------------------------------------------------------
+//
+TBool CVcxMyVideosVideoCache::IsComplete()
+    {
+    return iVideoListIsComplete;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::SetComplete
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::SetComplete( TBool aComplete )
+    {
+    iVideoListIsComplete = aComplete;
+    }
+
+#ifdef _DEBUG
+// ----------------------------------------------------------------------------
+// CVcxMyVideosVideoCache::SetComplete
+// ----------------------------------------------------------------------------
+//
+void CVcxMyVideosVideoCache::CheckVideoListIndexL()
+    {
+    }
+#endif
+
+// End of file
+
--- a/videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/group/bld.inf	Wed Sep 15 12:15:24 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/group/bld.inf	Wed Oct 13 14:34:36 2010 +0300
@@ -15,19 +15,21 @@
 *
 */
 
-// Version : %version: 1 %
+// Version : %version: 2 %
 
 
 PRJ_PLATFORMS
 DEFAULT
 
-PRJ_EXPORTS
+PRJ_TESTEXPORTS
 
 ../conf/VcxMyVideosMdsDbTest.cfg                  /epoc32/winscw/c/testframework/VcxMyVideosMdsDbTest.cfg
 ../init/testframework.ini                       /epoc32/winscw/c/testframework/testframework.ini
 
 PRJ_EXPORTS
 
+PRJ_TESTMMPFILES
+VcxMyVideosMdsDbTest.mmp
 
 PRJ_MMPFILES
-VcxMyVideosMdsDbTest.mmp
+
--- a/videoplayback/inc/mpxvideobaseplaybackview.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/inc/mpxvideobaseplaybackview.h	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 26 %
+// Version : %version: 25 %
 
 
 // This file defines the API for VideoBasePlaybackView.dll
@@ -387,10 +387,9 @@
         TBool                               iPdlReloading;
         TBool                               iRealOneDelayedPlay;
         TBool                               iKeyboardInFocus;
-        TBool                               iExitPlayer;
 
         HBufC*                              iClipName;
-
+        
         TBool                               iSyncClose;
 };
 
--- a/videoplayback/inc/mpxvideoplaybackcontrolscontroller.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/inc/mpxvideoplaybackcontrolscontroller.h	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 20 %
+// Version : %version: 19 %
 
 
 #ifndef MPXVIDEOPLAYBACKCONTROLSCONTROLLER_H_
@@ -228,11 +228,6 @@
         TBool IsVisible();
 
         /**
-        * Return ETrue if real one bitmap is visible
-        */
-        TBool IsRealOneBitmapVisible();
-
-        /**
         * Append a control based on control index
         */
         void AppendControlL( TMPXVideoPlaybackControls aControlIndex );
--- a/videoplayback/inc/mpxvideoplaybackmediadetailsviewer.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/inc/mpxvideoplaybackmediadetailsviewer.h	Wed Oct 13 14:34:36 2010 +0300
@@ -15,9 +15,7 @@
 *
 */
 
-
-// Version : %version:  7 %
-
+// Version : %version:  e003sa33#6 %
 
 #ifndef MPXVIDEOPLAYBACKMEDIADETAILSVIEWER_H_
 #define MPXVIDEOPLAYBACKMEDIADETAILSVIEWER_H_
@@ -80,12 +78,12 @@
         * @param aRect drawable area.
         */
         void Draw( const TRect& aRect ) const;
-
+        
         /**
         * Creates new skins for the control
         * @return void
         */
-        void SkinChangeL();
+        void SkinChangeL();        
 
 
     public: // from CoeControl
@@ -102,56 +100,56 @@
          *  @since 5.0
          */
         void Reset();
-
-        /**
+        
+        /** 
         * Accessor for the dynamically calculated viewer rect
-        * @since 9.2
+        * @since 9.2 
         * @return the viewer rect
-        */
-        TRect ViewerRect();
-
+        */                   
+        TRect ViewerRect();         
+              
 
     private:
-
+        
         void CreateLabelsL();
-
+        
         void LaunchDRMDetailsL();
-
+        
         /**
         * Sets label rects and text
         */
-        void FormatLabelsL() const;
-
+        void FormatLabelsL() const;   
+        
         void UpdateBackgroundBitmapL() const;
-
-        /**
+        
+        /** 
         * Timer callback for scroll timer
-        * @since 9.2
-        * @param aPtr Pointer to timers callback
-        * @return KErrNone
-        */
+        * @since 9.2 
+        * @param aPtr Pointer to timers callback 
+        * @return KErrNone 
+        */ 
         static TInt ScrollTimer( TAny* aPtr );
 
-        /**
+        /** 
         * Handle Scroll Timer
-        * @since 9.2
-        * @return void
-        */
+        * @since 9.2 
+        * @return void 
+        */ 
         void HandleScrollTimerL();
-
-        /**
+        
+        /** 
         * Determine the number of items to be shown in the viewer
-        * @since 9.2
+        * @since 9.2 
         * @return the number of rows to be created
-        */
+        */         
         TInt NumOfItemsShownInViewerL();
-
-        /**
+        
+        /** 
         * Dynamically calculate determine the viewer rectangle dyanmically
-        * @since 9.2
+        * @since 9.2 
         * @return the viewer rect
-        */
-        TRect CalculateViewerRectL();
+        */                   
+        TRect CalculateViewerRectL();          
 
         /**
          * Update the text of filename label
@@ -164,14 +162,14 @@
         void UpdateTitleL();
 
     private:
-
+        
         /**
          * Scroll the too long text for some label
          */
         class TTextScroller
         {
             public:
-
+        
                 /**
                  * Constructor
                  */
@@ -196,38 +194,37 @@
                 void ScrollText( const TDesC& aSrcText, TDes& aDesText );
 
             private:
-
-                TUint32        iDelayBeginningTick;
-                TInt           iTextScrollPos;
-                TBool          iDelay;
-                TBool          iScroll;
-                TInt           iSrcTextLen;
+                
+                TUint32		iDelayBeginningTick;
+                TInt		iTextScrollPos;
+                TBool		iDelay;
+                TBool		iScroll;
+                TInt		iSrcTextLen;
         };
 
     private:    // Data
-
+        
         CMPXVideoPlaybackControlsController* iController;
-
+        
         CEikLabel*                           iClipnameLabel;
         CEikLabel*                           iTitleLabel;
-        CEikLabel*                           iArtistLabel;
+        CEikLabel*                           iArtistLabel;        
         CEikLabel*                           iFormatLabel;
         CEikLabel*                           iResolutionLabel;
         CEikLabel*                           iDurationLabel;
         CEikLabel*                           iBitrateLabel;
         CEikLabel*                           iLicenseLabel;
         CEikLabel*                           iAdditionalLabel;
-
+        
 
-        CFbsBitmap*                          iBackgroundBitmap;
+        CFbsBitmap*                          iBackgroundBitmap;   
         CPeriodic*                           iScrollingTextTimer;
         TRect                                iViewerRect;
         HBufC*                               iAdditionalString;
         TTextScroller                        iFilenameScroller;
         TTextScroller                        iTitleScroller;
         // after every scrolling label has updated, draw them
-        TBool                                iScrolledTextUpdated;
-        TBool                                iDrmDetailsLaunched;
+        TBool                                iScrolledTextUpdated; 
 };
 
 
--- a/videoplayback/videohelix/group/mpxvideohelixplayback.mmp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/group/mpxvideohelixplayback.mmp	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
  *
 */
 
-// Version : %version: 16.1.1 %
+// Version : %version: 16 %
 
 
 
@@ -44,7 +44,6 @@
 SOURCE          mpxvideoplayerutility.cpp
 SOURCE          mpxvideodrmhelper.cpp
 SOURCE          mpxvideoposterframesetter.cpp
-SOURCE          mpxcalldetector.cpp
 
 START RESOURCE  ../data/10282550.rss
 TARGET          mpxvideohelixplayback.rsc
--- a/videoplayback/videohelix/inc/mpxcalldetector.h	Wed Sep 15 12:15:24 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
-* Copyright (c) 2010 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:  Class for call detaction
-*
-*/
-
-// Version : %version: 1 %
-
-#ifndef MPXCALLDETECTOR_H
-#define MPXCALLDETECTOR_H
-
-#include <e32base.h>
-#include <e32property.h>
-
-class MMPXCallDetectorObserver
-{
-    public:
-        virtual void CallDetectedL() = 0;
-};
-
-/**
- *  Detector for incoming call
- */
-NONSHARABLE_CLASS( CMPXCallDetector ) : public CActive
-{
-    public: // Constructors and destructor
-
-        /**
-        * Two-phased constructor.
-        */
-        static CMPXCallDetector* NewL( MMPXCallDetectorObserver* aObserver );
-
-        /**
-        * Destructor.
-        */
-        ~CMPXCallDetector();
-        
-    public: // New functions
-
-        /**
-        * Request call notifications
-        *
-        */
-        void RequestNotification();
-
-    private:
-
-        /**
-        * C++ default constructor.
-        */
-        CMPXCallDetector( MMPXCallDetectorObserver* aObserver );
-
-        /**
-        * Symbian OS 2nd phase constructor.
-        */
-        void ConstructL();
-    
-        /**
-        * From CActive
-        * @see CActive for more information
-        */
-        void RunL();
-        
-        /**
-        * From CActive
-        * @see CActive for more information
-        */
-        void DoCancel();
-
-    private:
-
-        // Call observer
-        MMPXCallDetectorObserver*           iObserver;
-        RProperty                           iTsyProperty;
-};
-
-#endif // CALLDETECTOR_H
--- a/videoplayback/videohelix/inc/mpxvideoplaybackcontroller.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/inc/mpxvideoplaybackcontroller.h	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 30 %
+// Version : %version: 29 %
 
 
 #ifndef _CMPXVIDEOPLAYBACKCONTROLLER_H_
@@ -41,7 +41,6 @@
 #include "mpxvideoplayerutility.h"
 #include "mpxvideo_debug.h"
 
-#include "mpxcalldetector.h"
 // DATA TYPES
 
 // FORWARD DECLARATIONS
@@ -69,7 +68,6 @@
 NONSHARABLE_CLASS( CMPXVideoPlaybackController )
     : public CBase
     , public MMPXCenRepObserver
-    , public MMPXCallDetectorObserver
 {
     public:
         //
@@ -148,7 +146,6 @@
 
 
     private:
-        void CallDetectedL();
 
         void SetDisplayWindowL( CMPXCommand& aCmd );
         void RestartDSA( CMPXCommand& aCmd );
@@ -264,9 +261,6 @@
         // Timer monitoring user activity when TV-out is connected
         CPeriodic*                              iUserActivityTimer;
 
-        // Call detector
-        CMPXCallDetector*                       iCallDetector; 
-
         TBool                                   iSeekable;
 
         CMpxVideoDrmHelper*                     iDrmHelper;
--- a/videoplayback/videohelix/inc/mpxvideoplaybackstate.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/inc/mpxvideoplaybackstate.h	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 21 %
+// Version : %version: 20 %
 
 
 #ifndef _CMPXVIDEOPLAYBACKSTATE_H_
@@ -225,7 +225,6 @@
         virtual void HandleStop();
         virtual void HandleForeground();
         virtual void HandleBackground();
-        virtual void HandlePause();
 
         // general method
         virtual void HandleSetPositionL(TInt aPosition);
--- a/videoplayback/videohelix/src/mpxcalldetector.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
-* Copyright (c) 2010 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:  
-*
-*/
-
-// Version : %version: 1 %
-
-// INCLUDE FILES
-#include <ctsydomainpskeys.h>
-
-#include "mpxcalldetector.h"
-#include "mpxvideo_debug.h"
-
-
-// ---------------------------------------------------------------------------
-// CCallDetector::NewL
-//
-// ---------------------------------------------------------------------------
-//
-CMPXCallDetector* CMPXCallDetector::NewL( MMPXCallDetectorObserver* aObserver )
-{
-    MPX_ENTER_EXIT(_L("CMPXCallDetector::NewL()"));
-    
-    CMPXCallDetector* self = new( ELeave ) CMPXCallDetector( aObserver );        
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );    
-    return self;
-}
-
-// ---------------------------------------------------------------------------
-// Destructor
-//
-// ---------------------------------------------------------------------------
-//
-CMPXCallDetector::~CMPXCallDetector()
-{
-    Cancel();
-    iTsyProperty.Close();
-}
-
-// ---------------------------------------------------------------------------
-// CCallDetector::RequestNotification
-// 
-// ---------------------------------------------------------------------------
-// 
-void CMPXCallDetector::RequestNotification()
-{
-    MPX_ENTER_EXIT(_L("CCallDetector::RequestNotification()"));
-
-    iTsyProperty.Subscribe( iStatus );
-    SetActive();
-}
-
-// ---------------------------------------------------------------------------
-// Constructor
-//
-// ---------------------------------------------------------------------------
-//
-CMPXCallDetector::CMPXCallDetector( MMPXCallDetectorObserver* aObserver )
- : CActive( EPriorityStandard ), iObserver( aObserver )
-{
-}
-
-// ---------------------------------------------------------------------------
-// CCallDetector::ConstructL
-//
-// ---------------------------------------------------------------------------
-//
-void CMPXCallDetector::ConstructL()
-{
-    MPX_ENTER_EXIT(_L("CCallDetector::ConstructL"));	
-    
-    User::LeaveIfError( iTsyProperty.Attach( KPSUidCtsyCallInformation, KCTsyCallState ) );
-    
-    CActiveScheduler::Add( this );
-}
-
-// ---------------------------------------------------------------------------
-// CCallDetector::RunL
-// Called when the voice line status changes.
-// ---------------------------------------------------------------------------
-//
-void CMPXCallDetector::RunL()
-{
-    TInt status = iStatus.Int();
-    
-    RequestNotification();
-    
-    if ( status == KErrNone )
-    {
-        TInt status;
-        iTsyProperty.Get( status );
-        
-        if ( status != EPSCTsyCallStateNone )
-        {
-            iObserver->CallDetectedL();
-        }
-    }
-}
-
-// ---------------------------------------------------------------------------
-// CCallDetector::DoCancel
-//
-// ---------------------------------------------------------------------------
-//
-void CMPXCallDetector::DoCancel()
-{
-    iTsyProperty.Cancel();
-}
-
-// End of File
--- a/videoplayback/videohelix/src/mpxvideoplaybackcontroller.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/src/mpxvideoplaybackcontroller.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 66 %
+// Version : %version: 64 %
 
 
 //
@@ -167,9 +167,6 @@
 
     iDrmHelper = CMpxVideoDrmHelper::NewL();
 
-    iCallDetector = CMPXCallDetector::NewL( this );
-    iCallDetector->RequestNotification();
-
     iSavedPosition = 0;
     iViewActivated  = EFalse;
 }
@@ -294,14 +291,6 @@
     delete iSeekingState;
     delete iStoppedState;
 
-    if ( iCallDetector )
-    {
-        iCallDetector->Cancel();
-
-        delete iCallDetector;
-        iCallDetector = NULL;
-    }
-
     if ( iPlaybackMode )
     {
         delete iPlaybackMode;
@@ -930,7 +919,7 @@
 //  ------------------------------------------------------------------------------------------------
 void CMPXVideoPlaybackController::SetMuteCenRepL( TBool aMute )
 {
-    if ( iFileDetails && iFileDetails->iAudioEnabled )
+    if ( iFileDetails && iFileDetails->iAudioEnabled && !iAccessoryMonitor->IsTvOutConnected() )
     {
         iMuteWatcher->SetValueL( aMute );
 
@@ -2562,13 +2551,4 @@
 
     iPlaybackMode->HandleFrameReady(aError);
 }
-
-void CMPXVideoPlaybackController::CallDetectedL()
-{
-    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackController::CallDetectedL"));
-
-    // Pause playback
-    DoHandleCommandL( EPbCmdPause );
-}
-
 // End of file
--- a/videoplayback/videohelix/src/mpxvideoplaybackstate.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/src/mpxvideoplaybackstate.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 48 %
+// Version : %version: 46.1.1 %
 
 
 //
@@ -243,6 +243,7 @@
 
     if ( aError == KErrNone )
     {
+
         iVideoPlaybackCtlr->iMPXPluginObs->HandlePluginEvent(
             MMPXPlaybackPluginObserver::EPPlayComplete,
             0,
@@ -1275,16 +1276,6 @@
     CommandHandleForeground();
 }
 
-//  ------------------------------------------------------------------------------------------------
-//  CMPXInitialisedState::HandlePause()
-//  ------------------------------------------------------------------------------------------------
-void CMPXInitialisedState::HandlePause()
-{
-    MPX_ENTER_EXIT(_L("CMPXInitialisedState::HandlePause()"));
-
-    iVideoPlaybackCtlr->iPlaybackMode->HandlePause();
-}
-
 // *************************************************************************************************
 //
 //                          CMPXPlayingState
--- a/videoplayback/videohelix/tsrc/ut_videohelixtest/conf/videohelixtest.cfg	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/tsrc/ut_videohelixtest/conf/videohelixtest.cfg	Wed Oct 13 14:34:36 2010 +0300
@@ -589,7 +589,7 @@
 waittestclass test
 test PlayduringVoiceCall
 pause 100
-test IssueGeneralCommand EPbCmdPlay KErrNone ECallbackPlaying
+test IssueGeneralCommand EPbCmdPlay KErrNone ECallbackBuffering
 pause 1000
 test EndPhoneCall
 delete test
--- a/videoplayback/videohelix/tsrc/ut_videohelixtest/group/videohelixtest.mmp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/tsrc/ut_videohelixtest/group/videohelixtest.mmp	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 10.1.1 %
+// Version : %version: 10 %
 
 
 
@@ -62,7 +62,6 @@
 SOURCE          mpxvideoplaybackstate.cpp
 SOURCE          mpxvideoseeker.cpp
 SOURCE          mpxvideoposterframesetter.cpp
-SOURCE          mpxcalldetector.cpp
 
 
 LIBRARY         euser.lib
--- a/videoplayback/videohelix/tsrc/ut_videohelixtest/inc/videohelixtest.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/tsrc/ut_videohelixtest/inc/videohelixtest.h	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
  *
 */
 
-// Version : %version: 16 %
+// Version : %version: e003sa33#15 %
 
 
 #ifndef __VHPPTESTCASE_H__
@@ -35,10 +35,10 @@
 #include <ctsydomainpskeys.h>
 #include <mmf/common/mmferrors.h>
 
-#include <AccessoryServer.h>
-#include <AccessoryControl.h>
-#include <AccPolGIDHeader.h>
-#include <AccPolGenericID.h>
+#include <accessoryserver.h>
+#include <accessorycontrol.h>
+#include <accpolgidheader.h>
+#include <accpolgenericid.h>
 
 #include <mpxvideoplaybackdefs.h>
 #include "timeoutController.h"
--- a/videoplayback/videohelix/tsrc/ut_videohelixtest/src/videohelixtestbody.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videohelix/tsrc/ut_videohelixtest/src/videohelixtestbody.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 27 %
+// Version : %version: e003sa33#24.1.1 %
 
 
 // [INCLUDE FILES] - do not remove
@@ -120,8 +120,9 @@
         ENTRY ("InitializeWithPositionL", CVHPPTestClass::InitializeWithPositionL),
         ENTRY ("InitializeLinkWithPositionL", CVHPPTestClass::InitializeLinkWithPositionL),
         ENTRY ("InitializeHandleWithPositionL", CVHPPTestClass::InitializeHandleWithPositionL),
-        ENTRY ( "InitializeStreamingWithSdpFileHandleL", CVHPPTestClass::InitializeStreamingWithSdpFileHandleL ),
-        ENTRY ( "RetrieveFileNameAndModeL", CVHPPTestClass::RetrieveFileNameAndModeL )
+        ENTRY ( "InitializeStreamingWithSdpFileHandleL", 
+        		CVHPPTestClass::InitializeStreamingWithSdpFileHandleL ),
+        ENTRY ( "RetrieveFileNameAndModeL", CVHPPTestClass::RetrieveFileNameAndModeL )        
 
         //
         //  ADD NEW ENTRIES HERE
@@ -289,7 +290,7 @@
 
     TInt duration;
     TInt volumeSteps;
-
+    
     TInt err = aItem.GetNextInt( duration );
 
     if ( err == KErrNone )
@@ -305,32 +306,32 @@
 
         AddExpectedEvent( event );
 
-        //
+        // 
         // read number of volume steps
         //
         err = aItem.GetNextInt( volumeSteps );
-
+        
         if ( err == KErrNone )
-        {
+        {        
             //
             // set volume steps
             //
             SetVolumeSteps( volumeSteps );
-
-            TBuf<120> fullPath;
+            
+            TBuf<120> fullPath;    
 
             err = ReadFileInitializationParameters( aItem, fullPath );
-
+    
             if ( err == KErrNone )
             {
                 PreparePluginL();
-
+    
                 //
                 //  Initalize the Plugin with a file name
                 //
                 MPX_DEBUG(_L("Initialize the Plugin:  filename = %S"), &fullPath);
                 iLog->Log(_L("Initialize the Plugin:  filename = %S"), &fullPath);
-
+    
                 iPlaybackPlugin->InitialiseL( fullPath );
             }
         }
@@ -367,40 +368,40 @@
 
         AddExpectedEvent( event );
 
-        //
+        // 
         // read number of volume steps
         //
         err = aItem.GetNextInt( volumeSteps );
-
+        
         if ( err == KErrNone )
-        {
+        {        
             //
             // set volume steps
             //
             SetVolumeSteps( volumeSteps );
-
+        
             TPtrC  link;
-
+    
             //
             //  Read in the link from the config file
             //
             TInt err = aItem.GetNextString( link );
-
+    
             if ( err == KErrNone )
             {
                 TInt err = ReadInitializationErrors( aItem );
-
+    
                 if ( err == KErrNone )
                 {
                     PreparePluginL();
-
+    
                     //
                     //  Extract the streaming link from the ram file and
                     //  Initalize the Plugin with the link and an access point
                     //
                     MPX_DEBUG(_L("Initialize the Plugin:  link = %S"), &link);
                     iLog->Log(_L("Initialize the Plugin:  link = %S"), &link);
-
+    
                     iPlaybackPlugin->InitStreamingL( link, KNullDesC8, 11 );
                 }
             }
@@ -462,57 +463,57 @@
     TInt duration;
     TInt volumeSteps;
     TInt fileHandle32;
-
+    
     TInt err = aItem.GetNextInt( fileHandle32 );
-
+    
     if ( err == KErrNone )
-    {
-
+    {        
+    
 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
         //
         // set RFile as default if the 64-bit flag is not defined
         //
         fileHandle32 = ETrue;
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
-
+        
         err = aItem.GetNextInt( duration );
-
+    
         if ( err == KErrNone )
         {
             //
             //  We will always get an Init Complete message out
             //
             TCallbackEvent* event = new TCallbackEvent;
-
+    
             event->iEvent = EPInitialised;
             event->iData  = duration;
             event->iError = KErrNone;
-
+    
             AddExpectedEvent( event );
-
-            //
+    
+            // 
             // read number of volume steps
             //
             err = aItem.GetNextInt( volumeSteps );
-
+            
             if ( err == KErrNone )
-            {
+            {        
                 //
                 // set volume steps
                 //
                 SetVolumeSteps( volumeSteps );
-
+            
                 TBuf<120> fullPath;
-
+        
                 err = ReadFileInitializationParameters( aItem, fullPath );
-
+        
                 if ( err == KErrNone )
                 {
                     PreparePluginL();
-
+        
                     RFs fs;
                     TInt error = fs.Connect();
-
+                    
                     //
                     //  Open a file handle to the clip
                     //
@@ -532,18 +533,18 @@
                         file64.Close();
                     }
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
-
+                            
                     //
                     //  Initalize the Plugin with a file name
                     //
                     MPX_DEBUG(_L("Initialize the Plugin with File Handle:  filename = %S"), &fullPath);
                     iLog->Log(_L("Initialize the Plugin with File Handle:  filename = %S"), &fullPath);
-
+            
                     fs.Close();
                 }
-            }
-        }
-    }
+            } 
+        } 
+    } 
 
     return err;
 }
@@ -890,14 +891,14 @@
                     event->iError = KErrNone;
                     AddExpectedEvent( event );
                 }
-                else
-                {
-                    event->iEvent = EPSetComplete;
-                    event->iData  = property;
-                    event->iError = KErrNone;
-                    AddExpectedEvent( event );
-                }
-
+				else
+				{
+					event->iEvent = EPSetComplete;
+					event->iData  = property;
+					event->iError = KErrNone;
+					AddExpectedEvent( event );
+				}
+				
             }
 
             TRAP( err, iPlaybackPlugin->SetL( (TMPXPlaybackProperty)property, value ) );
@@ -1146,9 +1147,9 @@
     iLog->Log(_L("CVHPPTestClass::ConnectToDownloadL()"));
 
     TInt err = KErrNone;
-
-#ifdef USE_S60_DOWNLOAD_MANAGER
-
+    
+#ifdef USE_S60_DOWNLOAD_MANAGER       
+    
     iDlMgrTester = CDlMgrTestClass::NewL();
     iDlMgrTester->AddStifObserver( this );
 
@@ -1195,17 +1196,17 @@
             CleanupStack::PopAndDestroy( cmd );
         }
     }
-
-#else // USE_S60_DOWNLOAD_MANAGER
-
-    // suppress build warning
-    MPX_DEBUG(_L("CVHPPTestClass::ConnectToDownloadL() : parsing type = %d"), aItem.ParsingType());
-
-    // Signal TestScripter to continue from waittestclass
+    
+#else // USE_S60_DOWNLOAD_MANAGER    
+     
+	// suppress build warning
+    MPX_DEBUG(_L("CVHPPTestClass::ConnectToDownloadL() : parsing type = %d"), aItem.ParsingType()); 
+	
+	// Signal TestScripter to continue from waittestclass
     Signal();
-
+	
 #endif // USE_S60_DOWNLOAD_MANAGER
-
+    
     return err;
 }
 
@@ -1219,7 +1220,7 @@
     MPX_ENTER_EXIT(_L("CVHPPTestClass::SendPdlCustomCommandL"),
                    _L("aCustomCmd = %d"), aCustomCmd );
 
-#ifdef USE_S60_DOWNLOAD_MANAGER
+#ifdef USE_S60_DOWNLOAD_MANAGER     
 
     CMPXCommand* cmd = CMPXCommand::NewL();
     CleanupStack::PushL( cmd );
@@ -1231,12 +1232,12 @@
     iPlaybackPlugin->CommandL( *cmd );
 
     CleanupStack::PopAndDestroy( cmd );
-
-#else // USE_S60_DOWNLOAD_MANAGER
-
-    // Signal TestScripter to continue from waittestclass
+	
+#else // USE_S60_DOWNLOAD_MANAGER     
+	
+	// Signal TestScripter to continue from waittestclass
     Signal();
-
+	
 #endif // USE_S60_DOWNLOAD_MANAGER
 
 }
@@ -1251,8 +1252,8 @@
     MPX_ENTER_EXIT(_L("CVHPPTestClass::PauseDownloadL()"));
     iLog->Log(_L("CVHPPTestClass::PauseDownloadL()"));
 
-#ifdef USE_S60_DOWNLOAD_MANAGER
-
+#ifdef USE_S60_DOWNLOAD_MANAGER   
+    
     TCallbackEvent* event = new TCallbackEvent;
 
     event->iEvent = EPDownloadStateChanged;
@@ -1262,14 +1263,14 @@
     AddExpectedEvent( event );
 
     iDlMgrTester->PauseDownload();
-
-#else // USE_S60_DOWNLOAD_MANAGER
-
-    // Signal TestScripter to continue from waittestclass
+    
+#else // USE_S60_DOWNLOAD_MANAGER    
+	
+	// Signal TestScripter to continue from waittestclass
     Signal();
-
-#endif // USE_S60_DOWNLOAD_MANAGER
-
+	
+#endif // USE_S60_DOWNLOAD_MANAGER 
+    
     return KErrNone;
 }
 
@@ -1284,9 +1285,9 @@
     iLog->Log(_L("CVHPPTestClass::ResumeDownloadL()"));
 
     TInt err = KErrNone;
-
-#ifdef USE_S60_DOWNLOAD_MANAGER
-
+    
+#ifdef USE_S60_DOWNLOAD_MANAGER 
+    
     TInt dlSize;
 
     err = aItem.GetNextInt( dlSize );
@@ -1313,17 +1314,17 @@
 
         iDlMgrTester->ResumeDownload();
     }
-
-#else // USE_S60_DOWNLOAD_MANAGER
-
-    // suppress build warning
-    MPX_DEBUG(_L("CVHPPTestClass::ResumeDownloadL() : parsing type = %d"), aItem.ParsingType());
-
-    // Signal TestScripter to continue from waittestclass
+    
+#else // USE_S60_DOWNLOAD_MANAGER    
+     
+	// suppress build warning
+    MPX_DEBUG(_L("CVHPPTestClass::ResumeDownloadL() : parsing type = %d"), aItem.ParsingType()); 
+	
+	// Signal TestScripter to continue from waittestclass
     Signal();
-
-#endif // USE_S60_DOWNLOAD_MANAGER
-
+	
+#endif // USE_S60_DOWNLOAD_MANAGER 
+    
     return err;
 }
 
@@ -1337,8 +1338,8 @@
     MPX_ENTER_EXIT(_L("CVHPPTestClass::CancelDownloadL()"));
     iLog->Log(_L("CVHPPTestClass::CancelDownloadL()"));
 
-#ifdef USE_S60_DOWNLOAD_MANAGER
-
+#ifdef USE_S60_DOWNLOAD_MANAGER 
+    
     TCallbackEvent* event = new TCallbackEvent;
 
     event->iEvent = EPDownloadStateChanged;
@@ -1349,13 +1350,13 @@
 
     iDlMgrTester->CancelDownload();
 
-#else // USE_S60_DOWNLOAD_MANAGER
-
-    // Signal TestScripter to continue from waittestclass
+#else // USE_S60_DOWNLOAD_MANAGER    
+	
+	// Signal TestScripter to continue from waittestclass
     Signal();
-
-#endif // USE_S60_DOWNLOAD_MANAGER
-
+	
+#endif // USE_S60_DOWNLOAD_MANAGER 
+    
     return KErrNone;
 }
 
@@ -1370,9 +1371,9 @@
     iLog->Log(_L("CVHPPTestClass::RetrievePdlStatusL()"));
 
     TInt err = KErrNone;
-
-#ifdef USE_S60_DOWNLOAD_MANAGER
-
+    
+#ifdef USE_S60_DOWNLOAD_MANAGER 
+    
     TInt pdlState;
     TInt expectedPdlState;
     TInt downloadedBytes;
@@ -1431,16 +1432,16 @@
         CleanupStack::PopAndDestroy( cmd );
     }
 
-#else // USE_S60_DOWNLOAD_MANAGER
-
-    // suppress build warning
-    MPX_DEBUG(_L("CVHPPTestClass::RetrievePdlStatusL() : parsing type = %d"), aItem.ParsingType());
-
-    // Signal TestScripter to continue from waittestclass
+#else // USE_S60_DOWNLOAD_MANAGER 
+     
+	// suppress build warning
+    MPX_DEBUG(_L("CVHPPTestClass::RetrievePdlStatusL() : parsing type = %d"), aItem.ParsingType()); 
+	
+	// Signal TestScripter to continue from waittestclass
     Signal();
-
-#endif // USE_S60_DOWNLOAD_MANAGER
-
+	
+#endif // USE_S60_DOWNLOAD_MANAGER 
+    
     return err;
 }
 
@@ -1622,7 +1623,7 @@
 CVHPPTestClass::ProcessEvent( TCallbackEvent* aCallback )
 {
     MPX_ENTER_EXIT(_L("CVHPPTestClass::ProcessEvent"));
-
+    
     if ( iExpectedCallbackArray->Count() > 0 )
     {
         TCallbackEvent* expectedCallback = (*iExpectedCallbackArray)[0];
@@ -1958,13 +1959,6 @@
 
     TInt err = 0;
 
-    //callback event
-    TCallbackEvent* event = new TCallbackEvent;
-    event->iError = 0;
-    event->iData  = 0;
-    event->iEvent = EPPaused;
-    AddExpectedEvent( event );
-
     //set phone call as Connected
     err = RProperty::Set(KPSUidCtsyCallInformation, KCTsyCallState, EPSCTsyCallStateConnected);
 
@@ -2033,14 +2027,7 @@
     event->iError = KErrNone;
 
     AddExpectedEvent( event );
-
-    event = new TCallbackEvent;
-    event->iEvent = EPPaused;
-    event->iData  = 0;
-    event->iError = KErrNone;
-
-    AddExpectedEvent( event );
-
+    
     iAccObserver->UpdateTvOutStatusL( EFalse );
 
     return KErrNone;
@@ -2134,69 +2121,69 @@
     return err;
 }
 
-// -----------------------------------------------------------------------------
-//  CVHPPTestClass::SetVolumeSteps
-// -----------------------------------------------------------------------------
-//
-TInt
-CVHPPTestClass::SetVolumeSteps( TInt aVolumeSteps )
-{
-    MPX_ENTER_EXIT(_L("CVHPPTestClass::SetVolumeSteps()"));
-    iLog->Log(_L("CVHPPTestClass::SetVolumeSteps()"));
-
+// ----------------------------------------------------------------------------- 
+//  CVHPPTestClass::SetVolumeSteps 
+// ----------------------------------------------------------------------------- 
+// 
+TInt 
+CVHPPTestClass::SetVolumeSteps( TInt aVolumeSteps ) 
+{ 
+    MPX_ENTER_EXIT(_L("CVHPPTestClass::SetVolumeSteps()")); 
+    iLog->Log(_L("CVHPPTestClass::SetVolumeSteps()")); 
+    
     iPlayerUtility->SetVolumeSteps( aVolumeSteps );
-
-    return KErrNone;
-}
-
-// -----------------------------------------------------------------------------
-//  CVHPPTestClass::HandleVolumeL
-// -----------------------------------------------------------------------------
-//
-TInt
-CVHPPTestClass::HandleVolumeL( CStifItemParser& aItem )
-{
-    MPX_ENTER_EXIT(_L("CVHPPTestClass::HandleVolumeL()"));
-    iLog->Log(_L("CVHPPTestClass::HandleVolumeL()"));
-
-    TInt command;
-    TInt value;
-
+    
+    return KErrNone; 
+} 
+
+// ----------------------------------------------------------------------------- 
+//  CVHPPTestClass::HandleVolumeL 
+// ----------------------------------------------------------------------------- 
+// 
+TInt 
+CVHPPTestClass::HandleVolumeL( CStifItemParser& aItem ) 
+{ 
+    MPX_ENTER_EXIT(_L("CVHPPTestClass::HandleVolumeL()")); 
+    iLog->Log(_L("CVHPPTestClass::HandleVolumeL()")); 
+      
+    TInt command; 
+    TInt value; 
+    
     TInt err = aItem.GetNextInt( command );
 
     if ( err == KErrNone )
     {
         err = aItem.GetNextInt( value );
 
-        if ( err == KErrNone )
-        {
-            //
-            // assign callback event values
-            //
-            TCallbackEvent* event = new TCallbackEvent;
-            event->iEvent = EPVolumeChanged;
-            event->iData  = value;
-            event->iError = KErrNone;
-
-            //
-            // save expected result to be compared later
-            //
-            AddExpectedEvent( event );
-
+        if ( err == KErrNone ) 
+        {         
+            // 
+            // assign callback event values 
+            // 
+            TCallbackEvent* event = new TCallbackEvent; 
+            event->iEvent = EPVolumeChanged; 
+            event->iData  = value; 
+            event->iError = KErrNone; 
+                  
+            // 
+            // save expected result to be compared later 
+            // 
+            AddExpectedEvent( event ); 
+    
             //
             // send command to playback plugin
             //
-            CreateVideoPlaybackCommandL( aItem, (TMPXVideoPlaybackCommand)command );
-        }
+            CreateVideoPlaybackCommandL( aItem, (TMPXVideoPlaybackCommand)command ); 
+        } 
     }
-
+    
     if ( err == KErrNone )
     {
         MPX_DEBUG(_L("CVHPPTestClass::HandleVolumeL() leaves with proper error"));
     }
-
-    return err;
-}
+    
+    return err; 
+} 
 
 
 TInt
@@ -2208,7 +2195,7 @@
     TInt duration;
     TInt volumeSteps;
     TInt position;
-
+    
     TInt err = aItem.GetNextInt( duration );
 
     if ( err == KErrNone )
@@ -2224,36 +2211,36 @@
 
         AddExpectedEvent( event );
 
-        //
+        // 
         // read number of volume steps
         //
         err = aItem.GetNextInt( volumeSteps );
-
+        
         if ( err == KErrNone )
-        {
+        {        
             //
             // set volume steps
             //
             SetVolumeSteps( volumeSteps );
-
+            
             err = aItem.GetNextInt( position );
-
+            
             if (err == KErrNone )
             {
-                TBuf<120> fullPath;
+                TBuf<120> fullPath;    
 
                 err = ReadFileInitializationParameters( aItem, fullPath );
-
+                
                 if ( err == KErrNone )
                 {
                     PreparePluginL();
-
+        
                     //
                     //  Initalize the Plugin with a file name
                     //
                     MPX_DEBUG(_L("Initialize the Plugin:  filename = %S, position = %d"), &fullPath, position);
                     iLog->Log(_L("Initialize the Plugin:  filename = %S, position = %d"), &fullPath, position);
-
+        
                     iPlaybackPlugin->InitialiseWithPositionL( fullPath, position );
                 }
 
@@ -2274,7 +2261,7 @@
     TInt duration;
     TInt volumeSteps;
     TInt position;
-
+    
     TInt err = aItem.GetNextInt( duration );
 
     if ( err == KErrNone )
@@ -2290,44 +2277,44 @@
 
         AddExpectedEvent( event );
 
-        //
+        // 
         // read number of volume steps
         //
         err = aItem.GetNextInt( volumeSteps );
-
+        
         if ( err == KErrNone )
-        {
+        {        
             //
             // set volume steps
             //
             SetVolumeSteps( volumeSteps );
-
+            
             err = aItem.GetNextInt( position );
-
+            
             if ( err == KErrNone )
             {
                 TPtrC  link;
-
+    
                 //
                 //  Read in the link from the config file
                 //
                 TInt err = aItem.GetNextString( link );
-
+    
                 if ( err == KErrNone )
                 {
                     TInt err = ReadInitializationErrors( aItem );
-
+    
                     if ( err == KErrNone )
                     {
                         PreparePluginL();
-
+    
                         //
                         //  Extract the streaming link from the ram file and
                         //  Initalize the Plugin with the link and an access point
                         //
                         MPX_DEBUG(_L("Initialize the Plugin:  link = %S, position = %d"), &link, position);
                         iLog->Log(_L("Initialize the Plugin:  link = %S, position = %d"), &link, position);
-
+    
                         iPlaybackPlugin->InitStreamingL( link, KNullDesC8, 11, position );
                     }
                 }
@@ -2349,41 +2336,41 @@
     TInt volumeSteps;
     TInt position;
     TInt fileHandle32;
-
+    
     TInt err = aItem.GetNextInt( fileHandle32 );
-
+    
     if ( err == KErrNone )
-    {
-
+    {        
+    
 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
         //
         // set RFile as default if the 64-bit flag is not defined
         //
         fileHandle32 = ETrue;
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
-
+        
         err = aItem.GetNextInt( duration );
-
+    
         if ( err == KErrNone )
         {
             //
             //  We will always get an Init Complete message out
             //
             TCallbackEvent* event = new TCallbackEvent;
-
+    
             event->iEvent = EPInitialised;
             event->iData  = duration;
             event->iError = KErrNone;
-
+    
             AddExpectedEvent( event );
-
-            //
+    
+            // 
             // read number of volume steps
             //
             err = aItem.GetNextInt( volumeSteps );
-
+            
             if ( err == KErrNone )
-            {
+            {        
                 //
                 // set volume steps
                 //
@@ -2394,16 +2381,16 @@
                 if (err == KErrNone )
                 {
                     TBuf<120> fullPath;
-
+                    
                     err = ReadFileInitializationParameters( aItem, fullPath );
-
+        
                     if ( err == KErrNone )
                     {
                         PreparePluginL();
-
+        
                         RFs fs;
                         TInt error = fs.Connect();
-
+                    
                         //
                         //  Open a file handle to the clip
                         //
@@ -2423,20 +2410,20 @@
                             file64.Close();
                         }
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
-
+                            
                         //
                         //  Initalize the Plugin with a file name
                         //
                         MPX_DEBUG(_L("Initialize the Plugin with File Handle:  filename = %S, position = %d"), &fullPath, position);
                         iLog->Log(_L("Initialize the Plugin with File Handle:  filename = %S, position = %d"), &fullPath, position);
-
+            
                         fs.Close();
                     }
-                }
-
-            }
-        }
-    }
+                }            
+
+            } 
+        } 
+    } 
 
     return err;
 }
@@ -2450,97 +2437,97 @@
     TInt duration;
     TInt volumeSteps;
     TInt fileHandle32;
-
+    
     TInt err = aItem.GetNextInt( fileHandle32 );
-
+    
     if ( err == KErrNone )
-    {
-
+    {        
+    
 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
         //
         // set RFile as default if the 64-bit flag is not defined
         //
         fileHandle32 = ETrue;
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
-
+        
         err = aItem.GetNextInt( duration );
-
+    
         if ( err == KErrNone )
         {
             //
             //  We will always get an Init Complete message out
             //
             TCallbackEvent* event = new TCallbackEvent;
-
+    
             event->iEvent = EPInitialised;
             event->iData  = duration;
             event->iError = KErrNone;
-
+    
             AddExpectedEvent( event );
-
-            //
+    
+            // 
             // read number of volume steps
             //
             err = aItem.GetNextInt( volumeSteps );
-
+            
             if ( err == KErrNone )
-            {
+            {        
                 //
                 // set volume steps
                 //
                 SetVolumeSteps( volumeSteps );
-
+               
                 TBuf<120> fullPath;
                 err = ReadFileInitializationParameters( aItem, fullPath );
 
                 if ( err == KErrNone )
                 {
-                    PreparePluginL();
-
-                    MPX_DEBUG( _L("Initialize the Plugin:  link = %S"), &fullPath );
-                    iLog->Log( _L("Initialize the Plugin:  link = %S"), &fullPath );
-
-                    //
-                    //  Extract the streaming link from the ram file and
-                    //  Initalize the Plugin with the file handle and an access point
-                    //
-                    RFs fs;
-                    TInt error = fs.Connect();
-
-                    if ( fileHandle32 )
-                    {
-                        RFile file;
-                        error = file.Open( fs, fullPath, EFileRead | EFileShareAny );
-
-                        MPX_DEBUG( _L("Initialize the Plugin:  file open error = %d"),
-                                error );
-
-                        User::LeaveIfError( error );
-
-                        iPlaybackPlugin->InitStreamingL( file, 11 );
-                        file.Close();
-                    }
+					PreparePluginL();
+					
+					MPX_DEBUG( _L("Initialize the Plugin:  link = %S"), &fullPath );
+					iLog->Log( _L("Initialize the Plugin:  link = %S"), &fullPath );
+					
+					//
+					//  Extract the streaming link from the ram file and
+					//  Initalize the Plugin with the file handle and an access point
+					//
+					RFs fs;
+					TInt error = fs.Connect();
+					
+					if ( fileHandle32 )
+					{
+						RFile file;
+						error = file.Open( fs, fullPath, EFileRead | EFileShareAny );
+						
+						MPX_DEBUG( _L("Initialize the Plugin:  file open error = %d"),
+								error );   
+						
+						User::LeaveIfError( error );
+				  
+						iPlaybackPlugin->InitStreamingL( file, 11 );
+						file.Close();
+					}
     #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
-                    else
-                    {
-                        RFile64 file64;
-                        error = file64.Open( fs, fullPath, EFileRead | EFileShareAny  );
-
-                        MPX_DEBUG( _L("Initialize the Plugin:  file open error = %d"),
-                                error );
-
-                        User::LeaveIfError( error );
-
-                        iPlaybackPlugin->InitStreaming64L( file64, 11 );
-                        file64.Close();
-                    }
+					else
+					{
+						RFile64 file64;
+						error = file64.Open( fs, fullPath, EFileRead | EFileShareAny  );
+						
+						MPX_DEBUG( _L("Initialize the Plugin:  file open error = %d"),
+								error );
+						
+						User::LeaveIfError( error );
+						
+						iPlaybackPlugin->InitStreaming64L( file64, 11 );
+						file64.Close();
+					}
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
-
-                    fs.Close();
+					
+					fs.Close();
                 }
-            }
-        }
-    }
+            } 
+        } 
+    } 
     return err;
 }
 
@@ -2550,10 +2537,10 @@
     MPX_ENTER_EXIT( _L("CVHPPTestClass::RetrieveFileNameAndModeL()") );
     iLog->Log( _L("CVHPPTestClass::RetrieveFileNameAndModeL()") );
 
-    TBuf<120>    fullPath;
-    TPtrC        fileName;
-    TInt        err;
-
+    TBuf<120>	fullPath;
+    TPtrC		fileName;
+    TInt		err;
+    
     err = aItem.GetNextString( fileName );
 
     if ( err == KErrNone )
@@ -2563,38 +2550,38 @@
         //
         fullPath.Append( KVideoTestPath );
         fullPath.Append( fileName );
-
+        
         TInt mode;
         err = aItem.GetNextInt( mode);
-
+        
         if ( err == KErrNone )
         {
-             CMPXCommand* cmd = CMPXCommand::NewL();
-            CleanupStack::PushL( cmd );
-
-            cmd->SetTObjectValueL<TBool>( KMPXCommandGeneralDoSync, ETrue );
-            cmd->SetTObjectValueL<TInt>( KMPXCommandGeneralId,
-                                         KMPXMediaIdVideoPlayback );
-            cmd->SetTObjectValueL<TInt>( KMPXMediaVideoPlaybackCommand, EPbCmdInitView );
-
-            iPlaybackPlugin->CommandL( *cmd );
-
-            TPtrC clipName( cmd->ValueText( KMPXMediaVideoPlaybackFileName ) );
-            TMPXVideoMode  playbackMode = (TMPXVideoMode) cmd->ValueTObjectL<TInt>( KMPXMediaVideoMode );
-
-            MPX_DEBUG( _L("    Expected Data:  filename = %S, playbackmode= %d" ),
-                 &fullPath, mode );
-
-            MPX_DEBUG( _L("    Retrieved Data: filename = %S, playbackmode= %d"),
-                 &clipName, playbackMode );
-
-            if ( fullPath.Compare( clipName) != 0 || mode != playbackMode )
-            {
-                err = KErrGeneral;
-                MPX_DEBUG( _L("    err = %d"), err );
-            }
-
-            CleanupStack::PopAndDestroy( cmd );
+ 			CMPXCommand* cmd = CMPXCommand::NewL();
+			CleanupStack::PushL( cmd );
+	
+			cmd->SetTObjectValueL<TBool>( KMPXCommandGeneralDoSync, ETrue );
+			cmd->SetTObjectValueL<TInt>( KMPXCommandGeneralId,
+										 KMPXMediaIdVideoPlayback );
+			cmd->SetTObjectValueL<TInt>( KMPXMediaVideoPlaybackCommand, EPbCmdInitView );
+			
+			iPlaybackPlugin->CommandL( *cmd );
+			
+			TPtrC clipName( cmd->ValueText( KMPXMediaVideoPlaybackFileName ) );
+			TMPXVideoMode  playbackMode = (TMPXVideoMode) cmd->ValueTObjectL<TInt>( KMPXMediaVideoMode );
+	
+			MPX_DEBUG( _L("    Expected Data:  filename = %S, playbackmode= %d" ),
+				 &fullPath, mode );
+			
+			MPX_DEBUG( _L("    Retrieved Data: filename = %S, playbackmode= %d"),
+				 &clipName, playbackMode );
+			
+			if ( fullPath.Compare( clipName) != 0 || mode != playbackMode )
+			{
+			    err = KErrGeneral;
+				MPX_DEBUG( _L("    err = %d"), err );
+			}
+			
+			CleanupStack::PopAndDestroy( cmd );
         }
     }
 
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 25 %
+// Version : %version: 23.1.1 %
 
 
 // INCLUDE FILES
@@ -332,7 +332,6 @@
             }
             break;
         }
-        case EPbStateInitialised:
         case EPbStateBuffering:
         {
             if ( iProperties & EMPXBufferingControl )
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolpolicy.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolpolicy.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -15,8 +15,7 @@
 *
 */
 
-
-// Version : %version: 10 %
+// Version : %version: 9 %
 
 
 // INCLUDE FILES
@@ -95,7 +94,16 @@
             //
             //  Transitory Buffering states will be filtered out by the View
             //
-            aProperties = EMPXBufferingControl | EMPXShownWhenInitializing;
+            aProperties = EMPXBufferingControl;
+
+            //
+            //  Do not show Back when Initializing for Local Mode
+            //  It causes a flicker when playback begins
+            //
+            if ( aDetails->iPlaybackMode != EMPXVideoLocal )
+            {
+                aProperties += EMPXShownWhenInitializing;
+            }
         }
         case EMPXSoftkeyDetails:
         {
@@ -109,16 +117,6 @@
         case EMPXBufferingLabel:
         {
             aProperties = EMPXBufferingControl;
-
-            //
-            //  Show Loading when Initializing for local playback modes
-            //  This allows for a smoother transition to playing state
-            //
-            if ( aDetails->iPlaybackMode == EMPXVideoLocal ||
-                 aDetails->iPlaybackMode ==  EMPXVideoProgressiveDownload )
-            {
-                aProperties += EMPXShownWhenInitializing;
-            }
             break;
         }
         case EMPXTitleLabel:
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolscontroller.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolscontroller.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 45 %
+// Version : %version: 44 %
 
 
 // INCLUDE FILES
@@ -117,18 +117,10 @@
 
     iFileDetails = aDetails;
     iTvOutConnected = iFileDetails->iTvOutConnected;
+    iShowControls  = ETrue;
 
     iRNFormat = IsRealFormatL( iFileDetails->iClipName->Des() );
 
-    if ( IsRealOneBitmapVisible() )
-    {
-        iShowControls  = EFalse;
-    }
-    else
-    {
-        iShowControls  = ETrue;
-    }
-
     iControlsPolicy = CMPXVideoPlaybackControlPolicy::NewL();
     iControlsConfig = CMPXVideoPlaybackControlConfiguration::NewL( this );
 
@@ -365,13 +357,8 @@
         case EMPXControlCmdHandleForegroundEvent:
         {
             MPX_DEBUG(_L("    [EMPXControlCmdHandleForegroundEvent]"));
-
-            if ( ! IsRealOneBitmapVisible() )
-            {
-                iShowControls = ETrue;
-                UpdateControlsVisibility();
-            }
-
+            iShowControls = ETrue;
+            UpdateControlsVisibility();
             break;
         }
         case EMPXControlCmdHandleErrors:
@@ -1789,39 +1776,7 @@
     if ( iRealOneBitmap )
     {
         iRealOneBitmap->MakeVisible( aVisible );
-
-        if ( ! aVisible )
-        {
-            // HDMI/TV-out cable connected then show the controls
-            if ( iTvOutConnected  && !iShowControls )
-            {
-                iShowControls = ETrue;
-                UpdateControlsVisibility();
-            }
-            else
-            {
-                iShowControls = ETrue;
-            }
-        }
-    }// iRealOneBitmap
-}
-
-// -------------------------------------------------------------------------------------------------
-//   CMPXVideoPlaybackControlsController::IsRealOneBitmapVisible()
-// -------------------------------------------------------------------------------------------------
-//
-TBool CMPXVideoPlaybackControlsController::IsRealOneBitmapVisible()
-{
-    TBool visible = EFalse;
-
-    if ( iRealOneBitmap )
-    {
-        visible = iRealOneBitmap->IsVisible();
     }
-
-    MPX_DEBUG(_L("CMPXVideoPlaybackControlsController::IsRealOneBitmapVisible(%d)"), visible);
-
-    return visible;
 }
 
 // -------------------------------------------------------------------------------------------------
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackmediadetailsviewer.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackmediadetailsviewer.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version:  18 %
+// Version : %version:  e003sa33#17 %
 
 
 // INCLUDE FILES
@@ -65,7 +65,6 @@
 CMPXVideoPlaybackMediaDetailsViewer::CMPXVideoPlaybackMediaDetailsViewer(
     CMPXVideoPlaybackControlsController* aController )
     : iController( aController )
-    , iDrmDetailsLaunched( EFalse )
 {
 }
 
@@ -239,12 +238,7 @@
 //
 void CMPXVideoPlaybackMediaDetailsViewer::LaunchDRMDetailsL()
 {
-    if ( ! iDrmDetailsLaunched )
-    {
-        iDrmDetailsLaunched = ETrue;
-        iController->iContainer->HandleCommandL( EMPXPbvLaunchDRMDetails );
-        iDrmDetailsLaunched = EFalse;
-    }
+    iController->iContainer->HandleCommandL(EMPXPbvLaunchDRMDetails);
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -313,10 +307,10 @@
 
         CleanupStack::PopAndDestroy( heading );
     }
-
+    
     // Title
     HBufC* fileTitle = iController->FileDetails()->GenerateFileTitleL();
-
+    
     if ( fileTitle && fileTitle->Length() )
     {
         // Title gets populated by UpdateTitle method
@@ -328,7 +322,7 @@
         iTitleLabel->MakeVisible( ETrue );
         rowsAdded++;
     }
-
+    
     delete fileTitle;
 
     // Filename
@@ -345,9 +339,9 @@
         iClipnameLabel->MakeVisible( ETrue );
         rowsAdded++;
     }
-
+    
     delete fileName;
-
+    
     // Mime Type (Format)
     if ( iController->FileDetails()->iMimeType && iController->FileDetails()->iMimeType->Length() )
     {
@@ -703,7 +697,7 @@
     {
         UpdateFilenameL();
     }
-
+    
     if ( iTitleScroller.IsUpdateNeeded() )
     {
         UpdateTitleL();
@@ -761,8 +755,8 @@
     }
 
     HBufC* title = NULL;
-    TRAP_IGNORE ( title = iController->FileDetails()->GenerateFileTitleL() );
-
+    TRAP_IGNORE ( title = iController->FileDetails()->GenerateFileTitleL() ); 
+    
     if ( title )
     {
         numOfItems++;
@@ -849,10 +843,10 @@
 void CMPXVideoPlaybackMediaDetailsViewer::UpdateFilenameL()
 {
     MPX_ENTER_EXIT( _L( "CMPXVideoPlaybackMediaDetailsViewer::UpdateFilenameL" ) );
-
-    HBufC* fileName = iController->FileDetails()->GenerateFileNameL();
+    
+	HBufC* fileName = iController->FileDetails()->GenerateFileNameL();
     CleanupStack::PushL( fileName );
-
+    
     if ( fileName && fileName->Length() )
     {
         HBufC* heading  = iEikonEnv->AllocReadResourceL( R_MPX_FILENAME_HEADING );
@@ -871,7 +865,7 @@
 
         CleanupStack::PopAndDestroy( heading );
     }
-
+    
     CleanupStack::PopAndDestroy( fileName );
 }
 
@@ -882,11 +876,11 @@
 void CMPXVideoPlaybackMediaDetailsViewer::UpdateTitleL()
 {
     MPX_ENTER_EXIT( _L( "CMPXVideoPlaybackMediaDetailsViewer::UpdateTitleL" ) );
-
-    HBufC* fileTitle = iController->FileDetails()->GenerateFileTitleL();
+    
+	HBufC* fileTitle = iController->FileDetails()->GenerateFileTitleL();
     CleanupStack::PushL( fileTitle );
-
-    if ( fileTitle && fileTitle->Length() )
+    
+	if ( fileTitle && fileTitle->Length() )
     {
         HBufC* heading  = iEikonEnv->AllocReadResourceL( R_MPX_TITLE_HEADING );
         CleanupStack::PushL( heading );
@@ -904,8 +898,8 @@
 
         CleanupStack::PopAndDestroy( heading );
     }
-
-    CleanupStack::PopAndDestroy( fileTitle );
+	
+    CleanupStack::PopAndDestroy( fileTitle );	
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -946,8 +940,8 @@
 TBool CMPXVideoPlaybackMediaDetailsViewer::TTextScroller::IsUpdateNeeded()
 {
     MPX_ENTER_EXIT( _L( "CMPXVideoPlaybackMediaDetailsViewer::TTextScroller::IsUpdateNeeded" ) );
-
-    // skip the scrolling operation if the loop for delay is going on
+    
+	// skip the scrolling operation if the loop for delay is going on
     TBool skipForTimerDelay = EFalse;
 
     // add a delay after each complete scrolling
@@ -983,12 +977,12 @@
         TDes& aDesText )
 {
     MPX_ENTER_EXIT( _L( "CMPXVideoPlaybackMediaDetailsViewer::TTextScroller::ScrollText" ) );
-
-    if ( 0 == iSrcTextLen )
+    
+	if ( 0 == iSrcTextLen )
     {
         iSrcTextLen = aSrcText.Length();
     }
-
+    
     ASSERT( aSrcText.Length() == iSrcTextLen );
     if ( aSrcText.Length() >= KMediaDetailsViewerVisibleCharacters )
     {
@@ -1005,7 +999,7 @@
             iTextScrollPos++;
         }
         iScroll = ETrue;
-
+        
     }
     else
     {
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackprogressbar.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackprogressbar.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 25 %
+// Version : %version: e003sa33#24 %
 
 
 // INCLUDE FILES
@@ -772,8 +772,7 @@
                                    EAspectRatioNotPreserved );
         }
     }
-    else if ( aDetails->iPlaybackMode == EMPXVideoLiveStreaming &&
-              ! iLiveStreamingString )
+    else if ( aDetails->iPlaybackMode == EMPXVideoLiveStreaming )
     {
         iLiveStreamingString = iEikonEnv->AllocReadResourceL( R_MPX_LIVE_STREAMING );
 
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 27 %
+// Version : %version: 25 %
 
 
 // INCLUDE FILES
@@ -457,9 +457,13 @@
         case TPointerEvent::EButtonRepeat:
         {
 #ifdef RD_TACTILE_FEEDBACK
-            if ( iFeedback && !iController->FileDetails()->iTvOutConnected )
+            if ( iFeedback )
             {
+#ifdef SYMBIAN_BUILD_GCE
                 iFeedback->InstantFeedback( ETouchFeedbackSlider );
+#else
+                iFeedback->InstantFeedback( ETouchFeedbackSensitive );
+#endif //SYMBIAN_BUILD_GCE
             }
 #endif //RD_TACTILE_FEEDBACK
             iController->HandleCommandL( EMPXPbvCmdIncreaseVolume );
@@ -482,9 +486,13 @@
         case TPointerEvent::EButton1Up:
         {
 #ifdef RD_TACTILE_FEEDBACK
-            if ( iFeedback && !iController->FileDetails()->iTvOutConnected )
+            if ( iFeedback )
             {
+#ifdef SYMBIAN_BUILD_GCE
                 iFeedback->InstantFeedback( ETouchFeedbackSlider );
+#else
+                iFeedback->InstantFeedback( ETouchFeedbackBasic );
+#endif //SYMBIAN_BUILD_GCE
             }
 #endif //RD_TACTILE_FEEDBACK
 
@@ -511,9 +519,13 @@
         case TPointerEvent::EButtonRepeat:
         {
 #ifdef RD_TACTILE_FEEDBACK
-            if ( iFeedback && !iController->FileDetails()->iTvOutConnected )
+            if ( iFeedback )
             {
+#ifdef SYMBIAN_BUILD_GCE
                 iFeedback->InstantFeedback( ETouchFeedbackSlider );
+#else
+                iFeedback->InstantFeedback( ETouchFeedbackSensitive );
+#endif //SYMBIAN_BUILD_GCE
             }
 #endif //RD_TACTILE_FEEDBACK
             iController->HandleCommandL( EMPXPbvCmdDecreaseVolume );
@@ -536,9 +548,13 @@
         case TPointerEvent::EButton1Up:
         {
 #ifdef RD_TACTILE_FEEDBACK
-            if ( iFeedback && !iController->FileDetails()->iTvOutConnected )
+            if ( iFeedback )
             {
+#ifdef SYMBIAN_BUILD_GCE
                 iFeedback->InstantFeedback( ETouchFeedbackSlider );
+#else
+                iFeedback->InstantFeedback( ETouchFeedbackBasic );
+#endif //SYMBIAN_BUILD_GCE
             }
 #endif //RD_TACTILE_FEEDBACK
 
@@ -567,7 +583,11 @@
 #ifdef RD_TACTILE_FEEDBACK
             if ( iFeedback )
             {
+#ifdef SYMBIAN_BUILD_GCE
                 iFeedback->InstantFeedback( ETouchFeedbackBasicButton );
+#else
+                iFeedback->InstantFeedback( ETouchFeedbackBasic );
+#endif //SYMBIAN_BUILD_GCE
             }
 #endif //RD_TACTILE_FEEDBACK
 
@@ -636,7 +656,7 @@
         case TPointerEvent::EButton1Down:
         {
 #ifdef RD_TACTILE_FEEDBACK
-            if ( iFeedback && !iController->FileDetails()->iTvOutConnected )
+            if ( iFeedback )
             {
                 iFeedback->InstantFeedback( ETouchFeedbackSlider );
             }
@@ -657,8 +677,7 @@
         case TPointerEvent::EDrag:
         {
 #ifdef RD_TACTILE_FEEDBACK
-            if ( iFeedback && giveDynamicSliderFeedback && 
-                 !iController->FileDetails()->iTvOutConnected )
+            if ( iFeedback && giveDynamicSliderFeedback )
             {
                 iFeedback->StartFeedback( this,
                                           ETouchDynamicSlider,
--- a/videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/conf/ui_videoplaybackcontrolstest.cfg	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/tsrc/videoplaybackcontrols_test/conf/ui_videoplaybackcontrolstest.cfg	Wed Oct 13 14:34:36 2010 +0300
@@ -164,7 +164,34 @@
 [Endtest]
 
 [Test]
-title [6]Mute / Unmute
+title [6]Set volume to 25
+bringtoforeground
+create ui_videoplaybackcontrolstest ControlsTest
+ControlsTest CreateControls test.3gp EMPXVideoLocal
+pause 100
+ControlsTest AddDefaultFileDetails
+pause 100
+ControlsTest SetState EPbStatePlaying
+ControlsTest SetVolume 50
+pause 100
+ControlsTest ShowControls
+pause 1000
+ControlsTest PointerEvent eventtype=EButton1Down x=75 y=180
+pause 200
+ControlsTest PointerEvent eventtype=EDrag x=75 y=180
+pause 100
+ControlsTest PointerEvent eventtype=EButton1Up x=75 y=180
+pause 100
+ControlsTest ExpectedResult EMPXPbvCmdSetVolume 25
+pause 100
+ControlsTest DeleteControls
+delete ControlsTest
+sendtobackground
+pause 2000
+[Endtest]
+
+[Test]
+title [7]Mute / Unmute
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -197,7 +224,7 @@
 [Endtest]
 
 [Test]
-title [7]SetPosition
+title [8]SetPosition
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -223,7 +250,7 @@
 [Endtest]
 
 [Test]
-title [8]Audio only clip
+title [9]Audio only clip
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -245,7 +272,7 @@
 [Endtest]
 
 [Test]
-title [9]Play using Button bar
+title [10]Play using Button bar
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -267,7 +294,7 @@
 [Endtest]
 
 [Test]
-title [10]Pause using Button bar
+title [11]Pause using Button bar
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -291,7 +318,7 @@
 [Endtest]
 
 [Test]
-title [11]FF using Button bar
+title [12]FF using Button bar
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -316,7 +343,7 @@
 [Endtest]
 
 [Test]
-title [12]RW using Button bar
+title [13]RW using Button bar
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -341,7 +368,7 @@
 [Endtest]
 
 [Test]
-title [13]PDL SetDownLoadPostion
+title [14]PDL SetDownLoadPostion
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoProgressiveDownload
@@ -364,7 +391,7 @@
 [Endtest]
 
 [Test]
-title [14]PDL SetDownLoadPaused
+title [15]PDL SetDownLoadPaused
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoProgressiveDownload
@@ -382,7 +409,7 @@
 [Endtest]
 
 [Test]
-title [15]PDL ClearDownLoadPaused
+title [16]PDL ClearDownLoadPaused
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoProgressiveDownload
@@ -405,7 +432,7 @@
 [Endtest]
 
 [Test]
-title [16]TV-Out
+title [17]TV-Out
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -425,7 +452,7 @@
 [Endtest]
 
 [Test]
-title [17] RealMedia Streaming
+title [18] RealMedia Streaming
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls rtsp:\/\/1.1.1.1/1.rm EMPXVideoStreaming
@@ -441,7 +468,7 @@
 [Endtest]
 
 [Test]
-title [18] 3GPP Streaming
+title [19] 3GPP Streaming
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls rtsp:\/\/1.1.1.1/1.3gp EMPXVideoStreaming
@@ -457,7 +484,7 @@
 [Endtest]
 
 [Test]
-title [19] Error during Connecting
+title [20] Error during Connecting
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.rm EMPXVideoStreaming
@@ -473,7 +500,7 @@
 [Endtest]
 
 [Test]
-title [20]Play/pause using enter key
+title [21]Play/pause using enter key
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -497,7 +524,7 @@
 [Endtest]
 
 [Test]
-title [21] Key input while FF via pointer event in progress
+title [22] Key input while FF via pointer event in progress
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -524,7 +551,7 @@
 [Endtest]
 
 [Test]
-title [22] Ptr input while key input being processed
+title [23] Ptr input while key input being processed
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -552,7 +579,7 @@
 [Endtest]
 
 [Test]
-title [23] Press back key through offerkeyevent
+title [24] Press back key through offerkeyevent
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -576,7 +603,7 @@
 [Endtest]
 
 [Test]
-title [24]Press details key through offerkeyevent
+title [25]Press details key through offerkeyevent
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -598,7 +625,7 @@
 [Endtest]
 
 [Test]
-title [25]Send the view to background while FF using Button bar
+title [26]Send the view to background while FF using Button bar
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -623,7 +650,7 @@
 [Endtest]
 
 [Test]
-title [26]Tap on back softkey while buffering in live streaming mode
+title [27]Tap on back softkey while buffering in live streaming mode
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls rtsp:\/\/1.1.1.1/1.3gp EMPXVideoLiveStreaming
@@ -645,7 +672,7 @@
 [Endtest]
 
 [Test]
-title [27]Timout for toggling control's visibility in playing state
+title [28]Timout for toggling control's visibility in playing state
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -663,7 +690,7 @@
 [Endtest]
 
 [Test]
-title [28]SetPosition when playing
+title [29]SetPosition when playing
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -696,7 +723,7 @@
 
 
 [Test]
-title [29] Open Close Media Details Viewer (no scrolling)
+title [30] Open Close Media Details Viewer (no scrolling)
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -719,7 +746,7 @@
 
 
 [Test]
-title [30] Open Close Media Details Viewer w/Scrolling
+title [31] Open Close Media Details Viewer w/Scrolling
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls TestClipWithLongNameToTestScrollingInMediaDetailsViewer.3gp EMPXVideoLocal
@@ -742,7 +769,7 @@
 
 
 [Test]
-title [31] Media Details Viewer (audio only)
+title [32] Media Details Viewer (audio only)
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls TestClipWithLongNameToTestScrollingInMediaDetailsViewer.3gp EMPXVideoLocal
@@ -765,7 +792,7 @@
 
 
 [Test]
-title [32] Media Details Viewer Streaming Link
+title [33] Media Details Viewer Streaming Link
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls rtsp:\/\/1.1.1.1/1.3gp EMPXVideoStreaming
@@ -787,7 +814,7 @@
 [Endtest]
 
 [Test]
-title [33] Open Close Media Details Viewer (with long details)
+title [34] Open Close Media Details Viewer (with long details)
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -809,7 +836,7 @@
 [Endtest]
 
 [Test]
-title [34] Hide aspect ratio
+title [35] Hide aspect ratio
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls test.3gp EMPXVideoLocal
@@ -831,7 +858,7 @@
 [Endtest]
 
 [Test]
-title [35] Open Close Media Details Viewer (with empty title)
+title [36] Open Close Media Details Viewer (with empty title)
 bringtoforeground
 create ui_videoplaybackcontrolstest ControlsTest
 ControlsTest CreateControls rtsp:\/\/10.41.2.3/h264/Video%20BitRate%2008%20-%2064/Meat%20Loaf%20-%20I%20would%20do%20anything%20for%20love.3gp EMPXVideoStreaming
--- a/videoplayback/videoplaybackviews/src/mpxvideobaseplaybackview.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayback/videoplaybackviews/src/mpxvideobaseplaybackview.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 88 %
+// Version : %version: 86 %
 
 
 //  Include Files
@@ -966,7 +966,7 @@
         }
         case KMPXVideoCallOngoingError:
         {
-            DisplayInfoMessageL( R_MPX_VIDEO_CALL_ONGOING, ETrue );
+            DisplayInfoMessageL( R_MPX_VIDEO_CALL_ONGOING );
             break;
         }
         default:
@@ -1550,15 +1550,7 @@
 void CMPXVideoBasePlaybackView::DoClosePlayerL()
 {
     MPX_ENTER_EXIT(_L("CMPXVideoBasePlaybackView::DoClosePlayerL()"));
-
-    if ( iExitPlayer )
-    {
-        AppUi()->HandleCommandL( EAknCmdExit );
-    }
-    else
-    {
-        AppUi()->HandleCommandL( EAknSoftkeyBack );
-    }
+    AppUi()->HandleCommandL( EAknSoftkeyBack );
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -1868,8 +1860,6 @@
 {
     MPX_ENTER_EXIT(_L("CMPXVideoBasePlaybackView::HandleDrmErrorsL()"));
 
-    TInt drmUiError = KErrNone;
-
     //
     //  If we receive an error when we are initialized, let the DRM UI Handler
     //  process the error.  If we have been playing, display the error message
@@ -1893,11 +1883,10 @@
             DRM::CDrmUiHandling* drmUiHandling = DRM::CDrmUiHandling::NewL( iCoeEnv );
             CleanupStack::PushL( drmUiHandling );
 
-            MPX_TRAP( drmUiError,
-                      drmUiHandling->GetErrorHandler().HandleErrorL( fileHandle,
-                                                                     ContentAccess::EPlay,
-                                                                     aError,
-                                                                     NULL ) );
+            drmUiHandling->GetErrorHandler().HandleErrorL( fileHandle,
+                                                           ContentAccess::EPlay,
+                                                           aError,
+                                                           NULL );
 
             CleanupStack::PopAndDestroy( drmUiHandling );
         }
@@ -1914,12 +1903,10 @@
                 DRM::CDrmUiHandling* drmUiHandling = DRM::CDrmUiHandling::NewL( iCoeEnv );
                 CleanupStack::PushL( drmUiHandling );
 
-                MPX_TRAP( drmUiError,
-                          drmUiHandling->GetErrorHandler().HandleErrorL( fileHandle64,
-                                                                         ContentAccess::EPlay,
-                                                                         aError,
-                                                                         NULL ) );
-
+                drmUiHandling->GetErrorHandler().HandleErrorL( fileHandle64,
+                                                               ContentAccess::EPlay,
+                                                               aError,
+                                                               NULL );
                 CleanupStack::PopAndDestroy( drmUiHandling );
             }
             else
@@ -1938,19 +1925,7 @@
         CleanupStack::PopAndDestroy();  // fileHandle
     }
 
-    if ( KErrNone == drmUiError )
-    {
-        HandleClosePlaybackViewL();
-    }
-    else if ( KLeaveExit == drmUiError )
-    {
-        iExitPlayer = ETrue;
-        ActivateClosePlayerActiveObject();
-    }
-    else
-    {
-        User::Leave( drmUiError );
-    }
+    HandleClosePlaybackViewL();
 }
 
 // -------------------------------------------------------------------------------------------------
--- a/videoplayerapp/mpxvideoplayer/group/mpxvideoplayer.mmp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/group/mpxvideoplayer.mmp	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 29 %
+// Version : %version: da1mmcf#28 %
 
 #include <platform_paths.hrh>
 #include <data_caging_paths.hrh>
@@ -37,7 +37,6 @@
 SOURCE          mpxvideoplayerappui.cpp
 SOURCE          mpxvideoplayerappuiengine.cpp
 SOURCE          mpxvideoembeddedpdlhandler.cpp
-SOURCE          mpxvideoplayeriadupdate.cpp
 
 START RESOURCE  ../data/mpxvideoplayer.rss
 HEADER
@@ -82,7 +81,5 @@
 LIBRARY         mpxcommon.lib
 LIBRARY         flogger.lib
 LIBRARY         videoplaylistutility.lib
-LIBRARY         featmgr.lib
-LIBRARY         iaupdateapi.lib
 
 // End of File
--- a/videoplayerapp/mpxvideoplayer/inc/mpxvideoplayerappuiengine.h	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/inc/mpxvideoplayerappuiengine.h	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 35 %
+// Version : %version: da1mmcf#34 %
 
 
 #ifndef CMPXVIDEOPLAYERAPPUIENGINE_H
@@ -43,7 +43,6 @@
 class MMPXCollectionUiHelper;
 class CAiwGenericParamList;
 class CVideoPlaylistUtility;
-class CMpxVideoPlayerIadUpdate;
 
 /**
 *  Application UI class.
@@ -315,11 +314,6 @@
          */
         virtual void DoLateConstructL();
 
-        /**
-         * Checks for updates via IAD.
-         */
-        void DoCheckForUpdatesL();
-
     private:       // data
 
         CMpxVideoPlayerAppUi*         iAppUi;
@@ -336,7 +330,6 @@
         CIdle*                        iExitAo;
         CMediaRecognizer*             iRecognizer;       // own
         CMpxVideoEmbeddedPdlHandler*  iPdlHandler;       // own
-        CMpxVideoPlayerIadUpdate*     iIadUpdate;        // own
 
         TInt                     iAccessPointId;
         TBool                    iMultilinkPlaylist;
--- a/videoplayerapp/mpxvideoplayer/inc/mpxvideoplayeriadupdate.h	Wed Sep 15 12:15:24 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:    IAD update handling.
-* 
-*/
-
-
-// Version : %version: 1 %
-
-
-#ifndef CMPXVIDEOPLAYERIADUPDATE_H
-#define CMPXVIDEOPLAYERIADUPDATE_H
-
-#include <e32std.h>
-#include <iaupdateobserver.h>
-
-class CIAUpdate;
-class CIAUpdateParameters;
-class MMPXViewUtility;
-
-
-/**
- * This class handles IAD update.
- */
-NONSHARABLE_CLASS( CMpxVideoPlayerIadUpdate ) : public CBase, public MIAUpdateObserver
-    {
-
-public: // Constructors and destructor
-
-    /**
-     * Two-phased constructor.
-     * @param aViewUtility Reference to view utility
-     */
-    static CMpxVideoPlayerIadUpdate* NewL( MMPXViewUtility& aViewUtility );
-
-    /**
-     * Destructor.
-     */
-    virtual ~CMpxVideoPlayerIadUpdate();
-   
-public: // New methods
-
-    /**
-     * Start IAD update process.
-     */
-    void StartL();
-
-private: // Constructors and destructor
-
-    /**
-     * C++ default constructor.
-     * @param aViewUtility Reference to view utility
-     */
-    CMpxVideoPlayerIadUpdate( MMPXViewUtility& aViewUtility );
-
-    /**
-    * By default Symbian 2nd phase constructor is private.
-    */
-    void ConstructL();
-
-private: // New methods
-
-    /** 
-     * From MIAUpdateObserver.
-     * This callback function is called when the update checking operation has completed.
-     *
-     * @param aErrorCode The error code of the observed update operation.
-     *                   KErrNone for successful completion, 
-     *                   otherwise a system wide error code.
-     * @param aAvailableUpdates Number of the updates that were found available.
-     *
-     * @since S60 v3.2
-     */
-    void CheckUpdatesComplete( TInt aErrorCode, TInt aAvailableUpdates );
-
-
-    /** 
-     * From MIAUpdateObserver.
-     * This callback function is called when an update operation has completed.
-     * Even if multiple functions are provided to start different update operations,
-     * this callback function is always called after an update operation has completed.
-     *
-     * @param aErrorCode The error code of the completed update operation.
-     *                   KErrNone for successful completion, 
-     *                   otherwise a system wide error code.
-     * @param aResult Details about the completed update operation.
-     *                Ownership is transferred.
-     *
-     * @since S60 v3.2
-     */
-    void UpdateComplete( TInt aErrorCode, CIAUpdateResult* aResultDetails );
-
-
-    /** 
-     * From MIAUpdateObserver.
-     * This callback function is called when an update query operation has completed.
-     *
-     * @param aErrorCode The error code of the observed query operation.
-     *                   KErrNone for successful completion, 
-     *                   otherwise a system wide error code.
-     * @param aUpdateNow ETrue informs that an update operation should be started.
-     *                   EFalse informs that there is no need to start an update
-     *                   operation.
-     * @since Series 60 3.2
-     */
-    void UpdateQueryComplete( TInt aErrorCode, TBool aUpdateNow );
-
-
-    /**
-     * Parses SDP file.
-     * @since Series 60 3.2
-     * @param none.
-     * @return none.
-     */
-    void Delete();
-
-private: // Data
-
-    /**
-     * IAD update API.
-     */
-    CIAUpdate* iUpdate;
-
-    /**
-     * IAD update parameters.
-     */
-    CIAUpdateParameters* iParameters;
-
-    /**
-     * Reference to view utility.
-     */
-    MMPXViewUtility& iViewUtility;
-
-    };
-
-#endif // CMPXVIDEOPLAYERIADUPDATE_H
-
--- a/videoplayerapp/mpxvideoplayer/sis/VideoPlayer.pkg	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/sis/VideoPlayer.pkg	Wed Oct 13 14:34:36 2010 +0300
@@ -20,10 +20,10 @@
 &EN
 
 ; Header
-#{"Video Player"},(0x200159B2),9,21,35, TYPE=SA, RU
+#{"Video Player"},(0x200159B2),9,20,29, TYPE=SA, RU
 
-; Supports S60 v5.2
-[0x20022E6D], 0, 0, 0, {"Series60ProductID"}
+; Supports Series 60 v5.0
+;[0x1028315F], 0, 0, 0, {"Series60ProductID"}
 
 ; Localised Vendor name
 %{"Nokia"}
--- a/videoplayerapp/mpxvideoplayer/sis/VideoPlayer_stub.pkg	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/sis/VideoPlayer_stub.pkg	Wed Oct 13 14:34:36 2010 +0300
@@ -20,7 +20,7 @@
 &EN
 
 ;Header
-#{"Video Player"},(0x200159B2),9,21,35, TYPE=SA
+#{"Video Player"},(0x200159B2),9,20,29, TYPE=SA
 
 ;Localised Vendor name
 %{"Nokia"}
--- a/videoplayerapp/mpxvideoplayer/sis/depends.xml	Wed Sep 15 12:15:24 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ad:metadata xmlns="http://nokia.com/arrow/repository/ia_component"
-  xmlns:ad="http://nokia.com/arrow/application_metadata">
-  <appResources>
-    <appResource>
-      <language>1</language>
-      <iacName>Videos</iacName>
-      <iacDescription>Update package for Videos</iacDescription>
-    </appResource>
-  </appResources>
-  <swPlatformDep>
-    <platform>S60</platform>
-    <versionFrom>
-      <major>5</major>
-      <minor>2</minor>
-      <date>
-        <year>2010</year>
-        <week>1</week>
-      </date>
-    </versionFrom>
-    <versionTo>
-      <major>5</major>
-      <minor>2</minor>
-      <date>
-        <year>2020</year>
-        <week>1</week>
-      </date>
-    </versionTo>
-  </swPlatformDep>
-  <interDeps>
-  </interDeps>
-</ad:metadata>
--- a/videoplayerapp/mpxvideoplayer/sis/make_videoplayer_sisx.bat	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/sis/make_videoplayer_sisx.bat	Wed Oct 13 14:34:36 2010 +0300
@@ -16,10 +16,10 @@
 
 
 call makesis.exe cenrep.pkg cenrep.sis 
-call signsis.exe cenrep.sis cenrep.sisx \Nokia_RnDCert_02.der \Nokia_RnDCert_02.key
+call signsis.exe cenrep.sis cenrep.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
 call del cenrep.sis
 
 call makesis.exe VideoPlayer.pkg VideoPlayer.sis
-call signsis.exe VideoPlayer.sis VideoPlayer.sisx \Nokia_RnDCert_02.der \Nokia_RnDCert_02.key
+call signsis.exe VideoPlayer.sis VideoPlayer.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
 call del VideoPlayer.sis
 call del cenrep.sisx
--- a/videoplayerapp/mpxvideoplayer/src/mpxvideoplayerappuiengine.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/src/mpxvideoplayerappuiengine.cpp	Wed Oct 13 14:34:36 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 73 %
+// Version : %version: da1mmcf#72 %
 
 
 #include <eikon.hrh>
@@ -52,7 +52,6 @@
 #include <mpxvideoplaybackdefs.h>
 #include "mpxvideo_debug.h"
 #include "mpxvideoplayercustomviewmsgconsts.h"
-#include "mpxvideoplayeriadupdate.h"
 
 const TInt KMpxPlaybackPluginTypeUid = 0x101FFCA0;
 
@@ -205,12 +204,6 @@
 {
     MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUiEngine::~CMpxVideoPlayerAppUiEngine()"));
 
-    if ( iIadUpdate )
-    {
-        delete iIadUpdate;
-        iIadUpdate = NULL;
-    }
-
     if ( iConstructTimer )
     {
         delete iConstructTimer;
@@ -1186,24 +1179,7 @@
 
     iConstructTimer->Cancel();
 
-    DoCheckForUpdatesL();
-
     PlaybackUtilityL();
 }
 
-// ---------------------------------------------------------------------------
-//   Checks for updates via IAD
-// ---------------------------------------------------------------------------
-// 
-void CMpxVideoPlayerAppUiEngine::DoCheckForUpdatesL()
-    {
-    MPX_ENTER_EXIT(_L("CMpxVideoPlayerAppUiEngine::DoCheckForUpdatesL()"));
-
-    if ( !iIadUpdate )
-        {
-        iIadUpdate = CMpxVideoPlayerIadUpdate::NewL( *iViewUtility );
-        }
-    iIadUpdate->StartL();
-    }
-
 // EOF
--- a/videoplayerapp/mpxvideoplayer/src/mpxvideoplayeriadupdate.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-/*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:    IAD update handling.
-*
-*/
-
-
-// Version : %version: 1 %
-
-#include <iaupdate.h>
-#include <iaupdateparameters.h>
-#include <iaupdateresult.h>
-#include <featmgr.h>
-#include <mpxviewutility.h>
-
-#include "mpxvideoplayeriadupdate.h"
-#include "mpxvideoplayerconstants.h"
-#include "mpxvideo_debug.h"
-
-const TUid KIadParamUid = { 0x200159B2 }; // Uid of VideoPlayer.sis
-_LIT( KIadParamExec, "mpxvideoplayer.exe" );
-
-
-// --------------------------------------------------------------------------
-// Two-phased constructor.
-// --------------------------------------------------------------------------
-//
-CMpxVideoPlayerIadUpdate* CMpxVideoPlayerIadUpdate::NewL( MMPXViewUtility& aViewUtility )
-    {
-    CMpxVideoPlayerIadUpdate* self = new( ELeave ) CMpxVideoPlayerIadUpdate( aViewUtility );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// --------------------------------------------------------------------------
-// C++ default constructor can NOT contain any code, that might leave.
-// --------------------------------------------------------------------------
-//
-CMpxVideoPlayerIadUpdate::CMpxVideoPlayerIadUpdate( MMPXViewUtility& aViewUtility )
-  : iUpdate( NULL ), iParameters( NULL ), iViewUtility( aViewUtility )
-    {
-    // None
-    }
-
-// -----------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CMpxVideoPlayerIadUpdate::ConstructL()
-    {
-    MPX_ENTER_EXIT( _L("CMpxVideoPlayerIadUpdate::ConstructL()") );
-
-    if( FeatureManager::FeatureSupported( KFeatureIdIAUpdate ) )
-        {
-        iUpdate = CIAUpdate::NewL( *this );
-        iParameters = CIAUpdateParameters::NewL();
-        }
-    else
-        {
-        MPX_DEBUG(_L("CMpxVideoPlayerIadUpdate::ConstructL(), Feature not supported"));
-        }
-    }
-
-// --------------------------------------------------------------------------
-// Destructor
-// --------------------------------------------------------------------------
-//
-CMpxVideoPlayerIadUpdate::~CMpxVideoPlayerIadUpdate()
-    {
-    Delete();
-    }
-
-// --------------------------------------------------------------------------
-// Starts update process.
-// --------------------------------------------------------------------------
-//
-void CMpxVideoPlayerIadUpdate::StartL()
-    {
-    MPX_ENTER_EXIT( _L("CMpxVideoPlayerIadUpdate::StartL()") );
-
-    if( iUpdate && iParameters )
-        {
-        iParameters->SetUid( KIadParamUid );
-        // We want Videos to be started after update is finished
-        iParameters->SetCommandLineExecutableL( KIadParamExec );
-        iParameters->SetShowProgress( EFalse );
-    
-        // Check the updates
-        iUpdate->CheckUpdates( *iParameters );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//  
-void CMpxVideoPlayerIadUpdate::CheckUpdatesComplete( TInt aErrorCode, TInt aAvailableUpdates )
-    {
-    MPX_ENTER_EXIT( _L("CMpxVideoPlayerIadUpdate::CheckUpdatesComplete()"), 
-        _L("aErrorCode: %d, aAvailableUpdates: %d"), aErrorCode, aAvailableUpdates );
-
-    if ( aErrorCode == KErrNone )
-        {
-        if ( aAvailableUpdates > 0 && iViewUtility.ActiveViewType() == KUidMyVideosViewType )
-            {
-            // There were some updates available and video list is active.
-            iUpdate->UpdateQuery();
-            }
-        else
-            {
-            // No updates available or playback ongoing.
-            Delete();
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//  
-void CMpxVideoPlayerIadUpdate::UpdateComplete( TInt aErrorCode, CIAUpdateResult* aResult )
-    {
-    MPX_ENTER_EXIT( _L("CMpxVideoPlayerIadUpdate::UpdateComplete()"), 
-        _L("aErrorCode: %d, SuccessCount: %d"), aErrorCode, aResult->SuccessCount() );
-
-    delete aResult; // Ownership was transferred, so this must be deleted by the client
-
-    // We do not need the client-server session anymore
-    Delete();
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//  
-void CMpxVideoPlayerIadUpdate::UpdateQueryComplete( TInt aErrorCode, TBool aUpdateNow )
-    {
-    MPX_ENTER_EXIT( _L("CMpxVideoPlayerIadUpdate::UpdateQueryComplete()"),
-        _L("aErrorCode: %d, aUpdateNow: %d"), aErrorCode, aUpdateNow );
-
-    if ( aErrorCode == KErrNone )
-        {
-        if ( aUpdateNow )
-            {
-            // User choosed to update now, so let's launch the IAUpdate UI.
-            iUpdate->ShowUpdates( *iParameters );
-            }
-        else
-            {
-            // The answer was 'Later'. 
-            Delete();
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// 
-// -----------------------------------------------------------------------------
-//  
-void CMpxVideoPlayerIadUpdate::Delete()
-    {
-    if ( iUpdate )
-        {
-        delete iUpdate;
-        iUpdate = NULL;
-        }
-    if ( iParameters )
-        {
-        delete iParameters; 
-        iParameters = NULL;
-        }
-    }
-
--- a/videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/group/mpxvideoplayertest.mmp	Wed Sep 15 12:15:24 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/group/mpxvideoplayertest.mmp	Wed Oct 13 14:34:36 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: ou1cpsw#12 %
+// Version : %version: ou1cpsw#11 %
 
 
 #include <platform_paths.hrh>
@@ -48,7 +48,6 @@
 SOURCE          stifutilities.cpp
 SOURCE          coneutils_stub.cpp
 SOURCE          timeoutcontroller.cpp
-SOURCE          mpxvideoplayeriadupdate_stub.cpp
 
 SOURCEPATH      ../../../src
 SOURCE          mpxvideoplayerappuiengine.cpp
--- a/videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/inc/mpxvideoplayeriadupdate_stub.h	Wed Sep 15 12:15:24 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:    IAD update handling.
-* 
-*/
-
-
-// Version : %version: 1 %
-
-
-#ifndef CMPXVIDEOPLAYERIADUPDATE_H
-#define CMPXVIDEOPLAYERIADUPDATE_H
-
-#include <e32std.h>
-
-class MMPXViewUtility;
-
-
-/**
- * This class handles IAD update.
- */
-NONSHARABLE_CLASS( CMpxVideoPlayerIadUpdate ) : public CBase
-    {
-
-public: // Constructors and destructor
-
-    /**
-     * Two-phased constructor.
-     * @param aViewUtility Reference to view utility
-     */
-    static CMpxVideoPlayerIadUpdate* NewL( MMPXViewUtility& aViewUtility );
-
-    /**
-     * Destructor.
-     */
-    virtual ~CMpxVideoPlayerIadUpdate();
-   
-public: // New methods
-
-    /**
-     * Start IAD update process.
-     */
-    void StartL();
-
-private: // Constructors and destructor
-
-    /**
-     * C++ default constructor.
-     * @param aViewUtility Reference to view utility
-     */
-    CMpxVideoPlayerIadUpdate( MMPXViewUtility& aViewUtility );
-
-    /**
-    * By default Symbian 2nd phase constructor is private.
-    */
-    void ConstructL();
-    
-private: // Data
-
-    /**
-     * Reference to view utility.
-     */
-    MMPXViewUtility& iViewUtility;
-
-    };
-
-#endif // CMPXVIDEOPLAYERIADUPDATE_H
-
--- a/videoplayerapp/mpxvideoplayer/tsrc/ut_mpxvideoplayertest/src/mpxvideoplayeriadupdate_stub.cpp	Wed Sep 15 12:15:24 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:    IAD update handling.
-*
-*/
-
-
-// Version : %version: 1 %
-
-#include <mpxviewutility.h>
-
-#include "mpxvideoplayeriadupdate_stub.h"
-
-
-// --------------------------------------------------------------------------
-// Two-phased constructor.
-// --------------------------------------------------------------------------
-//
-CMpxVideoPlayerIadUpdate* CMpxVideoPlayerIadUpdate::NewL( MMPXViewUtility& aViewUtility )
-    {
-    CMpxVideoPlayerIadUpdate* self = new( ELeave ) CMpxVideoPlayerIadUpdate( aViewUtility );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// --------------------------------------------------------------------------
-// C++ default constructor can NOT contain any code, that might leave.
-// --------------------------------------------------------------------------
-//
-CMpxVideoPlayerIadUpdate::CMpxVideoPlayerIadUpdate( MMPXViewUtility& aViewUtility )
-  : iViewUtility( aViewUtility )
-    {
-    // None
-    }
-
-// ---------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave.
-// ---------------------------------------------------------------------------
-//
-void CMpxVideoPlayerIadUpdate::ConstructL()
-    {
-    }
-
-// --------------------------------------------------------------------------
-// Destructor
-// --------------------------------------------------------------------------
-//
-CMpxVideoPlayerIadUpdate::~CMpxVideoPlayerIadUpdate()
-    {
-    }
-
-// --------------------------------------------------------------------------
-// Starts update process.
-// --------------------------------------------------------------------------
-//
-void CMpxVideoPlayerIadUpdate::StartL()
-    {
-    }
-