appinstaller/AppinstUi/Server/Src/SWInstRequestObject.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appinstaller/AppinstUi/Server/Src/SWInstRequestObject.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,263 @@
+/*
+* Copyright (c) 2002-2004 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:   This module contains the implementation of CSWInstRequestObject 
+*                class member functions.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <StringLoader.h>
+#include <SWInstDefs.h>
+#include <SWInstSvrUI.rsg>
+#include <SWInstTaskManager.h>
+
+#include "SWInstRequestObject.h"
+#include "SWInstUIPluginAPI.h"
+#include "CUIDialogs.h"
+#include "SWInstServerPanic.h"
+
+using namespace SwiUI;
+
+_LIT( KSWInstSingleInstanceMutex, "SWINST_INSTANCE" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::CSWInstRequestObject
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSWInstRequestObject::CSWInstRequestObject( const RMessage2& aMessage )
+    : CActive( CActive::EPriorityStandard ),
+      iMessage( aMessage ),
+      iMessageSet( ETrue ),
+      iObjectId( aMessage.Function() )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::CSWInstRequestObject
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSWInstRequestObject::CSWInstRequestObject( TInt aObjectId )
+    : CActive( CActive::EPriorityStandard ),
+      iObjectId( aObjectId )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::BaseConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSWInstRequestObject::BaseConstructL()
+    {
+    iTaskManager = CTaskManager::NewL();
+    }
+    
+// Destructor
+CSWInstRequestObject::~CSWInstRequestObject()
+    {    
+    delete iUIPlugin;
+    CActive::Cancel();
+    delete iTaskManager;
+    iSingleInstanceMutex.Close();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::Message
+// Returns the message object having this request.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+RMessage2* CSWInstRequestObject::Message()
+    {
+    return &iMessage;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::ObjectHandle
+// Returns the request id of this object.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CSWInstRequestObject::ObjectId() const
+    {
+    return iObjectId;
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::Complete
+// Completes the request.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSWInstRequestObject::Complete( TInt aResult )
+    {
+    iSingleInstanceMutex.Close();
+
+    if ( iMessageSet )
+        {
+        iMessage.Complete( aResult );    
+        }
+
+    if ( iCancelMessageSet )
+        {
+        iCancelMessage.Complete( KErrNone );        
+        }    
+    
+    if ( iCallback )
+        {
+        iCallback->RequestCompleted( aResult );
+        } 
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::SetCallback
+// Sets the request callback handler.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSWInstRequestObject::SetCallback( MRequestCallback* aCallback )
+    {
+    iCallback = aCallback;    
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::Cancel
+// Cancel current operation.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSWInstRequestObject::Cancel()
+    {
+    if ( IsActive() )
+        {    
+        iCancelling = ETrue;    
+        CancelRequest();    
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::Cancel
+// Cancel current operation.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSWInstRequestObject::Cancel( const RMessage2& aMessage )
+    {
+    if ( IsActive() )
+        {        
+        iCancelMessage = aMessage;
+        iCancelMessageSet = ETrue;    
+        iCancelling = ETrue;    
+        CancelRequest();    
+        }        
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::CreatePluginL
+// Creates a UI plugin based on the given mime time.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSWInstRequestObject::CreatePluginL( const TDesC8& aMime )
+    {
+    iUIPlugin = CSWInstUIPluginAPI::NewL( aMime );
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::LeaveIfInUseL
+// Checks if there is another request object in use globally. Leaves with
+// KSWInstErrBusy if there is.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSWInstRequestObject::LeaveIfInUseL()
+    {
+    TInt err = iSingleInstanceMutex.CreateGlobal( KSWInstSingleInstanceMutex() );
+    if ( err == KErrAlreadyExists )
+        {
+        if ( !iIsSilent )
+            {            
+            HBufC* noteText = StringLoader::LoadLC( R_SWINSTSVRUI_BUSY_INSTALL );
+            CommonUI::CCUIDialogs* commonDlg = CommonUI::CCUIDialogs::NewL();
+            CleanupStack::PushL( commonDlg );
+            commonDlg->ShowErrorNoteL( *noteText );
+            CleanupStack::PopAndDestroy( 2, noteText );        
+            }        
+        User::Leave( KSWInstErrBusy );
+        }    
+    }
+  
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::CompleteSelf
+// Completes this active object.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CSWInstRequestObject::CompleteSelf( TInt aResult )
+    {
+    __ASSERT_ALWAYS( !IsActive(), PanicServer( ESWInstPanicBadHandle ) );
+    
+    TRequestStatus* stat = &iStatus;    
+    User::RequestComplete( stat, aResult );
+    SetActive();  
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::RunL
+// Called by framework when request is finished.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//    
+void CSWInstRequestObject::RunL()
+    {
+    RequestCompleteL( iStatus.Int() );
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::DoCancelL
+// Called by framework when request is cancelled.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+// 
+void CSWInstRequestObject::DoCancel()
+    {
+    // Empty 
+    }
+
+// -----------------------------------------------------------------------------
+// CSWInstRequestObject::RunError
+// Handles a leave occurring in the request completion event handler RunL().
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+// 
+TInt CSWInstRequestObject::RunError( TInt aError )
+    {
+    // Complete the client ipc message with the error
+    Complete( aError );
+
+    return KErrNone;
+    }
+
+//  End of File