browserutilities/feedsengine/FeedsServer/Client/src/FeedsServerClient.cpp
changeset 0 dd21522fd290
child 36 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/feedsengine/FeedsServer/Client/src/FeedsServerClient.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,363 @@
+/*
+* 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 the License "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:  The client side connection to the FeedsSever.
+*
+*/
+
+
+#include "FeedsServerClient.h"
+#include "FeedsServerMsg.h"
+#include "FeedsServerSettings.h"
+#include "Logger.h"
+#include "ClientRequestHandlers.h"
+#include "FeedRequestHandlers.h"
+#include "FolderItemRequestHandlers.h"
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::RFeedsServer
+//
+// C++ default constructor can NOT contain any code that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RFeedsServer::RFeedsServer( MFeedsServerObserver& aObserver, TInt aFolderListId ):
+        iObserver(aObserver), iFolderListId(aFolderListId)
+    {
+
+    CClientRequestHandler *requestHandler = NULL;
+
+    TRAP_IGNORE (
+    {
+    requestHandler =   CClientRequestHandler::NewL( this,  aFolderListId  );
+
+    CleanupStack::PushL(requestHandler);
+    iActiveRequests.AppendL(requestHandler);
+    CleanupStack::Pop(requestHandler);
+    });
+
+
+#ifdef TRACK_LEAKS
+    delete gLeakTracker;
+    gLeakTracker = NULL;
+
+    TRAP_IGNORE(gLeakTracker = CLeakTracker::NewL(_L("FeedsServerClient")));
+#endif
+    }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::Connect
+//
+// Connects to the server.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RFeedsServer::Connect()
+    {
+    return iActiveRequests[0]->GetFeedInterface()->Connect();
+    }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::Close
+//
+// Closes the connection to the server.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RFeedsServer::Close()
+    {
+    
+    iActiveRequests[0]->GetFeedInterface()->Close();
+
+    iActiveRequests.ResetAndDestroy();
+
+#ifdef TRACK_LEAKS
+    delete gLeakTracker;
+    gLeakTracker = NULL;
+#endif
+    }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::Version
+//
+// Defines server version number
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TVersion RFeedsServer::Version() const
+    {
+    return(TVersion(KFeedsServerMajorVersionNumber, KFeedsServerMinorVersionNumber,
+            KFeedsServerBuildVersionNumber));
+    }
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::RequestHandlerCompletedL
+//
+// Notifies the observer that the request is completed.
+// -----------------------------------------------------------------------------
+//
+void RFeedsServer::RequestHandlerCompletedL(CTransaction& aTrans, TInt aStatus)
+    {
+    TFeedsServerSetting setting;
+
+    // Notify the observer if an error occurred.
+    switch (aTrans.Type())
+        {
+        case CTransaction::EFetchSettings:
+            {
+            // Notify the observer that the request has completed.
+            if (aStatus == KErrNone)
+                {
+                setting = iActiveRequests[0]->GetFeedInterface()->Settings();
+                iSettings.SetAutoUpdate(setting.iAutoUpdate);
+                iSettings.SetAutoUpdateAP(setting.iAutoUpdateAP);
+                iSettings.SetAutoUpdateFreq(setting.iAutoUpdateFreq);
+                iSettings.SetAutoUpdateWhileRoaming(setting.iAutoUpdateWhileRoaming);
+                }
+            iObserver.SettingsChanged( aStatus );
+
+            break;
+            }
+
+        case CTransaction::EWatchForSettingChanges:
+            {
+            // Only notify the user if an error occurred.
+            if (aStatus != KErrNone)
+                {
+                iObserver.SettingsChanged(aStatus);
+                }
+            break;
+            }
+
+        case CTransaction::EChangeSettings:
+            break;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::RequestCompletedL
+//
+// Called to handle the response.
+// -----------------------------------------------------------------------------
+void RFeedsServer::RequestCompleted(CTransaction* aTrans, TInt /*aStatus*/)
+    {
+    // Notify the observer if an error occurred.
+    switch (aTrans->Type())
+        {
+        //Server related
+        case CTransaction::EFetchSettings:
+        case CTransaction::EWatchForSettingChanges:
+        case CTransaction::EChangeSettings: 
+            {
+            TRAP_IGNORE(RequestHandlerCompletedL(*aTrans, aTrans->GetStatusCode()));
+            break;
+            }
+        //Feed related
+        case CTransaction::EFetchFeed:
+        case CTransaction::EUpdateItemStatus:
+            {
+        	TRAP_IGNORE(iActiveRequests[0]->GetFeedsServerFeed()->RequestHandlerCompletedL(*aTrans, aTrans->GetStatusCode()));
+        	break;
+            }
+        //Folder item related
+        default:
+            {
+        	TRAP_IGNORE(iActiveRequests[0]->GetFeedsServerFolderItem()->RequestHandlerCompletedL(*aTrans, aTrans->GetStatusCode()));
+        	break;	
+            }
+        }
+    }
+       
+// -----------------------------------------------------------------------------
+// RFeedsServer::NetworkConnectionNeededL
+//
+// Request to create a network connection.
+// -----------------------------------------------------------------------------
+ void RFeedsServer::NetworkConnectionNeededL(TInt* aConnectionPtr, TInt& aSockSvrHandle,
+            TBool& aNewConn, TApBearerType& aBearerType)
+   {
+   TBool feedOperationRequested = EFalse;
+   TBool FolderItemOperationRequested = EFalse;
+   CClientRequestHandler *requestHandler = iActiveRequests[0];
+
+   RFeed*	feedsServerFeed  = requestHandler->GetFeedsServerFeed(); 
+   CFeedRequestHandler *feedReqHandler = feedsServerFeed->iActiveRequests[0];
+   feedOperationRequested = feedReqHandler->GetOperationRequested();
+   
+   RFolderItem*  feedsServerFolderItem = requestHandler->GetFeedsServerFolderItem();
+   CFolderItemRequestHandler *folderReqHandler = feedsServerFolderItem->iActiveRequests[0];   
+   FolderItemOperationRequested = folderReqHandler->GetOperationRequested();
+   
+
+   if( feedOperationRequested )
+      {
+      feedsServerFeed->NetworkConnectionNeededL(aConnectionPtr, aSockSvrHandle, aNewConn, aBearerType);
+      }
+   else if ( FolderItemOperationRequested )
+      {
+      feedsServerFolderItem->NetworkConnectionNeededL(aConnectionPtr, aSockSvrHandle, aNewConn, aBearerType);
+      }
+   }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::DebugPrintTablesL
+//
+// Print tables of database.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RFeedsServer::DebugPrintTablesL()
+    {
+    iActiveRequests[0]->GetFeedInterface()->DebugPrintTablesL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::DisconnectManualUpdateConnectionL
+//
+// Disconnect connection provided by client for manual update.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RFeedsServer::DisconnectManualUpdateConnectionL()
+    {
+    iActiveRequests[0]->GetFeedInterface()->DisconnectManualUpdateConnectionL();
+    }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::Settings
+//
+// Once fetched, it returns the Settings.  This method panics the client if it is 
+// called before the Settings is available.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TFeedsServerSettings RFeedsServer::Settings() const
+    {
+    return iSettings;
+    }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::SettingsL
+//
+// Returns feed related settings. 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TFeedsServerSettings RFeedsServer::FetchServerSettingsSyncL() const
+    {
+    TFeedsServerSetting setting;
+	TFeedsServerSettings settings;
+    CClientRequestHandler *requestHandler = iActiveRequests[0];
+
+    RFeedsServer* self = const_cast<RFeedsServer*>(this);
+
+    self->iActiveRequests[0]->GetFeedInterface()->GetSettingsL(setting, EFalse);
+    
+    settings.SetAutoUpdate(setting.iAutoUpdate);
+    settings.SetAutoUpdateAP(setting.iAutoUpdateAP);
+    settings.SetAutoUpdateFreq(setting.iAutoUpdateFreq);
+    settings.SetAutoUpdateWhileRoaming(setting.iAutoUpdateWhileRoaming);
+
+    return settings;
+    }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::UpdateSettingsL
+//
+// Requests the server to change its settings to match the provided values. 
+// Some care is needed by the client to prevent settings loss if SettingsChanged
+// was called after it called SettingsL.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RFeedsServer::UpdateSettingsL( const TFeedsServerSettings& aNewSettings )
+    {
+
+    TFeedsServerSetting setting;
+
+    setting.iAutoUpdate = aNewSettings.AutoUpdate();
+    setting.iAutoUpdateAP = aNewSettings.AutoUpdateAP();
+    setting.iAutoUpdateFreq = aNewSettings.AutoUpdateFreq();
+    setting.iAutoUpdateWhileRoaming = aNewSettings.AutoUpdateWhileRoaming();
+
+    iActiveRequests[0]->GetFeedInterface()->SetSettingsL(setting);
+
+    iPendingSettings = aNewSettings;
+    }
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::WatchSettingsL
+//
+// Sets up a notifier to execute when the settings change.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RFeedsServer::WatchSettingsL()
+    {
+    iActiveRequests[0]->GetFeedInterface()->WatchSettingsL();
+    }
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::FetchServerSettingsL
+//
+// Fetch the feeds server settings.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RFeedsServer::FetchServerSettingsL()
+    {
+    TFeedsServerSetting setting;
+    TFeedsServerSettings settings;
+        
+    iActiveRequests[0]->GetFeedInterface()->GetSettingsL(setting);	
+    settings.SetAutoUpdate(setting.iAutoUpdate);
+    settings.SetAutoUpdateAP(setting.iAutoUpdateAP);
+    settings.SetAutoUpdateFreq(setting.iAutoUpdateFreq);
+    settings.SetAutoUpdateWhileRoaming(setting.iAutoUpdateWhileRoaming);
+    }
+
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::CancelAllL
+//
+// Request the FeedsServer to cancel all activities that can be cancelled.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RFeedsServer::CancelAllL()
+    {
+    iActiveRequests[0]->GetFeedInterface()->CancelAllL();
+    }
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::SetServerFeed
+// 
+// Sets the address of RFeed instance which will be used for sending 
+// RequestCompleted
+// -----------------------------------------------------------------------------
+//
+void RFeedsServer::SetServerFeed(RFeed& aFeedsServerFeed)
+    {
+    iActiveRequests[0]->SetFeedsServerFeed(&aFeedsServerFeed);    
+    }
+
+// -----------------------------------------------------------------------------
+// RFeedsServer::SetServerFolderItem
+// 
+// Sets the address of RFolderItem instance which will be used for sending 
+// RequestCompleted
+// -----------------------------------------------------------------------------
+//
+void RFeedsServer::SetServerFolderItem(RFolderItem& aFeedsServerFolderItem)
+    {
+    iActiveRequests[0]->SetFeedsServerFolderItem(&aFeedsServerFolderItem);        
+    }
+