diff -r 36d60d12b4af -r 819e59dfc032 debugapps/appregexec/src/NotifyChange.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/debugapps/appregexec/src/NotifyChange.cpp Mon Oct 04 10:09:02 2010 +0300 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2010 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: +* +*/ + + +// System includes +#include +#include +//User Includes +#include "NotifyChange.h" + +// Assuming that the path of registration resources will be @ c:\private\10003a3f\imports\apps +_LIT(KDirPath,":\\private\\10003a3f\\import\\apps\\"); +// Wildcard to get only registration resources from above Path +_LIT(KWildName,"*_reg.rsc"); + +/* + *NewL- Wrapper funtion to invoke the constructor of CNotifyChange class. + */ +CNotifyChange* CNotifyChange::NewL(TChar aDriveLetter) + { + CNotifyChange* self=new (ELeave) CNotifyChange(); + CleanupStack::PushL(self); + self->ConstructL(aDriveLetter); + CleanupStack::Pop(self); + return self; + } + +/* + * Second Phase Constructor + */ +void CNotifyChange::ConstructL(TChar aDriveLetter) // second-phase constructor + { + User::LeaveIfError(iFs.Connect()); + TBuf aPath; + aPath.Append(aDriveLetter); + aPath.Append(KDirPath); + iPath = aPath.AllocL(); + } + +/* + * Constructor + */ +CNotifyChange::CNotifyChange():CActive(EPriorityStandard) + { + CActiveScheduler::Add(this); + } + +/* + * StartFilesystemMonitor is used for issuing a Notify Change request to FileSystem for particular path + */ +void CNotifyChange::StartFilesystemMonitor() + { + TRequestStatus status; + iFs.NotifyChange(ENotifyWrite,status,*iPath); + SetActive(); + RDebug::Print(_L("*********** Isuued Notify Change Request ************ ")); + OstTrace0( TRACE_NORMAL, __STARTFILESYSTEMMONITOR, "AppRegExec::StartFilesystemMonitor - Isuued Notify Change Request"); + } + +/* + * RunL - Override function of CActive Class . will be invoked once FileSystem completes the request. + */ +void CNotifyChange::RunL() + { + TInt status = iStatus.Int(); + if ( status == KErrCancel ) + { + OstTrace1( TRACE_FATAL, __RUNL, "AppRegExec::RunL - Cancelled;status=%d",status); + return; + } + + GetFilesFromDirL(); + // Issue notify Request Again + StartFilesystemMonitor(); + } + +/* + * DoCancel - Override function of CAtive to Cancel any out standing request. + */ +void CNotifyChange::DoCancel() + { + // Cancel the outstanding file system request. + iFs.NotifyChangeCancel(iStatus); + } + +/* + * RunError- Override function of CActive class will be used to handle the error if any occurs in RunL . + */ +TInt CNotifyChange::RunError(TInt aError) + { + OstTrace1( TRACE_FATAL, __RUNERROR, "AppRegExec::RunError;aError=%d",aError); + return (KErrNone); // Error has been handled. + } + +/* + * Destructor + */ +CNotifyChange::~CNotifyChange() + { + Cancel(); + if(iPath) + { + delete iPath; + } + iFs.Close(); + } + +/* + * GetFileFromDir- will be used to get the list of registration resources from a specified path. + */ +void CNotifyChange::GetFilesFromDirL() + { + iFs.SetSessionPath(iPath->Des()); + CDir* fileList; + User::LeaveIfError(iFs.GetDir(KWildName,KEntryAttNormal,ESortByDate,fileList)); + TInt count = fileList->Count(); + if(count > 0) + { + TEntry entry = (*fileList)[count -1]; + TPtrC filename = entry.iName; + TBuf buf; + buf.Append(iPath->Des()); + buf.Append(filename); + TBool ret = iFs.IsValidName(buf); + if(ret) + { + OstTrace0( TRACE_NORMAL, __GETFILESFROMDIR, "AppRegExec::GetFilesFromDir - Registrating Resources ..."); + RegisterwithApparc(buf); + } + else + { + OstTrace1( TRACE_FATAL, __GETFILESFROMDIR_NOTVALID, "AppRegister::GetFilesFromDir - File doesn't Exist;ret=%d",ret); + } + } + } + +/* + * RegisterwithApparc - will be used to register the resource with APPARC using SWI API's + */ +void CNotifyChange::RegisterwithApparc(TDesC& aFileName) + { + Swi::RSisRegistrySession rServer; + TInt ret = rServer.Connect(); + OstTrace1( TRACE_FATAL, __REGISTERWITHAPPARC_CONNECTION, "AppRegExec::RegisterwithApparc - Connection status;ret=%d",ret); + CleanupClosePushL( rServer ); + TRAP(ret, rServer.AddAppRegInfoL(aFileName)); + RDebug::Print(aFileName); + OstTrace1( TRACE_FATAL, __REGISTERWITHAPPARC_REGITERED, "AppRegExec::RegisterwithApparc - Registered Resource;ret= %d",ret); + CleanupStack::PopAndDestroy(); //rServer*/ + + } +