Revision: 201023 RCL_3 PDK_3.0.1
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 21 Jun 2010 15:43:03 +0300
branchRCL_3
changeset 18 baf439b22ddd
parent 16 67eb01668b0e
child 20 2d690156cf8f
Revision: 201023 Kit: 2010125
videocollection/hgmyvideos/data/vcxhgmyvideos.rss
videocollection/hgmyvideos/inc/vcxhgmyvideos.hrh
videocollection/hgmyvideos/inc/vcxhgmyvideosvideolistimpl.h
videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp
videocollection/hgmyvideos/src/vcxhgmyvideoscollectionclient.cpp
videocollection/hgmyvideos/src/vcxhgmyvideosmainview.cpp
videocollection/hgmyvideos/src/vcxhgmyvideosvideocopier.cpp
videocollection/hgmyvideos/src/vcxhgmyvideosvideolistimpl.cpp
videocollection/hgmyvideos/src/vcxhgmyvideosvideomodelhandler.cpp
videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbum.h
videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbums.h
videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionplugin.h
videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionutil.h
videocollection/mpxmyvideoscollection/inc/vcxmyvideosmdsdb.h
videocollection/mpxmyvideoscollection/inc/vcxmyvideosvideocache.h
videocollection/mpxmyvideoscollection/src/vcxmyvideosalbum.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideosalbums.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideoscategories.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionplugin.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionutil.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideosmdsdb.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideosmessagelist.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideosopenhandler.cpp
videocollection/mpxmyvideoscollection/src/vcxmyvideosvideocache.cpp
videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/inc/VcxMyVideosMdsDbTest.h
videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/src/VcxMyVideosMdsDbTestBlocks.cpp
videoplayback/inc/mpxvideobaseplaybackview.h
videoplayback/videohelix/inc/mpxvideoplaybackmode.h
videoplayback/videohelix/inc/mpxvideoplaybackstate.h
videoplayback/videohelix/src/mpxvideoplaybackmode.cpp
videoplayback/videohelix/src/mpxvideoplaybackstate.cpp
videoplayback/videohelix/src/mpxvideoseeker.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolconfiguration.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackprogressbar.cpp
videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp
videoplayback/videoplaybackviews/src/mpxvideobaseplaybackview.cpp
videoplayback/videoplaybackviews/src/mpxvideopdlplaybackview.cpp
videoplayback/videoplaybackviews/src/mpxvideoplaybackview.cpp
videoplayerapp/mpxvideoplayer/sis/VideoPlayer.pkg
videoplayerapp/mpxvideoplayer/sis/VideoPlayer_stub.pkg
--- a/videocollection/hgmyvideos/data/vcxhgmyvideos.rss	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/data/vcxhgmyvideos.rss	Mon Jun 21 15:43:03 2010 +0300
@@ -102,11 +102,6 @@
             flags = EEikMenuItemSpecific;
             },
         MENU_ITEM 
-            {
-            command = EVcxHgMyVideosCmdDeleteMarked;
-            txt = qtn_iptv_delete_video_clip;
-            },
-        MENU_ITEM 
             { 
             command = EVcxHgMyVideosCmdVideoDetails;
             txt = qtn_iptv_video_details;
@@ -118,22 +113,12 @@
             txt = qtn_iptv_copy_submenu;
             flags = EEikMenuItemSpecific;
             },
-        MENU_ITEM 
-            { 
-            command = EVcxHgMyVideosCmdCopyMarked;
-            txt = qtn_iptv_copy_submenu;
-            },
         MENU_ITEM
             {
             command = EVcxHgMyVideosCmdMove; 
             txt = qtn_iptv_move_submenu;
             flags = EEikMenuItemSpecific;
             },    
-        MENU_ITEM
-            {
-            command = EVcxHgMyVideosCmdMoveMarked;
-            txt = qtn_iptv_move_submenu;
-            },
         MENU_ITEM 
             { 
             command = EVcxHgMyVideosCmdShowViaHomenet;
@@ -170,13 +155,6 @@
             txt = qtn_vcx_hg_options_use_video_as;
             flags = EEikMenuItemSpecificListQuery;
             },
-#else
-        MENU_ITEM
-            {
-            command = EVcxHgMyVideosCmdMarkContext;
-            txt = qtn_options_list_mark_one;
-            flags = EEikMenuItemSpecific;
-            },
 #endif
         MENU_ITEM 
             { 
@@ -232,6 +210,14 @@
   {
   items =
       {
+#ifndef RD_VIDEO_AS_RINGING_TONE            
+    MENU_ITEM
+         {
+         command = EVcxHgMyVideosCmdMarkContext;
+         txt = qtn_options_list_mark_one;
+         flags = EEikMenuItemSpecific;
+         },
+#endif            
       MENU_ITEM
           {
           command = EVcxHgMyVideosCmdToggleMultipleMarking;
--- a/videocollection/hgmyvideos/inc/vcxhgmyvideos.hrh	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/inc/vcxhgmyvideos.hrh	Mon Jun 21 15:43:03 2010 +0300
@@ -25,7 +25,6 @@
     EVcxHgMyVideosCmdPlay = 700,             // Play video
     EVcxHgMyVideosCmdOpen,                   // Open video view
     EVcxHgMyVideosCmdDelete,                 // Delete video
-    EVcxHgMyVideosCmdDeleteMarked,           // Delete video
     EVcxHgMyVideosCmdVideoDetails,           // Video details
     EVcxHgMyVideosCmdShowViaHomenet,         // Show video via Homenet (UPnP renderer)
     EVcxHgMyVideosCmdStopShowViaHomenet,     // Stop show via Homenet
@@ -35,9 +34,7 @@
     EVcxHgMyVideosCmdSortByName,             // Sort submenu: Sort by name
     EVcxHgMyVideosCmdSortBySize,             // Sort submenu: Sort by size
     EVcxHgMyVideosCmdCopy,                   // Copy video(s)
-    EVcxHgMyVideosCmdCopyMarked,             // Copy video(s)
     EVcxHgMyVideosCmdMove,                   // Move video(s)
-    EVcxHgMyVideosCmdMoveMarked,             // Move video(s)
     EVcxHgMyVideosCmdMarkUnmarkSubMenu,      // Mark or unmark videos sub-menu
     EVcxHgMyVideosCmdMark,                   // Mark/Unmark submenu: Mark video
     EVcxHgMyVideosCmdUnmark,                 // Mark/Unmark submenu: Unmark video 
@@ -51,7 +48,6 @@
     EVcxHgMyVideosCmdExit,                   // Exit Video Storage
     EVcxHgMyVideosCmdToggleMultipleMarking,  // Toggle marking mode state
     EVcxHgMyVideosCmdSend,                   // Send video
-    EVcxHgMyVideosCmdSendMarked,             // Send video
     EVcxHgMyVideosCmdNothing,                // Non-functional command
     EVcxHgMyVideosCmdStartMarking,           // Sets marking mode on
     EVcxHgMyVideosCmdStopMarking,             // Sets marking mode off
--- a/videocollection/hgmyvideos/inc/vcxhgmyvideosvideolistimpl.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/inc/vcxhgmyvideosvideolistimpl.h	Mon Jun 21 15:43:03 2010 +0300
@@ -388,14 +388,11 @@
                                         RArray<TInt>& operationTargetIds );
 
         /**
-         * Add "Send" menu item to menus
+         * Add "Send" menu item to menu.
          *
          * @param aMenuPane Add the menu item to this menu pane
-         * @param aAddToOptions If true, also add to Options menu. If false, only add to context menu.
          */
-        void AddSendItemToMenuPaneL(
-                CEikMenuPane* aMenuPane,
-                TBool aAddToOptions );
+        void AddSendItemToMenuPaneL( CEikMenuPane* aMenuPane );
 
         /**
          * Handles dynamic initialisation of Move, Copy and Delete menu items
--- a/videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -631,6 +631,7 @@
             if (  ret == KErrNone &&
                   id1 == aMpxItemId.iId1 )
                 {
+                ClearLastWatchedIconL();
                 UpdateCategoryListItemL( ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) );
 				iScroller.RefreshScreen( ResolveCategoryArrayIndexById( KCategoryIdLastWatched ) );
 				}
--- a/videocollection/hgmyvideos/src/vcxhgmyvideoscollectionclient.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideoscollectionclient.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -195,6 +195,7 @@
         if ( iCollectionLevel == KVcxMpxLevelVideos )
             {
             iCollectionUtility->Collection().BackL();
+            iCollectionLevel = KErrNotFound;
             }
         }
     }
@@ -215,6 +216,7 @@
     if ( iCollectionLevel == KVcxMpxLevelCategories )
         {    
         iCollectionUtility->Collection().OpenL( aIndex );
+        iCollectionLevel = KErrNotFound;
         }
     else if ( iCollectionLevel == KVcxMpxLevelVideos )
         {
--- a/videocollection/hgmyvideos/src/vcxhgmyvideosmainview.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosmainview.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -15,7 +15,7 @@
 */
 
 
-// Version : %version: 46 %
+// Version : %version: 47 %
 
 // INCLUDE FILES
 #include <bldvariant.hrh>
@@ -380,8 +380,7 @@
                 }
             }
             break;
-        case EVcxHgMyVideosCmdDelete: // Fall through
-        case EVcxHgMyVideosCmdDeleteMarked:
+        case EVcxHgMyVideosCmdDelete:
             {
             if ( iModel->AppState() == CVcxHgMyVideosModel::EVcxMyVideosAppStateVideoIdle )
                 {
@@ -427,20 +426,16 @@
             }
             break;
         case EVcxHgMyVideosCmdCopy:
-        case EVcxHgMyVideosCmdMove: // Fall through
-        case EVcxHgMyVideosCmdCopyMarked: // Fall through
-        case EVcxHgMyVideosCmdMoveMarked: // Fall through
+        case EVcxHgMyVideosCmdMove:
             {
             if ( iModel->AppState() == CVcxHgMyVideosModel::EVcxMyVideosAppStateVideoIdle )
                 {
-                VideoListL()->HandleMoveOrCopyCommandL(
-                        aCommand == EVcxHgMyVideosCmdCopy || aCommand == EVcxHgMyVideosCmdCopyMarked ?
-                        ETrue : EFalse );
+                VideoListL()->HandleMoveOrCopyCommandL( aCommand == EVcxHgMyVideosCmdCopy ?
+                                                        ETrue : EFalse );
                 }
             }
             break;
-        case EVcxHgMyVideosCmdSend: // Fall through
-        case EVcxHgMyVideosCmdSendMarked:
+        case EVcxHgMyVideosCmdSend:
             {
             Cba()->DrawDeferred();
             VideoListL()->HandleSendL();
@@ -596,26 +591,22 @@
 void CVcxHgMyVideosMainView::DynInitMenuPaneL( TInt aResourceId,
                                                CEikMenuPane* aMenuPane )
     {
+  
     if ( aResourceId == R_VCXHGMYVIDEOS_MAINVIEW_MENU )
         {
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdDelete, ETrue );
-        aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdDeleteMarked, ETrue );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdSortSubMenu, ETrue );        
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdVideoDetails, ETrue );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdStopShowViaHomenet, ETrue );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdShowViaHomenet, ETrue );
 #ifdef RD_VIDEO_AS_RINGING_TONE
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdAiwAssign, ETrue );
-#else
-        aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMarkContext, ETrue );
 #endif
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdOpen, ETrue );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdPlay, ETrue );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMemoryStatus, ETrue );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdCopy, ETrue );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMove, ETrue );
-        aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdCopyMarked, ETrue );
-        aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMoveMarked, ETrue );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMarkUnmarkSubMenu, ETrue);
                 
         if ( iModel->AppState() == CVcxHgMyVideosModel::EVcxMyVideosAppStateCategoryIdle )
