--- /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