debugapps/appregexec/src/NotifyChange.cpp
author hgs
Mon, 04 Oct 2010 10:09:02 +0300
changeset 53 819e59dfc032
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
53
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:    
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
// System includes
hgs
parents:
diff changeset
    20
#include <swi/sisregistrysession.h>
hgs
parents:
diff changeset
    21
#include <bautils.h>
hgs
parents:
diff changeset
    22
//User Includes
hgs
parents:
diff changeset
    23
#include "NotifyChange.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
// Assuming that the path of registration resources will be @ c:\private\10003a3f\imports\apps
hgs
parents:
diff changeset
    26
_LIT(KDirPath,":\\private\\10003a3f\\import\\apps\\");
hgs
parents:
diff changeset
    27
// Wildcard to get only registration resources from above Path
hgs
parents:
diff changeset
    28
_LIT(KWildName,"*_reg.rsc");
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
/*
hgs
parents:
diff changeset
    31
 *NewL- Wrapper funtion to invoke the constructor of CNotifyChange class. 
hgs
parents:
diff changeset
    32
 */
hgs
parents:
diff changeset
    33
CNotifyChange* CNotifyChange::NewL(TChar aDriveLetter)
hgs
parents:
diff changeset
    34
    {
hgs
parents:
diff changeset
    35
    CNotifyChange* self=new (ELeave) CNotifyChange();
hgs
parents:
diff changeset
    36
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
    37
    self->ConstructL(aDriveLetter);
hgs
parents:
diff changeset
    38
    CleanupStack::Pop(self);
hgs
parents:
diff changeset
    39
    return self;
hgs
parents:
diff changeset
    40
    }
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
/*
hgs
parents:
diff changeset
    43
 * Second Phase Constructor 
hgs
parents:
diff changeset
    44
 */
hgs
parents:
diff changeset
    45
void CNotifyChange::ConstructL(TChar aDriveLetter) // second-phase constructor
hgs
parents:
diff changeset
    46
    {
hgs
parents:
diff changeset
    47
    User::LeaveIfError(iFs.Connect());
hgs
parents:
diff changeset
    48
    TBuf<KMaxFileName> aPath;
hgs
parents:
diff changeset
    49
    aPath.Append(aDriveLetter);
hgs
parents:
diff changeset
    50
    aPath.Append(KDirPath);
hgs
parents:
diff changeset
    51
    iPath = aPath.AllocL();
hgs
parents:
diff changeset
    52
    }
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
/*
hgs
parents:
diff changeset
    55
 * Constructor
hgs
parents:
diff changeset
    56
 */
hgs
parents:
diff changeset
    57
CNotifyChange::CNotifyChange():CActive(EPriorityStandard)
hgs
parents:
diff changeset
    58
    {
hgs
parents:
diff changeset
    59
    CActiveScheduler::Add(this);
hgs
parents:
diff changeset
    60
    }
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
/*
hgs
parents:
diff changeset
    63
 * StartFilesystemMonitor is used for issuing a Notify Change request to FileSystem for particular path
hgs
parents:
diff changeset
    64
 */
hgs
parents:
diff changeset
    65
void CNotifyChange::StartFilesystemMonitor()
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
    TRequestStatus status;
hgs
parents:
diff changeset
    68
    iFs.NotifyChange(ENotifyWrite,status,*iPath);
hgs
parents:
diff changeset
    69
    SetActive();
hgs
parents:
diff changeset
    70
    RDebug::Print(_L("*********** Isuued Notify Change Request ************ "));
hgs
parents:
diff changeset
    71
    OstTrace0( TRACE_NORMAL, __STARTFILESYSTEMMONITOR, "AppRegExec::StartFilesystemMonitor - Isuued Notify Change Request");
hgs
parents:
diff changeset
    72
    }
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
/*
hgs
parents:
diff changeset
    75
 * RunL - Override function of CActive Class . will be invoked once FileSystem completes the request.
hgs
parents:
diff changeset
    76
 */
hgs
parents:
diff changeset
    77
void CNotifyChange::RunL()
hgs
parents:
diff changeset
    78
    {
hgs
parents:
diff changeset
    79
    TInt status = iStatus.Int();
hgs
parents:
diff changeset
    80
    if ( status == KErrCancel )
hgs
parents:
diff changeset
    81
        {
hgs
parents:
diff changeset
    82
        OstTrace1( TRACE_FATAL, __RUNL, "AppRegExec::RunL - Cancelled;status=%d",status);
hgs
parents:
diff changeset
    83
        return;
hgs
parents:
diff changeset
    84
        }
hgs
parents:
diff changeset
    85
    
hgs
parents:
diff changeset
    86
    GetFilesFromDirL();
hgs
parents:
diff changeset
    87
    // Issue notify Request Again
hgs
parents:
diff changeset
    88
    StartFilesystemMonitor();
hgs
parents:
diff changeset
    89
    }
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
/*
hgs
parents:
diff changeset
    92
 * DoCancel - Override function of CAtive to Cancel any out standing request.
hgs
parents:
diff changeset
    93
 */
hgs
parents:
diff changeset
    94