@@ -700,6 +691,9 @@
                 showMarkAll,
                 showUnmarkAll );
 
+#ifndef RD_VIDEO_AS_RINGING_TONE
+        aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMarkContext, ! showStartMarking  );
+#endif
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdToggleMultipleMarking, ! showStartMarking );        
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMarkAll, ! showMarkAll );
         aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdUnmarkAll, ! showUnmarkAll );
--- a/videocollection/hgmyvideos/src/vcxhgmyvideosvideocopier.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosvideocopier.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -181,7 +181,7 @@
         }
     if ( iModel.DriveMonitorL().MemoryCardDrive() != KErrNotFound )
         {
-        includedMedias |= AknCommonDialogsDynMem::EMemoryTypeMMCExternal;
+        includedMedias |= AknCommonDialogsDynMem::EMemoryTypeMMCExternalInDevice;
         }
     if ( iModel.DriveMonitorL().FixedDrive( EFalse ) == EDriveC )
         {
--- a/videocollection/hgmyvideos/src/vcxhgmyvideosvideolistimpl.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosvideolistimpl.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -729,7 +729,7 @@
             // Send item
             if ( highlight >= 0 || videosMarked )
                 {
-                AddSendItemToMenuPaneL( aMenuPane, videosMarked );
+                AddSendItemToMenuPaneL( aMenuPane );
                 }
 
 #ifdef RD_VIDEO_AS_RINGING_TONE
@@ -743,9 +743,6 @@
                 // Hide Assign (use as) menu item
                 aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdAiwAssign, ETrue );
                 }
-#else
-            // Context sensitive Mark
-            aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMarkContext, IsMarking() );
 #endif
 
             // Marking submenu
@@ -787,7 +784,7 @@
             }
         CleanupStack::PopAndDestroy( &operationTargets );
         }
-#endif
+#endif    
     }
 
 // -----------------------------------------------------------------------------
@@ -1059,9 +1056,8 @@
 // CVcxHgMyVideosVideoListImpl::AddSendItemToMenuPaneL()
 // ---------------------------------------------------------------------------
 //
-void CVcxHgMyVideosVideoListImpl::AddSendItemToMenuPaneL(
-        CEikMenuPane* aMenuPane,
-        TBool aAddToOptions )
+void CVcxHgMyVideosVideoListImpl::AddSendItemToMenuPaneL( 
+        CEikMenuPane* aMenuPane )
     {
     IPTVLOGSTRING_LOW_LEVEL( "CVcxHgMyVideosVideoListImpl::AddSendItemToMenuPaneL() enter" );
     // Get total size of the videos that we're about to send
@@ -1101,17 +1097,6 @@
         // The Send item also needs to be flagged as a list query.
         CEikMenuPaneItem::SData& itemData = aMenuPane->ItemData( EVcxHgMyVideosCmdSend );
         itemData.iFlags |= EEikMenuItemSpecificListQuery;
-
-        // Add Send to Options menu
-        if ( aAddToOptions )
-            {
-            SendUiL()->AddSendMenuItemL(
-                    *aMenuPane,
-                    sendItemIndex,
-                    EVcxHgMyVideosCmdSendMarked,
-                    capabilities );
-            aMenuPane->SetItemSpecific( EVcxHgMyVideosCmdSendMarked, EFalse );
-            }
         }
     CleanupStack::PopAndDestroy( &operationTargets );
     IPTVLOGSTRING_LOW_LEVEL( "CVcxHgMyVideosVideoListImpl::AddSendItemToMenuPaneL() return" );
@@ -1149,9 +1134,6 @@
     aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdCopy, !showCopy );
     aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMove, !showMove );
     aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdDelete, !showDelete );
-    aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdCopyMarked, !showCopy || !aItemsMarked );
-    aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdMoveMarked, !showMove || !aItemsMarked );
-    aMenuPane->SetItemDimmed( EVcxHgMyVideosCmdDeleteMarked, !showDelete || !aItemsMarked );
 
     CleanupStack::PopAndDestroy( &operationTargets );
     }
--- a/videocollection/hgmyvideos/src/vcxhgmyvideosvideomodelhandler.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosvideomodelhandler.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -1061,7 +1061,9 @@
         }
     else
         {
+        ResizeScrollerL( videoCount );
         iVideoListImpl.SetEmptyListTextByResourceL( R_VCXHGMYVIDEOS_NO_VIDEOS );
+        iScroller.Reset();
         iScroller.DrawDeferred();
         }        
     iView.DynInitMskL();
--- a/videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbum.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbum.h	Mon Jun 21 15:43:03 2010 +0300
@@ -177,11 +177,9 @@
      * Calculates KVcxMediaMyVideosCategoryItemCount, KVcxMediaMyVideosCategoryNewItemCount,
      * KVcxMediaMyVideosCategoryNewItemName and KMPXMediaGeneralDate attributes to iMedia.
      * 
-     * @param aStartIndex  Start position of the calculations in iVideoList.
-     *                     Can be used to update values when items are appended
-     *                     to old list, without calculating everything from scratch.
+     * @return Returns ETrue if album attributes were modified, EFalse otherwise.
      */
-    void CalculateAttributesL( TInt aStartIndex = 0 );
+    TBool CalculateAttributesL();
     
 private:
 
--- a/videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbums.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbums.h	Mon Jun 21 15:43:03 2010 +0300
@@ -160,8 +160,13 @@
 
         /**
          * 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.
          */
-        void CalculateAttributesL();
+        TBool CalculateAttributesL();
         
         /**
          * Called when video's New Video flag changes. Calculates
--- a/videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionplugin.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionplugin.h	Mon Jun 21 15:43:03 2010 +0300
@@ -199,13 +199,13 @@
         * From MVcxMyVideosMdsDbObserver.
         */
         void HandleMyVideosDbEvent( TMPXChangeEventType aEvent,
-                RArray<TUint32>& aId );
+                RArray<TUint32>& aId, TInt aEventsLeft );
 
         /**
         * Leaving version of HandleMyVideosDbEvent.
         */
         void DoHandleMyVideosDbEventL( TMPXChangeEventType aEvent,
-                RArray<TUint32>& aId );
+                RArray<TUint32>& aId, TInt aEventsLeft );
                 
         /**
         * From MVcxMyVideosMdsDbObserver.
--- a/videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionutil.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionutil.h	Mon Jun 21 15:43:03 2010 +0300
@@ -252,6 +252,30 @@
         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.
          * 
--- a/videocollection/mpxmyvideoscollection/inc/vcxmyvideosmdsdb.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideosmdsdb.h	Mon Jun 21 15:43:03 2010 +0300
@@ -61,10 +61,11 @@
         /**
         * Handler function for database events.
         *
-        * @param aEvent Event type.
-        * @param aId    Array of IDs in database.
+        * @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 ) = 0;
+        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
@@ -275,6 +276,14 @@
         ERemoveAlbums
         };
     
+    class TEvent
+        {
+    public:
+        
+        TUint32 iMdsId;
+        TInt    iEventType;
+        };
+    
     /**
      * Two-phased constructor.
      * @param aObserver The db change observer.
@@ -356,6 +365,11 @@
      */
     CMPXMedia* CreateVideoL( TUint32 aId, TBool aFullDetails = ETrue );
 
+    /**
+     * Called by iEventProcessor.
+     */
+    static TInt ProcessEvents( TAny* aPtr );
+    
 protected:
     
 // from MMdESessionObserver
@@ -548,6 +562,11 @@
     */
     CMdESession& MdsSessionL();
     
+    /**
+     * Called by ProcessEvents.
+     */
+    TInt DoProcessEvents();
+    
 public:
 
     /**
@@ -767,6 +786,15 @@
     */
     CVcxMdsShutdownMonitor* iMdsShutdownMonitor;
 
+    /**
+     * Used for handling events on background.
+     */
+    CIdle* iEventProcessor;
+    
+    /**
+     * Incoming events are stored here and "slowly" fed to observer.
+     */
+    RArray<TEvent> iEvents;
     };
 
 #endif // VCXMYVIDEOSMDSDB_H
--- a/videocollection/mpxmyvideoscollection/inc/vcxmyvideosvideocache.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideosvideocache.h	Mon Jun 21 15:43:03 2010 +0300
@@ -295,10 +295,12 @@
         *
         * @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 );
