--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/BrowserAppSrc/BrowserPushMtmObserver.cpp Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2007 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: CBrowserPushMtmObserver
+*
+*/
+
+
+// INCLUDE FILES
+#include "BrowserPushMtmObserver.h"
+#include "ApiProvider.h"
+#include "BrowserAppUi.h"
+#include "CommonConstants.h"
+#include "Logger.h"
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+// file monitored by browser
+_LIT( KPushMtmUrl, "c:\\system\\temp\\PushMtmUrl.txt" );
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::CBrowserPushMtmObserver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CBrowserPushMtmObserver::CBrowserPushMtmObserver(MApiProvider* aApiProvider) : CActive( CActive::EPriorityIdle ),
+iApiProvider(aApiProvider)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CBrowserPushMtmObserver::ConstructL()
+ {
+ LOG_ENTERFN("CBrowserPushMtmObserver::ConstructL");
+ User::LeaveIfError(iFsSession.Connect());
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CBrowserPushMtmObserver* CBrowserPushMtmObserver::NewL( MApiProvider* aApiProvider )
+ {
+ CBrowserPushMtmObserver* self = new( ELeave ) CBrowserPushMtmObserver(aApiProvider);
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// Destructor
+CBrowserPushMtmObserver::~CBrowserPushMtmObserver()
+ {
+ Cancel();
+ iFsSession.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::RunL
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserPushMtmObserver::RunL()
+ {
+ LOG_ENTERFN("CBrowserPushMtmObserver::RunL");
+ HBufC8* url8 = NULL;
+ TRAP_IGNORE( url8 = ReadMsgFileL() );
+ StartObserver();
+ if( url8 != NULL )
+ {
+ CleanupStack::PushL( url8 );
+ CBrowserAppUi* appUi = STATIC_CAST(CBrowserAppUi*, iApiProvider);
+ appUi->ParseAndProcessParametersL( url8->Des() );
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::RunL appUi->ParseAndProcessParametersL with url8: %S" ), url8 ));
+ appUi->SetLastActiveViewId( KUidBrowserContentViewId );
+ appUi->SetViewToBeActivatedIfNeededL( appUi->LastActiveViewId() );
+ // view activation and bringing the browser to foreground are two
+ // distinct actions.
+ appUi->ActivateLocalViewL( KUidBrowserContentViewId );
+ appUi->HandleForegroundEventL( ETrue );
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::RunL appUi->HandleForegroundEventL") ));
+ CleanupStack::PopAndDestroy(/*url8*/);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::RunError
+//
+// -----------------------------------------------------------------------------
+//
+TInt CBrowserPushMtmObserver::RunError(TInt /*aError*/)
+ {
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::DoCancel
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserPushMtmObserver::DoCancel()
+ {
+ iFsSession.NotifyChangeCancel(iStatus);
+ }
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::StartObserver
+//
+// -----------------------------------------------------------------------------
+//
+void CBrowserPushMtmObserver::StartObserver()
+ {
+ LOG_ENTERFN("CBrowserPushMtmObserver::StartObserver");
+ if (!IsActive())
+ {
+ iFsSession.NotifyChange( ENotifyWrite, iStatus, KPushMtmUrl() );
+ SetActive();
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::StartObserver iFsSession.NotifyChange") ));
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CBrowserPushMtmObserver::ReadMsgFileL
+//
+// -----------------------------------------------------------------------------
+//
+HBufC8* CBrowserPushMtmObserver::ReadMsgFileL()
+ {
+ LOG_ENTERFN("CBrowserPushMtmObserver::ReadMsgFileL");
+
+ RFs rfs;
+ RFile file;
+ TInt size;
+ HBufC8* buffer = NULL;
+ TPtr8 bufferPtr(NULL, 0);
+ TInt err = KErrNone;
+
+ // Open the file.
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+
+ TInt tryCount = 0;
+ for (tryCount = 0; tryCount < 5; tryCount++)
+ {
+ err = file.Open( rfs, KPushMtmUrl, EFileRead | EFileShareExclusive );
+ if (err == KErrInUse)
+ {
+ // wait 50 miliseconds and try again
+ User::After(50000);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Open return: %d" ), err ));
+ User::LeaveIfError( err );
+ CleanupClosePushL(file);
+
+ // Read file
+ err = file.Size(size);
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Size: %d, err: %d" ), size, err ));
+ User::LeaveIfError( err );
+
+ buffer = HBufC8::NewLC(size);
+ bufferPtr.Set(buffer->Des());
+
+ err = file.Read( bufferPtr, size );
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Read: %d" ), err ));
+ User::LeaveIfError( err );
+
+ // Clean up.
+ CleanupStack::Pop(/*buffer*/);
+ CleanupStack::PopAndDestroy(/*file*/);
+
+ // don't need to leave due to this error
+ err = rfs.Delete( KPushMtmUrl );
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL rfs.Delete: %d" ), err ));
+ CleanupStack::PopAndDestroy(/*rfs*/);
+
+ BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL return: %S" ), buffer ));
+ return buffer;
+ }
+
+
+// End of File