--- /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.
+ }