+        TInt AddL( CMPXMedia* aVideo, TVcxMyVideosSortingOrder aSortingOrder,
+                TBool aUpdateCategories = ETrue );
         
         /**
         * Adds video to iPartialVideoList. Ownership moves.
@@ -413,9 +415,10 @@
         * @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 );
+                RArray<TUint32>* aNonVideoIds = NULL, TBool aUpdateCategories = ETrue );
 
         /**
         * Deletes old and creates new iVideoList. After the function call iVideoList exists,
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideosalbum.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosalbum.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -292,7 +292,7 @@
 // CVcxMyVideosAlbum::CalculateAttributesL
 // ---------------------------------------------------------------------------
 //
-void CVcxMyVideosAlbum::CalculateAttributesL( TInt aStartIndex )
+TBool CVcxMyVideosAlbum::CalculateAttributesL()
     {
     TInt videoCount = 0;
     TUint32 count = iVideoList.Count();
@@ -303,7 +303,7 @@
     TUint32 flags;
     TInt64 currentItemsCreationDate = 0;
     TInt64 latestCreationDate = TVcxMyVideosCollectionUtil::CreationDateL( *iMedia );
-    for ( TInt i = aStartIndex; i < count; i++ )
+    for ( TInt i = 0; i < count; i++ )
         {
         video = iCollection.iCache->FindVideoByMdsIdL( iVideoList[i].iMdsId, pos );
         if ( video )
@@ -322,13 +322,36 @@
                 }
             }
         }
-    iMedia->SetTObjectValueL<TUint32>( KVcxMediaMyVideosCategoryItemCount, videoCount );
-    iMedia->SetTObjectValueL<TUint32>( KVcxMediaMyVideosCategoryNewItemCount, newCount );
+    
+    TBool modified = EFalse;
+    
+    TUint32 prevValue = TVcxMyVideosCollectionUtil::CategoryItemCountL( *iMedia );
+    if ( prevValue != videoCount )
+        {
+        iMedia->SetTObjectValueL<TUint32>( KVcxMediaMyVideosCategoryItemCount, videoCount );
+        modified = ETrue;
+        }
+
+    prevValue = TVcxMyVideosCollectionUtil::CategoryNewItemCountL( *iMedia );
+    if ( prevValue != newCount )
+        {
+        iMedia->SetTObjectValueL<TUint32>( KVcxMediaMyVideosCategoryNewItemCount, newCount );
+        modified = ETrue;
+        }
+    
     if ( latestNewVideo )
         {
-        iMedia->SetTextValueL( KVcxMediaMyVideosCategoryNewItemName,
-                TVcxMyVideosCollectionUtil::Title( *latestNewVideo ) );
+        TPtrC prevNewVideoName( TVcxMyVideosCollectionUtil::CategoryNewVideoName( *iMedia ) );
+        TPtrC latestNewVideoName( TVcxMyVideosCollectionUtil::Title( *latestNewVideo ) );
+        if ( prevNewVideoName != latestNewVideoName )
+            {
+            iMedia->SetTextValueL( KVcxMediaMyVideosCategoryNewItemName,
+                    TVcxMyVideosCollectionUtil::Title( *latestNewVideo ) );
+            iMedia->SetTObjectValueL<TInt64>( KMPXMediaGeneralDate, latestCreationDate );    
+            modified = ETrue;
+            }
         }
-    iMedia->SetTObjectValueL<TInt64>( KMPXMediaGeneralDate, latestCreationDate );
+    
+    return modified;
     }
 
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideosalbums.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosalbums.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -351,13 +351,23 @@
 // CVcxMyVideosAlbums::CalculateAttributesL
 // ----------------------------------------------------------------------------
 //
-void CVcxMyVideosAlbums::CalculateAttributesL()
+TBool CVcxMyVideosAlbums::CalculateAttributesL()
     {
+    TBool eventsAdded = EFalse;
+    TBool modified    = EFalse;
     TInt count = iAlbums.Count();
     for ( TInt i = 0; i < count; i++ )
         {
-        iAlbums[i]->CalculateAttributesL();
+        modified = iAlbums[i]->CalculateAttributesL();
+        if ( modified )
+            {
+            iCollection.iMessageList->AddEventL(
+                    TMPXItemId( iAlbums[i]->iMdsId, KVcxMvcMediaTypeAlbum ),
+                    EMPXItemModified, 0 );
+            eventsAdded = ETrue;
+            }     
         }
+    return eventsAdded;
     }
 
 // ----------------------------------------------------------------------------
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideoscategories.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideoscategories.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -551,7 +551,7 @@
             return KVcxMyVideosCapturedCategoryIndex;
                             
         case EVcxMyVideosOriginDownloaded:
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_DOWNLOADS_CATEGORY
             return KVcxMyVideosDownloadsCategoryIndex;
 #endif
         case EVcxMyVideosOriginTvRecording:
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionplugin.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionplugin.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -100,7 +100,7 @@
     MPX_FUNC("CVcxMyVideosCollectionPlugin::ConstructL");
     
     User::LeaveIfError( iFs.Connect() );
-#ifdef VIDEO_COLLECTION_PLUGIN_TB92        
+#ifndef VCX_ALBUMS        
     iMyVideosMdsDb = CVcxMyVideosMdsDb::NewL( this, iFs );    
 #else
     iMyVideosMdsDb = CVcxMyVideosMdsDb::NewL( this, iFs, &AlbumsL() );
@@ -403,9 +403,10 @@
 //
 void CVcxMyVideosCollectionPlugin::HandleMyVideosDbEvent(
         TMPXChangeEventType aEvent,
-        RArray<TUint32>& aId )
+        RArray<TUint32>& aId,
+        TInt aEventsLeft )
     {
-    TRAPD( err, DoHandleMyVideosDbEventL( aEvent, aId ));
+    TRAPD( err, DoHandleMyVideosDbEventL( aEvent, aId, aEventsLeft ));
     if ( err != KErrNone )
         {
         MPX_DEBUG2("CVcxMyVideosCollectionPlugin::DoHandleMyVideosDbEventL() leaved with error code: %d", err);
@@ -418,7 +419,8 @@
 //
 void CVcxMyVideosCollectionPlugin::DoHandleMyVideosDbEventL(
         TMPXChangeEventType aEvent,
-        RArray<TUint32>& aId )
+        RArray<TUint32>& aId,
+        TInt /*aEventsLeft*/ )
     {
     MPX_FUNC("CVcxMyVideosCollectionPlugin::DoHandleMyVideosDbEventL");
     
@@ -433,9 +435,14 @@
             MPX_DEBUG1("CVcxMyVideosCollectionPlugin::DoHandleMyVideosDbEventL() --------------------------------------------.");
             MPX_DEBUG1("CVcxMyVideosCollectionPlugin::DoHandleMyVideosDbEventL() Items from MDS deleted, deleting from cache |" );
             MPX_DEBUG1("CVcxMyVideosCollectionPlugin::DoHandleMyVideosDbEventL() --------------------------------------------'");
-                        
-            iCache->RemoveL( aId );
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+
+            iCache->RemoveL( aId, EFalse );
+            
+            CategoriesL().ResetVideoCountersL();
+            CategoriesL().UpdateCategoriesL( *iCache->iVideoList, 0 );
+            CategoriesL().UpdateCategoriesNewVideoNamesL();
+            
+#ifdef VCX_ALBUMS 
             AlbumsL().RemoveAlbumsL( aId );
 #endif
             }
@@ -460,9 +467,14 @@
             // We receive add events for all object types. When fetching the item from MDS we use
             // video condition and only video objects are added to cache. Items which were detected
             // to not be videos are added to nonVideoIds.
-            iCache->AddVideosFromMdsL( aId, videoListFetchingWasCancelled, &nonVideoIds );
+            iCache->AddVideosFromMdsL( aId, videoListFetchingWasCancelled,
+                    &nonVideoIds, EFalse /* dont update categories*/ );
 
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+            CategoriesL().ResetVideoCountersL();
+            CategoriesL().UpdateCategoriesL( *iCache->iVideoList, 0 );
+            CategoriesL().UpdateCategoriesNewVideoNamesL();
+            
+#ifdef VCX_ALBUMS
 #if 0 //TODO: do this if we want to support albums which are being added by someone else than My Videos Collection
             
             //After the call nonVideoIds will contain only items which were actually added
@@ -485,7 +497,7 @@
             MPX_DEBUG1("CVcxMyVideosCollectionPlugin::DoHandleMyVideosDbEventL() Items modified in MDS, updating cache |");
             MPX_DEBUG1("CVcxMyVideosCollectionPlugin::DoHandleMyVideosDbEventL() --------------------------------------'");
             CMPXMedia* video;
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_ALBUMS
             CMPXMedia* album;
 #endif
             TInt count = aId.Count();
@@ -501,7 +513,7 @@
                     }
                 else
                     {
-#ifdef VIDEO_COLLECTION_PLUGIN_TB92
+#ifndef VCX_ALBUMS
                     MPX_DEBUG1("CVcxMyVideosCollectionPlugin:: couldn't find the modified item from MDS");
                     aId.Remove( i );
 #else
@@ -545,7 +557,7 @@
                 }
             }
 
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_ALBUMS
     //nonVideoIds are albums
     count = nonVideoIds.Count();
     for ( TInt i = 0; i < count; i++ )
@@ -709,6 +721,7 @@
                     SetTransactionIdL( cmd, *message );
                             
                     iMessageList->AddL( message );
+                    CleanupStack::Pop( message );            //  <-3
                     iMessageList->SendL();
 
                     if ( videoListFetchingWasCancelled )
@@ -717,7 +730,6 @@
                         RestartVideoListFetchingL();
                         }
 
-                    CleanupStack::Pop( message );            //  <-3
                     CleanupStack::PopAndDestroy( &mdsIds2 ); //  <-2
                     CleanupStack::PopAndDestroy( &mdsIds );  //  <-1
                         
@@ -964,7 +976,7 @@
     ids.Reset();
     CleanupClosePushL( ids ); // 1->
     ids.AppendL( mpxId.iId1 );
-    HandleMyVideosDbEvent( EMPXItemInserted, ids ); //this will fetch from mds to cache
+    HandleMyVideosDbEvent( EMPXItemInserted, ids, 0 ); //this will fetch from mds to cache
     CleanupStack::PopAndDestroy( &ids ); // <-1
     }
 
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionutil.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionutil.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -254,7 +254,7 @@
     if ( aVideo.IsSupported( KVcxMediaMyVideosOrigin ) )
         {
         origin = aVideo.ValueTObjectL<TUint8>( KVcxMediaMyVideosOrigin );                
-#ifdef VIDEO_COLLECTION_PLUGIN_TB92
+#ifndef VCX_DOWNLOADS_CATEGORY
         if ( origin != EVcxMyVideosOriginCapturedWithCamera )
             {
             origin = EVcxMyVideosOriginOther;
@@ -542,6 +542,52 @@
     }
 
 // ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CategoryItemCountL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::CategoryItemCountL( CMPXMedia& aVideo )
+    {
+    TUint32 categoryItemCount = 0;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosCategoryItemCount ) )
+        {
+        categoryItemCount = aVideo.ValueTObjectL<TUint32>( KVcxMediaMyVideosCategoryItemCount );                
+        }
+    return categoryItemCount;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CategoryNewItemCountL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::CategoryNewItemCountL( CMPXMedia& aVideo )
+    {
+    TUint32 categoryNewItemCount = 0;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosCategoryNewItemCount ) )
+        {
+        categoryNewItemCount = aVideo.ValueTObjectL<TUint32>( KVcxMediaMyVideosCategoryNewItemCount );                
+        }
+    return categoryNewItemCount;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CategoryNewVideoName
+// ----------------------------------------------------------------------------
+//
+const TDesC& TVcxMyVideosCollectionUtil::CategoryNewVideoName( const CMPXMedia& aVideo )
+    {                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosCategoryNewItemName ) )
+        {
+        return aVideo.ValueText( KVcxMediaMyVideosCategoryNewItemName );
+        }
+    else
+        {
+        return KNullDesC;
+        }
+    }
+
+// ----------------------------------------------------------------------------
 // TVcxMyVideosCollectionUtil::GetIdsFromMediaArrayL
 // ----------------------------------------------------------------------------
 //
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideosmdsdb.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosmdsdb.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -191,6 +191,8 @@
 
     iMdsShutdownMonitor = CVcxMdsShutdownMonitor::NewL(
             *this, KHarvesterPSShutdown, KMdSShutdown, EFalse );
