installationservices/swi/source/sisfile/swtypereginfo.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:21:33 +0300
branchRCL_3
changeset 65 7333d7932ef7
parent 34 741e5bba2bd1
child 66 8b7f4e561641
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2008-2010 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: 
*
*/


#include "swtypereginfo.h"
#include "arrayutils.h"
#include "ipcutil.h"
using namespace Swi;

EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf8& aSerializedArray)
	{
	TInt bufLen = sizeof(TInt);
	const TInt count = aSwTypeRegInfoArray.Count();
	for (TInt i=0; i<count; ++i)
	    {
	    bufLen += GetObjectSizeL(aSwTypeRegInfoArray[i]);
	    }

	aSerializedArray.ReAllocL(aSerializedArray.Length()+bufLen);
	RDesWriteStream ws(aSerializedArray);
	CleanupClosePushL(ws);

	ExternalizePointerArrayL(aSwTypeRegInfoArray, ws);

	ws.CommitL();
	CleanupStack::PopAndDestroy(&ws);
	}

EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeArrayL(RReadStream& aStream, RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray)
	{
	const TInt numElems = aStream.ReadInt32L();
	for (TInt i=0; i<numElems; ++i)
		{
		Usif::CSoftwareTypeRegInfo* info = Usif::CSoftwareTypeRegInfo::NewL(aStream);
		CleanupStack::PushL(info);
		aSwTypeRegInfoArray.AppendL(info);
		CleanupStack::Pop(info);
		}
	}

EXPORT_C void SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RBuf& aSerializedNames)
	{
	const TInt numNames = aSwTypeRegInfoArray.Count();
	
	TInt bufLen = 0;
	for (TInt i=0; i<numNames; ++i)
		{
		const Usif::CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
		bufLen += info.UniqueSoftwareTypeName().Length() + sizeof(TChar);
		}
	
	aSerializedNames.ReAllocL(aSerializedNames.Length()+bufLen);
	
	for (TInt i=0; i<numNames; ++i)
		{
		const Usif::CSoftwareTypeRegInfo& info = *aSwTypeRegInfoArray[i];
		aSerializedNames.Append(info.UniqueSoftwareTypeName());
		aSerializedNames.Append(static_cast<TChar>(KUniqueNameSeparator));
		}
	}

EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(const TDesC& aSerializedNames, RArray<TPtrC>& aUniqueSwTypeNames)
	{
	TPtrC buf(aSerializedNames);
	for (;;)
		{
		const TInt sep = buf.Locate(static_cast<TChar>(KUniqueNameSeparator));
		if (sep != KErrNotFound)
			{
			aUniqueSwTypeNames.AppendL(buf.Left(sep));
			buf.Set(buf.Mid(sep+1));
			}
		else
			{
			if (buf.Length() > 0)
				{
				User::Leave(KErrGeneral);
				}
			break;
			}
		}
	}

EXPORT_C void SoftwareTypeRegInfoUtils::ExtractMimeTypesL(const RPointerArray<Usif::CSoftwareTypeRegInfo>& aSwTypeRegInfoArray, RPointerArray<HBufC8>& aMimeTypes)
	{
	for (TInt i=0; i<aSwTypeRegInfoArray.Count(); ++i)
		{
		const RPointerArray<HBufC>& mimeTypes = aSwTypeRegInfoArray[i]->MimeTypes();
		for (TInt m=0; m<mimeTypes.Count(); ++m)
			{
			const TDesC& mimeType = *mimeTypes[m];
			HBufC8* mimeType8 = HBufC8::NewLC(mimeType.Length());
			mimeType8->Des().Copy(mimeType);

			aMimeTypes.AppendL(mimeType8);

			CleanupStack::Pop(mimeType8);
			}
		}
	}