mpxplugins/viewplugins/views/commonplaybackview/src/mpxcommonplaybackviewimp.cpp
changeset 1 8118492f1bdf
parent 0 ff3acec5bc43
child 2 b70d77332e66
equal deleted inserted replaced
0:ff3acec5bc43 1:8118492f1bdf
    40 #include <aknclearer.h>
    40 #include <aknclearer.h>
    41 
    41 
    42 
    42 
    43 #include <e32const.h>
    43 #include <e32const.h>
    44 #ifdef UPNP_INCLUDED
    44 #ifdef UPNP_INCLUDED
    45 #include <upnpcopycommand.h> 
    45 #include <upnpcopycommand.h>
    46 #endif
    46 #endif
    47 
    47 
    48 #include <apgcli.h> // For FF_FMTX
    48 #include <apgcli.h> // For FF_FMTX
    49 #include <AknWaitDialog.h>
    49 #include <AknWaitDialog.h>
    50 
    50 
   337 #endif // BACKSTEPPING_INCLUDED
   337 #endif // BACKSTEPPING_INCLUDED
   338 
   338 
   339 #ifdef UPNP_INCLUDED
   339 #ifdef UPNP_INCLUDED
   340     if (!iUpnpCopyCommand )
   340     if (!iUpnpCopyCommand )
   341         {
   341         {
   342    	    MPX_TRAPD ( error, iUpnpCopyCommand = CUpnpCopyCommand::NewL() );   
   342    	    MPX_TRAPD ( error, iUpnpCopyCommand = CUpnpCopyCommand::NewL() );
   343 		    if ( error == KErrNone )
   343 		    if ( error == KErrNone )
   344             {
   344             {
   345             iUpnpFrameworkSupport = ETrue;
   345             iUpnpFrameworkSupport = ETrue;
   346             }
   346             }
   347         else
   347         else
   462     if(iDelayedErrorTimer)
   462     if(iDelayedErrorTimer)
   463     	{
   463     	{
   464     	iDelayedErrorTimer->Cancel();
   464     	iDelayedErrorTimer->Cancel();
   465     	delete iDelayedErrorTimer;
   465     	delete iDelayedErrorTimer;
   466     	}
   466     	}
   467     
   467 
   468     delete iOldUri;
   468     delete iOldUri;
   469     MPX_DEBUG1( "CMPXCommonPlaybackViewImp::~CMPXCommonPlaybackViewImp exiting" );
   469     MPX_DEBUG1( "CMPXCommonPlaybackViewImp::~CMPXCommonPlaybackViewImp exiting" );
   470     }
   470     }
   471 
   471 
   472 // ---------------------------------------------------------------------------
   472 // ---------------------------------------------------------------------------
   730         TInt err( KErrNone );
   730         TInt err( KErrNone );
   731         if ( aMedia && aMedia->IsSupported(KMPXMediaGeneralUri))
   731         if ( aMedia && aMedia->IsSupported(KMPXMediaGeneralUri))
   732             {
   732             {
   733             const TDesC& album = aMedia->ValueText( KMPXMediaGeneralUri );
   733             const TDesC& album = aMedia->ValueText( KMPXMediaGeneralUri );
   734             if(!iOldUri || iOldUri->Compare(album)!= 0)
   734             if(!iOldUri || iOldUri->Compare(album)!= 0)
   735                 {  
   735                 {
   736 
   736 
   737                 TRect albumArtRect(
   737                 TRect albumArtRect(
   738                         iLayout->IndicatorLayout(
   738                         iLayout->IndicatorLayout(
   739                                 ClientRect(), EAlbumArtArea ) );
   739                                 ClientRect(), EAlbumArtArea ) );
   740 
   740 
   744                     *iContainer,
   744                     *iContainer,
   745                     albumArtRect.Size() ); );
   745                     albumArtRect.Size() ); );
   746                 delete iOldUri;
   746                 delete iOldUri;
   747                 iOldUri = NULL;
   747                 iOldUri = NULL;
   748                 iOldUri=album.AllocL();
   748                 iOldUri=album.AllocL();
   749                 } 
   749                 }
   750             }
   750             }
   751 
   751 
   752         if (KErrNone != err )
   752         if (KErrNone != err )
   753             {
   753             {
   754             // If error, show default album art
   754             // If error, show default album art
  1219         iMedia = CMPXMedia::NewL( aMedia );
  1219         iMedia = CMPXMedia::NewL( aMedia );
  1220 
  1220 
  1221         UpdateTrackPosInPlaylistL();
  1221         UpdateTrackPosInPlaylistL();
  1222         UpdateTrackInfoL( iMedia );
  1222         UpdateTrackInfoL( iMedia );
  1223         UpdateAlbumArtL( iMedia );
  1223         UpdateAlbumArtL( iMedia );
  1224         
  1224 
  1225 
  1225 
  1226         // Update duration if previously not available
  1226         // Update duration if previously not available
  1227         if ( iMedia->IsSupported( KMPXMediaGeneralDuration ) )
  1227         if ( iMedia->IsSupported( KMPXMediaGeneralDuration ) )
  1228             {
  1228             {
  1229             iDuration = iMedia->ValueTObjectL<TInt>( KMPXMediaGeneralDuration ) /
  1229             iDuration = iMedia->ValueTObjectL<TInt>( KMPXMediaGeneralDuration ) /
  1283                 }
  1283                 }
  1284             }
  1284             }
  1285         }
  1285         }
  1286     else
  1286     else
  1287         {
  1287         {
  1288         
  1288 
  1289 #ifndef CAMESE_IN_DRM_UTILITY		
  1289 #ifndef CAMESE_IN_DRM_UTILITY
  1290         // Check if Camese Support is enabled and
  1290         // Check if Camese Support is enabled and
  1291         // if the error is caused by PV being unable
  1291         // if the error is caused by PV being unable
  1292         // to retrieve media properties before handling
  1292         // to retrieve media properties before handling
  1293         // the error here.
  1293         // the error here.
  1294         if (iCameseSuperDistSupport && aError == KErrPermissionDenied)
  1294         if (iCameseSuperDistSupport && aError == KErrPermissionDenied)
  1430             )
  1430             )
  1431             {
  1431             {
  1432             iIgnoredByUsbEvent = EFalse;
  1432             iIgnoredByUsbEvent = EFalse;
  1433             return;
  1433             return;
  1434             }
  1434             }
  1435         
  1435 
  1436         // else iIgnoredByUsbEvent==EFalse, then furtherly check USB status in central repository.
  1436         // else iIgnoredByUsbEvent==EFalse, then furtherly check USB status in central repository.
  1437         else if ( !iIgnoredByUsbEvent )
  1437         else if ( !iIgnoredByUsbEvent )
  1438         	{
  1438         	{
  1439             TInt usbStatus;
  1439             TInt usbStatus;
  1440             RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus );
  1440             RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus );
  1441         
  1441 
  1442             if ( KUsbPersonalityIdMS == usbStatus && KErrDisMounted == aError  )
  1442             if ( KUsbPersonalityIdMS == usbStatus && KErrDisMounted == aError  )
  1443             	{
  1443             	{
  1444             	// Igore this error when USB is avtive in MassStrorage mode.
  1444             	// Igore this error when USB is avtive in MassStrorage mode.
  1445             	return;
  1445             	return;
  1446             	}
  1446             	}
  1535             case KErrNotSupported:
  1535             case KErrNotSupported:
  1536             case KErrCorrupt:
  1536             case KErrCorrupt:
  1537             case KErrNotFound:
  1537             case KErrNotFound:
  1538             case KErrPathNotFound:
  1538             case KErrPathNotFound:
  1539             case KErrDivideByZero:
  1539             case KErrDivideByZero:
  1540             case KErrGeneral: 
  1540             case KErrGeneral:
  1541                 {
  1541                 {
  1542                 // USB dismounts the disk, it cannot find any records
  1542                 // USB dismounts the disk, it cannot find any records
  1543                 if( !iDatabaseNotReady )
  1543                 if( !iDatabaseNotReady )
  1544                     {
  1544                     {
  1545                     SkipOnErrorL( currentIndex, plCount );
  1545                     SkipOnErrorL( currentIndex, plCount );
  1885 //
  1885 //
  1886 void CMPXCommonPlaybackViewImp::PrepareStatusPaneForPlaybackViewL()
  1886 void CMPXCommonPlaybackViewImp::PrepareStatusPaneForPlaybackViewL()
  1887     {
  1887     {
  1888     iPreviousStatusPaneLayout = StatusPane()->CurrentLayoutResId();
  1888     iPreviousStatusPaneLayout = StatusPane()->CurrentLayoutResId();
  1889     TInt resId( KErrNone );
  1889     TInt resId( KErrNone );
       
  1890 
       
  1891 	// We need to restore the status pane if not visible.
       
  1892 	if (!StatusPane()->IsVisible())
       
  1893 		{
       
  1894 		StatusPane()->MakeVisible(ETrue);
       
  1895 		}
  1890 
  1896 
  1891     if ( !Layout_Meta_Data::IsLandscapeOrientation() )
  1897     if ( !Layout_Meta_Data::IsLandscapeOrientation() )
  1892         {
  1898         {
  1893         if ( iPreviousStatusPaneLayout != R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT )
  1899         if ( iPreviousStatusPaneLayout != R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT )
  1894             {
  1900             {
  2077                                     }
  2083                                     }
  2078                                 else
  2084                                 else
  2079                                     {
  2085                                     {
  2080                                     isEqual = EFalse;
  2086                                     isEqual = EFalse;
  2081                                     }
  2087                                     }
  2082       
  2088 
  2083                                 if ( isEqual ) // if they're the same path
  2089                                 if ( isEqual ) // if they're the same path
  2084 									{
  2090 									{
  2085 									pbPath->Back();
  2091 									pbPath->Back();
  2086 									iViewUtility->PushDefaultHistoryL();
  2092 									iViewUtility->PushDefaultHistoryL();
  2087 									iCollectionUtility->Collection().OpenL( *pbPath );
  2093 									iCollectionUtility->Collection().OpenL( *pbPath );
  2136             TInt val(0);
  2142             TInt val(0);
  2137             CRepository* repository = CRepository::NewL( KCRUidMPXMPFeatures );
  2143             CRepository* repository = CRepository::NewL( KCRUidMPXMPFeatures );
  2138             repository->Get( KMPXMPLocalVariation, val );
  2144             repository->Get( KMPXMPLocalVariation, val );
  2139             TBool startInAlbumMenu = val&KMPXStartMusicPlayerinArtistsandAlbums ? ETrue : EFalse;
  2145             TBool startInAlbumMenu = val&KMPXStartMusicPlayerinArtistsandAlbums ? ETrue : EFalse;
  2140             delete repository;
  2146             delete repository;
  2141             
  2147 
  2142             if ( startInAlbumMenu )
  2148             if ( startInAlbumMenu )
  2143                 {
  2149                 {
  2144                 CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL();
  2150                 CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL();
  2145                 CleanupStack::PushL( cpath );
  2151                 CleanupStack::PushL( cpath );
  2146                 cpath->AppendL(3); // Albums
  2152                 cpath->AppendL(3); // Albums
  2147                 MPX_DEBUG_PATH(*cpath);
  2153                 MPX_DEBUG_PATH(*cpath);
  2148                 iCollectionUtility->Collection().OpenL( *cpath );
  2154                 iCollectionUtility->Collection().OpenL( *cpath );
  2149                 CleanupStack::PopAndDestroy( cpath );                
  2155                 CleanupStack::PopAndDestroy( cpath );
  2150                 }
  2156                 }
  2151             else
  2157             else
  2152                 {
  2158                 {
  2153                 // Handle Goto Music menu
  2159                 // Handle Goto Music menu
  2154                 CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL();
  2160                 CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL();
  2466         TUid activeView = iViewUtility->ActiveViewImplementationUid();
  2472         TUid activeView = iViewUtility->ActiveViewImplementationUid();
  2467         if ( KMPXEqualizerViewImplementationId == activeView )
  2473         if ( KMPXEqualizerViewImplementationId == activeView )
  2468             {
  2474             {
  2469             iContainer->AdjustOrdinalPosition( KMPXPlaybackViewWindowBackground );
  2475             iContainer->AdjustOrdinalPosition( KMPXPlaybackViewWindowBackground );
  2470             }
  2476             }
  2471         else 
  2477         else
  2472             {
  2478             {
  2473             iContainer->SetRect( ClientRect() );
  2479             iContainer->SetRect( ClientRect() );
  2474             iContainer->DrawDeferred();
  2480             iContainer->DrawDeferred();
  2475             }
  2481             }
  2476         }
  2482         }
  2494     delete iOldUri;
  2500     delete iOldUri;
  2495     iOldUri = NULL;
  2501     iOldUri = NULL;
  2496     CAknToolbar* toolbar = Toolbar();
  2502     CAknToolbar* toolbar = Toolbar();
  2497     if ( toolbar )
  2503     if ( toolbar )
  2498         {
  2504         {
  2499         AppUi()->AddToStackL(toolbar, 
  2505         AppUi()->AddToStackL(toolbar,
  2500         		ECoeStackPriorityCba,
  2506         		ECoeStackPriorityCba,
  2501                 ECoeStackFlagRefusesFocus 
  2507                 ECoeStackFlagRefusesFocus
  2502                 | ECoeStackFlagRefusesAllKeys );
  2508                 | ECoeStackFlagRefusesAllKeys );
  2503         toolbar->MakeVisible( ETrue );
  2509         toolbar->MakeVisible( ETrue );
  2504         toolbar->HideItemsAndDrawOnlyBackground(EFalse);
  2510         toolbar->HideItemsAndDrawOnlyBackground(EFalse);
       
  2511         toolbar->SetSkinBackgroundId(KAknsIIDQsnBgScreenMp);
  2505         toolbar->SetToolbarVisibility(ETrue);
  2512         toolbar->SetToolbarVisibility(ETrue);
  2506         }
  2513         }
  2507     PrepareStatusPaneForPlaybackViewL();
  2514     PrepareStatusPaneForPlaybackViewL();
  2508 
  2515 
  2509     iRandomMode = KErrNotFound;
  2516     iRandomMode = KErrNotFound;
  2523         iIdle = NULL;
  2530         iIdle = NULL;
  2524         }
  2531         }
  2525     iIdle = CIdle::NewL( CActive::EPriorityIdle );
  2532     iIdle = CIdle::NewL( CActive::EPriorityIdle );
  2526     iIdle->Start( TCallBack( CMPXCommonPlaybackViewImp::DeferredAlbumArtExtractCallback, this ) );
  2533     iIdle->Start( TCallBack( CMPXCommonPlaybackViewImp::DeferredAlbumArtExtractCallback, this ) );
  2527 
  2534 
  2528     // Retrieve current repeat & random modes, fix for EJZU-7NZ9CD 
  2535     // Retrieve current repeat & random modes, fix for EJZU-7NZ9CD
  2529     iPlaybackUtility->PropertyL( *this, EPbPropertyRandomMode );
  2536     iPlaybackUtility->PropertyL( *this, EPbPropertyRandomMode );
  2530     iPlaybackUtility->PropertyL( *this, EPbPropertyRepeatMode );
  2537     iPlaybackUtility->PropertyL( *this, EPbPropertyRepeatMode );
  2531 
  2538 
  2532     // Set title
  2539     // Set title
  2533     // Ignore errors from updating title pane since if that is not
  2540     // Ignore errors from updating title pane since if that is not
  2545         } );
  2552         } );
  2546 
  2553 
  2547     CEikButtonGroupContainer* cba = Cba();
  2554     CEikButtonGroupContainer* cba = Cba();
  2548     if ( cba )
  2555     if ( cba )
  2549         {
  2556         {
  2550         CCoeControl* control = cba->ButtonGroup()->AsControl();
       
  2551         static_cast<CEikCba*>( control )->
       
  2552             SetSkinBackgroundId( KAknsIIDQsnBgAreaControlMp );
       
  2553 
  2557 
  2554 #ifdef __ENABLE_MSK
  2558 #ifdef __ENABLE_MSK
  2555         iCommonUiHelper->SetMiddleSoftKeyLabelL(
  2559         iCommonUiHelper->SetMiddleSoftKeyLabelL(
  2556             *cba,
  2560             *cba,
  2557             R_TEXT_SOFTKEY_EMPTY,
  2561             R_TEXT_SOFTKEY_EMPTY,
  2730     TInt aResourceId,
  2734     TInt aResourceId,
  2731     CEikMenuPane* aMenuPane )
  2735     CEikMenuPane* aMenuPane )
  2732     {
  2736     {
  2733     TInt usbUnblockingStatus;
  2737     TInt usbUnblockingStatus;
  2734     RProperty::Get( KMPXViewPSUid,
  2738     RProperty::Get( KMPXViewPSUid,
  2735                     KMPXUSBUnblockingPSStatus, 
  2739                     KMPXUSBUnblockingPSStatus,
  2736                     usbUnblockingStatus);
  2740                     usbUnblockingStatus);
  2737 
  2741 
  2738     switch ( aResourceId )
  2742     switch ( aResourceId )
  2739         {
  2743         {
  2740         case R_MPX_PLAYBACK_VIEW_MENU:
  2744         case R_MPX_PLAYBACK_VIEW_MENU:
  2941                 {
  2945                 {
  2942                 const CMPXMediaArray* mediaArray =
  2946                 const CMPXMediaArray* mediaArray =
  2943                     iUserPlaylists->Value<CMPXMediaArray>(
  2947                     iUserPlaylists->Value<CMPXMediaArray>(
  2944                     KMPXMediaArrayContents );
  2948                     KMPXMediaArrayContents );
  2945                 User::LeaveIfNull(const_cast<CMPXMediaArray*>(mediaArray));
  2949                 User::LeaveIfNull(const_cast<CMPXMediaArray*>(mediaArray));
  2946                
  2950 
  2947                 TInt entriesCount( mediaArray->Count() );
  2951                 TInt entriesCount( mediaArray->Count() );
  2948                 MPX_DEBUG2( "CMPXCommonPlaybackViewImp::DynInitMenuPaneL Entry count = %d", entriesCount );
  2952                 MPX_DEBUG2( "CMPXCommonPlaybackViewImp::DynInitMenuPaneL Entry count = %d", entriesCount );
  2949                 if ( entriesCount > 0 )
  2953                 if ( entriesCount > 0 )
  2950                     {
  2954                     {
  2951                     dim = EFalse;
  2955                     dim = EFalse;
  2984     if (iContainer && !iSwitchingView)
  2988     if (iContainer && !iSwitchingView)
  2985         {
  2989         {
  2986         if ( !Layout_Meta_Data::IsLandscapeOrientation() )
  2990         if ( !Layout_Meta_Data::IsLandscapeOrientation() )
  2987             {
  2991             {
  2988             TUid activeView = iViewUtility->ActiveViewImplementationUid();
  2992             TUid activeView = iViewUtility->ActiveViewImplementationUid();
  2989             
  2993 
  2990             // only switch to flat if current view is not equalizer
  2994             // only switch to flat if current view is not equalizer
  2991             // since it'll mess up equilizer's screen
  2995             // since it'll mess up equilizer's screen
  2992             if ( StatusPane()->CurrentLayoutResId() !=
  2996             if ( StatusPane()->CurrentLayoutResId() !=
  2993                  R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT &&
  2997                  R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT &&
  2994                  activeView != KMPXEqualizerViewImplementationId )
  2998                  activeView != KMPXEqualizerViewImplementationId )
  3007                 }
  3011                 }
  3008             }
  3012             }
  3009 
  3013 
  3010         iContainer->SetRect( ClientRect() );
  3014         iContainer->SetRect( ClientRect() );
  3011         delete iOldUri;
  3015         delete iOldUri;
  3012         iOldUri = NULL;         
  3016         iOldUri = NULL;
  3013         // Update album art
  3017         // Update album art
  3014         TRAP_IGNORE( UpdateAlbumArtL( iMedia ));
  3018         TRAP_IGNORE( UpdateAlbumArtL( iMedia ));
  3015         TRAP_IGNORE( UpdateTrackInfoL( iMedia ));
  3019         TRAP_IGNORE( UpdateTrackInfoL( iMedia ));
  3016         iContainer->DrawDeferred();
  3020         iContainer->DrawDeferred();
  3017         }
  3021         }
  3114 //
  3118 //
  3115 EXPORT_C TBool CMPXCommonPlaybackViewImp::IsUpnpVisible()
  3119 EXPORT_C TBool CMPXCommonPlaybackViewImp::IsUpnpVisible()
  3116     {
  3120     {
  3117     MPX_FUNC( "CMPXCommonPlaybackViewImp::IsUpnpVisible" );
  3121     MPX_FUNC( "CMPXCommonPlaybackViewImp::IsUpnpVisible" );
  3118     TBool returnValue = EFalse;
  3122     TBool returnValue = EFalse;
  3119     
  3123 
  3120 #ifdef UPNP_INCLUDED
  3124 #ifdef UPNP_INCLUDED
  3121    	if ( iUpnpCopyCommand && iUpnpFrameworkSupport ) 	  
  3125    	if ( iUpnpCopyCommand && iUpnpFrameworkSupport )
  3122         {
  3126         {
  3123         returnValue = iUpnpCopyCommand->IsAvailableL();   
  3127         returnValue = iUpnpCopyCommand->IsAvailableL();
  3124         }
  3128         }
  3125 #endif
  3129 #endif
  3126     return returnValue; 
  3130     return returnValue;
  3127 
  3131 
  3128     }
  3132     }
  3129 
  3133 
  3130 // -----------------------------------------------------------------------------
  3134 // -----------------------------------------------------------------------------
  3131 // CMPXCommonPlaybackViewImp::AddPlayersNamesToMenuL
  3135 // CMPXCommonPlaybackViewImp::AddPlayersNamesToMenuL
  3555                     default:
  3559                     default:
  3556                         {
  3560                         {
  3557                         break;
  3561                         break;
  3558                         }
  3562                         }
  3559                     }
  3563                     }
  3560                 
  3564 
  3561                 if( setText )
  3565                 if( setText )
  3562                     {
  3566                     {
  3563                 CAknErrorNote* errNote = new(ELeave) CAknErrorNote(ETrue);
  3567                 CAknErrorNote* errNote = new(ELeave) CAknErrorNote(ETrue);
  3564                 errNote->SetTimeout(CAknNoteDialog::ELongTimeout);
  3568                 errNote->SetTimeout(CAknNoteDialog::ELongTimeout);
  3565                 errNote->ExecuteLD( *dialogText );
  3569                 errNote->ExecuteLD( *dialogText );
  3898             CAknButton* rwControl;
  3902             CAknButton* rwControl;
  3899             rwControl = (CAknButton*)(toolbar->ComponentControl( 0 ));
  3903             rwControl = (CAknButton*)(toolbar->ComponentControl( 0 ));
  3900             CAknButton* pausePlayControl;
  3904             CAknButton* pausePlayControl;
  3901             pausePlayControl = (CAknButton*)(toolbar->ComponentControl( 1 ));
  3905             pausePlayControl = (CAknButton*)(toolbar->ComponentControl( 1 ));
  3902             CAknButton* fwControl;
  3906             CAknButton* fwControl;
  3903             fwControl = (CAknButton*)(toolbar->ComponentControl( 2 ));                                   
  3907             fwControl = (CAknButton*)(toolbar->ComponentControl( 2 ));
  3904             MMPXSource* s = iPlaybackUtility->Source();
  3908             MMPXSource* s = iPlaybackUtility->Source();
  3905             if ( s )
  3909             if ( s )
  3906                 {
  3910                 {
  3907                 CMPXCollectionPlaylist* playlist = s->PlaylistL();
  3911                 CMPXCollectionPlaylist* playlist = s->PlaylistL();
  3908                 if ( playlist )
  3912                 if ( playlist )
  3963 //
  3967 //
  3964 TInt CMPXCommonPlaybackViewImp::HandleDelayedError( TAny* aPtr )
  3968 TInt CMPXCommonPlaybackViewImp::HandleDelayedError( TAny* aPtr )
  3965     {
  3969     {
  3966     CMPXCommonPlaybackViewImp* pv = reinterpret_cast<CMPXCommonPlaybackViewImp*>( aPtr );
  3970     CMPXCommonPlaybackViewImp* pv = reinterpret_cast<CMPXCommonPlaybackViewImp*>( aPtr );
  3967     pv->iDelayedErrorTimer->Cancel();
  3971     pv->iDelayedErrorTimer->Cancel();
  3968     
  3972 
  3969     // compare index
  3973     // compare index
  3970     if ( pv->iPlaybackUtility )
  3974     if ( pv->iPlaybackUtility )
  3971     	{
  3975     	{
  3972         MMPXSource* source( pv->iPlaybackUtility->Source() );
  3976         MMPXSource* source( pv->iPlaybackUtility->Source() );
  3973         if ( source )
  3977         if ( source )