+    
+    iEvents.Reset();
 
     MPX_DEBUG1( "CVcxMyVideosMdsDb::ConstructL exit" );
     }
@@ -256,7 +258,7 @@
         TBool aPresent, const RArray<TItemId>& aObjectIdArray)
     {
     MPX_DEBUG1( "CVcxMyVideosMdsDb::--------------------------------------------------------------." );
-    MPX_DEBUG3( "CVcxMyVideosMdsDb::HandleObjectPresentNotification( aPresent = %1d, count = %3d) |", aPresent, aObjectIdArray.Count() );
+    MPX_DEBUG3( "CVcxMyVideosMdsDb::HandleObjectPresentNotification( aPresent = %1d, count = %4d) |", aPresent, aObjectIdArray.Count() );
     MPX_DEBUG1( "CVcxMyVideosMdsDb::--------------------------------------------------------------'" );
 
     TObserverNotificationType type;
@@ -305,6 +307,9 @@
     {
     MPX_DEBUG1( "CVcxMyVideosMdsDb::~CVcxMyVideosMdsDb() start" );
 
+    delete iEventProcessor;
+    iEvents.Close();
+
     Cancel( EGetVideoList );
 
     delete iAlbums;
@@ -1026,7 +1031,7 @@
     if ( aObject.Property( *iOriginPropertyDef, property, 0 ) != KErrNotFound )
         {
         TUint8 origin = static_cast<CMdEUint8Property*>(property)->Value();
-#ifdef VIDEO_COLLECTION_PLUGIN_TB92
+#ifndef VCX_DOWNLOADS_CATEGORY
         if( origin != EVcxMyVideosOriginCapturedWithCamera )
             {
             origin = EVcxMyVideosOriginOther;
@@ -1604,30 +1609,116 @@
 
     if ( iMdsDbObserver )
         {
-        RArray<TUint32> idArray;
-        CleanupClosePushL( idArray ); // 1->
-
-        for ( TInt i = 0; i < aObjectIdArray.Count(); i++ )
+        // Let delete events bypass buffer only if it empty.
+        // This assures that event arriving order stays the same.
+        if ( aType & ENotifyRemove && iEvents.Count() == 0 )
             {
-            idArray.Append( aObjectIdArray[i] );
+            // Delete handling is so fast that we dont buffer them at all.
+            // Modify and add require fetch from mds -> they are slow.
+            RArray<TUint32> idArray;
+            CleanupClosePushL( idArray ); // 1->
+    
+            for ( TInt i = 0; i < aObjectIdArray.Count(); i++ )
+                {
+                idArray.Append( aObjectIdArray[i] );
+                }
+                 
+            iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemDeleted, idArray, iEvents.Count() );
+    
+            CleanupStack::PopAndDestroy( &idArray ); // <-1
             }
-            
-        if ( aType & ENotifyAdd )
+        else
             {
-            iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemInserted, idArray );
-            }        
-	    else if ( aType & ENotifyModify )
-	        {
-            iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemModified, idArray );
-	        }	    
-	    else if ( aType & ENotifyRemove )
-	        {
-            iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemDeleted, idArray );
-	        }
+            // Buffer modify & add events, since their handling is slow.
+            // Process them on background.
+            TInt count = aObjectIdArray.Count();
+            
+            if ( iEvents.Count() == 0 )
+                {
+                iEvents.ReserveL( count );
+                }
+            
+            TEvent event;
+            for ( TInt i = 0; i < count; i++ )
+                {
+                event.iMdsId     = aObjectIdArray[i];
+                event.iEventType = aType;
+                iEvents.AppendL( event );
+                }
+        
+            if ( !iEventProcessor )
+                {
+                iEventProcessor = CIdle::NewL( CActive::EPriorityIdle );
+                }
+        
+            if ( !iEventProcessor->IsActive() )
+                {
+                iEventProcessor->Start( TCallBack( ProcessEvents, this ));
+                }
+            }
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::ProcessEvents
+// ---------------------------------------------------------------------------
+//
+TInt CVcxMyVideosMdsDb::ProcessEvents( TAny* aPtr )
+    {
+    return static_cast<CVcxMyVideosMdsDb*>(aPtr)->DoProcessEvents();
+    }
 
-        CleanupStack::PopAndDestroy( &idArray ); // <-1
+// ---------------------------------------------------------------------------
+// CVcxMyVideosMdsDb::DoProcessEvents
+// ---------------------------------------------------------------------------
+//
+TInt CVcxMyVideosMdsDb::DoProcessEvents()
+    {
+    TInt sent             = 0;
+    TInt currentEventType = -1;
+    const TInt sendAtOnce = 10;
+
+    RArray<TUint32> idArray;
+    CleanupClosePushL( idArray ); // 1->
+
+    idArray.Reserve( sendAtOnce ); // may fail, it's ok
+    
+    while ( sent < sendAtOnce )
+        {
+        if ( iEvents.Count() == 0 )
+            {
+            break;
+            }
+        
+        if ( iEvents[0].iEventType != currentEventType &&
+                currentEventType != -1 )
+            {
+            break;
+            }
+        currentEventType = iEvents[0].iEventType;
+        idArray.Append( iEvents[0].iMdsId ); // this may fail, it is ok, we can't do anything for it
+        iEvents.Remove( 0 );
+        sent++;           
         }
-            
+
+    iEvents.Compress();
+    
+    if ( currentEventType & ENotifyAdd )
+        {
+        iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemInserted, idArray, iEvents.Count() );
+        }        
+    else if ( currentEventType & ENotifyModify )
+        {
+        iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemModified, idArray, iEvents.Count() );
+        }       
+    else if ( currentEventType & ENotifyRemove )
+        {
+        iMdsDbObserver->HandleMyVideosDbEvent( EMPXItemDeleted, idArray, iEvents.Count() );
+        }
+
+    CleanupStack::PopAndDestroy( &idArray ); // <-1
+    
+    return iEvents.Count();
     }
 
 // ---------------------------------------------------------------------------
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideosmessagelist.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosmessagelist.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -139,6 +139,11 @@
 
     iMessageCount++;
     iMessageList->SetTObjectValueL<TInt>( KMPXMessageArrayCount, iMessageCount );
+    
+    if ( iMessageArray->Count() > 100 )
+        {
+        SendL();
+        }
     }
 
 // ----------------------------------------------------------------------------------------------------------
@@ -277,10 +282,9 @@
 #endif
 
     CreateMessageListL(); //does nothing if already created
-    iMessageArray->AppendL( aMessage ); // ownership moves
     iMessageCount++;
     iMessageList->SetTObjectValueL<TInt>( KMPXMessageArrayCount, iMessageCount );
-
+    iMessageArray->AppendL( aMessage ); // ownership moves
     }
 
 // ----------------------------------------------------------------------------------------------------------
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideosopenhandler.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosopenhandler.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -126,7 +126,7 @@
             {
             //we are at root level, return main level items (categories + albums)
 
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92            
+#ifdef VCX_ALBUMS             
             iCollection.AlbumsL().CreateAlbumListL(); //async
 #endif
 
@@ -146,7 +146,7 @@
                 !iCache.IsComplete() );
                 
             TVcxMyVideosCollectionUtil::AppendToListL( *itemList, *iCollection.CategoriesL().iList );
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_ALBUMS
             TVcxMyVideosCollectionUtil::AppendToListL( *itemList, *iCollection.AlbumsL().iAlbumList );
 #endif
             itemList->SetCObjectValueL( KMPXMediaGeneralContainerPath, iPath );
@@ -160,7 +160,7 @@
             {
             //we are at second level, return video list from some category or album
 
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_ALBUMS
             iCollection.AlbumsL().CreateAlbumListL(); //async
 #endif
 
@@ -390,7 +390,7 @@
 
         iCollection.CategoriesL().UpdateCategoriesNewVideoNamesL();
 
-        iCollection.AlbumsL().CalculateAttributesL();
+        iCollection.AlbumsL().CalculateAttributesL(); // adds events if attributes modified, does not send
         
         iCollection.iMessageList->AddEventL( KVcxMessageMyVideosListComplete );
         }
@@ -526,13 +526,13 @@
 
         MPX_DEBUG3("CVcxMyVideosOpenHandler:: adding modify event for album %d, extra info = %d",
                 aAlbumId, EVcxMyVideosVideoListOrderChanged );