void CNotifyChange::DoCancel()
hgs
parents:
diff changeset
    95
    {
hgs
parents:
diff changeset
    96
    // Cancel the outstanding file system request.
hgs
parents:
diff changeset
    97
    iFs.NotifyChangeCancel(iStatus);
hgs
parents:
diff changeset
    98
    }
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
/*
hgs
parents:
diff changeset
   101
 * RunError- Override function of CActive class will be used to handle the error if any occurs in RunL .
hgs
parents:
diff changeset
   102
 */
hgs
parents:
diff changeset
   103
TInt CNotifyChange::RunError(TInt aError)
hgs
parents:
diff changeset
   104
    { 
hgs
parents:
diff changeset
   105
    OstTrace1( TRACE_FATAL, __RUNERROR, "AppRegExec::RunError;aError=%d",aError);
hgs
parents:
diff changeset
   106
    return (KErrNone);                 // Error has been handled.
hgs
parents:
diff changeset
   107
    }
hgs
parents:
diff changeset
   108
 
hgs
parents:
diff changeset
   109
/*
hgs
parents:
diff changeset
   110
 * Destructor
hgs
parents:
diff changeset
   111
 */
hgs
parents:
diff changeset
   112
CNotifyChange::~CNotifyChange()
hgs
parents:
diff changeset
   113
    {
hgs
parents:
diff changeset
   114
    Cancel();
hgs
parents:
diff changeset
   115
    if(iPath)
hgs
parents:
diff changeset
   116
        {
hgs
parents:
diff changeset
   117
        delete iPath;
hgs
parents:
diff changeset
   118
        }
hgs
parents:
diff changeset
   119
    iFs.Close();
hgs
parents:
diff changeset
   120
    }
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
/*
hgs
parents:
diff changeset
   123
 * GetFileFromDir- will be used to get the list of registration resources from a specified path.
hgs
parents:
diff changeset
   124
 */
hgs
parents:
diff changeset
   125
void CNotifyChange::GetFilesFromDirL()
hgs
parents:
diff changeset
   126
    {
hgs
parents:
diff changeset
   127
    iFs.SetSessionPath(iPath->Des());
hgs
parents:
diff changeset
   128
    CDir* fileList;
hgs
parents:
diff changeset
   129
    User::LeaveIfError(iFs.GetDir(KWildName,KEntryAttNormal,ESortByDate,fileList));
hgs
parents:
diff changeset
   130
    TInt count = fileList->Count();
hgs
parents:
diff changeset
   131
    if(count > 0)
hgs
parents:
diff changeset
   132
        {
hgs
parents:
diff changeset
   133
        TEntry entry = (*fileList)[count -1];
hgs
parents:
diff changeset
   134
        TPtrC filename = entry.iName;
hgs
parents:
diff changeset
   135
        TBuf<KMaxFileName> buf;
hgs
parents:
diff changeset
   136
        buf.Append(iPath->Des());
hgs
parents:
diff changeset
   137
        buf.Append(filename);
hgs
parents:
diff changeset
   138
        TBool ret = iFs.IsValidName(buf);
hgs
parents:
diff changeset
   139
        if(ret)
hgs
parents:
diff changeset
   140
            {
hgs
parents:
diff changeset
   141
            OstTrace0( TRACE_NORMAL, __GETFILESFROMDIR, "AppRegExec::GetFilesFromDir - Registrating Resources ...");
hgs
parents:
diff changeset
   142
            RegisterwithApparc(buf);
hgs
parents:
diff changeset
   143
            }
hgs
parents:
diff changeset
   144
        else
hgs
parents:
diff changeset
   145
            {
hgs
parents:
diff changeset
   146
            OstTrace1( TRACE_FATAL, __GETFILESFROMDIR_NOTVALID, "AppRegister::GetFilesFromDir - File doesn't Exist;ret=%d",ret);
hgs
parents:
diff changeset
   147
            }
hgs
parents:
diff changeset
   148
        }
hgs
parents:
diff changeset
   149
    }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
/*
hgs
parents:
diff changeset
   152
 * RegisterwithApparc - will be used to register the resource with APPARC using SWI API's
hgs
parents:
diff changeset
   153
 */
hgs
parents:
diff changeset
   154
void CNotifyChange::RegisterwithApparc(TDesC& aFileName)
hgs
parents:
diff changeset
   155
    {
hgs
parents:
diff changeset
   156
    Swi::RSisRegistrySession rServer;
hgs
parents:
diff changeset
   157
    TInt ret = rServer.Connect();
hgs
parents:
diff changeset
   158
    OstTrace1( TRACE_FATAL, __REGISTERWITHAPPARC_CONNECTION, "AppRegExec::RegisterwithApparc - Connection status;ret=%d",ret);
hgs
parents:
diff changeset
   159
    CleanupClosePushL( rServer );
hgs
parents:
diff changeset
   160
    TRAP(ret, rServer.AddAppRegInfoL(aFileName));
hgs
parents:
diff changeset
   161
    RDebug::Print(aFileName);
hgs
parents:
diff changeset
   162
    OstTrace1( TRACE_FATAL, __REGISTERWITHAPPARC_REGITERED, "AppRegExec::RegisterwithApparc - Registered Resource;ret= %d",ret);
hgs
parents:
diff changeset
   163
    CleanupStack::PopAndDestroy(); //rServer*/
hgs
parents:
diff changeset
   164
         
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166