--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/schemeplugin/src/BaseHandler.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 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:
+* Implementation of Scheme handler base class
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "BaseHandler.h"
+#include "SchemeDispLogger.h"
+#include <e32base.h>
+#include <AknQueryDialog.h>
+#include <StringLoader.h>
+#include <bautils.h>
+#include <escapeutils.h>
+#include <apparc.h>
+#include <apgcli.h>
+#include <s32mem.h>
+#include <CMessageData.h>
+#include <AknServerApp.h>
+
+// ================= CONSTANTS =======================
+LOCAL_D const TUid KUidSchemeApp = { SCHEME_APP_UID };
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CBaseHandler::CBaseHandler()
+// ---------------------------------------------------------
+//
+CBaseHandler::CBaseHandler() : CSchemeHandler()
+ {
+ iSchemeDoc = NULL;
+ }
+
+// ---------------------------------------------------------
+// CCtiHandler::~CCtiHandler()
+// ---------------------------------------------------------
+//
+CBaseHandler::~CBaseHandler()
+ {
+ delete iParsedUrl;
+ }
+
+
+// ---------------------------------------------------------
+// CBaseHandler::ConstructL()
+// ---------------------------------------------------------
+//
+void CBaseHandler::BaseConstructL( const TDesC& aUrl )
+ {
+ CLOG_ENTERFN( "CBaseHandler::BaseConstructL()" );
+
+ iParsedUrl = EscapeUtils::EscapeDecodeL( aUrl );
+
+ CLOG_LEAVEFN( "CBaseHandler::BaseConstructL()" );
+ }
+
+// ---------------------------------------------------------
+// CBaseHandler::Observer()
+// ---------------------------------------------------------
+//
+void CBaseHandler::Observer( MAknServerAppExitObserver* aSchemeDoc )
+ {
+ iSchemeDoc = aSchemeDoc;
+ }
+
+// ---------------------------------------------------------
+// CBaseHandler::NotifyClient()
+// ---------------------------------------------------------
+//
+void CBaseHandler::NotifyClient()
+ {
+ if( NULL !=iSchemeDoc )
+ {
+ iSchemeDoc->HandleServerAppExit( KErrNone );
+ }
+ }
+
+// ---------------------------------------------------------
+// CBaseHandler::SeparateAndAppendToAddressL
+// ---------------------------------------------------------
+//
+void CBaseHandler::SeparateAndAppendAddressL(
+ const TDesC& aSeparator,
+ const TDesC& aString,
+ CMessageData& aMessageData,
+ const TInt aRecipientType ) const
+ {
+ if ( aString.Length() == 0 )
+ {
+ return;
+ }
+ TInt endPos = 0;
+ TInt startPos = 0;
+ TInt tmp = 0;
+ TInt tmp2 = 0;
+ TInt length = aString.Length();
+ TInt len = 0;
+ while ( endPos < length )
+ {
+ tmp = aString.Right( length - endPos).FindF( aSeparator );
+ if ( tmp > 0 )
+ {
+ endPos += tmp;
+ }
+ else // tmp == KErrNotFound
+ {
+ endPos = aString.Length();
+ }
+ tmp = startPos;
+ tmp2 = endPos - 1;
+ // remove spaces from the start
+ while ( aString[tmp] == ' ' && tmp < endPos )
+ {
+ ++tmp;
+ }
+ // remove spaces from the end
+ while ( aString[tmp2] == ' ' && tmp2 > startPos )
+ {
+ --tmp2;
+ }
+ len = tmp2 - tmp + 1;
+ // Append item to array without spaces
+ switch( aRecipientType )
+ {
+ case KCcRecipient: aMessageData.AppendCcAddressL( aString.Mid( tmp, len ) );break;
+ default:; // fall through
+ case KToRecipient: aMessageData.AppendToAddressL( aString.Mid( tmp, len ) );break;
+ }
+
+ ++endPos;
+ startPos = endPos;
+ }
+ }
+
+// ---------------------------------------------------------
+// CBaseHandler::Minimum()
+// ---------------------------------------------------------
+//
+TInt CBaseHandler::Minimum( RArray<TInt>& aArray ) const
+ {
+ // Sort array.
+ aArray.Sort();
+ // Return smallest
+ return aArray[0];
+ }
+
+
+// ---------------------------------------------------------
+// CBaseHandler::LaunchSchemeAppWithCommandLineL
+// ---------------------------------------------------------
+//
+void CBaseHandler::LaunchSchemeAppWithCommandLineL()
+ {
+ // Try launching...
+ RApaLsSession appArcSession;
+ User::LeaveIfError( appArcSession.Connect() );
+ CleanupClosePushL<RApaLsSession>( appArcSession );
+ TThreadId dummyId;
+
+ TApaAppInfo appInfo;
+ appArcSession.GetAppInfo( appInfo, KUidSchemeApp );
+
+ CApaCommandLine* cmdLine = CApaCommandLine::NewLC();
+ #if (defined(SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1) || defined(__SERIES60_27__) || defined(__SERIES60_28__))
+ cmdLine->SetLibraryNameL(appInfo.iFullName);
+ #else
+ cmdLine->SetExecutableNameL(appInfo.iFullName);
+ #endif
+ cmdLine->SetDocumentNameL( *iParsedUrl );
+ cmdLine->SetCommandL( EApaCommandCreate );
+
+ // Get the whole parameter list and put to the command line
+ if ( iParamList )
+ {
+ TInt size = iParamList->Size();
+ CBufFlat* store = CBufFlat::NewL( size );
+ CleanupStack::PushL( store );
+ RBufWriteStream outStream;
+ outStream.Open( *store );
+ CleanupClosePushL<RBufWriteStream>( outStream );
+ iParamList->ExternalizeL( outStream );
+ cmdLine->SetTailEndL( store->Ptr( 0 ) );
+ CleanupStack::PopAndDestroy( 2 ); // store, close outStream
+ }
+
+ User::LeaveIfError( appArcSession.StartApp( *cmdLine,dummyId) );
+ CLOG_WRITE( "Launched SchemeApp succesfully" )
+
+ CleanupStack::PopAndDestroy( 2 ); // close appArcSession, cmdLine
+ }
+
+// End of file