-        iCollection.iMessageList->AddEventL( TMPXItemId( aAlbumId, 2 ), EMPXItemModified,
+        iCollection.iMessageList->AddEventL( TMPXItemId( aAlbumId, KVcxMvcMediaTypeAlbum ), EMPXItemModified,
                 EVcxMyVideosVideoListOrderChanged );
         }
     else
         {
         //TODO: should add album id
-        iCollection.AlbumsL().CalculateAttributesL();
+        iCollection.AlbumsL().CalculateAttributesL(); // adds events if attributes modified, does not send
 
         iCollection.iMessageList->AddEventL( KVcxMessageMyVideosListComplete );
 
--- a/videocollection/mpxmyvideoscollection/src/vcxmyvideosvideocache.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosvideocache.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -512,7 +512,7 @@
 // ----------------------------------------------------------------------------
 //    
 void CVcxMyVideosVideoCache::AddVideosFromMdsL( RArray<TUint32>& aMdsIds,
-        TBool& aListFetchingWasCanceled, RArray<TUint32>* aNonVideoIds  )
+        TBool& aListFetchingWasCanceled, RArray<TUint32>* aNonVideoIds, TBool aUpdateCategories  )
     {
     MPX_FUNC("CVcxMyVideosVideoCache::AddVideosFromMdsL");
 
@@ -547,7 +547,7 @@
                 {
                 CleanupStack::PushL( videoToCache ); // 1->
 
-                TInt err = AddL( videoToCache, sortingOrder );
+                TInt err = AddL( videoToCache, sortingOrder, aUpdateCategories );
                 
                 if ( err == KErrNone )
                     {
@@ -584,7 +584,8 @@
 // This is for single adds, video list fetching does not call this.
 // ----------------------------------------------------------------------------
 //
-TInt CVcxMyVideosVideoCache::AddL( CMPXMedia* aVideo, TVcxMyVideosSortingOrder aSortingOrder )
+TInt CVcxMyVideosVideoCache::AddL( CMPXMedia* aVideo, TVcxMyVideosSortingOrder aSortingOrder,
+        TBool aUpdateCategories )
     {
     MPX_FUNC("CVcxMyVideosVideoCache::AddL");
     
@@ -596,7 +597,7 @@
     else
         {
         MPX_DEBUG1("CVcxMyVideosVideoCache:: iVideoList is complete, adding to iVideoList");
-        return AddToCorrectPlaceL( *aVideo, aSortingOrder );
+        return AddToCorrectPlaceL( *aVideo, aSortingOrder, aUpdateCategories );
         }
     }
 
@@ -945,7 +946,7 @@
                         origin,
                         modified );
 
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_ALBUMS
                 iCollection.AlbumsL().NewVideoFlagChangedL(
                         TVcxMyVideosCollectionUtil::IdL( *videoInCache ).iId1 );
 #endif
@@ -1190,7 +1191,7 @@
     iCollection.CategoriesL().UpdateCategoryNewVideoNameAndDateL(
             *aVideoInCache, modified );
 
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_ALBUMS 
     iCollection.AlbumsL().VideoTitleChangedL(
             TVcxMyVideosCollectionUtil::IdL( *aVideoInCache ).iId1 );
 #endif
@@ -1501,7 +1502,7 @@
     if ( aUpdateCategories )
         {
         iCollection.CategoriesL().VideoAddedL( aVideo );
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_ALBUMS
         iCollection.AlbumsL().VideoAddedOrRemovedFromCacheL( aVideo );
 #endif
         }
@@ -1561,7 +1562,7 @@
             pos != KErrNotFound /* no need to update if item is on iPartialVideoList*/ )
         {
         iCollection.CategoriesL().VideoRemovedL( *video );
-#ifndef VIDEO_COLLECTION_PLUGIN_TB92
+#ifdef VCX_ALBUMS
         iCollection.AlbumsL().VideoAddedOrRemovedFromCacheL( *video );
 #endif
         }
--- a/videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/inc/VcxMyVideosMdsDbTest.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/inc/VcxMyVideosMdsDbTest.h	Mon Jun 21 15:43:03 2010 +0300
@@ -109,7 +109,7 @@
         * @param aEvent Event type.
         * @param aId    Array of IDs in database.
         */
-        void HandleMyVideosDbEvent( TMPXChangeEventType aEvent, RArray<TUint32>& aId );
+        void HandleMyVideosDbEvent( TMPXChangeEventType aEvent, RArray<TUint32>& aId, TInt aEventsLeft  );
 
         /**
         * Handler function for list fetching events. This callback is called as a response
--- a/videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/src/VcxMyVideosMdsDbTestBlocks.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/src/VcxMyVideosMdsDbTestBlocks.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: 6 %
+// Version : %version: 7 %
 
 // [INCLUDE FILES] - do not remove
 #include <e32svr.h>
@@ -472,7 +472,7 @@
     mdsoperationleaves  = NextIntOrZero( aItem );
     }
 
-void CVcxMyVideosMdsDbTest::HandleMyVideosDbEvent( TMPXChangeEventType , RArray<TUint32>&  )
+void CVcxMyVideosMdsDbTest::HandleMyVideosDbEvent( TMPXChangeEventType , RArray<TUint32>&, TInt )
     {
     if ( handledbeventleave )
         {
--- a/videoplayback/inc/mpxvideobaseplaybackview.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/inc/mpxvideobaseplaybackview.h	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 23 %
+// Version : %version: 24 %
 
 
 // This file defines the API for VideoBasePlaybackView.dll
@@ -309,7 +309,7 @@
 
         void SetDisplayWindowL();
 
-        void CreateGeneralPlaybackCommandL( TMPXPlaybackCommand aCmd );
+        void CreateGeneralPlaybackCommandL( TMPXPlaybackCommand aCmd, TBool aDoSync = ETrue );
 
         void SetVideoRectL();
 
@@ -387,6 +387,8 @@
         TBool                               iKeyboardInFocus;
 
         HBufC*                              iClipName;
+        
+        TBool                               iSyncClose;
 };
 
 #endif  // __VIDEOBASEPLAYBACKVIEW_H__
--- a/videoplayback/videohelix/inc/mpxvideoplaybackmode.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videohelix/inc/mpxvideoplaybackmode.h	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 19 %
+// Version : %version: 20 %
 
 
 #ifndef _CMPXVIDEOPLAYBACKMODE_H_
@@ -29,7 +29,7 @@
 #include <e32base.h>
 
 #include "mpxhelixplaybackplugindefs.h"
-#ifdef USE_S60_DOWNLOAD_MANAGER 
+#ifdef USE_S60_DOWNLOAD_MANAGER
 #include "mpxvideodlmgrif.h"
 #endif
 #include "mpxvideo_debug.h"
@@ -76,6 +76,8 @@
         virtual void OpenFileL( const RFile& aMediaFile );
         virtual void HandleSetPosterFrame();
         virtual void HandleFrameReady(TInt aError);
+        virtual TBool SendErrorToView( TInt aError );
+        virtual void HandlePauseToPlayTransitionL();
 
 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
         virtual void OpenFile64L( const RFile64& aMediaFile );
@@ -152,7 +154,8 @@
         // Methods where video plabkack behavior varies for live streaming media
         inline virtual TInt GetMode();
         virtual void HandlePause();
-        virtual void HandleBackground();
+        virtual TBool SendErrorToView( TInt aError );
+        virtual void HandlePauseToPlayTransitionL();
 };
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -168,7 +171,7 @@
         static CMPXVideoPlaybackMode* NewL( CMPXVideoPlaybackController* aVideoPlaybackCtlr );
         virtual ~CMPXProgressiveDLPlaybackMode();
 
-#ifdef USE_S60_DOWNLOAD_MANAGER 
+#ifdef USE_S60_DOWNLOAD_MANAGER
 
         inline virtual TInt GetMode();
         void ConnectToDownloadL( CMPXCommand& aCmd );
@@ -182,19 +185,19 @@
         void OpenFile64L( const RFile64& aMediaFile );
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
 
-#endif // USE_S60_DOWNLOAD_MANAGER 
+#endif // USE_S60_DOWNLOAD_MANAGER
 
     private:
         void ConstructL( CMPXVideoPlaybackController* aVideoPlaybackCtlr );
 
-#ifdef USE_S60_DOWNLOAD_MANAGER 
+#ifdef USE_S60_DOWNLOAD_MANAGER
     private:
-        CMPXVideoDlMgrIf*  iDlMgrIf;   // owned		
-#endif // USE_S60_DOWNLOAD_MANAGER 
+        CMPXVideoDlMgrIf*  iDlMgrIf;   // owned
+#endif // USE_S60_DOWNLOAD_MANAGER
 
 };
 
-#ifdef USE_S60_DOWNLOAD_MANAGER 
+#ifdef USE_S60_DOWNLOAD_MANAGER
 
 inline
 TInt CMPXProgressiveDLPlaybackMode::GetMode()
@@ -209,7 +212,7 @@
     return iDlMgrIf->IsDownloadPaused();
 }
 
-#endif // USE_S60_DOWNLOAD_MANAGER 
+#endif // USE_S60_DOWNLOAD_MANAGER
 
 // INLINE METHODS
 
--- a/videoplayback/videohelix/inc/mpxvideoplaybackstate.h	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videohelix/inc/mpxvideoplaybackstate.h	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 19 %
+// Version : %version: 20 %
 
 
 #ifndef _CMPXVIDEOPLAYBACKSTATE_H_
@@ -120,6 +120,10 @@
         virtual void OpenFile64L( const RFile64& aMediaFile );
 #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
 
+        void IssuePlayCommand( TMPXVideoPlaybackState aState,
+                               MMPXPlaybackPluginObserver::TEvent aEvent,
+                               TBool aSendEvent = ETrue );
+
     protected:
         /*
          *  C++ default constructor
@@ -132,10 +136,6 @@
          */
         void ConstructL(CMPXVideoPlaybackController* aVideoPlaybackCtlr);
 
-        void IssuePlayCommand( TMPXVideoPlaybackState aState,
-                               MMPXPlaybackPluginObserver::TEvent aEvent,
-                               TBool aSendEvent = ETrue );
-
     protected:
         //
         //  Data
@@ -313,9 +313,10 @@
         virtual void HandleStop();
         virtual void HandleStartSeekL( TBool aForward );
         virtual void HandlePlayPause();
-        virtual void HandleSetPosterFrame();        
+        virtual void HandleSetPosterFrame();
         virtual void HandleForeground();
         virtual void HandleCustomPlay();
+        virtual void HandleUnexpectedError( TInt aError );
 
         // general method
         virtual void HandleSetPositionL( TInt aPosition );
@@ -365,6 +366,7 @@
         // general method
         virtual void HandleSetPositionL(TInt aPosition);
         virtual void ResolveTimeoutError( TInt aError );
+        virtual void HandleUnexpectedError( TInt aError );
 
         inline virtual TMPXVideoPlaybackState GetState();
 };
--- a/videoplayback/videohelix/src/mpxvideoplaybackmode.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videohelix/src/mpxvideoplaybackmode.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -12,11 +12,11 @@
 * Contributors:
 *
 * Description:  This class plays local video file
- *
+*
 */
 
 
-// Version : %version: 32 %
+// Version : %version: 33 %
 
 
 //
@@ -25,6 +25,8 @@
 #include <mmf/server/mmffile.h>
 #include <MMFROPCustomCommandConstants.h>
 #include <mpxplaybackpluginobserver.h>
