debugapps/appregexec/src/NotifyChange.cpp
changeset 53 819e59dfc032
--- /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 <swi/sisregistrysession.h>
+#include <bautils.h>
+//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<KMaxFileName> 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<KMaxFileName> 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*/
+         
+    }
+