camerauis/cameraapp/generic/common/src/CamCollectionManagerAo.cpp
changeset 0 1ddebce53859
child 25 2c87b2808fd7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraapp/generic/common/src/CamCollectionManagerAo.cpp	Thu Jan 07 16:18:56 2010 +0200
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:  Implementation of Collection Manager asynchronous operation
+*  
+
+   Copyright (c) 2007 Nokia Corporation.
+*  This material, including documentation and any related 
+*  computer programs, is protected by copyright controlled by 
+*  Nokia Corporation. All rights are reserved. Copying, 
+*  including reproducing, storing, adapting or translating, any 
+*  or all of this material requires the prior written consent of 
+*  Nokia Corporation. This material also contains confidential 
+*  information which may not be disclosed to others without the 
+*  prior written consent of Nokia Corporation.
+* 
+*
+*/
+
+
+#include "CamCollectionManagerAo.h"
+#include <glxcollectionmanager.h>
+#include <glxcollectioninfo.h>
+#include "MCamAddToAlbumObserver.h"
+#include "CamLogger.h"
+#include "Cam.hrh"
+#include "CamUtility.h"
+
+
+// ---------------------------------------------------------------------------
+// CCamCollectionManagerAO::CCamCollectionManagerAO()
+// ---------------------------------------------------------------------------
+//
+CCamCollectionManagerAO::CCamCollectionManagerAO( MCamAddToAlbumObserver& aObserver )
+:CActive(EPriorityStandard),iObserver(aObserver)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCamCollectionManagerAO::~CCamCollectionManagerAO()
+// ---------------------------------------------------------------------------
+//
+CCamCollectionManagerAO::~CCamCollectionManagerAO()
+    {
+    Cancel();
+    if ( iCollectionManager )
+        {
+        delete iCollectionManager;
+        iCollectionManager = NULL;
+        }
+    if ( iCollectionInfo )
+        {
+        delete iCollectionInfo;
+        iCollectionInfo = NULL;
+        }
+    iSelectedAlbumIds.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CCamCollectionManagerAO::StartAddtoAlbumOperationL
+//
+// Initiates Callback Mechanism for adding Images/Videos to albums
+// ---------------------------------------------------------------------------
+//
+void CCamCollectionManagerAO::StartCallBackAddToAlbumL(
+                              const RArray<TUint32>& aSelectedAlbumIds, 
+                              const TDesC& aUri 
+                              )
+    {
+    PRINT( _L("Camera => CCamCollectionManagerAO::StartCallBackAddToAlbumL") );
+    PRINT( _L("Camera <> CCamCollectionManagerAO::StartCallBackAddToAlbumL ... Calling CGlxCollectionManager::NewL()") );
+    if (!iCollectionManager)
+        {
+        iCollectionManager = CGlxCollectionManager::NewL();
+        }
+    PRINT( _L("Camera <> CCamCollectionManagerAO::StartCallBackAddToAlbumL ... CGlxCollectionManager::NewL() Success ") );
+    iUri = aUri;
+    iSelectedAlbumIds.Reset();
+
+    for ( TInt i = 0; i < aSelectedAlbumIds.Count(); i++ )
+        {
+        iSelectedAlbumIds.AppendL( aSelectedAlbumIds[i] );
+        }
+    iCurrentAlbumIndex = 0;
+    PRINT( _L("Camera <> CCamCollectionManagerAO::StartCallBackAddToAlbumL ... Calling iCollectionManager->AddToCollectionL()") );
+    iCollectionManager->AddToCollectionL(
+                        aUri, 
+    			        aSelectedAlbumIds[iCurrentAlbumIndex], 
+    			        iStatus );
+    PRINT( _L("Camera <> CCamCollectionManagerAO::StartCallBackAddToAlbumL ... iCollectionManager->AddToCollectionL() : Success") );
+    iCurrentAlbumIndex++;
+    iAddToAlbum = ETrue;
+    SetActive();
+    PRINT( _L("Camera <= CCamCollectionManagerAO::StartCallBackAddToAlbumL") );
+    }
+
+
+
+// ---------------------------------------------------------------------------
+//  CCamCollectionManagerAO::CheckForAlbumExistenceL
+//
+//  Initiates Callback Mechanism for checking if the album really exists
+// ---------------------------------------------------------------------------
+//
+void CCamCollectionManagerAO::CheckForAlbumExistenceL( 
+                                       const TUint32 aDefaultAlbumId )
+    {
+    PRINT( _L("Camera => CCamCollectionManagerAO::CheckForAlbumExistenceL") );
+    if (!iCollectionManager)
+        {
+        iCollectionManager = CGlxCollectionManager::NewL();
+        }
+    if ( iCollectionInfo )
+        {
+        delete iCollectionInfo;
+        iCollectionInfo = NULL;
+        }
+    iCollectionInfo = CGlxCollectionInfo::NewL( aDefaultAlbumId );
+    iCollectionManager->CollectionInfoL( *iCollectionInfo, iStatus );
+    iCheckForAlbum = ETrue;
+    SetActive();
+    PRINT( _L("Camera <= CCamCollectionManagerAO::CheckForAlbumExistenceL") );
+    }
+   
+// ---------------------------------------------------------------------------
+// CCamCollectionManagerAO::RunL()
+// ---------------------------------------------------------------------------
+//
+void CCamCollectionManagerAO::RunL()
+    {
+    PRINT( _L("Camera => CCamCollectionManagerAO::RunL") );
+    if ( iAddToAlbum )
+        {
+        iAddToAlbum = EFalse;
+        if ( iStatus.Int() == KErrNone)
+    	    {
+    	    PRINT( _L("Camera <> CCamCollectionManagerAO::RunL() Finalizing") );
+            DoAddToAlbumOperationL();
+    	    }
+    	else
+    	    {
+    	    // if there is any error, we pass and handle there
+    	    PRINT( _L("Camera <> CCamCollectionManagerAO::RunL() add to album has problems") );
+    	    RunError( iStatus.Int() );
+    	    }
+        }
+     else if ( iCheckForAlbum )
+        {
+        iCheckForAlbum = EFalse;
+        if ( iStatus.Int() == KErrNone)
+    	    {
+            DoCheckAlbumOperationCompleteL();
+    	    }
+    	else
+    	    {
+    	    // if there is any error, we pass and handle there
+    	    RunError( iStatus.Int() );
+    	    }
+        }
+     else
+        {
+        // Handling special cases if any
+        }
+    PRINT( _L("Camera <= CCamCollectionManagerAO::RunL") );
+    }
+ 
+
+// ---------------------------------------------------------------------------
+// CCamCollectionManagerAO::DoAddToAlbumOperationL()
+// ---------------------------------------------------------------------------
+//
+void CCamCollectionManagerAO::DoAddToAlbumOperationL()
+    {
+    PRINT( _L("Camera => CCamCollectionManagerAO::DoAddToAlbumOperationL") );
+    PRINT1( _L("Camera <> CCamCollectionManagerAO::DoAddToAlbumOperationL ... iCurrentAlbumIndex (%d)"), iCurrentAlbumIndex )
+    PRINT1( _L("Camera <> CCamCollectionManagerAO::DoAddToAlbumOperationL ... iSelectedAlbumIds.Count() (%d)"), iSelectedAlbumIds.Count() )
+	if ( iCurrentAlbumIndex < iSelectedAlbumIds.Count() )
+        {
+        PRINT( _L("Camera <> CCamCollectionManagerAO::DoAddToAlbumOperationL ... Enters If Loop") );
+        iCollectionManager->AddToCollectionL(
+                            iUri, 
+    			            iSelectedAlbumIds[iCurrentAlbumIndex], 
+    			            iStatus );
+        iCurrentAlbumIndex++;
+        iAddToAlbum = ETrue;
+    	SetActive();
+        }
+    else
+        {
+        PRINT( _L("Camera <> CCamCollectionManagerAO::DoAddToAlbumOperationL ... Enters Else Loop") );
+        iAddToAlbum = EFalse;
+        iSelectedAlbumIds.Reset();
+        iObserver.AddToAlbumIdOperationComplete();
+        }
+    PRINT1( _L("Camera <= CCamCollectionManagerAO::DoAddToAlbumOperationL ... Before leaving iCurrentAlbumIndex (%d)"), iCurrentAlbumIndex )
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// CCamCollectionManagerAO::CheckAlbumOperationComplete
+// ---------------------------------------------------------------------------
+//
+void CCamCollectionManagerAO::DoCheckAlbumOperationCompleteL()
+    {
+    PRINT( _L("Camera => CCamCollectionManagerAO::DoCheckAlbumOperationCompleteL") );
+    if ( iCollectionInfo )
+        {
+   	    iObserver.CheckAlbumIdOperationCompleteL( iCollectionInfo->Exists(),
+    	                                          iCollectionInfo->Title() );
+        }
+    PRINT( _L("Camera <= CCamCollectionManagerAO::DoCheckAlbumOperationCompleteL") );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCamCollectionManagerAO::DoCancel()
+//
+// Cancels the active object
+// ---------------------------------------------------------------------------
+//
+void CCamCollectionManagerAO::DoCancel()
+    {
+    PRINT( _L("Camera => CCamCollectionManagerAO::DoCancel") );
+    if ( iCollectionManager )
+        {
+        iCollectionManager->Cancel();
+        }
+    iSelectedAlbumIds.Reset();
+    PRINT( _L("Camera <= CCamCollectionManagerAO::DoCancel") );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CCamCollectionManagerAO::RunError()
+//
+// Handles all leaves and its safe to handle them in this method
+// ---------------------------------------------------------------------------
+//
+TInt CCamCollectionManagerAO::RunError( TInt /*aError*/ )
+    {
+    PRINT( _L("Camera => CCamCollectionManagerAO::RunError") );
+    // We make sure that if any error occurs, we cancel,
+    // the ongoing request and delete all the pointers
+    // so that no memory leaks occurs
+    if ( iCollectionManager )
+        {
+        delete iCollectionManager;
+        iCollectionManager = NULL;
+        }
+    if ( iCollectionInfo )
+        {
+        delete iCollectionInfo;
+        iCollectionManager = NULL;
+        }
+    iSelectedAlbumIds.Reset();
+
+    PRINT( _L("Camera <= CCamCollectionManagerAO::RunError") );
+    return KErrNone;
+    }
+
+//End of file