+#include <mpxmessagegeneraldefs.h>
+#include <mpxplaybackmessage.h>
 
 #include <etel.h>    // 3G
 #include <etelmm.h>
@@ -223,7 +225,7 @@
             MPX_TRAPD( err,
                 iVideoPlaybackCtlr->iState->SendErrorToViewL( KMPXVideoCallOngoingError ) );
         }
-        else if ( iVideoPlaybackCtlr->IsKeyLocked() && 
+        else if ( iVideoPlaybackCtlr->IsKeyLocked() &&
                   iVideoPlaybackCtlr->iFileDetails->iVideoEnabled )
         {
             // playback not allowed for the clip having video if keylock is true
@@ -234,6 +236,7 @@
             playAllowed = ETrue;
         }
     }
+
     return playAllowed;
 }
 
@@ -279,7 +282,6 @@
     return networkMode2g;
 }
 
-
 //  ------------------------------------------------------------------------------------------------
 //    CMPXVideoPlaybackMode::HandleSetPosterFrame()
 //  ------------------------------------------------------------------------------------------------
@@ -291,10 +293,32 @@
 //  ------------------------------------------------------------------------------------------------
 //    CMPXVideoPlaybackMode::HandleSetPosterFrame()
 //  ------------------------------------------------------------------------------------------------
-void CMPXVideoPlaybackMode::HandleFrameReady(TInt /*aError*/)
+void CMPXVideoPlaybackMode::HandleFrameReady( TInt /*aError*/ )
+{
+    MPX_DEBUG(_L("CMPXVideoPlaybackMode::HandleFrameReady()"));
+}
+
+//  ------------------------------------------------------------------------------------------------
+//    CMPXVideoPlaybackMode::SendErrorToView()
+//  ------------------------------------------------------------------------------------------------
+TBool CMPXVideoPlaybackMode::SendErrorToView( TInt aError )
 {
-    MPX_DEBUG(_L("CMPXLocalPlaybackMode::HandleFrameReady()"));
+    MPX_DEBUG(_L("CMPXLocalPlaybackMode::SendErrorToView(%d)"), ETrue);
+
+    return ETrue;
 }
+
+//  ------------------------------------------------------------------------------------------------
+//    CMPXVideoPlaybackMode::HandlePauseToPlayTransitionL()
+//  ------------------------------------------------------------------------------------------------
+void CMPXVideoPlaybackMode::HandlePauseToPlayTransitionL()
+{
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackMode::HandlePauseToPlayTransitionL()"));
+
+    iVideoPlaybackCtlr->iState->IssuePlayCommand( EMPXVideoPlaying,
+                                                  MMPXPlaybackPluginObserver::EPPlaying );
+}
+
 //************************************************************************************************//
 //          CMPXLocalPlaybackMode
 //************************************************************************************************//
@@ -429,7 +453,7 @@
             MPX_TRAPD(err,
                       iVideoPlaybackCtlr->iState->SendErrorToViewL( KMPXVideoCallOngoingError ));
         }
-        else if ( iVideoPlaybackCtlr->IsKeyLocked() && 
+        else if ( iVideoPlaybackCtlr->IsKeyLocked() &&
                   iVideoPlaybackCtlr->iFileDetails->iVideoEnabled )
         {
             // playback not allowed for the clip having video if keylock is true
@@ -490,9 +514,11 @@
     }
 }
 
+
 //************************************************************************************************//
 //          CMPXLiveStreamingPlaybackMode
 //************************************************************************************************//
+
 CMPXVideoPlaybackMode*
 CMPXLiveStreamingPlaybackMode::NewL( CMPXVideoPlaybackController* aVideoPlaybackCtlr )
 {
@@ -518,38 +544,84 @@
 {
     MPX_ENTER_EXIT(_L("CMPXLiveStreamingPlaybackMode::HandlePause()"));
 
+    //
+    //  Send a stop command to the player, but change state to pause
+    //  The view will not close and the play button will be the only active button
+    //
     iVideoPlaybackCtlr->iPlayer->Stop();
 
-    iVideoPlaybackCtlr->ChangeState( EMPXVideoStopped );
+    iVideoPlaybackCtlr->ChangeState( EMPXVideoPaused );
 
-    iVideoPlaybackCtlr->iMPXPluginObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPStopped,
+    iVideoPlaybackCtlr->iMPXPluginObs->HandlePluginEvent( MMPXPlaybackPluginObserver::EPPaused,
                                                           0,
                                                           KErrNone );
 }
 
 //  ------------------------------------------------------------------------------------------------
-//    CMPXLiveStreamingPlaybackMode::HandleBackground()
+//    CMPXLiveStreamingPlaybackMode::SendErrorToView()
 //  ------------------------------------------------------------------------------------------------
-void CMPXLiveStreamingPlaybackMode::HandleBackground()
+TBool CMPXLiveStreamingPlaybackMode::SendErrorToView( TInt aError )
 {
-    MPX_DEBUG(_L("CMPXLiveStreamingPlaybackMode::HandleBackground()"));
+    TBool retval = ETrue;
 
-    if ( iVideoPlaybackCtlr->iAppInForeground )
+    if ( aError == KErrSessionClosed )
     {
-        if ( iVideoPlaybackCtlr->IsPhoneCall() ||
-             iVideoPlaybackCtlr->IsVideoCall() ||
-             ( iVideoPlaybackCtlr->IsKeyLocked() &&
-               iVideoPlaybackCtlr->iFileDetails->iVideoEnabled ) )
-        {
-            iVideoPlaybackCtlr->iState->HandlePause();
-        }
+        retval = EFalse;
     }
+
+    MPX_DEBUG(_L("CMPXLiveStreamingPlaybackMode::SendErrorToView(%d)"), retval);
+
+    return retval;
+}
+
+//  ------------------------------------------------------------------------------------------------
+//    CMPXLiveStreamingPlaybackMode::HandlePauseToPlayTransitionL()
+//  ------------------------------------------------------------------------------------------------
+void CMPXLiveStreamingPlaybackMode::HandlePauseToPlayTransitionL()
+{
+    MPX_ENTER_EXIT(_L("CMPXLiveStreamingPlaybackMode::HandlePauseToPlayTransitionL()"));
+
+    //
+    //  For live streaming, the controller must be reinitialized
+    //  Send a state change to Initializing to the view
+    //
+    CMPXMessage* msg = CMPXMessage::NewL();
+    CleanupStack::PushL( msg );
+
+    msg->SetTObjectValueL<TMPXMessageId>( KMPXMessageGeneralId, KMPXMessageGeneral );
+    msg->SetTObjectValueL<TInt>( KMPXMessageGeneralEvent, TMPXPlaybackMessage::EStateChanged );
+    msg->SetTObjectValueL<TInt>( KMPXMessageGeneralType, EPbStateInitialising );
+    msg->SetTObjectValueL<TInt>( KMPXMessageGeneralData, 0 );
+
+    iVideoPlaybackCtlr->iMPXPluginObs->HandlePlaybackMessage( msg, KErrNone );
+
+    CleanupStack::PopAndDestroy( msg );
+
+    iVideoPlaybackCtlr->ChangeState( EMPXVideoInitializing );
+
+    iVideoPlaybackCtlr->iPlayer->Reset();
+
+    //
+    //  Reinitialize the player with the file handle or url
+    //
+    if ( iVideoPlaybackCtlr->iFileHandle.SubSessionHandle() )
+    {
+        iVideoPlaybackCtlr->iPlayer->OpenFileL( iVideoPlaybackCtlr->iFileHandle );
+    }
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+    else if ( iVideoPlaybackCtlr->iFileHandle64.SubSessionHandle() )
+    {
+        iVideoPlaybackCtlr->iPlayer->OpenFile64L( iVideoPlaybackCtlr->iFileHandle64 );
+    }
+#endif
     else
     {
-        iVideoPlaybackCtlr->iState->HandlePause();
+        iVideoPlaybackCtlr->iPlayer->OpenUrlL( iVideoPlaybackCtlr->iClipName->Des(),
+                                               iVideoPlaybackCtlr->iAccessPointId );
     }
 }
 
+
 //************************************************************************************************//
 //          CMPXProgressiveDLPlaybackMode
 //************************************************************************************************//
@@ -569,12 +641,12 @@
 {
     iVideoPlaybackCtlr = aVideoPlaybackCtlr;
 
-#ifdef USE_S60_DOWNLOAD_MANAGER 
+#ifdef USE_S60_DOWNLOAD_MANAGER
     //
     //  Create the Download Mgr Interface
     //
     iDlMgrIf = CMPXVideoDlMgrIf::NewL( iVideoPlaybackCtlr );
-#endif // USE_S60_DOWNLOAD_MANAGER 
+#endif // USE_S60_DOWNLOAD_MANAGER
 
 }
 
@@ -582,17 +654,17 @@
 {
     MPX_DEBUG(_L("CMPXProgressiveDLPlaybackMode::~CMPXProgressiveDLPlaybackMode()"));
 
-#ifdef USE_S60_DOWNLOAD_MANAGER 
+#ifdef USE_S60_DOWNLOAD_MANAGER
     if ( iDlMgrIf )
     {
         delete iDlMgrIf;
         iDlMgrIf = NULL;
     }
-#endif // USE_S60_DOWNLOAD_MANAGER 
+#endif // USE_S60_DOWNLOAD_MANAGER
 
 }
 
-#ifdef USE_S60_DOWNLOAD_MANAGER 
+#ifdef USE_S60_DOWNLOAD_MANAGER
 
 //  ------------------------------------------------------------------------------------------------
 //    CMPXProgressiveDLPlaybackMode::ConnectToDownloadL()
--- a/videoplayback/videohelix/src/mpxvideoplaybackstate.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videohelix/src/mpxvideoplaybackstate.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 44 %
+// Version : %version: 45 %
 
 
 //
@@ -1371,7 +1371,6 @@
     HandlePause();
 }
 
-
 //  ------------------------------------------------------------------------------------------------
 //    CMPXPlayingState::HandleSetPosterFrame()
 //  ------------------------------------------------------------------------------------------------
@@ -1525,7 +1524,7 @@
 
     if ( iVideoPlaybackCtlr->iPlaybackMode->CanPlayNow() )
     {
-        IssuePlayCommand( EMPXVideoPlaying, MMPXPlaybackPluginObserver::EPPlaying );
+        MPX_TRAPD( error, iVideoPlaybackCtlr->iPlaybackMode->HandlePauseToPlayTransitionL() );
     }
 }
 
