--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimprotocols/phonebooksync/inc/Phonebook.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,484 @@
+// Copyright (c) 2002-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:
+// Header file for Phonebook Synchroniser's CPhoneBook class which stores
+// the parameters for each phonebook, including the Look-Up Table, Phonebook
+// store handle and flags for the synchroniser engine.
+// This class can be accessed from either the server side or engine side.
+//
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef __PHONEBOOK_H__
+#define __PHONEBOOK_H__
+
+#include <etelmm.h>
+
+#include "phbksync.h"
+#include "phbksynclog.h"
+
+
+/**
+ * Default identity for a phonebook before its identity is read.
+ */
+_LIT8(KPhonebookIdUnknown, "unknown");
+
+
+/**
+ * State of a slot in the Look-Up Table.
+ */
+enum TPhonebookSlotState
+ {
+ ESlotUnconfirmed,
+ ESlotEmpty,
+ ESlotUsedAvailable,
+ ESlotUsedNotAvailable,
+ ESlotHiddenAvailable,
+ ESlotHiddenNotAvailable
+ };
+
+
+/**
+ * This class is used to store the Phonebook Sync Server's internal phonebook
+ * parameters and Look-Up Table. The Look-Up Table is used to store the Contacts
+ * UID, slot number and slot state.
+ */
+class CPhoneBook : public CBase
+ {
+private:
+ class TLookUpTableEntry
+ {
+ public:
+ TLookUpTableEntry();
+
+ public:
+ TContactItemId iContactId;
+ TPhonebookSlotState iSlotState;
+ };
+
+public:
+ static CPhoneBook* NewL(TUid aPhonebookUid);
+ void ConstructL();
+ ~CPhoneBook();
+
+ inline TUid GetPhonebookUid() const;
+
+ inline RPhoneBookSession::TPhonebookSyncMode GetSyncMode() const;
+ inline void SetSyncMode(RPhoneBookSession::TPhonebookSyncMode aSyncMode);
+
+ inline TInt GetPhBkInfoRetrievedResult() const;
+ inline void SetPhBkInfoRetrievedResult(TInt aErrorCode);
+
+ inline RPhoneBookSession::TSyncState GetSyncState() const;
+ inline void SetSyncState(RPhoneBookSession::TSyncState aSyncState);
+
+ inline TInt GetLastSyncError() const;
+ inline void SetLastSyncError(TInt aLastSyncError);
+
+ inline TContactItemId GetTemplateId() const;
+ inline void SetTemplateId(TContactItemId aId);
+
+ inline TContactItemId GetGroupId() const;
+ inline void SetGroupId(TContactItemId aId);
+
+ inline const RPhoneBookSession::TContactFieldsV3& GetContactFields() const;
+ inline void SetContactFields(const RPhoneBookSession::TContactFieldsV3& aContactFields);
+
+ inline const RMobilePhoneBookStore& GetPhoneBookStore(RMobilePhone& aPhone);
+ inline void ClosePhoneBookStore();
+
+ inline const RMobilePhoneBookStore::TMobilePhoneBookInfoV5& GetPhoneBookInfo() const;
+ inline void SetPhoneBookInfo(const RMobilePhoneBookStore::TMobilePhoneBookInfoV5& aPhBkInfo);
+ inline void AdjustPhoneBookInfoUsedEntries(TInt aChange);
+
+ inline TInt GetLookUpTableSize() const;
+ void SetLookUpTableSizeL(TInt aSize);
+ void ClearLookUpTable();
+
+ TInt IsEntryInTable(TContactItemId aContactId) const;
+ TInt UpdateEntryInTable(TInt aSlotNum, TContactItemId aContactId);
+ TInt UpdateEntryInTable(TInt aSlotNum, TContactItemId aContactId,
+ TPhonebookSlotState aSlotState);
+ TContactItemId GetContactIdFromSlotNum(TInt aSlotNum) const;
+ TInt GetSlotNumFromContactId(TContactItemId aContactId) const;
+
+ TInt GetNumFreeSlots() const;
+ TInt GetFirstEmptySlot() const;
+ void GetMatchingEntries(TPhonebookSlotState aSlotState,
+ RArray<TInt>& aEntries) const;
+
+ void LogLookUpTable() const;
+
+private:
+ CPhoneBook(TUid aPhonebookUid);
+
+private:
+ TUid iPhonebookUid;
+ RPhoneBookSession::TPhonebookSyncMode iSyncMode;
+ TInt iPhBkInfoRetrievedResult;
+ RPhoneBookSession::TSyncState iSyncState;
+ TInt iLastSyncError;
+ TContactItemId iTemplateId;
+ TContactItemId iGroupId;
+ RPhoneBookSession::TContactFieldsV3 iContactFieldsV3;
+ RMobilePhoneBookStore iPhonebookStore;
+ RMobilePhoneBookStore::TMobilePhoneBookInfoV5 iPhBkInfoV5;
+ CArrayFixFlat<TLookUpTableEntry> iLookUpTable;
+ };
+
+
+/**
+ * Return the ICC phonebook type. This will be one of the supported
+ * phonebooks.
+ *
+ * @return UID value used for this phone store.
+ */
+inline TUid CPhoneBook::GetPhonebookUid() const
+ {
+ return iPhonebookUid;
+ } // CPhoneBook::GetPhonebookUid
+
+
+/**
+ * Return the phonebook cache state.
+ *
+ * @return The RPhoneBookSession::TSyncState cache state for this phonebook.
+ */
+inline RPhoneBookSession::TSyncState CPhoneBook::GetSyncState() const
+ {
+ return iSyncState;
+ } // CPhoneBook::GetSyncState
+
+
+/**
+ * Set the phonebook cache state.
+ *
+ * @param aSyncState The phonebook cache state.
+ */
+inline void CPhoneBook::SetSyncState(RPhoneBookSession::TSyncState aSyncState)
+ {
+ iSyncState = aSyncState;
+ } // CPhoneBook::SetSyncState
+
+
+/**
+ * Return last error from phone sync operation.
+ *
+ * @return Returns the error stored during the last synchronisation.
+ */
+inline TInt CPhoneBook::GetLastSyncError() const
+ {
+ return iLastSyncError;
+ } // CPhoneBook::GetLastSyncError
+
+
+/**
+ * Set last error from a synchronisation operation for this phonebook.
+ *
+ * @param aLastSyncError New last error value.
+ */
+inline void CPhoneBook::SetLastSyncError(TInt aLastSyncError)
+ {
+ iLastSyncError = aLastSyncError;
+ } // CPhoneBook::SetLastSyncError
+
+
+/**
+ * Provides the contact fields supported by the phonebook.
+ *
+ * @return Returns a RPhoneBookSession::TContactFieldsV3 field format object.
+ */
+inline const RPhoneBookSession::TContactFieldsV3& CPhoneBook::GetContactFields() const
+ {
+ return iContactFieldsV3;
+ } // CPhoneBook::GetContactFields
+
+
+/**
+ * Sets the contact fields supported by the phonebook.
+ *
+ * @param aContactFields Contacts field format data.
+ */
+inline void CPhoneBook::SetContactFields(const RPhoneBookSession::TContactFieldsV3& aContactFields)
+ {
+ iContactFieldsV3 = aContactFields;
+ } // CPhoneBook::SetContactFields
+
+
+/**
+ * Get the Phonebook Store used by the engine for the phonebook.
+ *
+ * @param aPhone Handle to the mobile phone, used to open the store if needed.
+ *
+ * @return The mobile phone store handle.
+ */
+inline const RMobilePhoneBookStore& CPhoneBook::GetPhoneBookStore(RMobilePhone& aPhone)
+ {
+ //
+ // Make sure the store is open...
+ //
+ if (iPhBkInfoRetrievedResult == KErrNone &&
+ iPhonebookStore.SubSessionHandle() == 0)
+ {
+ TInt result(KErrNotSupported);
+
+ if (iPhonebookUid == KUidIccGlobalAdnPhonebook)
+ {
+ result = iPhonebookStore.Open(aPhone,
+ KETelIccAdnPhoneBook,
+ KEtelGsmPhoneBookType);
+ LOGPARAMS2(_L8("OpenPhoneBookStore(): ADN result=%d"), result);
+ }
+ else if (iPhonebookUid == KUidIccGlobalSdnPhonebook)
+ {
+ result = iPhonebookStore.Open(aPhone,
+ KETelIccSdnPhoneBook,
+ KEtelGsmPhoneBookType);
+ LOGPARAMS2(_L8("OpenPhoneBookStore(): SDN result=%d"), result);
+ }
+ else if (iPhonebookUid == KUidIccGlobalLndPhonebook)
+ {
+ result = iPhonebookStore.Open(aPhone,
+ KETelIccLndPhoneBook,
+ KEtelGsmPhoneBookType);
+ LOGPARAMS2(_L8("OpenPhoneBookStore(): LND result=%d"), result);
+ }
+ else if (iPhonebookUid == KUidUsimAppAdnPhonebook)
+ {
+ result = iPhonebookStore.Open(aPhone,
+ KETelIccAdnPhoneBook,
+ KEtelUSimPhoneBookType);
+ LOGPARAMS2(_L8("OpenPhoneBookStore(): USIM ADN result=%d"), result);
+ }
+ else if (iPhonebookUid == KUidIccGlobalFdnPhonebook)
+ {
+ result = iPhonebookStore.Open(aPhone,
+ KETelIccFdnPhoneBook,
+ KEtelGsmPhoneBookType);
+ LOGPARAMS2(_L8("OpenPhoneBookStore(): FDN result=%d"), result);
+ }
+
+ //
+ // Store any failures so that store will not be reopened later...
+ //
+ if (result != KErrNone)
+ {
+ iPhBkInfoRetrievedResult = result;
+ }
+ else if (iPhonebookStore.SubSessionHandle() == 0)
+ {
+ iPhBkInfoRetrievedResult = KErrNotSupported;
+ }
+ }
+
+ //
+ // Return the phone store. A check is made later to ensure it is valid
+ // before use.
+ //
+ return iPhonebookStore;
+ } // CPhoneBook::GetPhoneBookStore
+
+
+/**
+ * Closes the Phonebook Store used by the engine for this phonebook.
+ */
+inline void CPhoneBook::ClosePhoneBookStore()
+ {
+ iPhonebookStore.Close();
+ } // CPhoneBook::ClosePhoneBookStore
+
+
+/**
+ * Returns the ICC entry template ID for this phonebook.
+ *
+ * @return Contacts Id representing the template UID.
+ */
+inline TContactItemId CPhoneBook::GetTemplateId() const
+ {
+ return iTemplateId;
+ } // CPhoneBook::GetTemplateId
+
+
+/**
+ * Sets the ICC entry template ID for this phonebook.
+ *
+ * @param aId Contacts Id representing the template UID.
+ */
+inline void CPhoneBook::SetTemplateId(TContactItemId aId)
+ {
+ iTemplateId = aId;
+ } // CPhoneBook::SetTemplateId
+
+
+/**
+ * Returns the ICC entry group ID.
+ *
+ * @return Contacts Id representing the group UID.
+ */
+inline TContactItemId CPhoneBook::GetGroupId() const
+ {
+ return iGroupId;
+ } // CPhoneBook::GetGroupId
+
+
+/**
+ * Sets the ICC entry group ID for this phonebook.
+ *
+ * @param aId Contacts Id representing the group UID.
+ */
+inline void CPhoneBook::SetGroupId(TContactItemId aId)
+ {
+ iGroupId = aId;
+ } // CPhoneBook::SetGroupId
+
+
+/**
+ * Returns the result for this phonebook which specifies if the PhBkInfo data
+ * has been stored or if the phonebook is not supported.
+ *
+ * @return The PhBkInfo retrieved result.
+ */
+inline TInt CPhoneBook::GetPhBkInfoRetrievedResult() const
+ {
+ return iPhBkInfoRetrievedResult;
+ } // CPhoneBook::GetPhBkInfoRetrievedResult
+
+
+/**
+ * Sets the PhBkInfo retrieved results to say if the data has been retrieved
+ * and stored, or if the phonebook is not supported.
+ *
+ * @param aFlag PhBkInfo retrieved result.
+ */
+inline void CPhoneBook::SetPhBkInfoRetrievedResult(TInt aErrorCode)
+ {
+ iPhBkInfoRetrievedResult = aErrorCode;
+ } // CPhoneBook::SetPhBkInfoRetrievedResult
+
+
+/**
+ * Return the current setting for the phonebook synchronisation mode.
+ *
+ * @return A RPhoneBookSession::TPhonebookSyncMode phonebook synchronisation mode.
+ */
+inline RPhoneBookSession::TPhonebookSyncMode CPhoneBook::GetSyncMode() const
+ {
+ return iSyncMode;
+ } // CPhoneBook::GetSyncMode
+
+
+/**
+ * Set a new value for the phonebook synchronisation mode.
+ *
+ * @param aSyncMode Phonebook synchronisation mode.
+ */
+inline void CPhoneBook::SetSyncMode(RPhoneBookSession::TPhonebookSyncMode aSyncMode)
+ {
+ iSyncMode = aSyncMode;
+ } // CPhoneBook::SetSyncMode
+
+
+/**
+ * Get the PhBkInfo parameter data for this phonebook.
+ *
+ * @return A RMobilePhoneBookStore::TMobilePhoneBookInfoV5 structure containing
+ * information about the phonebook.
+ */
+inline const RMobilePhoneBookStore::TMobilePhoneBookInfoV5& CPhoneBook::GetPhoneBookInfo() const
+ {
+ return iPhBkInfoV5;
+ } // CPhoneBook::GetPhoneBookInfo
+
+
+/**
+ * Set the Phonebook Info parameter for this phonebook. This function can safely accept
+ * a V1 and V2 structures if they are cast to a V5.
+ *
+ * @param aPhBkInfo The PhBkInfo for this phonebook.
+ */
+inline void CPhoneBook::SetPhoneBookInfo(const RMobilePhoneBookStore::TMobilePhoneBookInfoV5& aPhBkInfo)
+ {
+ //
+ // For the V1 and V2 format info we need to safely initialise V5 attributes that
+ // are not handled by static cast copy...
+ //
+ if (aPhBkInfo.ExtensionId() == RMobilePhoneStore::KETelMobilePhonebookStoreV1)
+ {
+ static_cast<RMobilePhoneBookStore::TMobilePhoneBookInfoV1&>(iPhBkInfoV5) =
+ static_cast<const RMobilePhoneBookStore::TMobilePhoneBookInfoV1&>(aPhBkInfo);
+
+ iPhBkInfoV5.iPhBkMode.Zero();
+ iPhBkInfoV5.iMaxSecondNames = -1;
+ iPhBkInfoV5.iMaxTextLengthSecondName = -1;
+ iPhBkInfoV5.iMaxAdditionalNumbers = -1;
+ iPhBkInfoV5.iMaxNumLengthAdditionalNumber = -1;
+ iPhBkInfoV5.iMaxGroupNames = -1;
+ iPhBkInfoV5.iMaxTextLengthGroupName = -1;
+ iPhBkInfoV5.iMaxEmailAddr = -1;
+ iPhBkInfoV5.iMaxTextLengthEmailAddr = -1;
+ }
+ else if (aPhBkInfo.ExtensionId() == RMobilePhoneStore::KETelMobilePhonebookStoreV2)
+ {
+ static_cast<RMobilePhoneBookStore::TMobilePhoneBookInfoV2&>(iPhBkInfoV5) =
+ static_cast<const RMobilePhoneBookStore::TMobilePhoneBookInfoV2&>(aPhBkInfo);
+
+ iPhBkInfoV5.iMaxSecondNames = -1;
+ iPhBkInfoV5.iMaxTextLengthSecondName = -1;
+ iPhBkInfoV5.iMaxAdditionalNumbers = -1;
+ iPhBkInfoV5.iMaxNumLengthAdditionalNumber = -1;
+ iPhBkInfoV5.iMaxGroupNames = -1;
+ iPhBkInfoV5.iMaxTextLengthGroupName = -1;
+ iPhBkInfoV5.iMaxEmailAddr = -1;
+ iPhBkInfoV5.iMaxTextLengthEmailAddr = -1;
+
+ iPhBkInfoV5 = aPhBkInfo;
+ }
+ else
+ {
+ iPhBkInfoV5 = aPhBkInfo;
+ }
+ } // CPhoneBook::SetPhoneBookInfo
+
+
+/**
+ * Adjusted the count of used entries in the PhBkInfo data. This
+ * is the same as performing a get and set combination.
+ *
+ * @note The data can only be updated if the phone TSY supports it in the
+ * first place.
+ *
+ * @param aChange The modification value (e.g. -1 or 1).
+ */
+inline void CPhoneBook::AdjustPhoneBookInfoUsedEntries(TInt aChange)
+ {
+ if (iPhBkInfoV5.iUsedEntries != -1)
+ {
+ iPhBkInfoV5.iUsedEntries += aChange;
+ }
+ } // CPhoneBook::AdjustPhoneBookInfoUsedEntries
+
+
+/**
+ * Returns the current size of the Look-Up Table.
+ */
+inline TInt CPhoneBook::GetLookUpTableSize() const
+ {
+ return iLookUpTable.Count();
+ } // CPhoneBook::GetLookUpTableSize
+
+
+#endif // __PHONEBOOK_H__