videocollection/hgmyvideos/src/vcxhgmyvideosmodel.cpp
changeset 0 96612d01cf9f
child 8 ce5ada96ab30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosmodel.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,504 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:      Common model class for component.*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <bldvariant.hrh>
+#include <AknUtils.h>
+#include <centralrepository.h>
+#include "IptvDebug.h"
+#include <MediatorEventProvider.h>
+#include "iptvlastwatcheddata.h"
+#include "iptvlastwatchedapi.h"
+#include "vcxhgmyvideosmodel.h"
+#include "vcxhgmyvideoscollectionclient.h"
+#include "vcxhgmyvideosdownloadclient.h"
+#include "vcxnsmediatorids.h"
+#include "thumbnaildata.h"
+
+_LIT( KTemporaryThumbPath, "C:\\Data\\videocenter\\ecg\\lastwatched.bmp" ); 
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel::CVcxHgMyVideosModel()
+  : iAppState( EVcxMyVideosAppStateUnknown ),
+    iPreviousAppState( EVcxMyVideosAppStateUnknown ),
+    iTnRequestId( KErrNotFound ),
+    iSortOrder( EVcxMyVideosSortingNone )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::NewL()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel* CVcxHgMyVideosModel::NewL()
+    {
+    CVcxHgMyVideosModel* self = 
+        CVcxHgMyVideosModel::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::NewLC()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel* CVcxHgMyVideosModel::NewLC()
+    {
+    CVcxHgMyVideosModel* self = 
+        new (ELeave) CVcxHgMyVideosModel();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::ConstructL()
+    {
+    iCollection = CVcxHgMyVideosCollectionClient::NewL();
+    iTouchSupport = AknLayoutUtils::PenEnabled();
+    iMediatorEventProvider = CMediatorEventProvider::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::~CVcxHgMyVideosModel()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel::~CVcxHgMyVideosModel()
+    {
+    if ( iFsSession.Handle() )
+        {
+        iFsSession.Close();
+        }
+    delete iDriveMonitor;
+    delete iCollection;
+    delete iCollectionCenRep;
+    delete iLastWatchedApi;
+    delete iLastWatchedData;
+    delete iVideoPlayerCustomMessage;
+
+    if ( iTnManager && iTnRequestId != KErrNotFound )
+        {
+        iTnManager->CancelRequest( iTnRequestId );
+        }
+    delete iTnManager;
+    delete iMediatorEventProvider;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::TouchSupport()
+// -----------------------------------------------------------------------------
+//
+TBool CVcxHgMyVideosModel::TouchSupport()
+    {
+    return iTouchSupport;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::CollectionClient()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosCollectionClient& CVcxHgMyVideosModel::CollectionClient()
+    {
+    return *iCollection;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::DownloadClient()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosDownloadClient& CVcxHgMyVideosModel::DownloadClient()
+    {
+    return iCollection->DownloadClient();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::FileServerSessionL()
+// -----------------------------------------------------------------------------
+//
+RFs& CVcxHgMyVideosModel::FileServerSessionL()
+    {
+    if ( ! iFsSession.Handle() )
+        {
+        User::LeaveIfError( iFsSession.Connect() );
+        }
+
+    return iFsSession;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::DriveMonitorL()
+// -----------------------------------------------------------------------------
+//
+CIptvDriveMonitor& CVcxHgMyVideosModel::DriveMonitorL()
+    {
+    if ( ! iDriveMonitor )
+        {
+        iDriveMonitor = CIptvDriveMonitor::NewL();
+        iDriveMonitor->RegisterObserverL( this );
+        }
+
+    return *iDriveMonitor;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::SetAppState()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::SetAppState( 
+        CVcxHgMyVideosModel::TVcxMyVideosAppState aAppState )
+    {
+    iPreviousAppState = iAppState;
+    iAppState = aAppState;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::AppState()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel::TVcxMyVideosAppState CVcxHgMyVideosModel::AppState()
+    {
+    return iAppState;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::PreviousAppState()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel::TVcxMyVideosAppState CVcxHgMyVideosModel::PreviousAppState()
+    {
+    return iPreviousAppState;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::SetVideolistSortOrderL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::SetVideolistSortOrderL( TVcxMyVideosSortingOrder aSortOrder )
+    {
+    if ( ! iCollectionCenRep )
+        {
+        iCollectionCenRep = CRepository::NewL( TUid::Uid( KVcxMyVideosCollectionCenrepUid ) );
+        }
+
+    iCollectionCenRep->Set( KVcxMyVideosCollectionCenrepKeySortingOrder, 
+                            static_cast<TInt>( aSortOrder ) );
+    
+    iSortOrder = aSortOrder;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::VideolistSortOrderL()
+// -----------------------------------------------------------------------------
+//
+TVcxMyVideosSortingOrder CVcxHgMyVideosModel::VideolistSortOrderL()
+    {
+    if ( iSortOrder == EVcxMyVideosSortingNone )
+    	{
+        if ( ! iCollectionCenRep )
+            {
+            iCollectionCenRep = CRepository::NewL( TUid::Uid( KVcxMyVideosCollectionCenrepUid ) );
+            }
+
+        TInt value( KErrNotFound );
+
+        TInt error = iCollectionCenRep->Get( KVcxMyVideosCollectionCenrepKeySortingOrder, value );
+        iSortOrder = static_cast<TVcxMyVideosSortingOrder>( value );
+    
+        if ( ( error != KErrNone ) || 
+             ( ( iSortOrder != EVcxMyVideosSortingCreationDate ) &&
+               ( iSortOrder != EVcxMyVideosSortingName ) &&
+               ( iSortOrder != EVcxMyVideosSortingSize ) ) )
+            {
+            iSortOrder = EVcxMyVideosSortingCreationDate;
+            }
+    	}
+    return iSortOrder;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::GetScreenResolution()
+//
+//       Landscape    Portrait
+// QVGA  320x240  or  240x320
+// QHD   640x360  or  360x640
+// VGA   640x480  or  480x640
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel::TVcxScreenResolution CVcxHgMyVideosModel::GetScreenResolution( 
+        CCoeEnv* aCoeEnv )
+    {
+    TVcxScreenResolution resolution( EVcxScreenResolutionUnknown );
+    TSize screenSize = aCoeEnv->ScreenDevice()->SizeInPixels(); 
+    TBool landscape = screenSize.iWidth > screenSize.iHeight;
+
+    if ( ( landscape && screenSize.iHeight <= 240 ) ||
+         ( ! landscape && screenSize.iWidth <= 240 ) )
+        {
+        resolution = EVcxScreenResolutionQVGA;
+        }
+    else if ( ( landscape && screenSize.iHeight <= 360 ) ||
+              ( ! landscape && screenSize.iWidth <= 360 ) )
+        {
+        resolution = EVcxScreenResolutionQHD;
+        }
+    else if ( ( landscape && screenSize.iHeight <= 480 ) ||
+              ( ! landscape && screenSize.iWidth <= 480 ) )
+        {
+        resolution = EVcxScreenResolutionVGA;
+        }
+
+    return resolution;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::SetVideoAsLastWatchedL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::SetVideoAsLastWatchedL( TVideoPlayerCustomMessage& aVideoInfo, 
+                                                  TInt aMpxId1,
+                                                  TUint32 aAgeProfile )
+    {
+    if ( iTnRequestId != KErrNotFound )
+        {
+        ThumbnailManagerL()->CancelRequest( iTnRequestId );
+        iTnRequestId = KErrNotFound;
+        }
+
+    CopyVideoPlayerCustomMessageL( aVideoInfo, *VideoPlayerCustomMessageL() );
+    
+    // Store data from Video Player Custom message to 'Last Watched' item on 
+    // disk. Un-used (legacy) data fields are resetted to dummy values.
+    
+    LastWatchedDataL()->SetIconPathL( VideoPlayerCustomMessageL()->iIcon );
+    /*
+    LastWatchedDataL()->SetLastVideoPlayPoint( ViaPlayerCustomMessageL()->iStartPosition ); 
+    LastWatchedDataL()->SetMimeTypeL( ViaPlayerCustomMessageL()->iMimeType ); 
+    */
+    
+    LastWatchedDataL()->SetNameL( VideoPlayerCustomMessageL()->iName );
+    LastWatchedDataL()->SetUriL( VideoPlayerCustomMessageL()->iContent ); 
+    
+	// LastWatchedDataL()->SetContentType( ViaPlayerCustomMessageL()->iContentType );
+        
+    LastWatchedDataL()->SetMpxId( aMpxId1 );
+    LastWatchedDataL()->SetServiceId( KIdUndefined );
+    LastWatchedDataL()->SetContentId( KIdUndefined );
+    LastWatchedDataL()->SetContentIndex( -1 );    
+    LastWatchedDataL()->SetParentalControl( aAgeProfile );
+    LastWatchedDataL()->SetParametersL( KNullDesC8 );
+    LastWatchedDataL()->SetAppUid( TUid::Uid( 0 ) );
+    LastWatchedDataL()->SetViewUid( TUid::Uid( 0 ) );
+    LastWatchedDataL()->SetParameterId( TUid::Uid( 0 ) );
+    LastWatchedDataL()->SetLaunchType( CIptvLastWatchedData::EUndefined );
+    
+    // Start fetching or generating thumbnail for last watched video.
+    // The 'Last Watched' data is published only when thumb is available.
+    CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC( 
+        VideoPlayerCustomMessageL()->iContent, 
+        KNullDesC ); 
+    iTnRequestId = ThumbnailManagerL()->GetThumbnailL( *source );
+    CleanupStack::PopAndDestroy( source );    
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::UpdateLastWatchedPlayPositionL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::UpdateLastWatchedPlayPositionL( TUint32 aLastVideoPlayPoint )
+    {
+    if ( iTnRequestId != KErrNotFound )
+        {
+        LastWatchedDataL()->SetLastVideoPlayPoint( aLastVideoPlayPoint );
+        }
+    else
+        {
+        LastWatchedApiL()->UpdateLastVideoPlayPointL( aLastVideoPlayPoint );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::GetLastWatchedDataL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::GetLastWatchedDataL( TVideoPlayerCustomMessage& aVideoInfo,
+                                               TUint32& /*aMpxId1 */,
+                                               TUint32& aAgeProfile )
+    {
+    LastWatchedApiL()->GetLastWatchedDataL( *LastWatchedDataL() );
+
+    aVideoInfo.iContent = LastWatchedDataL()->Uri();
+    aVideoInfo.iName = LastWatchedDataL()->Name();
+    aVideoInfo.iIcon = LastWatchedDataL()->IconPath();
+    
+    aAgeProfile = LastWatchedDataL()->ParentalControl();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::ThumbnailPreviewReady()
+// From MThumbnailManagerObserver, not used in Video Center.
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::ThumbnailPreviewReady( MThumbnailData& /*aThumbnail*/, 
+                                                 TThumbnailRequestId /*aId*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::ThumbnailReady()
+// From MThumbnailManagerObserver
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::ThumbnailReady( TInt aError,
+                                          MThumbnailData& aThumbnail,
+                                          TThumbnailRequestId aId )
+    {
+    TRAP_IGNORE( HandleThumbnailReadyL( aError, aThumbnail, aId ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::HandleThumbnailReadyL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::HandleThumbnailReadyL( TInt aError,
+                                                 MThumbnailData& aThumbnail,
+                                                 TThumbnailRequestId aId )
+    {
+    IPTVLOGSTRING3_LOW_LEVEL(
+        "MPX My Videos UI # HandleThumbnailReadyL(error=%d, ID=%d)", aError, aId );
+
+    if ( aError == KErrNone && aId == iTnRequestId )
+        {
+        iTnRequestId = KErrNotFound;
+
+        // Save a copy of the bitmap to local file that Matrix Menu can access.
+        CFbsBitmap* bitmap = aThumbnail.Bitmap();
+        bitmap->Save( KTemporaryThumbPath );
+        LastWatchedDataL()->SetIconPathL( KTemporaryThumbPath );
+        VideoPlayerCustomMessageL()->iIcon = KTemporaryThumbPath;
+        }
+    else
+        {
+        iTnRequestId = KErrNotFound;
+        }
+
+    LastWatchedApiL()->SetLastWatchedDataL( *LastWatchedDataL() );
+    TPckg<TVideoPlayerCustomMessage> videoInfoPckg( *VideoPlayerCustomMessageL() );
+    iMediatorEventProvider->RaiseEvent( KVcxNsVideoCenterMediatorDomain,
+                                        KVcxNsPlayerGeneralCategory,
+                                        KVcxNsMediatorEventPlayerLastWatch,
+                                        TVersion( KVcxNsMediatorPlayerVersion, 0, 0 ),
+                                        videoInfoPckg );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::ResetDownloadNotification()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::ResetDownloadNotification()
+    {
+    iMediatorEventProvider->RaiseEvent( TUid::Uid( KVcxNsMpxMediatorDomain ),
+                                        TUid::Uid( KVcxNsMpxMediatorCategory ), 
+                                        KVcxNsMpxEventResetDownloadNotification,
+                                        TVersion( KVcxNsMpxEventVersion, 0, 0 ),
+                                        KNullDesC8() ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::ThumbnailManagerL()
+// -----------------------------------------------------------------------------
+//
+CThumbnailManager* CVcxHgMyVideosModel::ThumbnailManagerL()
+    {
+    if ( ! iTnManager )
+        {
+        iTnManager = CThumbnailManager::NewL( *this );
+        iTnManager->SetThumbnailSizeL( EVideoListThumbnailSize );
+        iTnManager->SetDisplayModeL( EColor16M );
+        }
+    return iTnManager;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::CopyVideoPlayerCustomMessageL()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::CopyVideoPlayerCustomMessageL( TVideoPlayerCustomMessage& aSource,
+                                                         TVideoPlayerCustomMessage& aTarget )
+    {
+    aTarget.iContent = aSource.iContent;
+    aTarget.iName = aSource.iName;
+    aTarget.iIcon = aSource.iIcon;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::VideoPlayerCustomMessageL()
+// -----------------------------------------------------------------------------
+//
+TVideoPlayerCustomMessage* CVcxHgMyVideosModel::VideoPlayerCustomMessageL()
+    {
+    if ( ! iVideoPlayerCustomMessage ) 
+        {
+        iVideoPlayerCustomMessage = new (ELeave) TVideoPlayerCustomMessage;
+        }
+    return iVideoPlayerCustomMessage;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::LastWatchedApiL()
+// -----------------------------------------------------------------------------
+//
+CIptvLastWatchedApi* CVcxHgMyVideosModel::LastWatchedApiL()
+    {
+    if ( ! iLastWatchedApi )
+        {
+        iLastWatchedApi = CIptvLastWatchedApi::NewL();
+        }
+    return iLastWatchedApi;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::LastWatchedDataL()
+// -----------------------------------------------------------------------------
+//
+CIptvLastWatchedData* CVcxHgMyVideosModel::LastWatchedDataL()
+    {
+    if ( ! iLastWatchedData )
+        {
+        iLastWatchedData = CIptvLastWatchedData::NewL();
+        }
+    return iLastWatchedData;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::HandleDriveMonitorEvent()
+// -----------------------------------------------------------------------------
+//
+void CVcxHgMyVideosModel::HandleDriveMonitorEvent( TIptvDriveMonitorEvent& /*aEvent*/ )
+    {
+    // We are not interested about the event, we are observing just to keep
+    // iDriveMonitor.iAvailableDrives up to date. 
+    }