# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1277124183 -10800 # Node ID baf439b22ddd99f7e962f1a42cffc14af1d305f5 # Parent 67eb01668b0ed84d17c332aed0dc72fff7b2c733 Revision: 201023 Kit: 2010125 diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/data/vcxhgmyvideos.rss --- 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; diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/inc/vcxhgmyvideos.hrh --- 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 diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/inc/vcxhgmyvideosvideolistimpl.h --- 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& 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 diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/src/vcxhgmyvideoscategorymodelhandler.cpp --- 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 ) ); } diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/src/vcxhgmyvideoscollectionclient.cpp --- 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 ) { diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/src/vcxhgmyvideosmainview.cpp --- 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 @@ -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 ); diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/src/vcxhgmyvideosvideocopier.cpp --- 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 ) { diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/src/vcxhgmyvideosvideolistimpl.cpp --- 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 ); } diff -r 67eb01668b0e -r baf439b22ddd videocollection/hgmyvideos/src/vcxhgmyvideosvideomodelhandler.cpp --- 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(); diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbum.h --- 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: diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbums.h --- 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 diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionplugin.h --- 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& aId ); + RArray& aId, TInt aEventsLeft ); /** * Leaving version of HandleMyVideosDbEvent. */ void DoHandleMyVideosDbEventL( TMPXChangeEventType aEvent, - RArray& aId ); + RArray& aId, TInt aEventsLeft ); /** * From MVcxMyVideosMdsDbObserver. diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/inc/vcxmyvideoscollectionutil.h --- 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. * diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/inc/vcxmyvideosmdsdb.h --- 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& aId ) = 0; + virtual void HandleMyVideosDbEvent( TMPXChangeEventType aEvent, RArray& 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 iEvents; }; #endif // VCXMYVIDEOSMDSDB_H diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/inc/vcxmyvideosvideocache.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& aMdsIds, TBool& aListFetchingWasCanceled, - RArray* aNonVideoIds = NULL ); + RArray* aNonVideoIds = NULL, TBool aUpdateCategories = ETrue ); /** * Deletes old and creates new iVideoList. After the function call iVideoList exists, diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideosalbum.cpp --- 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( KVcxMediaMyVideosCategoryItemCount, videoCount ); - iMedia->SetTObjectValueL( KVcxMediaMyVideosCategoryNewItemCount, newCount ); + + TBool modified = EFalse; + + TUint32 prevValue = TVcxMyVideosCollectionUtil::CategoryItemCountL( *iMedia ); + if ( prevValue != videoCount ) + { + iMedia->SetTObjectValueL( KVcxMediaMyVideosCategoryItemCount, videoCount ); + modified = ETrue; + } + + prevValue = TVcxMyVideosCollectionUtil::CategoryNewItemCountL( *iMedia ); + if ( prevValue != newCount ) + { + iMedia->SetTObjectValueL( 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( KMPXMediaGeneralDate, latestCreationDate ); + modified = ETrue; + } } - iMedia->SetTObjectValueL( KMPXMediaGeneralDate, latestCreationDate ); + + return modified; } diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideosalbums.cpp --- 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; } // ---------------------------------------------------------------------------- diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideoscategories.cpp --- 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: diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionplugin.cpp --- 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& aId ) + RArray& 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& aId ) + RArray& 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 } diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionutil.cpp --- 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( 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( KVcxMediaMyVideosCategoryItemCount ); + } + return categoryItemCount; + } + +// ---------------------------------------------------------------------------- +// TVcxMyVideosCollectionUtil::CategoryNewItemCountL +// ---------------------------------------------------------------------------- +// +TUint32 TVcxMyVideosCollectionUtil::CategoryNewItemCountL( CMPXMedia& aVideo ) + { + TUint32 categoryNewItemCount = 0; + + if ( aVideo.IsSupported( KVcxMediaMyVideosCategoryNewItemCount ) ) + { + categoryNewItemCount = aVideo.ValueTObjectL( 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 // ---------------------------------------------------------------------------- // diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideosmdsdb.cpp --- 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& 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(property)->Value(); -#ifdef VIDEO_COLLECTION_PLUGIN_TB92 +#ifndef VCX_DOWNLOADS_CATEGORY if( origin != EVcxMyVideosOriginCapturedWithCamera ) { origin = EVcxMyVideosOriginOther; @@ -1604,30 +1609,116 @@ if ( iMdsDbObserver ) { - RArray 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 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(aPtr)->DoProcessEvents(); + } - CleanupStack::PopAndDestroy( &idArray ); // <-1 +// --------------------------------------------------------------------------- +// CVcxMyVideosMdsDb::DoProcessEvents +// --------------------------------------------------------------------------- +// +TInt CVcxMyVideosMdsDb::DoProcessEvents() + { + TInt sent = 0; + TInt currentEventType = -1; + const TInt sendAtOnce = 10; + + RArray 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(); } // --------------------------------------------------------------------------- diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideosmessagelist.cpp --- 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( 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( KMPXMessageArrayCount, iMessageCount ); - + iMessageArray->AppendL( aMessage ); // ownership moves } // ---------------------------------------------------------------------------------------------------------- diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideosopenhandler.cpp --- 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 ); diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/src/vcxmyvideosvideocache.cpp --- 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& aMdsIds, - TBool& aListFetchingWasCanceled, RArray* aNonVideoIds ) + TBool& aListFetchingWasCanceled, RArray* 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 } diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/inc/VcxMyVideosMdsDbTest.h --- 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& aId ); + void HandleMyVideosDbEvent( TMPXChangeEventType aEvent, RArray& aId, TInt aEventsLeft ); /** * Handler function for list fetching events. This callback is called as a response diff -r 67eb01668b0e -r baf439b22ddd videocollection/mpxmyvideoscollection/tsrc/ut_vcxmyvideosmdsdb/src/VcxMyVideosMdsDbTestBlocks.cpp --- 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 @@ -472,7 +472,7 @@ mdsoperationleaves = NextIntOrZero( aItem ); } -void CVcxMyVideosMdsDbTest::HandleMyVideosDbEvent( TMPXChangeEventType , RArray& ) +void CVcxMyVideosMdsDbTest::HandleMyVideosDbEvent( TMPXChangeEventType , RArray&, TInt ) { if ( handledbeventleave ) { diff -r 67eb01668b0e -r baf439b22ddd videoplayback/inc/mpxvideobaseplaybackview.h --- 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__ diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videohelix/inc/mpxvideoplaybackmode.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 #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 diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videohelix/inc/mpxvideoplaybackstate.h --- 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(); }; diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videohelix/src/mpxvideoplaybackmode.cpp --- 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 #include #include +#include +#include #include // 3G #include @@ -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( KMPXMessageGeneralId, KMPXMessageGeneral ); + msg->SetTObjectValueL( KMPXMessageGeneralEvent, TMPXPlaybackMessage::EStateChanged ); + msg->SetTObjectValueL( KMPXMessageGeneralType, EPbStateInitialising ); + msg->SetTObjectValueL( 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() diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videohelix/src/mpxvideoplaybackstate.cpp --- 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 diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videohelix/src/mpxvideoseeker.cpp --- 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; } } diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrol.cpp --- 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 ); diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videoplaybackcontrols/src/mpxvideoplaybackcontrolconfiguration.cpp --- 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; - } } } diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videoplaybackcontrols/src/mpxvideoplaybackprogressbar.cpp --- 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 ); diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videoplaybackcontrols/src/mpxvideoplaybackvolumebar.cpp --- 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 ) { diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videoplaybackviews/src/mpxvideobaseplaybackview.cpp --- 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( KMPXCommandGeneralDoSync, ETrue ); + cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, aDoSync ); cmd->SetTObjectValueL( KMPXCommandPlaybackGeneralNoBuffer, ETrue ); cmd->SetTObjectValueL( KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral ); cmd->SetTObjectValueL( 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 // diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videoplaybackviews/src/mpxvideopdlplaybackview.cpp --- 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; diff -r 67eb01668b0e -r baf439b22ddd videoplayback/videoplaybackviews/src/mpxvideoplaybackview.cpp --- 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 diff -r 67eb01668b0e -r baf439b22ddd videoplayerapp/mpxvideoplayer/sis/VideoPlayer.pkg --- 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"} diff -r 67eb01668b0e -r baf439b22ddd videoplayerapp/mpxvideoplayer/sis/VideoPlayer_stub.pkg --- 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"}