videocollection/hgmyvideos/src/vcxhgmyvideosmodel.cpp
branchRCL_3
changeset 57 befca0ec475f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/hgmyvideos/src/vcxhgmyvideosmodel.cpp	Wed Sep 01 12:30:28 2010 +0100
@@ -0,0 +1,381 @@
+/*
+* 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 "vcxhgmyvideosmodel.h"
+#include "vcxhgmyvideoscollectionclient.h"
+#include "thumbnaildata.h"
+#include "vcxhgmyvideoscenrepkeys.h"
+#include "vcxhgmyvideosthumbnailmanager.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel::CVcxHgMyVideosModel()
+  : iAppState( EVcxMyVideosAppStateUnknown ),
+    iPreviousAppState( EVcxMyVideosAppStateUnknown ),
+    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();
+    iTnManager = CVcxHgMyVideosThumbnailManager::NewL();
+    InitMyVideosCenRepL();
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::~CVcxHgMyVideosModel()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosModel::~CVcxHgMyVideosModel()
+    {
+    if ( iFsSession.Handle() )
+        {
+        iFsSession.Close();
+        }
+    delete iDriveMonitor;
+    delete iCollection;
+    delete iCollectionCenRep;
+    delete iMyVideosCenRep;
+    delete iTnManager;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::TouchSupport()
+// -----------------------------------------------------------------------------
+//
+TBool CVcxHgMyVideosModel::TouchSupport()
+    {
+    return iTouchSupport;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::CollectionClient()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosCollectionClient& CVcxHgMyVideosModel::CollectionClient()
+    {
+    return *iCollection;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::FileServerSessionL()
+// -----------------------------------------------------------------------------
+//
+RFs& CVcxHgMyVideosModel::FileServerSessionL()
+    {
+    if ( ! iFsSession.Handle() )
+        {
+        TInt err = iFsSession.Connect();
+        if ( err == KErrNone )
+            {
+            // For sending handles to thumbnailmanager
+            err = iFsSession.ShareProtected();
+            }
+        if ( err != KErrNone )
+            {
+            iFsSession.Close();
+            User::Leave( err );
+            }
+        }
+
+    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::GetLastWatchedIdL()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosModel::GetLastWatchedIdL( TInt& aId )
+    {
+    if ( ! iCollectionCenRep )
+        {
+        iCollectionCenRep = CRepository::NewL( TUid::Uid( KVcxMyVideosCollectionCenrepUid ) );
+        }
+
+    return iCollectionCenRep->Get( KVcxMyVideosCollectionCenrepKeyLastWatchedMpxId, aId );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::GetLastWatchedNameL
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosModel::GetLastWatchedNameL( TDes& aName )
+    {
+    if ( ! iCollectionCenRep )
+        {
+        iCollectionCenRep = CRepository::NewL( TUid::Uid( KVcxMyVideosCollectionCenrepUid ) );
+        }
+
+    return iCollectionCenRep->Get( KVcxMyVideosCollectionCenrepKeyLastWatchedName, aName );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::GetLastWatchedPath
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosModel::GetLastWatchedPathL( TDes& aPath )
+    {
+    if ( ! iCollectionCenRep )
+        {
+        iCollectionCenRep = CRepository::NewL( TUid::Uid( KVcxMyVideosCollectionCenrepUid ) );
+        }
+
+    return iCollectionCenRep->Get( KVcxMyVideosCollectionCenrepKeyLastWatchedPath, aPath );
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::GetLastWatchedPath
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosModel::GetLastWatchedIndicatorL( TInt& aValue )
+    {
+    if ( ! iCollectionCenRep )
+        {
+        iCollectionCenRep = CRepository::NewL( TUid::Uid( KVcxMyVideosCollectionCenrepUid ) );
+        }
+
+    return iCollectionCenRep->Get( KVcxMyVideosCollectionCenrepKeyLastWatchedIndicator, aValue );
+    }
+
+// -----------------------------------------------------------------------------
+// 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::ThumbnailManager()
+// -----------------------------------------------------------------------------
+//
+CVcxHgMyVideosThumbnailManager& CVcxHgMyVideosModel::ThumbnailManager() const
+    {
+    return *iTnManager;
+    }
+
+// -----------------------------------------------------------------------------
+// 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. 
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::GetMyVideosCustomizationIntL()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosModel::GetMyVideosCustomizationInt( const TInt& aKey, 
+                                                       TInt& aValue )
+    {
+    if ( iMyVideosCenRep )
+        {
+        return iMyVideosCenRep->Get( aKey, aValue );
+        }
+    return KErrNotFound;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::GetMyVideosCustomizationString()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosModel::GetMyVideosCustomizationString( const TInt& aKey, 
+                                                          TDes& aValue )
+    {
+    if ( iMyVideosCenRep )
+        {
+        return iMyVideosCenRep->Get( aKey, aValue );
+        }
+    return KErrNotFound;
+    }
+
+// -----------------------------------------------------------------------------
+// CVcxHgMyVideosModel::InitMyVideosCenRepL()
+// -----------------------------------------------------------------------------
+//
+TInt CVcxHgMyVideosModel::InitMyVideosCenRepL()
+    {
+    TInt retVal = KErrNone;
+    if ( !iMyVideosCenRep )
+        {
+        TRAPD( error, iMyVideosCenRep = CRepository::NewL( KMyVideosMainViewCenRepUid ) );
+        retVal = error;
+        }
+    return retVal;
+    }