@@ -1641,6 +1640,21 @@
     }
 }
 
+// -------------------------------------------------------------------------------------------------
+//   CMPXPausedState::HandleUnexpectedError
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXPausedState::HandleUnexpectedError( TInt aError )
+{
+    MPX_ENTER_EXIT(_L("CMPXPausedState::HandleUnexpectedError()"),
+                   _L("aError = %d"), aError );
+
+    if ( iVideoPlaybackCtlr->iPlaybackMode->SendErrorToView( aError ) )
+    {
+        MPX_TRAPD( err, SendErrorToViewL( aError ) );
+    }
+}
+
 // *************************************************************************************************
 //
 //                          CMPXStoppedState
@@ -1728,6 +1742,21 @@
     // Don't handle the error. Already in the stopped state
 }
 
+// -------------------------------------------------------------------------------------------------
+//   CMPXStoppedState::HandleUnexpectedError
+// -------------------------------------------------------------------------------------------------
+//
+void CMPXStoppedState::HandleUnexpectedError( TInt aError )
+{
+    MPX_ENTER_EXIT(_L("CMPXStoppedState::HandleUnexpectedError()"),
+                   _L("aError = %d"), aError );
+
+    if ( iVideoPlaybackCtlr->iPlaybackMode->SendErrorToView( aError ) )
+    {
+        MPX_TRAPD( err, SendErrorToViewL( aError ) );
+    }
+}
+
 // *************************************************************************************************
 //
 //                          CMPXBufferingState
--- a/videoplayback/videohelix/src/mpxvideoseeker.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videohelix/src/mpxvideoseeker.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -15,7 +15,7 @@
  *
 */
 
-// Version : %version: 9 %
+// Version : %version: 10 %
 
 
 // INCLUDE FILES
@@ -37,6 +37,7 @@
 const TInt KDurationB(180000000);         // 180 sec
 const TInt64 KSpeedAIncrements(2000000);  // 2 sec
 const TInt64 KSpeedBIncrements(4000000);  // 4 sec
+const TInt64 KSpeedOffset(3000000);       // 3 sec
 #endif
 
 // ============================ MEMBER FUNCTIONS ===================================================
@@ -311,7 +312,7 @@
         }
         else
         {
-            iIncrements = (TInt)( iDuration / 200 ) + 3;
+            iIncrements = (TInt)( iDuration / 200 ) + KSpeedOffset;
         }
     }
 
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 22 %
+// Version : %version: 23 %
 
 
 // INCLUDE FILES
@@ -71,6 +71,9 @@
     MPX_DEBUG(_L("CMPXVideoPlaybackControl::ConstructL()"));
 
     CreateWindowL();
+
+    Window().SetTransparencyAlphaChannel();
+
     EnableDragEvents();
 
     iEikonEnv->EikAppUi()->AddToStackL( this, ECoeStackPriorityDefault );
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolconfiguration.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolconfiguration.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: e003sa33#14 %
+// Version : %version: 15 %
 
 
 // INCLUDE FILES
@@ -96,7 +96,8 @@
 
     CMPXVideoPlaybackViewFileDetails* fileDetails = iControlsController->FileDetails();
 
-    if ( fileDetails->iPlaybackMode == EMPXVideoStreaming )
+    if ( fileDetails->iPlaybackMode == EMPXVideoStreaming ||
+         fileDetails->iPlaybackMode == EMPXVideoLiveStreaming )
     {
         //
         //  streaming mode, add branding animation control to show while initializing
@@ -218,10 +219,6 @@
 
             break;
         }
-        default:
-        {
-            break;
-        }
     }
 }
 
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackprogressbar.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackprogressbar.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 23 %
+// Version : %version: e003sa33#24 %
 
 
 // INCLUDE FILES
@@ -242,7 +242,7 @@
     iPositionLabel = new (ELeave) CEikLabel;
     AknLayoutUtils::LayoutLabel( iPositionLabel,
                                  progressRect,
-                                 mp4_progress_pane_t1().LayoutLine() ) ;
+                                 mp4_progress_pane_t1( 1 ).LayoutLine() ) ;
 
     iPositionLabel->SetContainerWindowL( *this );
     iPositionLabel->SetTextL( KNullDesC );
@@ -258,7 +258,7 @@
 
     AknLayoutUtils::LayoutLabel( iDurationLabel,
                                  progressRect,
-                                 mp4_progress_pane_t2().LayoutLine() );
+                                 mp4_progress_pane_t2( 1 ).LayoutLine() );
 
     iDurationLabel->SetContainerWindowL( *this );
     iDurationLabel->SetTextL( KNullDesC );
--- a/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 23 %
+// Version : %version: 24 %
 
 
 // INCLUDE FILES
@@ -47,6 +47,8 @@
 const TInt KMPXSliderWidth = 18;
 const TInt KMPXVolumeDragEventTimeOut = 100000;
 const TInt KMPXPtrEventRepeatRequestTime = 200000;
+const TInt KDynamicSliderFeedbackTimeOut = 100000;
+const TInt KDynamicSliderFeedbackIntensity = 100;
 
 using namespace AknLayoutScalable_Apps;
 using namespace AknLayoutScalable_Avkon;
@@ -70,7 +72,7 @@
 //
 void CMPXVideoPlaybackVolumeBar::ConstructL()
 {
-    MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::ConstructL()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::ConstructL()"));
 
     SetLayout();
     SkinChangeL();
@@ -90,8 +92,6 @@
 CMPXVideoPlaybackVolumeBar* CMPXVideoPlaybackVolumeBar::NewL(
     CMPXVideoPlaybackControlsController* aController, TRect aRect )
 {
-    MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::NewL()"));
-
     CMPXVideoPlaybackVolumeBar* self =
         new ( ELeave ) CMPXVideoPlaybackVolumeBar( aController, aRect );
 
@@ -108,7 +108,7 @@
 //
 CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar()
 {
-    MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::~CMPXVideoPlaybackVolumeBar()"));
 
     if ( iDraggingHandlerTimer )
     {
@@ -178,12 +178,11 @@
     }
 
 #ifdef RD_TACTILE_FEEDBACK
-    if (iFeedback)
+    if ( iFeedback )
     {
         iFeedback->RemoveFeedbackForControl(this);
     }
 #endif //RD_TACTILE_FEEDBACK
-
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -192,7 +191,8 @@
 //
 void CMPXVideoPlaybackVolumeBar::HandleResourceChange( TInt aType )
 {
-    MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::HandleResourceChange(0x%X)"), aType);
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleResourceChange()"),
+                   _L("aType = 0x%X"), aType);
 
     if ( aType == KAknsMessageSkinChange )
     {
@@ -208,7 +208,7 @@
 //
 void CMPXVideoPlaybackVolumeBar::SetLayout()
 {
-    MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::SetLayout()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::SetLayout()"));
 
     TAknLayoutRect tmpLayoutRect;
 
@@ -273,7 +273,7 @@
 //
 void CMPXVideoPlaybackVolumeBar::SkinChangeL()
 {
-    MPX_DEBUG(_L("CMPXVideoPlaybackVolumeBar::SkinChangeL()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::SkinChangeL()"));
 
     //
     // Create icons
@@ -287,10 +287,10 @@
     iSpeakerIcon = NULL;
     iSpeakerIcon = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnIndiNsliderUnmuted,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_unmuted,
-		    EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_unmuted_mask );
+            KAknsIIDQgnIndiNsliderUnmuted,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_unmuted,
+            EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_unmuted_mask );
 
     if ( iSpeakerIcon )
     {
@@ -303,10 +303,10 @@
     iSpeakerMuteIcon = NULL;
     iSpeakerMuteIcon = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnIndiNsliderMuted,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_muted,
-		    EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_muted_mask );
+            KAknsIIDQgnIndiNsliderMuted,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_muted,
+            EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_muted_mask );
 
 
     if ( iSpeakerMuteIcon )
@@ -337,10 +337,10 @@
     iSliderIcon = NULL;
     iSliderIcon = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnGrafNsliderVerticalMarker,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_mask );
+            KAknsIIDQgnGrafNsliderVerticalMarker,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_mask );
 
     if ( iSliderIcon )
     {
@@ -353,10 +353,10 @@
     iSliderSelectedIcon = NULL;
     iSliderSelectedIcon = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnGrafNsliderVerticalMarkerSelected,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_selected,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_selected_mask );
+            KAknsIIDQgnGrafNsliderVerticalMarkerSelected,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_selected,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_marker_selected_mask );
 
     if ( iSliderSelectedIcon )
     {
@@ -369,10 +369,10 @@
     iVolumeUpIcon = NULL;
     iVolumeUpIcon = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnIndiCam4ZoomMax,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_increase,
-		    EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_increase_mask );
+            KAknsIIDQgnIndiCam4ZoomMax,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_increase,
+            EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_increase_mask );
 
     if ( iVolumeUpIcon )
     {
@@ -385,10 +385,10 @@
     iVolumeDownIcon = NULL;
     iVolumeDownIcon = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnIndiCam4ZoomMin,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_decrease,
-		    EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_decrease_mask );
+            KAknsIIDQgnIndiCam4ZoomMin,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_decrease,
+            EMbmMpxvideoplaybackcontrolsQgn_indi_nslider_level_decrease_mask );
 
     if ( iVolumeDownIcon )
     {
@@ -401,10 +401,10 @@
     iVolumeFrameIconTop = NULL;
     iVolumeFrameIconTop = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnIndiCam4ZoomTop,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_top,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_top_mask );
+            KAknsIIDQgnIndiCam4ZoomTop,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_top,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_top_mask );
 
     if ( iVolumeFrameIconTop )
     {
@@ -417,10 +417,10 @@
     iVolumeFrameIconMiddle = NULL;
     iVolumeFrameIconMiddle = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnIndiCam4ZoomMiddle,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_middle,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_middle_mask );
