diff -r 8e7494275d3a -r 4f0867e42d62 omads/omadsappui/AspSyncUtil/inc/AspSyncHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omads/omadsappui/AspSyncUtil/inc/AspSyncHandler.h Wed Sep 01 12:30:02 2010 +0100 @@ -0,0 +1,428 @@ +/* +* Copyright (c) 2005 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: Creates sync job and receives progress events +* +*/ + + +#ifndef ASPSYNCHANDLER_H +#define ASPSYNCHANDLER_H + +// INCLUDES +#include +#include +#include + + +#include "AspProgressDialog.h" +#include "AspState.h" +#include "AspProfile.h" + + + +// CLASS DECLARATION + + +/** +* MAspProgressDialogObserver +* +* Observer interface function for observing sync events. +*/ +NONSHARABLE_CLASS (MAspSyncObserver) + { + public: + /** + * Callback method + * Get's called when a synchronization has completed. + */ + virtual void HandleSyncEventL(TInt aError, TInt aInfo1) = 0; + }; + + +/** +* TAspSyncParam +* +* This class is used as sync parameter type. +*/ +NONSHARABLE_CLASS (TAspSyncParam) + { + public: + TAspSyncParam(TInt aApplicationId); + + public: + // calling application id + TInt iApplicationId; + + // profile id + TInt iProfileId; + + // job id + TInt iJobId; + + // taskId + TInt iTaskId; + + // sync direction + TInt iSyncDirection; + + // progress dialog modality + TInt iDialogMode; + }; + + +/** +* CAspSyncHandler +* +* CAspSyncHandler handles data synchronizing. +*/ +NONSHARABLE_CLASS (CAspSyncHandler) : public CBase, + public MAspProgressDialogObserver, + public MAspActiveCallerObserver, + public MSyncMLEventObserver, + public MSyncMLProgressObserver + + { + + public: + /** + * Two-phased constructor. + */ + static CAspSyncHandler* NewL(const TAspParam& aParam); + + /** + * Destructor. + */ + virtual ~CAspSyncHandler(); + + private: + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * C++ default constructor. + */ + CAspSyncHandler(const TAspParam& aParam); + + + private: + /** + * From MAspProgressDialogObserver + * Gets called when sync progress dialog closes. + * @param aButtonId Button id. + * @return None + */ + void HandleDialogEventL(TInt aButtonId); + + + private: // from MAspActiveCallerObserver + /** + * From MAspActiveCallerObserver + * Called when CAspActiveCaller completes. + * @param aCallId. + * @return None. + */ + void HandleActiveCallL(TInt aCallId); + + + private: // from MSyncMLEventObserver + + /** + * From MSyncMLEventObserver + * Called when SyncML session events oocur. + * @param aEvent. + * @param aIdentifier. + * @param aError. + * @param aAdditionalData. + * @return None. + */ + void OnSyncMLSessionEvent(TEvent aEvent, TInt aIdentifier, TInt aError, TInt aAdditionalData); + + + private: //from MSyncMLProgressObserver + + /** + * Receives notification of a synchronisation error. + * @param aErrorLevel The error level. + * @param aError The type of error. This is one of the SyncMLError error values. + * @param aTaskId The ID of the task for which the error occurred. + * @param aInfo1 An integer that can contain additional information about the error. Normally 0. + * @param aInfo2 An integer that can contain additional information about the error. Normally 0. + * @return None. + */ + void OnSyncMLSyncError(TErrorLevel aErrorLevel, TInt aError, TInt aTaskId, TInt aInfo1, TInt aInfo2); + + /** + * Receives notification of synchronisation progress. + * @param aStatus The current status, e.g. 'Connecting'. + * @param aInfo1 An integer that can contain additional information about the progress. + * @param aInfo2 An integer that can contain additional information about the progress. + */ + void OnSyncMLSyncProgress(TStatus aStatus, TInt aInfo1, TInt aInfo2); + + /** + * Receives notification of modifications to synchronisation tasks. + * @param aTaskId The ID of the task. + * @param aClientModifications Modifications made on the clients Data Store. + * @param aServerModifications Modifications made on the server Data Store. + */ + void OnSyncMLDataSyncModifications(TInt aTaskId, const TSyncMLDataSyncModifications& aClientModifications, const TSyncMLDataSyncModifications& aServerModifications); + + private: + void OnSyncMLDataSyncModificationsL(TInt aTaskId, const TSyncMLDataSyncModifications& aClientModifications, const TSyncMLDataSyncModifications& aServerModifications); + + + private: + /** + * Shows progress dialog. + * @param None. + * @return Error code. + */ + void ShowProgressDialogL(); + + /** + * Shows error dialog. + * @param None. + * @return Error code. + */ + void ShowErrorNote(); + + /** + * Completes sync operation. + * @param aError. + * @return None. + */ + void SynchronizeCompleted(TInt aError); + + public: + + /** + * Performs synchronization. + * @param aSyncParam. + * @return None + */ + void SynchronizeL(TAspSyncParam& aSyncParam); + + /** + * Sets sync observer. + * @param aObserevr. + * @return None + */ + void SetObserver(MAspSyncObserver* aObserver); + + + private: + /** + * Performs synchronization. + * @param aSyncParam. + * @return None + */ + void DoSynchronizeL(TAspSyncParam& aSyncParam); + + private: + /** + * Utility function. + * @return CAspResHandler. + */ + CAspResHandler* ResHandlerL(); + + /** + * Utility function. + * @return Progress dialog. + */ + CAspProgressDialog* Dialog(); + + /** + * Utility function. + * @return Sync state. + */ + CAspState* State(); + + public: + + /** + * Utility function. + * @return ETrue if sync is currently running, EFalse otherwise. + */ + TBool SyncRunning(); + + private: + /** + * Updates progress dialog. + * @param None. + * @return None. + */ + void UpdateDialogL(); + + /** + * Updates progress dialog. + * @param None. + * @return None. + */ + void UpdateDialog(); + + /** + * Get list profiles that can be used for syncing. + * @param aApplicationId Application (sync content) id. + * @return None. + */ + CAspProfileList* GetProfileListLC(TInt aApplicationId); + + /** + * Utility function. + * @param None. + * @return None. + */ + void CreateContentListL(); + + /** + * Utility function. + * @param None. + * @return ETrue if server alert sync, EFalse otherwise. + */ + TBool IsServerAlertSync(); + + /** + * Opens sync session. + * @param None. + * @return None. + */ + void OpenSyncSessionL(); + + /** + * Closes sync session. + * @param None. + * @return None. + */ + void CloseSyncSession(); + + /** + * Calculates progress count. + * @param aC Phone side sync events. + * @param aS Server side sync events. + * @return Progress count. + */ + TInt ProgressCount(const TSyncMLDataSyncModifications& aC, + const TSyncMLDataSyncModifications& aS); + + /** + * Checks that sync profile has valid local database. + * @param aProfileId. + * @return None. + */ + void CheckLocalDatabaseL(TInt aProfileId); + + /** + * Checks whether progress dialog needs to be updated. + * @param None. + * @return Boolean. + */ + TBool UpdateRequired(); + + /** + * Completes sync with short delay. + * @param aError. + * @return None. + */ + void CompleteWithDelay(TInt aError); + + TBool IsRoamingL(); + + void ReadRepositoryL(TInt aKey, TInt& aValue); + + TInt BearerTypeL(TInt aProfileId); + +#ifdef _DEBUG + private: // debug code + void GetSyncStatusText(TDes& aText, MSyncMLProgressObserver::TStatus aStatus); + void GetSyncEventText(TDes& aText, MSyncMLEventObserver::TEvent aEvent); + void LogSessionEvent(TEvent& aEvent, TInt aIdentifier, TInt aError); + void LogProgressEvent(TStatus& aStatus, TInt aInfo1); + void LogErrorEvent(TErrorLevel aErrorLevel, TInt aError); + void LogModificationEvent(TInt aTaskId, const TSyncMLDataSyncModifications& aC, const TSyncMLDataSyncModifications& aS); + void LogModificationEvent(TInt aTaskId, const TDesC& aText); +#endif + + private: + // id of the calling application + TInt iApplicationId; + + // profile id + TInt iProfileId; + + // sync session + RSyncMLSession iSyncSession; + + // sync job + RSyncMLDataSyncJob iSyncJob; + + // needed for getting data provider names + CAspContentList* iContentList; + + // shows sync progress dialog + CAspProgressDialog* iProgressDialog; + + // sync handler state + CAspState* iState; + + // reads strings + CAspResHandler* iResHandler; + + // for making function call via active scheduler + CAspActiveCaller* iActiveCaller; + + // is sync currently running + TBool iSyncRunning; + + // is current sync servert alert sync + TBool iServerAlertSync; + + // is sync session open + TBool iSyncSessionOpen; + + // sync error code + TInt iSyncError; + + // current sync job id + TInt iCurrentSyncJobId; + + // sync observer, used for sending sync completion event + MAspSyncObserver* iSyncObserver; + + // for converting error code to error string + CTextResolver* iTextResolver; + + // has "sync completed" event arrived + TBool iCompleteEventReceived; + + // has "sync stopped" event arrived + TBool iStopEventReceived; + + // sync modality + TBool iIsSynchronousOperation; + + // for stopping code until sync is finished + CActiveSchedulerWait* iWait; + + }; + + + + + +#endif // ASPSYNCHANDLER_H + + +// End of file \ No newline at end of file