--- /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 <e32base.h>
+#include <SyncMLObservers.h>
+#include <textresolver.h>
+
+
+#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