contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp
changeset 60 f62f87b200ec
child 61 8e5041d13c84
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp	Fri Mar 19 09:35:23 2010 +0200
@@ -0,0 +1,505 @@
+/*
+* 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 "cadef.h"
+#include "cawidgetdescription.h"
+#include "cainnerentry.h"
+#include "widgetscannerutils.h"
+
+// CONST
+const TInt KNoId = -1;
+_LIT( KDoubleSlash, "\\" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCaWidgetDescription::CCaWidgetDescription
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCaWidgetDescription::CCaWidgetDescription() :
+    iEntryId(KNoId), iFlags(EVisible)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 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().Length());
+    iDescription = 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().Length());
+    iTitle = aEntry->GetText();
+    iIconUri.CreateL(aEntry->GetIcon().iFileName.Length());
+    iIconUri = aEntry->GetIcon().iFileName;
+    //library
+    iLibrary.CreateL( KCaMaxAttrValueLen );
+    aEntry->FindAttribute( KAttrWidgetLibrary, iLibrary );
+    //uri
+    iUri.CreateL( KCaMaxAttrValueLen );
+    aEntry->FindAttribute( KAttrWidgetUri, iUri );
+    //mmc id
+    TBuf<KUidChars> mmcId;
+    if( aEntry->FindAttribute( KCaAttrMmcId, mmcId ) )
+        {
+        TLex mmcLex( mmcId );
+        User::LeaveIfError( mmcLex.Val( iMmcId, EHex ));
+        }
+    if( aEntry->GetFlags() &  EMissing )
+        {
+        iFlags = iFlags | EMissing;
+        }
+    if( aEntry->GetFlags() &  EUsed )
+        {
+        iFlags = iFlags | EUsed;
+        }
+    
+    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()
+    {
+    iTitle.Close();
+    iDescription.Close();
+    iUri.Close();
+    iIconUri.Close();
+    iLibrary.Close();
+    iModificationTime.Close();
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::Compare(
+        const CCaWidgetDescription& aFirst,const CCaWidgetDescription& aSecond)
+    {
+    if( aFirst.GetLibraryName() == aSecond.GetLibraryName() )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::Compare( const CCaWidgetDescription& aToCompare )
+    {
+    if( aToCompare.GetLibrary() == GetLibrary() &&
+            aToCompare.GetDescription() == GetDescription() &&
+            aToCompare.GetUri() == GetUri() &&
+            aToCompare.GetIconUri() == GetIconUri() &&
+            aToCompare.GetTitle() == GetTitle() &&
+            aToCompare.GetLibrary() != KNoLibrary &&
+            aToCompare.GetModificationTime() == GetModificationTime()
+            )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetMmcId( TUint aMmcId )
+    {
+    iMmcId = aMmcId;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetPackageUidL( const TDesC& aPackageUid )
+    {
+    TLex lexer( aPackageUid );
+    User::LeaveIfError( lexer.Val( iPackageUid,EHex));
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+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::SetIconUriL( const TDesC& aIconUri )
+    {
+    iIconUri.Close();
+    iIconUri.CreateL(aIconUri);
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetLibraryL( const TDesC& aLibrary )
+    {
+    iLibrary.Close();
+    iLibrary.CreateL(aLibrary);
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetMissing( TBool aMissing )
+    {
+    SetFlag( EMissing, aMissing );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetVisible( TBool aVisible )
+    {
+    SetFlag( EVisible, aVisible );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetUsed( TBool aUsed )
+    {
+    SetFlag( EUsed, aUsed );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+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 );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCaWidgetDescription::GetEntryId( ) const
+    {
+    return iEntryId;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TUint CCaWidgetDescription::GetMmcId( ) const
+    {
+    return iMmcId;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetLibrary( ) const
+    {
+    return iLibrary;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetDescription( ) const
+    {
+    return iDescription;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetUri( ) const
+    {
+    return iUri;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetIconUri( ) const
+    {
+    return iIconUri;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetTitle( ) const
+    {
+    if ( iTitle == KNullDesC )
+        {
+        return GetLibraryName();
+        }
+    else
+        {
+        return iTitle;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TPtrC CCaWidgetDescription::GetModificationTime( ) const
+    {
+    return iModificationTime;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::IsMissing( ) const
+    {
+    return iFlags & EMissing;
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TBool CCaWidgetDescription::IsUsed( ) const
+    {
+    return iFlags & EUsed;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CCaInnerEntry* CCaWidgetDescription::GetEntryLC( ) const
+    {
+    CCaInnerEntry* entry = CCaInnerEntry::NewLC();
+    entry->SetEntryTypeNameL( KCaTypeWidget );
+    entry->SetRole( EItemEntryRole );
+    if ( iFlags & EVisible )
+        {
+        entry->SetFlags( EVisible );
+        }
+
+    if ( iPackageUid )
+        {
+        TBuf<KMaxUidName> uidDesc;
+        uidDesc.AppendNum( iPackageUid,EHex );
+        entry->AddAttributeL( KCaPackageUid, uidDesc );
+        }
+
+    if ( iEntryId != KNoId )
+        {
+        entry->SetId( iEntryId );
+        }
+    if ( iMmcId )
+        {
+        TBuf<KMaxUidName> mmcId;
+        mmcId.AppendNum( iMmcId, EHex);
+        entry->AddAttributeL( KCaAttrMmcId, mmcId );
+        }
+    if ( iLibrary != KNullDesC )
+        {
+        entry->AddAttributeL(KAttrWidgetLibrary, iLibrary);
+        entry->SetFlags(entry->GetFlags() | ERemovable);
+        if (WidgetScannerUtils::IsFileOnDrive( iLibrary,
+                DriveInfo::EDefaultRom ) )
+            {
+            entry->SetFlags( entry->GetFlags() & ~ERemovable );
+            }
+        }
+
+    if ( iTitle != KNullDesC )
+        {
+        entry->SetTextL(iTitle);
+        entry->AddAttributeL(KCaAttrLongName, iTitle);
+        }
+    else
+        {
+        TPtrC libraryName( GetLibraryName() );
+        entry->SetTextL( libraryName );
+        entry->AddAttributeL( KCaAttrLongName, libraryName );
+        }
+
+    if ( iDescription != KNullDesC )
+        {
+        entry->SetDescriptionL( iDescription );
+        }
+    if ( iUri != KNullDesC )
+        {
+        entry->AddAttributeL(KAttrWidgetUri, iUri);
+        }
+    if ( iIconUri != KNullDesC)
+        {
+        entry->SetIconDataL(0, 0, 0, 0, iIconUri);
+        }
+
+    if( iModificationTime != KNullDesC )
+        {
+        entry->AddAttributeL( KCaAttrInstallationTime, iModificationTime );
+        }
+
+    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;
+    }
+//  End of File