tzservices/tzserver/swiobserverplugin/source/tzswiobserverplugin.cpp
changeset 0 2e3d3ce01487
equal deleted inserted replaced
-1:000000000000 0:2e3d3ce01487
       
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15  
       
    16 #include "tzswiobserverplugin.h"
       
    17 
       
    18 using namespace Swi;
       
    19 
       
    20 _LIT(KFilterTzPrivate,  "!:\\private\\1020383E");
       
    21 _LIT(KFilterResourceTimezonelocalization,  "!:\\resource\\timezonelocalization");
       
    22 
       
    23 #ifdef _DEBUG
       
    24 //Logging data
       
    25 _LIT(KTzDebugLogFile, "c:\\TzSwiObserver.log");
       
    26 _LIT(KTzLogDir, "c:\\logs\\Tz");
       
    27 _LIT(KTzLogFile, "c:\\logs\\Tz\\TzSwiObserver.log");
       
    28 _LIT8(KTzCRLF, "\r\n");
       
    29 _LIT8(KTzAdded, "Added ");
       
    30 _LIT8(KTzDeleted, "Deleted ");
       
    31 #endif
       
    32 
       
    33 CTzSwiObserverPlugin* CTzSwiObserverPlugin::NewL()
       
    34 	{
       
    35 	CTzSwiObserverPlugin* self = new(ELeave) CTzSwiObserverPlugin();
       
    36 	return self;
       
    37 	}
       
    38 
       
    39 CTzSwiObserverPlugin::~CTzSwiObserverPlugin()
       
    40 	{
       
    41 	//Should close the RTz
       
    42 	iTz.Close();
       
    43 #if defined(_DEBUG)
       
    44 	delete iFileWriteStream;
       
    45 #endif
       
    46 	}
       
    47 
       
    48 CTzSwiObserverPlugin::CTzSwiObserverPlugin()
       
    49 	: CSwiObserverPlugin(), iTzConnected(EFalse)
       
    50 	{
       
    51 	}
       
    52 
       
    53 /**
       
    54 This function is called when the SWI Observer processor starts processing
       
    55 an observation log file.
       
    56 
       
    57 @param aFs File server session handle.
       
    58 */
       
    59 void CTzSwiObserverPlugin::StartL(RFs& aFs)
       
    60 	{
       
    61 	iFs = &aFs;
       
    62 	
       
    63 #if defined(_DEBUG)
       
    64 	TUint fileAtt;
       
    65 	if (aFs.Att(KTzLogDir, fileAtt) == KErrNone)
       
    66 		{
       
    67 		iFileWriteStream = new(ELeave) RFileWriteStream;
       
    68 		if (iFileWriteStream)
       
    69 			{
       
    70 			if (iFileWriteStream->Replace(aFs, KTzDebugLogFile, EFileShareAny | EFileWrite | EFileStreamText ) != KErrNone)
       
    71 				{
       
    72 				delete iFileWriteStream;
       
    73 				iFileWriteStream = NULL;
       
    74 				}
       
    75 			}
       
    76 		}
       
    77 	
       
    78 #endif
       
    79 	}
       
    80  	
       
    81 /**
       
    82 Signals TZ Server that a new installation log is about to be processed.
       
    83 	
       
    84 @param aHeader Object containing all observation data related with a specific package.
       
    85 @param aStatus The request status object.
       
    86  */ 		
       
    87 void CTzSwiObserverPlugin::NextObservedHeaderL(const CObservationHeader& /*aHeader*/, TRequestStatus& aStatus)
       
    88 	{
       
    89 	TRequestStatus* status = &aStatus;
       
    90 	User::RequestComplete(status, KErrNone);
       
    91 	}
       
    92  
       
    93 /**
       
    94 This function is called for each actual observation data (i.e. adding/deleting file).
       
    95 	
       
    96 @param aData   		Object for a single observation data.
       
    97 @param aFilterIndex The index of the filter which matches with that notification.
       
    98 @param aStatus 		The request status object.
       
    99  */
       
   100 #if defined(_DEBUG)
       
   101 void CTzSwiObserverPlugin::NextObservedDataL(const CObservationData& aData, TInt aFilterIndex, TRequestStatus& aStatus)
       
   102 #else
       
   103 void CTzSwiObserverPlugin::NextObservedDataL(const CObservationData& /*aData*/, TInt aFilterIndex, TRequestStatus& aStatus)
       
   104 #endif
       
   105 	{
       
   106 	RTz::TSWIObserverFilterIndex idx = static_cast<RTz::TSWIObserverFilterIndex>(aFilterIndex);
       
   107 	
       
   108 	switch(idx)
       
   109 		{
       
   110 		case RTz::EFilterTzPrivate:
       
   111 		case RTz::EFilterResourceTimezonelocalization:
       
   112 			{
       
   113 			GetTzClientL().SwiObsFileChangedL(idx);
       
   114 			}
       
   115 			
       
   116 			break;
       
   117 		default:
       
   118 			// Do nothing
       
   119 			break;
       
   120 		}
       
   121 	
       
   122 #if defined(_DEBUG)
       
   123 	if (iFileWriteStream)
       
   124 		{
       
   125 		if (aData.iFileFlag & Swi::EFileAdded)
       
   126 			{
       
   127 			iFileWriteStream->WriteL(KTzAdded());
       
   128 			}
       
   129 		else if (aData.iFileFlag & Swi::EFileDeleted)
       
   130 			{
       
   131 			iFileWriteStream->WriteL(KTzDeleted());
       
   132 			}
       
   133 		TBuf8<256> fileBuf;
       
   134 		fileBuf.Copy(aData.iFileName->Des());
       
   135 		iFileWriteStream->WriteL(fileBuf);
       
   136 		iFileWriteStream->WriteL(KTzCRLF());
       
   137 		}
       
   138 #endif
       
   139 	
       
   140 	TRequestStatus* status = &aStatus;
       
   141 	User::RequestComplete(status, KErrNone);
       
   142 	}
       
   143 	
       
   144 /**
       
   145 This function is called when the SWI Observer processor is finished with
       
   146 the observation log file.
       
   147 	
       
   148 @param aStatus The request status object.
       
   149  */	
       
   150 void CTzSwiObserverPlugin::FinalizeL(TRequestStatus& aStatus)
       
   151  	{
       
   152  	GetTzClientL().SwiObsEndL();
       
   153  	
       
   154 #if defined(_DEBUG)
       
   155  	if (iFileWriteStream)
       
   156  		{
       
   157  		iFileWriteStream->Close();
       
   158  		User::LeaveIfError(iFs->Rename(KTzDebugLogFile, KTzLogFile));
       
   159  		}
       
   160 #endif
       
   161  		
       
   162  	TRequestStatus* status = &aStatus;
       
   163 	User::RequestComplete(status, KErrNone);
       
   164   	}
       
   165  
       
   166 /**
       
   167 Returns a list of filters which representing in what folders the tz observer
       
   168 plugin is interested. 
       
   169 
       
   170 The tz observer plugin needs to know any change in the \private\1020383E and \resource\timezonelocalization
       
   171 directories of the system drive. 
       
   172 
       
   173 @return A list of filters showing the interest of this plugin.
       
   174  */ 
       
   175 CObservationFilter* CTzSwiObserverPlugin::GetFilterL() const
       
   176  	{
       
   177  	CObservationFilter* filterList = CObservationFilter::NewLC();
       
   178  	AddFilterL(*filterList, KFilterTzPrivate);
       
   179  	AddFilterL(*filterList, KFilterResourceTimezonelocalization);
       
   180  	CleanupStack::Pop(filterList);
       
   181  	return filterList;
       
   182  	}
       
   183 
       
   184 /**
       
   185 	Inserts a new filter into the filter list.
       
   186 	Sets the first character of the new filter as the current system drive.
       
   187 	
       
   188 	@param aFilterList A filter list object.
       
   189 	@param aFilter	   A filter data which will be inserted.
       
   190  */
       
   191 void CTzSwiObserverPlugin::AddFilterL(CObservationFilter& aFilterList, const TDesC& aFilter) const
       
   192 	{
       
   193 	HBufC* filterData = aFilter.AllocLC();
       
   194 	TPtr ptr(filterData->Des());
       
   195 	ptr[0] = iFs->GetSystemDriveChar();
       
   196 	aFilterList.AddFilterL(filterData);
       
   197 	CleanupStack::Pop(filterData);
       
   198 	}
       
   199 	
       
   200 void CTzSwiObserverPlugin::RunL()
       
   201 	{
       
   202 	// Do Nothing
       
   203 	}
       
   204 		
       
   205 TInt CTzSwiObserverPlugin::RunError(TInt /*aError*/)
       
   206 	{
       
   207 	return KErrNone;
       
   208 	}
       
   209 
       
   210 void CTzSwiObserverPlugin::DoCancel()
       
   211 	{
       
   212 	}
       
   213 
       
   214 static const TUint KTzSwiObserverImplementationId = 0x1028649F;
       
   215 
       
   216 static const TImplementationProxy ImplementationTable[] = 
       
   217 	{
       
   218 	IMPLEMENTATION_PROXY_ENTRY(KTzSwiObserverImplementationId, CTzSwiObserverPlugin::NewL)
       
   219 	};
       
   220 
       
   221 RTz& CTzSwiObserverPlugin::GetTzClientL()
       
   222 	{
       
   223 	if (!iTzConnected)
       
   224 		{
       
   225 		User::LeaveIfError(iTz.Connect());
       
   226 		iTzConnected = ETrue;
       
   227 		iTz.SwiObsBeginL();
       
   228 		}
       
   229 	return iTz;
       
   230 	}
       
   231 
       
   232 /**
       
   233 Standard ECOM factory
       
   234 */	
       
   235 EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
       
   236 	{
       
   237 	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
       
   238 	return ImplementationTable;
       
   239 	}