contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp
branchRCL_3
changeset 113 0efa10d348c0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp	Tue Aug 31 15:30:51 2010 +0300
@@ -0,0 +1,772 @@
+/*
+* Copyright (c) 2008 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:
+ *
+*/
+
+
+// INCLUDE FILES
+#include <hbtextresolversymbian.h>
+
+#include "cadef.h"
+#include "cawidgetdescription.h"
+#include "cainnerentry.h"
+#include "widgetscannerutils.h"
+#include "cawidgetscannerdef.h"
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCaWidgetDescription::CCaWidgetDescription
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCaWidgetDescription::CCaWidgetDescription() :
+    iEntryId( KNoId ), iValid ( EFalse )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCaWidgetDescription::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::ConstructL( )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCaWidgetDescription::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::ConstructL( CCaInnerEntry* aEntry )
+    {
+    iEntryId = aEntry->GetId();
+    iDescription.CreateL( aEntry->GetDescription() );
+    //package uid
+    TBuf<KMaxUidName> uidDesc;
+    aEntry->FindAttribute( KCaPackageUid, uidDesc );
+    if ( uidDesc.Length() )
+        {
+        TLex uidLex(uidDesc);
+        User::LeaveIfError( uidLex.Val( iPackageUid, EHex ));
+        }
+    iTitle.CreateL( aEntry->GetText() );
+    
+    iIconUri.CreateL( aEntry->Icon()->FileName() );
+    
+    TPtrC attribute;
+    aEntry->FindAttribute( KPreviewImageAttrName, attribute );
+    iPreviewImageName.CreateL( attribute.Length() );
+    iPreviewImageName = attribute;
+
+    //library
+    iLibrary.CreateL( KCaMaxAttrValueLen );
+    aEntry->FindAttribute( KAttrWidgetLibrary, iLibrary );
+    //path
+    iPath.CreateL( KCaMaxAttrValueLen );
+    aEntry->FindAttribute( KAttrWidgetPath, iPath );
+    //uri
+    iUri.CreateL( KCaMaxAttrValueLen );
+    aEntry->FindAttribute( KAttrWidgetUri, iUri );
+    //translation filename
+    iTranslationFileName.CreateL( KCaMaxAttrValueLen );
+    aEntry->FindAttribute( KAttrWidgetTranslationFileName, iTranslationFileName );
+    //mmc id
+    iMmcId.CreateL(KMassStorageIdLength);
+    aEntry->FindAttribute( KCaAttrMmcId, iMmcId );
+    //service xml
+    iServiceXml.CreateL( KCaMaxAttrValueLen );
+    aEntry->FindAttribute( KAttrWidgetServiceXml,iServiceXml );
+    
+    iFlags = aEntry->GetFlags();
+    iModificationTime.CreateL(KCaMaxAttrValueLen);
+    aEntry->FindAttribute( KCaAttrInstallationTime, iModificationTime );
+    }
+
+// -----------------------------------------------------------------------------
+// CCaWidgetScannerParser::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCaWidgetDescription* CCaWidgetDescription::NewL( )
+    {
+    CCaWidgetDescription* self = NewLC( );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCaWidgetDescription::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCaWidgetDescription* CCaWidgetDescription::NewLC( )
+    {
+    CCaWidgetDescription* self = new( ELeave ) CCaWidgetDescription();
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCaWidgetDescription::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCaWidgetDescription* CCaWidgetDescription::NewLC( CCaInnerEntry* aEntry )
+    {
+    CCaWidgetDescription* self = new( ELeave ) CCaWidgetDescription();
+    CleanupStack::PushL( self );
+    self->ConstructL( aEntry );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CCaWidgetDescription::~CCaWidgetDescription()
+    {
+    iPath.Close();
+    iModificationTime.Close();
+    iServiceXml.Close();
+    iMmcId.Close();
+    iUri.Close();
+    iTranslationFileName.Close();
+    iLibrary.Close();
+    iPreviewImageName.Close();
+    iIconUri.Close();
+    iTitle.Close();
+    iDescription.Close();
+    iStringIdTitle.Close();
+    iStringIdDescription.Close();
+    iManifestFilePathName.Close();
+    
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+CCaWidgetDescription *CCaWidgetDescription::CloneL()
+    {   
+    CCaWidgetDescription* clone = CCaWidgetDescription::NewL();
+    
+    clone->SetPathL( GetPath() );
+    clone->SetMmcIdL( GetMmcId() );
+    clone->SetStringidTitleL( GetStringIdTitle() );
+    clone->SetLibraryL( GetLibrary() );
+    clone->SetDescriptionL( GetDescription() );
+    clone->SetStringIdDescriptionL( GetStringIdDescription() );
+    clone->SetUriL( GetUri() );
+    clone->SetIconUriL( GetIconUri() );
+    clone->SetPreviewImageNameL( GetPreviewImageName() );
+    clone->SetTitleL( GetTitle() );
+    clone->SetTranslationFileNameL( GetTranslationFileName() );
+    clone->SetLibraryL( GetLibrary() );
+    clone->SetModificationTimeL( GetModificationTime() );
+    clone->SetServiceXmlL( GetServiceXml() );
+    clone->SetManifestFilePathNameL( GetManifestFilePathName() );
+    
+    return clone;
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::CompareUri(
+        const CCaWidgetDescription& aFirst,const CCaWidgetDescription& aSecond)
+    {
+    TBool result = EFalse;
+    if( aFirst.GetUri() == aSecond.GetUri() )
+        {
+        result = ETrue;
+        }
+    else
+        {
+        result = EFalse;
+        }
+    return result;
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::Compare( const CCaWidgetDescription& aToCompare )
+    {
+    TBool result = EFalse;
+    if( aToCompare.GetLibrary() == GetLibrary() &&
+            aToCompare.GetDescription() == GetDescription() &&
+            aToCompare.GetUri() == GetUri() &&
+            aToCompare.GetIconUri() == GetIconUri() &&
+            aToCompare.GetPreviewImageName() == GetPreviewImageName() &&
+            aToCompare.GetTitle() == GetTitle() &&
+            aToCompare.GetTranslationFileName() == GetTranslationFileName() &&
+            aToCompare.GetLibrary() != KNoLibrary &&
+            aToCompare.GetModificationTime() == GetModificationTime() &&
+            aToCompare.GetServiceXml() == GetServiceXml()
+            )
+        {
+        result = ETrue;
+        }
+    else
+        {
+        result = EFalse;
+        }
+    return result;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetMmcIdL( const TDesC& aMmcId )
+    {
+    iMmcId.Close();
+    iMmcId.CreateL( aMmcId );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetPackageUidL( const TDesC& aPackageUid )
+    {
+    TLex lexer( aPackageUid );
+    User::LeaveIfError( lexer.Val( iPackageUid,EHex));
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TUint CCaWidgetDescription::GetPackageUidL()
+    {
+    return iPackageUid;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetTitleL( const TDesC& aTitle )
+    {
+    iTitle.Close();
+    iTitle.CreateL(aTitle);
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetDescriptionL( const TDesC& aDescription )
+    {
+    iDescription.Close();
+    iDescription.CreateL(aDescription);
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetUriL( const TDesC& aUri )
+    {
+    iUri.Close();
+    iUri.CreateL(aUri);
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetTranslationFileNameL(
+        const TDesC& aTranslationFileName )
+    {
+    iTranslationFileName.Close();
+    iTranslationFileName.CreateL( aTranslationFileName );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetIconUriL( const TDesC& aIconUri )
+    {
+    iIconUri.Close();
+    iIconUri.CreateL(aIconUri);
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetPreviewImageNameL( const TDesC& aPreviewName )
+    {
+    iPreviewImageName.Close();
+    iPreviewImageName.CreateL( aPreviewName );
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetLibraryL( const TDesC& aLibrary )
+    {
+    iLibrary.Close();
+    iLibrary.CreateL(aLibrary);
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetFlag( TInt aFlag, TBool aValue )
+    {
+    if( aValue )
+        {
+        iFlags = iFlags | aFlag;
+        }
+    else
+        {
+        iFlags = iFlags & ~aFlag;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetModificationTimeL( const TDesC& aModificationTime )
+    {
+    iModificationTime.Close();
+    iModificationTime.CreateL( aModificationTime );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetStringIdDescriptionL( const TDesC& aStringIdDescription )
+    {
+    iStringIdDescription.Close();
+    iStringIdDescription.CreateL( aStringIdDescription );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetStringidTitleL( const TDesC& aStringIdTitle )
+    {
+    iStringIdTitle.Close();
+    iStringIdTitle.CreateL( aStringIdTitle );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCaWidgetDescription::GetEntryId( ) const
+    {
+    return iEntryId;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetMmcId( ) const
+    {
+    return iMmcId;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetStringIdDescription() const
+    {
+    return iStringIdDescription;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+
+TPtrC CCaWidgetDescription::GetStringIdTitle() const
+    {
+    return iStringIdTitle;
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetLibrary( ) const
+    {
+    return iLibrary;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetPath( ) const
+    {
+    return iPath;
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetPathL( const TDesC& aPath )
+    {
+	iPath.Close();
+	iPath.CreateL(aPath);
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetDescription( ) const
+    {
+    return iDescription;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetUri( ) const
+    {
+    return iUri;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetTranslationFileName() const
+    {
+    return iTranslationFileName;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetIconUri( ) const
+    {
+    return iIconUri;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetPreviewImageName( ) const
+    {
+    return iPreviewImageName;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetTitle( ) const
+    {
+    TPtrC result ;
+    if ( iTitle == KNullDesC )
+        {
+        result.Set( GetLibraryName() );
+        }
+    else
+        {
+        result.Set( iTitle );
+        }
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetModificationTime( ) const
+    {
+    return iModificationTime;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::IsMissing( ) const
+    {
+    return iFlags & EMissing;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::IsUsed( ) const
+    {
+    return iFlags & EUsed;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::IsVisible( ) const
+    {
+    return iFlags & EVisible;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CCaInnerEntry* CCaWidgetDescription::GetEntryLC( ) const
+    {
+    CCaInnerEntry* entry = CCaInnerEntry::NewLC();
+    entry->SetEntryTypeNameL( KCaTypeWidget );
+    entry->SetRole( EItemEntryRole );
+    entry->SetFlags( iFlags );
+    if ( iPackageUid )
+        {
+        TBuf<KMaxUidName> uidDesc;
+        uidDesc.AppendNum( iPackageUid,EHex );
+        entry->AddAttributeL( KCaPackageUid, uidDesc );
+        }
+    if ( iEntryId != KNoId )
+        {
+        entry->SetId( iEntryId );
+        }
+    if ( iMmcId != KNullDesC )
+        {
+        entry->AddAttributeL( KCaAttrMmcId, iMmcId );
+        }
+    if ( iLibrary != KNullDesC )
+        {
+        entry->AddAttributeL(KAttrWidgetLibrary, iLibrary);
+        }
+    if ( iPath != KNullDesC )
+        {
+        entry->AddAttributeL(KAttrWidgetPath, iPath);
+        }
+    if ( iTitle != KNullDesC )
+        {
+        entry->SetTextL(iTitle);
+        }
+    else
+        {
+        TPtrC libraryName( GetLibraryName() );
+        entry->SetTextL( libraryName );
+        }
+
+    if ( iDescription != KNullDesC )
+        {
+        entry->SetDescriptionL( iDescription );
+        }
+    if ( iUri != KNullDesC )
+        {
+        entry->AddAttributeL(KAttrWidgetUri, iUri);
+        }
+    if ( iIconUri != KNullDesC)
+        {
+        // aSkinId and AppId not used for widgets - KNullDesC
+        entry->SetIconDataL( iIconUri, KNullDesC, KNullDesC );
+        }
+    if ( iPreviewImageName != KNullDesC )
+        {
+        entry->AddAttributeL( KPreviewImageAttrName, iPreviewImageName );
+        }
+    if( iModificationTime != KNullDesC )
+        {
+        entry->AddAttributeL( KCaAttrInstallationTime, iModificationTime );
+        }
+    if ( iServiceXml != KNullDesC )
+        {
+        entry->AddAttributeL( KAttrWidgetServiceXml, iServiceXml);
+        }
+    if( iTranslationFileName != KNullDesC )
+        {
+        entry->AddAttributeL( KAttrWidgetTranslationFileName,
+                iTranslationFileName );
+        }
+    return entry;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetLibraryName( ) const
+    {
+    TPtrC libraryName( iLibrary );
+    TInt pos( 0 );
+    while ( ( pos = libraryName.Find( KDoubleSlash ) ) != KErrNotFound )
+        {
+        libraryName.Set( libraryName.Mid( pos + 1 ) );
+        }
+    pos = libraryName.Find( KDllExt );
+    if (pos == (libraryName.Length() - KDllExt().Length()))
+        {
+        libraryName.Set( libraryName.Mid( 0, pos ));
+        }
+    return libraryName;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::RemoveMmcId( )
+    {
+    iMmcId.Close();
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetServiceXmlL(const TDesC& aServiceXml)
+    {
+    iServiceXml.Close();
+    iServiceXml.CreateL( aServiceXml );
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetServiceXml() const
+    {
+    return iServiceXml;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::LocalizeTextsL()
+    {
+    if( iTranslationFileName.Length() )
+        {
+        RBuf translationFileName;
+        translationFileName.Create( iTranslationFileName.Length() + 1 );
+        CleanupClosePushL( translationFileName );
+        translationFileName.Copy( iTranslationFileName );
+        translationFileName.Append( KWidgetScannerUnderline );
+           
+        
+        if( !HbTextResolverSymbian::Init( translationFileName, KLocalizationFilepathC ) )
+          {
+          if( !HbTextResolverSymbian::Init( translationFileName, KLocalizationFilepathZ ) )
+              {
+              // this should not be called too often 
+              TChar currentDriveLetter;
+              TDriveList driveList;
+              RFs fs;
+              User::LeaveIfError( fs.Connect() );
+              User::LeaveIfError( fs.DriveList( driveList ) );
+
+              RBuf path;
+              path.Create( KLocalizationFilepath().Length() + 1 );
+              CleanupClosePushL( path );
+              
+              for( TInt driveNr=EDriveY; driveNr >= EDriveA; driveNr-- )
+                  {
+                  if( driveList[driveNr] )
+                      {
+                      User::LeaveIfError( fs.DriveToChar( driveNr,
+                              currentDriveLetter ) );
+                      path.Append( currentDriveLetter );
+                      path.Append( KLocalizationFilepath );
+                      if( HbTextResolverSymbian::Init( translationFileName, path ) )
+                          {
+                          break;
+                          }
+                      }
+                  path.Zero();
+                  }
+              CleanupStack::PopAndDestroy( &path );
+              fs.Close();
+              }
+           }
+        
+        HBufC* tmp;
+        
+        if( iTitle.Length() )
+            {
+            SetStringidTitleL( iTitle );
+            tmp = HbTextResolverSymbian::LoadLC( iTitle );
+            SetTitleL( *tmp );
+            CleanupStack::PopAndDestroy( tmp );
+            }
+        if( iDescription.Length() )
+            {
+            SetStringIdDescriptionL( iDescription );
+            tmp = HbTextResolverSymbian::LoadLC( iDescription );
+            SetDescriptionL( *tmp );
+            CleanupStack::PopAndDestroy( tmp );
+            }
+        CleanupStack::PopAndDestroy( &translationFileName );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+// 
+TBool CCaWidgetDescription::IsValid()
+    {
+    return iValid;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetValid(TBool aVal)
+    {
+    iValid = aVal;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetManifestFilePathNameL( 
+    const TDesC& aManifestFilePathName )
+    {
+    iManifestFilePathName.Close();
+    iManifestFilePathName.CreateL( aManifestFilePathName );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetManifestFilePathName() const
+    {
+    return iManifestFilePathName;
+    }
+//  End of File