browserui/browser/BrowserAppSrc/BrowserPushMtmObserver.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
equal deleted inserted replaced
37:481242ead638 51:48e827313edd
     1 /*
       
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  CBrowserPushMtmObserver
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "BrowserPushMtmObserver.h"
       
    21 #include "ApiProvider.h"
       
    22 #include "BrowserAppUi.h"
       
    23 #include "CommonConstants.h"
       
    24 #include "Logger.h"
       
    25 
       
    26 
       
    27 // EXTERNAL DATA STRUCTURES
       
    28 
       
    29 // EXTERNAL FUNCTION PROTOTYPES
       
    30 
       
    31 // CONSTANTS
       
    32 // file monitored by browser
       
    33 _LIT( KPushMtmUrl, "c:\\system\\temp\\PushMtmUrl.txt" );
       
    34 
       
    35 // MACROS
       
    36 
       
    37 // LOCAL CONSTANTS AND MACROS
       
    38 
       
    39 // MODULE DATA STRUCTURES
       
    40 
       
    41 // LOCAL FUNCTION PROTOTYPES
       
    42 
       
    43 // FORWARD DECLARATIONS
       
    44 
       
    45 
       
    46 // ============================ MEMBER FUNCTIONS ===============================
       
    47 
       
    48 // -----------------------------------------------------------------------------
       
    49 // CBrowserPushMtmObserver::CBrowserPushMtmObserver
       
    50 // C++ default constructor can NOT contain any code, that
       
    51 // might leave.
       
    52 // -----------------------------------------------------------------------------
       
    53 //
       
    54 CBrowserPushMtmObserver::CBrowserPushMtmObserver(MApiProvider* aApiProvider) : CActive( CActive::EPriorityIdle ),
       
    55 iApiProvider(aApiProvider)
       
    56     {
       
    57     CActiveScheduler::Add(this);
       
    58     }
       
    59 
       
    60 // -----------------------------------------------------------------------------
       
    61 // CBrowserPushMtmObserver::ConstructL
       
    62 // Symbian 2nd phase constructor can leave.
       
    63 // -----------------------------------------------------------------------------
       
    64 //
       
    65 void CBrowserPushMtmObserver::ConstructL()
       
    66     {
       
    67     LOG_ENTERFN("CBrowserPushMtmObserver::ConstructL");
       
    68     User::LeaveIfError(iFsSession.Connect());
       
    69     }
       
    70 
       
    71 // -----------------------------------------------------------------------------
       
    72 // CBrowserPushMtmObserver::NewL
       
    73 // Two-phased constructor.
       
    74 // -----------------------------------------------------------------------------
       
    75 //
       
    76 CBrowserPushMtmObserver* CBrowserPushMtmObserver::NewL( MApiProvider* aApiProvider )
       
    77     {
       
    78     CBrowserPushMtmObserver* self = new( ELeave ) CBrowserPushMtmObserver(aApiProvider);
       
    79     CleanupStack::PushL( self );
       
    80     self->ConstructL();
       
    81     CleanupStack::Pop();
       
    82     return self;
       
    83     }
       
    84 
       
    85 // Destructor
       
    86 CBrowserPushMtmObserver::~CBrowserPushMtmObserver()
       
    87     {
       
    88     Cancel();
       
    89     iFsSession.Close();
       
    90     }
       
    91 
       
    92 // -----------------------------------------------------------------------------
       
    93 // CBrowserPushMtmObserver::RunL
       
    94 //
       
    95 // -----------------------------------------------------------------------------
       
    96 //
       
    97 void CBrowserPushMtmObserver::RunL()
       
    98     {
       
    99     LOG_ENTERFN("CBrowserPushMtmObserver::RunL");
       
   100     HBufC8* url8 = NULL;
       
   101     TRAP_IGNORE( url8 = ReadMsgFileL() );
       
   102     StartObserver();
       
   103     if( url8 != NULL )
       
   104         {
       
   105         CleanupStack::PushL( url8 );
       
   106 	    CBrowserAppUi* appUi = STATIC_CAST(CBrowserAppUi*, iApiProvider);
       
   107         appUi->ParseAndProcessParametersL( url8->Des() );
       
   108         BROWSER_LOG( (_L( "CBrowserPushMtmObserver::RunL appUi->ParseAndProcessParametersL with url8: %S" ), url8 ));
       
   109         appUi->SetLastActiveViewId( KUidBrowserContentViewId );
       
   110         appUi->SetViewToBeActivatedIfNeededL( appUi->LastActiveViewId() );
       
   111         // view activation and bringing the browser to foreground are two 
       
   112         // distinct actions.
       
   113         appUi->ActivateLocalViewL( KUidBrowserContentViewId );
       
   114         appUi->HandleForegroundEventL( ETrue ); 		
       
   115         BROWSER_LOG( (_L( "CBrowserPushMtmObserver::RunL appUi->HandleForegroundEventL") ));
       
   116         CleanupStack::PopAndDestroy(/*url8*/);
       
   117         }
       
   118     }
       
   119 
       
   120 // -----------------------------------------------------------------------------
       
   121 // CBrowserPushMtmObserver::RunError
       
   122 //
       
   123 // -----------------------------------------------------------------------------
       
   124 //
       
   125 TInt CBrowserPushMtmObserver::RunError(TInt /*aError*/)
       
   126     {
       
   127     return KErrNone;
       
   128     }
       
   129 
       
   130 // -----------------------------------------------------------------------------
       
   131 // CBrowserPushMtmObserver::DoCancel
       
   132 //
       
   133 // -----------------------------------------------------------------------------
       
   134 //
       
   135 void CBrowserPushMtmObserver::DoCancel()
       
   136     {
       
   137     iFsSession.NotifyChangeCancel(iStatus);
       
   138     }
       
   139 
       
   140 // -----------------------------------------------------------------------------
       
   141 // CBrowserPushMtmObserver::StartObserver
       
   142 //
       
   143 // -----------------------------------------------------------------------------
       
   144 //
       
   145 void CBrowserPushMtmObserver::StartObserver()
       
   146     {
       
   147     LOG_ENTERFN("CBrowserPushMtmObserver::StartObserver");
       
   148     if (!IsActive())
       
   149         {
       
   150         iFsSession.NotifyChange( ENotifyWrite, iStatus, KPushMtmUrl() );
       
   151         SetActive();
       
   152         BROWSER_LOG( (_L( "CBrowserPushMtmObserver::StartObserver iFsSession.NotifyChange") ));
       
   153         }
       
   154     }
       
   155 
       
   156 
       
   157 // -----------------------------------------------------------------------------
       
   158 // CBrowserPushMtmObserver::ReadMsgFileL
       
   159 //
       
   160 // -----------------------------------------------------------------------------
       
   161 //
       
   162 HBufC8* CBrowserPushMtmObserver::ReadMsgFileL()
       
   163     {
       
   164     LOG_ENTERFN("CBrowserPushMtmObserver::ReadMsgFileL");
       
   165 
       
   166     RFs             rfs;
       
   167     RFile           file;
       
   168     TInt            size;
       
   169     HBufC8*         buffer = NULL;
       
   170     TPtr8           bufferPtr(NULL, 0);
       
   171     TInt            err = KErrNone;
       
   172 
       
   173     // Open the file.
       
   174     User::LeaveIfError(rfs.Connect());
       
   175     CleanupClosePushL(rfs);
       
   176 
       
   177     TInt tryCount = 0;
       
   178     for (tryCount = 0; tryCount < 5; tryCount++) 
       
   179         {
       
   180         err = file.Open( rfs, KPushMtmUrl, EFileRead | EFileShareExclusive );
       
   181         if (err == KErrInUse)
       
   182             {
       
   183             // wait 50 miliseconds and try again
       
   184             User::After(50000);
       
   185             }
       
   186         else
       
   187             {
       
   188             break;
       
   189             }
       
   190         }
       
   191         
       
   192     BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Open return: %d" ), err ));
       
   193     User::LeaveIfError( err );
       
   194     CleanupClosePushL(file);
       
   195 
       
   196     // Read file
       
   197     err = file.Size(size);
       
   198     BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Size: %d, err: %d" ), size, err ));
       
   199     User::LeaveIfError( err );
       
   200     
       
   201     buffer = HBufC8::NewLC(size);
       
   202     bufferPtr.Set(buffer->Des());
       
   203 
       
   204     err = file.Read( bufferPtr, size );
       
   205     BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL file.Read: %d" ), err ));
       
   206     User::LeaveIfError( err );
       
   207 
       
   208     // Clean up.
       
   209     CleanupStack::Pop(/*buffer*/);
       
   210     CleanupStack::PopAndDestroy(/*file*/);
       
   211 
       
   212     // don't need to leave due to this error
       
   213     err = rfs.Delete( KPushMtmUrl );
       
   214     BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL rfs.Delete: %d" ), err ));
       
   215     CleanupStack::PopAndDestroy(/*rfs*/);
       
   216 
       
   217     BROWSER_LOG( (_L( "CBrowserPushMtmObserver::ReadMsgFileL return: %S" ), buffer ));
       
   218     return buffer;
       
   219     }
       
   220 
       
   221 
       
   222 //  End of File