--- a/appinstaller/AppinstUi/Daemon/Src/daemonbehaviour.cpp Tue Aug 31 15:21:33 2010 +0300
+++ b/appinstaller/AppinstUi/Daemon/Src/daemonbehaviour.cpp Wed Sep 01 12:22:02 2010 +0100
@@ -15,12 +15,6 @@
*
*/
-#include <usif/scr/scr.h>
-#include <usif/scr/scrcommon.h>
-#include <usif/scr/screntries.h>
-#include <apgcli.h> // RApaSession
-#include <apgupdate.h> // TApaAppUpdateInfo
-
#include "daemonbehaviour.h"
#include "swispubsubdefs.h"
#include "recsisx.h"
@@ -28,512 +22,275 @@
#include "SWInstDebug.h"
#include "sisregistryentry.h"
-using namespace Swi;
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::NewL
-// -----------------------------------------------------------------------
-//
-CDaemonBehaviour* CDaemonBehaviour::NewL( CProgramStatus& aMainStatus )
+namespace Swi
{
- CDaemonBehaviour* self = NewLC( aMainStatus );
- CleanupStack::Pop(self);
- return self;
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::NewLC
-// -----------------------------------------------------------------------
-//
-CDaemonBehaviour* CDaemonBehaviour::NewLC( CProgramStatus& aMainStatus )
- {
- CDaemonBehaviour* self = new (ELeave) CDaemonBehaviour;
- CleanupStack::PushL(self);
- self->ConstructL( aMainStatus );
- return self;
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::ConstructL
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::ConstructL( CProgramStatus& aMainStatus )
- {
- User::LeaveIfError(iFs.Connect());
- User::LeaveIfError(iFs.ShareProtected());
-
// For uninstaller
- iSisInstaller = CSisInstaller::NewL( this, aMainStatus );
- // Create plugin
- TRAP_IGNORE( iSwiDaemonPlugin = CSwiDaemonPlugin::NewL() );
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::~CDaemonBehaviour
-// -----------------------------------------------------------------------
-//
-CDaemonBehaviour::~CDaemonBehaviour()
- {
- if ( iSwiDaemonPlugin )
+ CDaemonBehaviour* CDaemonBehaviour::NewL( CProgramStatus& aMainStatus )
{
- delete iSwiDaemonPlugin;
- REComSession::FinalClose();
- }
- delete iSisInstaller;
- iSisInstaller = NULL;
- iFs.Close();
- iDriveArray.Close();
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::StartupL
-// -----------------------------------------------------------------------
-//
-TBool CDaemonBehaviour::StartupL()
- {
- // Return state of Startup
- return ETrue;
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::MediaChangeL
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::MediaChangeL(TInt aDrive, TChangeType aChangeType)
- {
- FLOG_1( _L("Daemon: MediaChangeL: Media change %d"), aDrive );
- RSisRegistryWritableSession registrySession;
+ CDaemonBehaviour* self = NewLC( aMainStatus );
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+ CDaemonBehaviour* CDaemonBehaviour::NewLC( CProgramStatus& aMainStatus )
+ {
+ CDaemonBehaviour* self = new (ELeave) CDaemonBehaviour;
+ CleanupStack::PushL(self);
+ self->ConstructL( aMainStatus );
+ return self;
+ }
- User::LeaveIfError( registrySession.Connect() );
- CleanupClosePushL( registrySession );
-
-
- if ( aChangeType==EMediaInserted )
+ void CDaemonBehaviour::ConstructL( CProgramStatus& aMainStatus )
{
- FLOG( _L("Daemon: MediaChangeL: Media inserted") );
- TInt err = KErrNone;
- // Notify SCR and AppArc for media change.
- TRAP( err, UpdateComponentStatusL( aChangeType, aDrive ) );
- FLOG_1( _L("Daemon: UpdateComponentStatusL err = %d"), err );
-
- // We need call sis registry since this call will
- // activate sis registry to clean uninstalled components
- // from inserted media.
- registrySession.AddDriveL( aDrive );
-
- // Scan directory on the card and run pre-installed through SWIS
- FLOG( _L("Daemon: MediaChangeL: Process preinstalled files") );
- ProcessPreinstalledFilesL( aDrive );
- FLOG_1( _L("Daemon: MediaChangeL: StartInstalling drive: %d"), aDrive );
- iSisInstaller->StartInstallingL();
-
- // Add inserted media drive to drive array.
- if ( iDriveArray.Find(aDrive) == KErrNotFound )
- {
- iDriveArray.AppendL(aDrive);
- }
+ User::LeaveIfError(iFs.Connect());
+ User::LeaveIfError(iFs.ShareProtected());
+
+ // For uninstaller
+ iSisInstaller = CSisInstaller::NewL( this, aMainStatus );
+ // Create plugin
+ TRAP_IGNORE( iSwiDaemonPlugin = CSwiDaemonPlugin::NewL() );
}
- else if (aChangeType==EMediaRemoved)
+
+ CDaemonBehaviour::~CDaemonBehaviour()
{
- FLOG( _L("Daemon: MediaChangeL: Media removed") );
- TInt err = KErrNone;
- // Notify SCR and AppArc for media change.
- TRAP( err, UpdateComponentStatusL( aChangeType, aDrive ) );
- FLOG_1( _L("Daemon: UpdateComponentStatusL err = %d"), err );
-
- // Get Installer state.
- TBool installerRunning = iSisInstaller->IsInstalling();
- FLOG_1( _L("Daemon: MediaChangeL: IsInstalling = %d"), installerRunning );
-
- FLOG( _L("Daemon: MediaChangeL: Cancel install process") );
- // Cancel all requests for install
- iSisInstaller->Cancel();
-
- // Notify plugin
- if( iSwiDaemonPlugin )
+ if ( iSwiDaemonPlugin )
{
- TInt index = iDriveArray.Find(aDrive);
- iSwiDaemonPlugin->MediaRemoved(index);
- }
-
- // Get index of removed drive from array
- TInt index = iDriveArray.Find(aDrive);
-
- if ( index > KErrNotFound )
- {
- iDriveArray.Remove(index);
- iDriveArray.Compress();
- }
+ delete iSwiDaemonPlugin;
+ REComSession::FinalClose();
+ }
+ delete iSisInstaller;
+ iSisInstaller = NULL;
+ iFs.Close();
- // Continue installing from other drives if needed.
- if ( installerRunning )
- {
- FLOG( _L("Daemon: MediaChangeL: Continue installing other drives") );
- // Get count of inserted drives.
- TInt count = iDriveArray.Count();
- FLOG_1( _L("Daemon: Drive count = %d"), count );
- if ( count )
- {
- // Find packages for other drives.
- for(index = 0; index < count; index++ )
- {
- ProcessPreinstalledFilesL(iDriveArray[index]);
- }
- // Start installing.
- FLOG( _L("Daemon: MediaChangeL: StartInstallingL") );
- iSisInstaller->StartInstallingL();
- }
- }
+#ifdef RD_MULTIPLE_DRIVE
+ iDriveArray.Close();
+#endif
}
- CleanupStack::PopAndDestroy(®istrySession);
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::ProcessPreinstalledFilesL
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive)
- {
- FLOG_1( _L("Daemon: ProcessPreinstalledFilesL: Drive index: %d"),
- aDrive );
- _LIT( KDaemonPrivatePath,":\\private\\10202dce\\" );
-
- // For uninstaller
- // Set on installing mode.
- iGeneralProcessStatus = EStateInstalling;
- FLOG_1( _L("[CDaemonBehaviour] iGeneralProcessStatus = %d"),
- iGeneralProcessStatus );
-
- ProcessPreinstalledFilesL(aDrive, KDaemonPrivatePath);
- iStartNotified = EFalse;
- iDrive = aDrive;
- FLOG( _L("Daemon: ProcessPreInstalledFilesL END") );
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::ProcessPreinstalledFilesL
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive, const TDesC& aDirectory)
- {
- TPath preInstalledPath;
- TChar drive;
- RFs::DriveToChar(aDrive, drive);
- preInstalledPath.Append(drive);
- preInstalledPath.Append(aDirectory);
-
- FLOG_1( _L("Daemon: ProcessPreInstalledFilesL Getting dir %S"), &preInstalledPath );
- CDir* dir = NULL;
- TInt err = iFs.GetDir( preInstalledPath, KEntryAttNormal, ESortNone, dir );
- if ( err != KErrNone && err != KErrPathNotFound )
+ // from MDaemonBehaviour
+ TBool CDaemonBehaviour::StartupL()
{
- FLOG_1( _L("Daemon: ProcessPreInstalledFilesL GetDir with error %d"), err );
- User::Leave(err);
- }
- if(dir)
- {
- // dir will only exist if GetDir succeeded
- CleanupStack::PushL(dir);
- for(TInt i = 0; i < dir->Count(); i++)
- {
- const TEntry &entry = (*dir)[i];
- if(!entry.IsDir())
- {
- TFileName fileName(preInstalledPath);
- fileName.Append(entry.iName);
- // Add files to sis installer.
- iSisInstaller->AddFileToInstallL(fileName);
- }
- }
- CleanupStack::PopAndDestroy(dir);
+ // Return state of Startup
+ return ETrue;
}
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::GetProcessStatus
-// -----------------------------------------------------------------------
-//
-TInt& CDaemonBehaviour::GetProcessStatus()
- {
- return iGeneralProcessStatus;
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::SetProcessStatus
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::SetProcessStatus( TInt aStatus )
- {
- iGeneralProcessStatus = aStatus;
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::DoNotifyMediaProcessingComplete
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::DoNotifyMediaProcessingComplete()
- {
- if ( iSwiDaemonPlugin && iStartNotified )
- {
- iSwiDaemonPlugin->MediaProcessingComplete();
- }
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::IsPlugin
-// -----------------------------------------------------------------------
-//
-// For plugin support
-TBool CDaemonBehaviour::IsPlugin()
- {
- if ( iSwiDaemonPlugin )
- {
- return ETrue;
- }
- return EFalse;
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::NotifyPlugin
-// -----------------------------------------------------------------------
-//
-// For plugin support
-void CDaemonBehaviour::NotifyPlugin()
- {
- FLOG( _L("Daemon: NotifyPlugin"));
- if ( !iStartNotified )
- {
- FLOG_1( _L("Daemon: MediaProcessingStart for drive = %d"), iDrive );
- iSwiDaemonPlugin->MediaProcessingStart( iDrive );
- iStartNotified = ETrue;
- }
- }
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::RequestPluginInstall
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::RequestPluginInstall( TDesC& aSisFile )
- {
- // Note We will open file in here but that is only because
- // plug-in interface has been designed this way. Original
- // Symbian SWI daemon did use RApaLsSession for installing
- // and thus RFile was open already.
- // Since current SWI Daemon does use SWI API it doesn't
- // open files and thus we need to open the file in here.
- FLOG( _L("Daemon: RequestPluginInstall "));
-
- RFile file;
- User::LeaveIfError( file.Open(
- iFs, aSisFile, EFileRead | EFileShareReadersOnly ) );
- CleanupClosePushL( file );
-
- iSwiDaemonPlugin->RequestInstall( file );
-
- // close file, original SWI Daemon do not leave file open.
- CleanupStack::PopAndDestroy( &file );
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::UpdateComponentStatusL
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::UpdateComponentStatusL( TChangeType aChangeType,
- TInt aDrive )
- {
- FLOG( _L("Daemon: UpdateComponentStatus") );
-
- Usif::RSoftwareComponentRegistry scrServer;
- User::LeaveIfError( scrServer.Connect() );
- CleanupClosePushL( scrServer );
-
- // Filter all other component types except sisx.
- Usif::CComponentFilter* filter = Usif::CComponentFilter::NewLC();
- filter->SetSoftwareTypeL( Usif::KSoftwareTypeNative );
+ void CDaemonBehaviour::MediaChangeL(TInt aDrive, TChangeType aChangeType)
+ {
+ FLOG_1( _L("Daemon: Media change %d"), aDrive );
+ RSisRegistryWritableSession registrySession;
+
+ User::LeaveIfError(registrySession.Connect());
+ CleanupClosePushL(registrySession);
+
+ if (aChangeType==EMediaInserted)
+ {
+ FLOG( _L("Daemon: Media inserted") );
+ FLOG( _L("Daemon: Media change: Update sis registry") );
+ // notify IAR
+ // Error ou1cimx1#212652
+ // Note SWI Daemon needs to notify sis registry from
+ // media change. Otherwice registry is not updated
+ // and e.g. IsPresentL function will give false results.
+ // Note also that this function should be called before
+ // ProcessPreinstalledFilesL in SWI Daemon.
+ registrySession.AddDriveL(aDrive);
+
+ // Scan directory on the card and run pre-installed through SWIS
+ FLOG( _L("Daemon: Media change: Process preinstalled files") );
+ ProcessPreinstalledFilesL(aDrive);
- RArray<Usif::TComponentId> componentIdList;
- CleanupClosePushL( componentIdList );
-
- // Get list of all native (sisx) installed packages.
- scrServer.GetComponentIdsL( componentIdList, filter );
- FLOG_1( _L("Daemon: componentIdList count: %d"),componentIdList.Count() );
-
- if ( componentIdList.Count() )
- {
- RArray<TApaAppUpdateInfo> appInfoArray;
- CleanupClosePushL( appInfoArray );
- FLOG_1( _L("Daemon: target drive: %d"), aDrive );
-
-#ifdef _DEBUG
- TChar targetDrive;
- iFs.DriveToChar( aDrive, targetDrive );
- HBufC* tarceBuf = HBufC::NewL( 16 );
- TPtr bufPtr = tarceBuf->Des();
- bufPtr.Append( targetDrive );
- FLOG_1( _L("Daemon: target drive: %S"), &bufPtr );
- delete tarceBuf;
-#endif
-
- FLOG( _L("Daemon: Check all SCR native components") );
- // Check all components in SCR. If media is removed/inserted
- // change status flag in SCR and in AppArc.
- for ( TInt index=0; index < componentIdList.Count(); index++ )
- {
- Usif::TComponentId componentId( componentIdList[index] );
- FLOG_1( _L("Daemon: componentId: %d"), componentId );
+#ifdef RD_MULTIPLE_DRIVE
+ // Add inserted media drive to drive array.
+ if ( iDriveArray.Find(aDrive) == KErrNotFound )
+ {
+ iDriveArray.AppendL(aDrive);
+ }
+#endif
+ }
+ else if (aChangeType==EMediaRemoved)
+ {
+ FLOG( _L("Daemon: Media removed") );
+
+#ifdef RD_MULTIPLE_DRIVE
+ // Get Installer state.
+ TBool installerRunning = iSisInstaller->IsInstalling();
+#endif
+
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+ // notify IAR
+ // Note SWI Daemon need to notify sis registry from
+ // media change.
+ registrySession.RemoveDriveL(aDrive);
+#endif //SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+ // Cancel all requests for install
+ iSisInstaller->Cancel();
+
+#ifdef RD_MULTIPLE_DRIVE
+ // Notify plugin
+ if(iSwiDaemonPlugin)
+ {
+ TInt index = iDriveArray.Find(aDrive);
+ iSwiDaemonPlugin->MediaRemoved(index);
+ }
+#else
+ // Notify plugin
+ if(iSwiDaemonPlugin)
+ {
+ iSwiDaemonPlugin->MediaRemoved(aDrive);
+ }
+#endif //RD_MULTIPLE_DRIVE
+
+#ifdef RD_MULTIPLE_DRIVE
+ // Get index of removed drive from array
+ TInt index = iDriveArray.Find(aDrive);
- // Check that package is not in ROM. If package is in rom
- // it can not be removed/not present.
- TBool inRom = scrServer.IsComponentOnReadOnlyDriveL( componentId );
- FLOG_1( _L("Daemon: IsComponentOnReadOnlyDriveL: %d"), inRom );
-
- if ( !inRom )
- {
- UpdateStatusL( scrServer,
- componentId,
- aChangeType,
- aDrive,
- appInfoArray );
- }
- } // for loop
+ if ( index > KErrNotFound )
+ {
+ iDriveArray.Remove(index);
+ iDriveArray.Compress();
+ }
- FLOG_1( _L("Daemon: appInfoArray.Count = %d"), appInfoArray.Count() );
- // Check do we have updated some application info.
- if ( appInfoArray.Count() )
- {
- // Update AppArc list after we have all application
- // uids/status in array.
- FLOG( _L("Daemon: Update AppArc") );
- RApaLsSession appArcSession;
- TInt err = appArcSession.Connect();
- FLOG_1( _L("Daemon: appArcSession.Connect err = %d"), err );
- if ( !err )
- {
- CleanupClosePushL( appArcSession );
- FLOG( _L("Daemon: UpdateAppListL") );
- appArcSession.UpdateAppListL( appInfoArray );
- CleanupStack::PopAndDestroy(); // appArcSession
- }
+ // Continue installing from other drives if needed.
+ if ( installerRunning )
+ {
+ // Get count of inserted drives.
+ TInt count = iDriveArray.Count();
+
+ if ( count )
+ {
+ for(index = 0; index < count; index++ )
+ {
+ ProcessPreinstalledFilesL(iDriveArray[index]);
+ iSisInstaller->StartInstallingL();
+ }
+ }
+ }
+#endif
}
- CleanupStack::PopAndDestroy( &appInfoArray );
- } // if componentList.Count()
-
- CleanupStack::PopAndDestroy( &componentIdList ); //componentIDList.Close();
- CleanupStack::PopAndDestroy( filter );
- CleanupStack::PopAndDestroy( &scrServer );
- FLOG( _L("Daemon: UpdateComponentStatus END") );
- }
-
-// -----------------------------------------------------------------------
-// CDaemonBehaviour::UpdateStatusL
-// -----------------------------------------------------------------------
-//
-void CDaemonBehaviour::UpdateStatusL(
- Usif::RSoftwareComponentRegistry& aScrServer,
- Usif::TComponentId aComponentId,
- TChangeType aChangeType,
- TInt aTargetDrive,
- RArray<TApaAppUpdateInfo>& aAppInfoArray )
- {
- FLOG( _L("Daemon: CDaemonBehaviour::UpdateStatusL start") );
-
- Usif::CComponentEntry* entry = Usif::CComponentEntry::NewL();
- CleanupStack::PushL( entry );
+
+ CleanupStack::PopAndDestroy(®istrySession);
+ }
+
+ void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive)
+ {
+ _LIT(KDaemonPrivatePath,":\\private\\10202dce\\");
+
+#ifndef RD_MULTIPLE_DRIVE
+ iSisInstaller->Cancel();
+#endif
+ // For uninstaller
+ // Set on installing mode.
+ iGeneralProcessStatus = EStateInstalling;
+ FLOG_1( _L("[CDaemonBehaviour] iGeneralProcessStatus = %d"),
+ iGeneralProcessStatus );
- TInt err = KErrNone;
- TRAP( err, aScrServer.GetComponentL( aComponentId,
- *entry,
- Usif::KUnspecifiedLocale ) );
- FLOG_1( _L("Daemon: GetComponentL TRAP err = %d"), err );
+ ProcessPreinstalledFilesL(aDrive, KDaemonPrivatePath);
+ iStartNotified = EFalse;
+ iDrive = aDrive;
+ iSisInstaller->StartInstallingL();
+ }
- // If we get error let's not stop the loop.
- if ( !err )
- {
- TBool isInTargetDrive = EFalse;
- // Get all component drives.
- TDriveList driveList;
- driveList = entry->InstalledDrives();
-
- FLOG( _L("Daemon: Check all drives for this component") );
- // Go through all drives which have files for this component.
- for ( TInt i = 0; i < KMaxDrives; i++ )
- {
- if ( driveList[i] != 0 )
- {
- FLOG_1( _L("Daemon: Found drive: %d"), i );
-
- if ( aTargetDrive == i )
+ void CDaemonBehaviour::ProcessPreinstalledFilesL(TInt aDrive, const TDesC& aDirectory)
+ {
+ FLOG( _L("Daemon: ProcessPreInstalledFilesL") );
+ TPath preInstalledPath;
+ TChar drive;
+ RFs::DriveToChar(aDrive, drive);
+ preInstalledPath.Append(drive);
+ preInstalledPath.Append(aDirectory);
+
+ FLOG_1( _L("Daemon: ProcessPreInstalledFilesL Getting dir %S"), &preInstalledPath );
+ CDir* dir = NULL;
+ TInt err = iFs.GetDir(preInstalledPath, KEntryAttNormal, ESortNone, dir);
+ if (err != KErrNone && err != KErrPathNotFound)
+ {
+ FLOG_1( _L("Daemon: ProcessPreInstalledFilesL GetDir with error %d"), err );
+ User::Leave(err);
+ }
+ if(dir)
+ {
+ // dir will only exist if GetDir succeeded
+ CleanupStack::PushL(dir);
+ for(TInt i = 0; i < dir->Count(); i++)
+ {
+ const TEntry &entry = (*dir)[i];
+ if(!entry.IsDir())
{
- // Ok we have files in this target drive.
- isInTargetDrive = ETrue;
- FLOG( _L("Daemon: Component has files in target drive") );
+ TFileName fileName(preInstalledPath);
+ fileName.Append(entry.iName);
+ iSisInstaller->AddFileToInstallL(fileName);
}
}
- } // for
-
- // Check if component or part of it is in the media.
- if ( isInTargetDrive )
+ CleanupStack::PopAndDestroy(dir);
+ }
+ }
+
+ // For uninstaller
+ TInt& CDaemonBehaviour::GetProcessStatus()
+ {
+ return iGeneralProcessStatus;
+ }
+
+ // For uninstaller
+ void CDaemonBehaviour::SetProcessStatus( TInt aStatus )
+ {
+ iGeneralProcessStatus = aStatus;
+ }
+
+ // For plugin support
+ void CDaemonBehaviour::DoNotifyMediaProcessingComplete()
+ {
+ if ( iSwiDaemonPlugin && iStartNotified )
{
- // We need to update applications status to AppArc when
- // there is some media change. AppArc needs application
- // UID (not package UID) so we need to get all app. UIDs
- // from the package and set them to present or not present.
-
- FLOG( _L("Daemon: Create application status for AppArc") );
- FLOG( _L("Daemon: Get applications UIDs from SCR") );
- RArray<TUid> appUidArray;
- CleanupClosePushL( appUidArray );
-
- TRAP( err, aScrServer.GetAppUidsForComponentL( aComponentId, appUidArray ) );
- FLOG_1( _L("Daemon: GetAppUidsForComponentL TRAP err = %d"), err );
- FLOG_1( _L("Daemon: UID array count = %d"), appUidArray.Count() );
-
- for (TInt index = 0; index < appUidArray.Count(); index++)
- {
- FLOG_1( _L("Daemon: Add app UID = 0x%x"),
- appUidArray[index].iUid );
-
- TApaAppUpdateInfo appInfo;
- appInfo.iAppUid = appUidArray[index];
+ iSwiDaemonPlugin->MediaProcessingComplete();
+ }
+ }
+
+ // For plugin support
+ TBool CDaemonBehaviour::IsPlugin()
+ {
+ if ( iSwiDaemonPlugin )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+ // For plugin support
+ void CDaemonBehaviour::NotifyPlugin()
+ {
+ FLOG( _L("Daemon: NotifyPlugin"));
+ if ( !iStartNotified )
+ {
+ FLOG_1( _L("Daemon: MediaProcessingStart for drive = %d"), iDrive );
+ iSwiDaemonPlugin->MediaProcessingStart( iDrive );
+ iStartNotified = ETrue;
+ }
+ }
+
+ // For plugin support
+ void CDaemonBehaviour::RequestPluginInstall( TDesC& aSisFile )
+ {
+ // Note We will open file in here but that is only because
+ // plug-in interface has been designed this way. Original
+ // Symbian SWI daemon did use RApaLsSession for installing
+ // and thus RFile was open already.
+ // Since current SWI Daemon does use SWI API it doesn't
+ // open files and thus we need to open the file in here.
+ FLOG( _L("Daemon: RequestPluginInstall "));
- if ( aChangeType == EMediaInserted )
- {
- appInfo.iAction = TApaAppUpdateInfo::EAppPresent;
- FLOG( _L("Daemon: Set app = EAppPresent") );
- }
- else
- {
- appInfo.iAction = TApaAppUpdateInfo::EAppNotPresent;
- FLOG( _L("Daemon: Set app = EAppNotPresent") );
- }
-
- aAppInfoArray.Append( appInfo );
- }
- CleanupStack::PopAndDestroy(&appUidArray);
-// Set do not work, it will leave.
-/*
- FLOG( _L("Daemon: Set component status to SCR") );
- // Update component flag to SCR.
- if ( aChangeType == EMediaInserted )
- {
- FLOG( _L("Daemon: Set component present = TRUE") );
- TRAP( err, aScrServer.SetIsComponentPresentL( aComponentId, ETrue ) );
- }
- else if ( aChangeType==EMediaRemoved )
- {
- FLOG( _L("Daemon: Set component present = FALSE") );
- TRAP( err, aScrServer.SetIsComponentPresentL( aComponentId, EFalse ) );
- }
- FLOG_1( _L("Daemon: SetIsComponentPresentL TRAP err = %d"), err );
-*/
- } // if isInTargetDrive
- } // if err
-
- CleanupStack::PopAndDestroy( entry );
- entry = NULL;
-
- FLOG( _L("Daemon: CDaemonBehaviour::UpdateStatusL end") );
- }
-
+ RFile file;
+ User::LeaveIfError( file.Open(
+ iFs, aSisFile, EFileRead | EFileShareReadersOnly ) );
+ CleanupClosePushL( file );
+
+ iSwiDaemonPlugin->RequestInstall( file );
+
+ // close file, original SWI Daemon do not leave file open.
+ CleanupStack::PopAndDestroy( &file );
+ }
+
+ } // namespace Swi
//EOF