+            KAknsIIDQgnIndiCam4ZoomMiddle,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_middle,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_middle_mask );
 
     if ( iVolumeFrameIconMiddle )
     {
@@ -433,10 +433,10 @@
     iVolumeFrameIconBottom = NULL;
     iVolumeFrameIconBottom = AknsUtils::CreateGulIconL(
             skin,
-		    KAknsIIDQgnIndiCam4ZoomBottom,
-		    iconsPath,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_bottom,
-		    EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_bottom_mask );
+            KAknsIIDQgnIndiCam4ZoomBottom,
+            iconsPath,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_bottom,
+            EMbmMpxvideoplaybackcontrolsQgn_graf_nslider_vertical_bottom_mask );
 
     if ( iVolumeFrameIconBottom )
     {
@@ -448,6 +448,7 @@
     // Calculate the X coordinate to center the icon of sliderbar
     TRect volumeBarRectPart;
     CGulIcon* volumeFrameIconPart = NULL;
+
     if ( iVolumeFrameIconTop )
     {
         volumeFrameIconPart = iVolumeFrameIconTop;
@@ -478,7 +479,8 @@
 //
 void CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL( const TPointerEvent& aPointerEvent )
 {
-    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeIncreaseL()"),
+                   _L("aPointerEvent.iType = %d"), aPointerEvent.iType);
 
     switch ( aPointerEvent.iType )
     {
@@ -509,7 +511,6 @@
         case TPointerEvent::EDrag:
         {
             iDragging = EVolumeIncreaseDragging;
-
             break;
         }
         case TPointerEvent::EButton1Up:
@@ -540,7 +541,8 @@
 //
 void CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL( const TPointerEvent& aPointerEvent )
 {
-    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeDecreaseL()"),
+                   _L("aPointerEvent.iType = %d"), aPointerEvent.iType);
 
     switch ( aPointerEvent.iType )
     {
@@ -601,7 +603,8 @@
 //
 void CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL( const TPointerEvent& aPointerEvent )
 {
-    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleSpeakerControlEventL()"),
+                   _L("aPointerEvent.iType = %d"), aPointerEvent.iType);
 
     switch ( aPointerEvent.iType )
     {
@@ -652,10 +655,16 @@
 //
 void CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL( const TPointerEvent& aPointerEvent )
 {
-    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::HandleVolumeBarEventL()"),
+                   _L("aPointerEvent.iType = %d"), aPointerEvent.iType);
 
     TInt vol = 0;
 
+    //
+    //  Dynamic Slider Feedback should only be given when the slider is not at the top or bottom
+    //
+    TBool giveDynamicSliderFeedback = EFalse;
+
     if ( aPointerEvent.iPosition.iY < iVolumeBarRect.iTl.iY + KMPXSliderHeight / 2 )
     {
         vol = KPbPlaybackVolumeLevelMax;
@@ -666,6 +675,8 @@
     }
     else
     {
+        giveDynamicSliderFeedback = ETrue;
+
         vol = ( iVolumeBarRect.iBr.iY - KMPXSliderHeight / 2 - aPointerEvent.iPosition.iY ) /
               iOneVolumeIncrementHeight;
     }
@@ -677,11 +688,7 @@
 #ifdef RD_TACTILE_FEEDBACK
             if ( iFeedback )
             {
-#ifdef SYMBIAN_BUILD_GCE
                 iFeedback->InstantFeedback( ETouchFeedbackSlider );
-#else
-                iFeedback->InstantFeedback( ETouchFeedbackBasic );
-#endif //SYMBIAN_BUILD_GCE
             }
 #endif //RD_TACTILE_FEEDBACK
 
@@ -700,13 +707,13 @@
         case TPointerEvent::EDrag:
         {
 #ifdef RD_TACTILE_FEEDBACK
-            if ( iFeedback )
+            if ( iFeedback && giveDynamicSliderFeedback )
             {
-#ifdef SYMBIAN_BUILD_GCE
-                iFeedback->InstantFeedback( ETouchFeedbackSlider );
-#else
-                iFeedback->InstantFeedback( ETouchFeedbackSensitive );
-#endif //SYMBIAN_BUILD_GCE
+                iFeedback->StartFeedback( this,
+                                          ETouchDynamicSlider,
+                                          &aPointerEvent,
+                                          KDynamicSliderFeedbackIntensity,
+                                          KDynamicSliderFeedbackTimeOut );
             }
 #endif //RD_TACTILE_FEEDBACK
 
@@ -984,7 +991,7 @@
 //
 void CMPXVideoPlaybackVolumeBar::Reset()
 {
-	MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::Reset()"));
+    MPX_ENTER_EXIT(_L("CMPXVideoPlaybackVolumeBar::Reset()"));
 
     if ( iDragging != EVolumeNotDragging )
     {
--- a/videoplayback/videoplaybackviews/src/mpxvideobaseplaybackview.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videoplaybackviews/src/mpxvideobaseplaybackview.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 80 %
+// Version : %version: 82 %
 
 
 //  Include Files
@@ -189,20 +189,20 @@
 //   CMPXVideoBasePlaybackView::CreateGeneralPlaybackCommandL()
 // -------------------------------------------------------------------------------------------------
 //
-void CMPXVideoBasePlaybackView::CreateGeneralPlaybackCommandL( TMPXPlaybackCommand aCmd )
+void CMPXVideoBasePlaybackView::CreateGeneralPlaybackCommandL( TMPXPlaybackCommand aCmd, TBool aDoSync )
 {
     MPX_ENTER_EXIT(_L("CMPXVideoBasePlaybackView::CreateGeneralPlaybackCommandL()"),
-                   _L("aCmd = %d"), aCmd );
+                   _L("aCmd = %d, aDoSync, = %d"), aCmd, aDoSync );
 
     CMPXCommand* cmd = CMPXCommand::NewL();
     CleanupStack::PushL( cmd );
 
-    cmd->SetTObjectValueL<TBool>( KMPXCommandGeneralDoSync, ETrue );
+    cmd->SetTObjectValueL<TBool>( KMPXCommandGeneralDoSync, aDoSync );
     cmd->SetTObjectValueL<TBool>( KMPXCommandPlaybackGeneralNoBuffer, ETrue );
     cmd->SetTObjectValueL<TInt>( KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral );
     cmd->SetTObjectValueL<TInt>( KMPXCommandPlaybackGeneralType, aCmd );
 
-    iPlaybackUtility->CommandL( *cmd );
+    iPlaybackUtility->CommandL( *cmd, this );
 
     CleanupStack::PopAndDestroy( cmd );
 }
@@ -825,7 +825,6 @@
         case TMPXPlaybackMessage::EStateChanged:
         {
             DoHandleStateChangeL( type );
-
             break;
         }
         case TMPXPlaybackMessage::EPropertyChanged:
@@ -1510,6 +1509,8 @@
 //
 void CMPXVideoBasePlaybackView::RetrieveFileNameAndModeL( CMPXCommand* aCmd )
 {
+    MPX_ENTER_EXIT(_L("CMPXVideoBasePlaybackView::RetrieveFileNameAndModeL()"));
+
     //
     //  set attributes on the command
     //
--- a/videoplayback/videoplaybackviews/src/mpxvideopdlplaybackview.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videoplaybackviews/src/mpxvideopdlplaybackview.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 25 %
+// Version : %version: 27 %
 
 
 //  Include Files
@@ -83,6 +83,8 @@
     MPX_ENTER_EXIT(_L("CMPXVideoPdlPlaybackView::ConstructL()"));
 
     InitializeVideoPlaybackViewL();
+	
+    iSyncClose = ETrue;
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -237,7 +239,7 @@
             //  For progressive download mode, this indicates that the file
             //  could not be played until the entire file is downloaded.
             //
-            DisplayErrorMessageL( R_MPX_VIDEO_PDL_WAIT_DL_COMPLETE_MSG );
+            DisplayInfoMessageL( R_MPX_VIDEO_PDL_WAIT_DL_COMPLETE_MSG );
             ClosePlaybackViewWithErrorL();
 
             break;
--- a/videoplayback/videoplaybackviews/src/mpxvideoplaybackview.cpp	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayback/videoplaybackviews/src/mpxvideoplaybackview.cpp	Mon Jun 21 15:43:03 2010 +0300
@@ -16,7 +16,7 @@
 */
 
 
-// Version : %version: 20 %
+// Version : %version: 22 %
 
 
 //  Include Files
@@ -80,6 +80,8 @@
     MPX_ENTER_EXIT(_L("CMPXVideoPlaybackView::ConstructL()"));
 
     InitializeVideoPlaybackViewL();
+
+    iSyncClose = EFalse;
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -149,7 +151,6 @@
             HandleClosePlaybackViewL();
             break;
         }
-
         case KErrMMInvalidProtocol:
         case KErrMMInvalidURL:
         case KErrArgument:
@@ -158,13 +159,9 @@
             HandleClosePlaybackViewL();
             break;
         }
-
         case KErrSessionClosed:
         {
-            if ( iFileDetails->iPlaybackMode != EMPXVideoLiveStreaming )
-            {
-                DisplayErrorMessageL( R_MPX_RESOURCE_LOST );
-            }
+            DisplayErrorMessageL( R_MPX_RESOURCE_LOST );
             HandleClosePlaybackViewL();
             break;
         }
@@ -197,7 +194,6 @@
         default:
         {
             CMPXVideoBasePlaybackView::HandlePluginErrorL( aError );
-
             break;
         }
     }
@@ -235,14 +231,7 @@
     MPX_ENTER_EXIT(_L("CMPXVideoPlaybackView::HandleInitializingStateL()"),
                    _L("aLastState = %d"), aLastState );
 
-    //
-    //  For multi item playlists, reset the container and controls for next
-    //  item in playlist
-    //
-    if ( IsMultiItemPlaylist() )
-    {
-        DoHandleInitializingStateL( aLastState );
-    }
+    DoHandleInitializingStateL( aLastState );
 }
 
 // EOF
--- a/videoplayerapp/mpxvideoplayer/sis/VideoPlayer.pkg	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/sis/VideoPlayer.pkg	Mon Jun 21 15:43:03 2010 +0300
@@ -20,7 +20,7 @@
 &EN
 
 ; Header
-#{"Video Player"},(0x200159B2),9,20,21, TYPE=SA, RU
+#{"Video Player"},(0x200159B2),9,20,23, TYPE=SA, RU
 
 ; Supports Series 60 v5.0
 ;[0x1028315F], 0, 0, 0, {"Series60ProductID"}
--- a/videoplayerapp/mpxvideoplayer/sis/VideoPlayer_stub.pkg	Wed Jun 09 09:44:23 2010 +0300
+++ b/videoplayerapp/mpxvideoplayer/sis/VideoPlayer_stub.pkg	Mon Jun 21 15:43:03 2010 +0300
@@ -20,7 +20,7 @@
 &EN
 
 ;Header
-#{"Video Player"},(0x200159B2),9,20,21, TYPE=SA
+#{"Video Player"},(0x200159B2),9,20,23, TYPE=SA
 
 ;Localised Vendor name
 %{"Nokia"}