diff -r 000000000000 -r 8466d47a6819 emailuis/emailui/src/FreestyleMessageHeaderURL.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/emailui/src/FreestyleMessageHeaderURL.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2007-2008 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: Message header URL +* +*/ + +#include "FreestyleMessageHeaderURL.h" + +EXPORT_C CFreestyleMessageHeaderURL* CFreestyleMessageHeaderURL::NewL() + { + CFreestyleMessageHeaderURL* self = new (ELeave) CFreestyleMessageHeaderURL; + return self; + } + +EXPORT_C CFreestyleMessageHeaderURL* CFreestyleMessageHeaderURL::NewL( TDesC* aScheme, + TDesC* aType, + TDesC* aItemId) + { + CFreestyleMessageHeaderURL* self = new (ELeave) CFreestyleMessageHeaderURL; + self->SetScheme( aScheme ); + self->SetType( aType ); + self->SetItemId( aItemId ); + return self; + } + +CFreestyleMessageHeaderURL::~CFreestyleMessageHeaderURL() + { + Reset(); + } + +EXPORT_C TDesC* CFreestyleMessageHeaderURL::Scheme() const + { + return iScheme; + } + +EXPORT_C void CFreestyleMessageHeaderURL::SetScheme(TDesC* aScheme) + { + if ( iScheme != aScheme ) + { + delete iScheme; + iScheme = NULL; + } + iScheme = aScheme; + } + +EXPORT_C TDesC* CFreestyleMessageHeaderURL::Type() const + { + return iType; + } + + +EXPORT_C void CFreestyleMessageHeaderURL::SetType (TDesC* aType) + { + if ( iType != aType ) + { + delete iType; + iType = NULL; + } + iType = aType; + } + +EXPORT_C TDesC* CFreestyleMessageHeaderURL::ItemId() const + { + return iItemId; + } + +EXPORT_C void CFreestyleMessageHeaderURL::SetItemId(TDesC* aItemId) + { + if ( iItemId != aItemId ) + { + delete iItemId; + iItemId = NULL; + } + iItemId = aItemId; + } + +EXPORT_C void CFreestyleMessageHeaderURL::InternalizeL(const TDesC& aUrlString) + { + Reset(); + + TInt index = aUrlString.Find( KURLSchemeSeparator ); + if ( index == KErrNotFound ) + { + User::Leave( KErrCorrupt ); + } + else + { + HBufC* Scheme = aUrlString.Left( index ).AllocL(); + SetScheme( Scheme ); + + TPtrC rest = aUrlString.Mid( index + KURLSchemeSeparator().Length() ); + index = rest.Find( KURLTypeSeparator ); + if ( index == KErrNotFound ) + { + User::Leave( KErrCorrupt ); + } + else + { + HBufC* type = rest.Left( index ).AllocL(); + SetType( type ); + HBufC* itemId = rest.Mid( index + KURLTypeSeparator().Length() ).AllocL(); + SetItemId( itemId ); + } + } + } + +EXPORT_C HBufC* CFreestyleMessageHeaderURL::ExternalizeL() + { + ASSERT( iScheme && iType && iItemId ); + + TInt len = 0; + len += iScheme->Length() + KURLSchemeSeparator().Length(); + len += iType->Length() + KURLTypeSeparator().Length(); + len += iItemId->Length(); + + HBufC* url = HBufC::NewL( len ); + TPtr urlPtr = url->Des(); + urlPtr.Append( *iScheme ); + urlPtr.Append( KURLSchemeSeparator ); + urlPtr.Append( *iType ); + urlPtr.Append( KURLTypeSeparator ); + urlPtr.Append( *iItemId ); + + return url; + } + +EXPORT_C TBool CFreestyleMessageHeaderURL::IsMessageHeaderURL(const TDesC& aUrlString) + { + TInt index = aUrlString.Find( KURLSchemeSeparator ); + if (index == KErrNotFound) + { + return EFalse; + } + else + { + return aUrlString.Left( index ).CompareF( KURLSchemeCmail ) == 0; + } + } + +CFreestyleMessageHeaderURL::CFreestyleMessageHeaderURL() + :iScheme( NULL ), + iType( NULL ), + iItemId( NULL ) + { + } + +void CFreestyleMessageHeaderURL::Reset() + { + delete iScheme; + iScheme = NULL; + delete iType; + iType = NULL; + delete iItemId; + iItemId = NULL; + }