messagingfw/msgsrvnstore/server/src/msvpreferreddrivelist.cpp
changeset 0 8e480a14352b
child 22 d2c4c66342f3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/src/msvpreferreddrivelist.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,321 @@
+// MSVPREFERREDDRIVELIST.CPP
+
+// Copyright (c) 2008-2009 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:
+// USER INCLUDES
+// 
+//
+
+#include "msvpreferreddrivelist.h"
+#include "MSVPANIC.H"
+#ifdef _DEBUG
+#include <flogger.h>
+#endif
+
+CMsvPreferredDriveList* CMsvPreferredDriveList::iMsvPreferredDriveList = NULL;
+
+
+/**
+ * FUNCTION DEFINITIONS
+ */
+
+
+/**
+ * CreateL()
+ * @return CMsvPreferredDriveList*: The newly created CMsvPreferredDriveList object.
+ * 
+ * Function added as part of PREQ 557.
+ * It returns an instance of CMsvPreferredDriveList class. 
+ */
+CMsvPreferredDriveList* CMsvPreferredDriveList::CreateL()
+	{
+	CMsvPreferredDriveList* self = new(ELeave)CMsvPreferredDriveList;
+	CleanupStack::PushL(self);
+	
+	self->ConstructL();
+	iMsvPreferredDriveList = self;
+	
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+
+/**
+ * GetDriveList()
+ */
+CMsvPreferredDriveList* CMsvPreferredDriveList::GetDriveList()
+	{
+	__ASSERT_DEBUG(iMsvPreferredDriveList!=NULL, PanicServer(EMsvPreferredDriveListNotCreated));
+	return iMsvPreferredDriveList;
+	}
+	
+
+	
+/**
+ * CMsvPreferredDriveList()
+ *
+ * Default constructor.
+ */
+CMsvPreferredDriveList::CMsvPreferredDriveList()
+	{
+	
+	}
+
+
+
+/**
+ * ~CMsvPreferredDriveList()
+ *
+ * Destructor.
+ */
+CMsvPreferredDriveList::~CMsvPreferredDriveList()
+	{
+	iDrives->Close();
+	delete iDrives;
+	iDrives = NULL;
+	
+	iMsvPreferredDriveList = NULL;
+	}
+	
+	
+	
+/**
+ * ConstructL()
+ * @param None.
+ * @return None.
+ *
+ * Second phase constructor.
+ */
+void CMsvPreferredDriveList::ConstructL()
+	{
+	iDrives = new(ELeave)RArray<TMsvPreferredDrive>;
+	}
+	
+
+
+/**
+ * GetDriveNumber()
+ * @param TUint: Drive Id of the drive.
+ * @return TInt: Drive number of the drive in the preferred drive list.
+ *				 KErrNotFound if drive does not exist.
+ *
+ * Gets the drive number of the drive in the preferred drive list.
+ */
+TInt CMsvPreferredDriveList::GetDriveNumber(TUint aDriveId, TDriveNumber& aDriveNum)
+	{
+	if(0 == aDriveId)
+		{
+		aDriveNum = (*iDrives)[iCurDriveIndex].driveNum;
+		return KErrNone;
+		}
+	
+	TInt driveCount = iDrives->Count();
+	for(TInt index = 0; index < driveCount; ++index)
+		{
+		if(aDriveId == (*iDrives)[index].driveId)
+			{
+			aDriveNum = (*iDrives)[index].driveNum;
+			return KErrNone;
+			}
+		}
+	return KErrNotFound;
+	}
+
+
+
+/**
+ * Insert()
+ * @param TMsvPreferredDrive: The drive to be inserted into the preferred
+ *							  drive list.
+ * @param TInt: Position of the drive in the preferred drive list.
+ * @return None.
+ *
+ * Inserts a drive at the specified position in the preferred drive list.
+ */
+void CMsvPreferredDriveList::Insert(TMsvPreferredDrive aDrive, TInt aIndex)
+	{
+	if(aIndex <= iCurDriveIndex)
+		{
+		++iCurDriveIndex;
+		}
+	iDrives->Insert(aDrive, aIndex);
+	}
+	
+	
+	
+/**
+ * Remove()
+ * @param TInt: Position of the drive in the preferred drive list.
+ * @return None.
+ *
+ * Removes a drive from a specified position in the preferred drive list.
+ */
+void CMsvPreferredDriveList::Remove(TInt aIndex)
+	{
+	if(aIndex <= iCurDriveIndex && 0 < iCurDriveIndex)
+		{
+		--iCurDriveIndex;
+		}
+	iDrives->Remove(aIndex);
+	}
+
+
+
+/**
+ * DriveInfoL()
+ * @param TUint: Index of the drive in the preferred drive list.
+ * @param TMsvPreferredDrive&: Output parameter for drive info object.
+ * @return None.
+ */
+void CMsvPreferredDriveList::DriveInfoL(TUint aIndex, TMsvPreferredDrive& aDriveInfo) const
+	{
+	if(aIndex >= iDrives->Count())
+		{
+		User::Leave(KErrNotFound);
+		}
+	aDriveInfo = (*iDrives)[aIndex];	
+	}
+	
+
+
+/**
+ * UpdateDriveId()
+ * @param TUint: Index of the drive in the preferred drive list.
+ * @param TUint: New drive Id.
+ * @return TInt: KErrNotFound, if drive entry does not exist.
+ */	
+void CMsvPreferredDriveList::UpdateDriveIdL(TUint aIndex, TUint aDriveId)
+	{
+	if(aIndex >= iDrives->Count())
+		{
+		User::Leave(KErrNotFound);
+		}
+	(*iDrives)[aIndex].driveId = aDriveId;
+	}
+	
+	
+
+/**
+ * UpdateDriveStatus()
+ * @param TUint: Index of the drive in the preferred drive list.
+ * @param TUint: New drive status.
+ * @return TInt: KErrNotFound, if drive entry does not exist.
+ */	
+void CMsvPreferredDriveList::UpdateDriveStatusL(TUint aIndex, TDriveState aStatus)
+	{
+	if(aIndex >= iDrives->Count())
+		{
+		User::Leave(KErrNotFound);
+		}
+	(*iDrives)[aIndex].status = aStatus;
+	}
+
+
+
+// Returns index of the drive in the drive list. For test purpose only.
+TInt CMsvPreferredDriveList::GetDriveIndex(const TDriveNumber aDriveNum, TUint& aDriveIndex)
+	{
+	TInt count = Count();
+	for(TInt index = 0; index < count; ++index)
+		{
+		if(aDriveNum == (*iDrives)[index].driveNum)
+			{
+			aDriveIndex = index;
+			return KErrNone;
+			}
+		}
+	return KErrNotFound;
+	}
+	
+
+#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE)
+#ifdef _DEBUG
+// Destroys the preferred drive list.
+void CMsvPreferredDriveList::Destroy(CMsvPreferredDriveList*& aDriveList)
+	{
+	if(NULL != aDriveList)
+		{
+		delete aDriveList;
+		aDriveList = NULL;
+		}
+	}
+void CMsvPreferredDriveList::Print()
+	{
+	_LIT8(KLtBracket, "[");
+	_LIT8(KRtBracket, "]: DRIVE-NUM: ");
+	_LIT8(KDriveId, " DRIVE-ID: ");
+	_LIT8(KStatus, " STATUS: ");
+	_LIT8(KAvailable, "EMsvMessageStoreAvailableStatus");
+	_LIT8(KUnavailable, "EMsvMessageStoreUnavailableStatus");
+	_LIT8(KNotSupported, "EMsvMessageStoreNotSupportedStatus");
+	_LIT8(KDiskNotAvailable, "EMsvDriveDiskNotAvailableStatus");
+	_LIT8(KCorruptStore, "EMsvMessageStoreCorruptStatus");
+	_LIT8(KInvalid, "EMsvInvalidDriveStatus");
+		
+	RFileLogger logger;
+	if (logger.Connect() == KErrNone)
+		{
+		logger.CreateLog(_L("msgs"), _L("DriveList.txt"), EFileLoggingModeAppend);
+		logger.SetDateAndTime(EFalse, EFalse);
+		logger.Write(_L(" Preferred Drive List:"));
+		logger.Write(_L("--------------------------------"));
+		logger.Write(_L(""));
+		}
+	
+	TInt count = Count();
+	for(TInt index = 0; index < count; ++index)
+		{		
+		RBuf8 text;
+		text.Create(100);
+		text.Append(KLtBracket);
+		text.AppendNum(index);
+		text.Append(KRtBracket);
+		text.AppendNum((*iDrives)[index].driveNum);
+		text.Append(KDriveId);
+		text.AppendNum((*iDrives)[index].driveId);
+		text.Append(KStatus);
+		switch((*iDrives)[index].status)
+			{	
+			case EMsvMessageStoreAvailableStatus:
+				text.Append(KAvailable);
+				break;
+			case EMsvMessageStoreUnavailableStatus:
+				text.Append(KUnavailable);
+				break;
+			case EMsvMessageStoreNotSupportedStatus:
+				text.Append(KNotSupported);
+				break;
+			case EMsvDriveDiskNotAvailableStatus:
+				text.Append(KDiskNotAvailable);
+				break;
+			case EMsvMessageStoreCorruptStatus:
+				text.Append(KCorruptStore);
+				break;
+			case EMsvInvalidDriveStatus:
+				text.Append(KInvalid);
+				break;
+			}
+				
+		logger.Write(text);
+		text.Close();		
+		logger.Write(_L(""));
+		}
+	logger.CloseLog();
+	logger.Close();
+	}
+	
+	
+#endif
+#endif