diff -r 51c0f5edf5ef -r 3ba40be8e484 iaupdate/IAD/engine/controller/src/iaupdatenodecontainer.cpp --- a/iaupdate/IAD/engine/controller/src/iaupdatenodecontainer.cpp Fri Feb 19 22:57:02 2010 +0200 +++ b/iaupdate/IAD/engine/controller/src/iaupdatenodecontainer.cpp Fri Mar 12 15:43:14 2010 +0200 @@ -32,6 +32,11 @@ #include "iaupdatedebug.h" +#include "ncdnodecontentinfo.h" +#include "ncdnode.h" +#include "iaupdateprotocolconsts.h" + + // Constant that is used to inform that dependency node // was not found when dependencies were checked. const TInt KDependencyNotFound( -1 ); @@ -665,8 +670,10 @@ for ( TInt i = 0; i < iHeadNodes.Count(); ++i ) { - CIAUpdateNode& tmpNode( *iHeadNodes[ i ] ); - if( aNode.Uid() == tmpNode.Uid() && aNode.Type() != MIAUpdateNode::EPackageTypeServicePack ) + CIAUpdateNode& tmpNode( *iHeadNodes[ i ] ); + + if( NodeExists( aNode, tmpNode ) && + aNode.Type() != MIAUpdateNode::EPackageTypeServicePack ) { IAUPDATE_TRACE("[IAUPDATE] Head node already in the list."); @@ -726,7 +733,8 @@ { IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeContainer::ReplaceRecommendedL() begin"); - if ( aCurrentNode.Uid() != aNewNode.Uid() ) + + if ( !NodeExists( aCurrentNode, aNewNode ) ) { IAUPDATE_TRACE("[IAUPDATE] LEAVE: Nodes do not match."); User::Leave( KErrArgument ); @@ -766,10 +774,11 @@ IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeContainer::PackageTypeAcceptedL() begin"); if ( aNode.Type() == MIAUpdateNode::EPackageTypeServicePack - || aNode.Type() == MIAUpdateNode::EPackageTypeSA ) + || aNode.Type() == MIAUpdateNode::EPackageTypeSA + || aNode.Type() == MIAUpdateNode::EPackageTypeWidget ) { - // Service packs and SA type always accepted. - IAUPDATE_TRACE("[IAUPDATE] Upgrade packet type SA or node is service pack"); + // Service packs, SA types and Widgets are always accepted. + IAUPDATE_TRACE("[IAUPDATE] Upgrade packet type SA, service pack or widget"); IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeContainer::PackageTypeAcceptedL() end: ETrue"); return ETrue; } @@ -1053,9 +1062,17 @@ { IAUPDATE_TRACE("[IAUPDATE] Not a service pack"); + TIAUpdateVersion installedVersion; - TBool installed( - IAUpdateUtils::IsAppInstalledL( aNode.Uid(), installedVersion ) ); + TBool installed = EFalse; + if ( aNode.Mime().Compare( IAUpdateProtocolConsts::KMimeWidget ) == 0 ) + { + installed = IAUpdateUtils::IsWidgetInstalledL( aNode.Identifier(), installedVersion ); + } + else + { + installed = IAUpdateUtils::IsAppInstalledL( aNode.Uid(), installedVersion ); + } // Notice that here we let the check pass also if node has the same version // as the installed content. By accepting same version, the dependency chains // will contain the currently installed node dependency information. Then, @@ -1087,3 +1104,33 @@ return checkPassed; } + +// Checks if the head node ids / identifers are equal +TBool CIAUpdateNodeContainer::NodeExists( const CIAUpdateNode& aNode, + const CIAUpdateNode& tmpNode )const + { + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateNodeContainer::NodeExists begin"); + + TBool exists = EFalse; + + if ( aNode.Mime().Compare( IAUpdateProtocolConsts::KMimeWidget ) == 0 ) + { + if ( aNode.Identifier() == tmpNode.Identifier() ) + { + exists = ETrue; + } + } + else + { + if ( aNode.Uid() == tmpNode.Uid() ) + { + exists = ETrue; + } + } + + + IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateNodeContainer::NodeExists end: %d", + exists); + + return exists; + }