--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/bookmarksupport/src/bkmrkproperties.cpp Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,222 @@
+// Copyright (c) 2005-2009 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:
+// Internal class for manipulating the common bookmark properties.
+// @internalComponent
+//
+//
+
+#include "bkmrkproperties.h"
+#include "bkmrkbase.h"
+
+CBkmrkProperties* CBkmrkProperties::NewL(CBookmarkBase& aParent, CBookmarkDb& aDb, CRepository& aRepository)
+ {
+ CBkmrkProperties* self = new (ELeave) CBkmrkProperties(aParent, aDb, aRepository);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CBkmrkProperties::CBkmrkProperties(CBookmarkBase& aParent, CBookmarkDb& aDb, CRepository& aRepository)
+ : CRepositoryAccessor(), iParent(aParent), iDatabase(aDb), iIconId(Bookmark::KNullAttachmentID), iUpdateModifiedOnCommit ( ETrue )
+ {
+ SetRepository(aRepository);
+ }
+
+CBkmrkProperties::~CBkmrkProperties()
+ {
+ delete iDescription;
+ delete iCustomProperties;
+ }
+
+void CBkmrkProperties::ConstructL()
+ {
+ CPropertyReg::TPropertyGroup type = CPropertyReg::EGroupBookmark;
+ if (iParent.Type() == Bookmark::ETypeFolder)
+ {
+ type = CPropertyReg::EGroupFolder;
+ }
+ iCustomProperties = CPropertyList::NewL(*iRepository, iDatabase.PropertyRegister(), type, IndexBase() + KBkmrkCusPropertyStart);
+ }
+
+const TDesC& CBkmrkProperties::Description() const
+ {
+ if (!iDescription)
+ {
+ return KNullDesC;
+ }
+ return *iDescription;
+ }
+
+void CBkmrkProperties::SetDescriptionL(const TDesC& aDescription)
+ {
+ // The aDescription must be smaller that the maximim descriptor storage size
+ __ASSERT_ALWAYS(aDescription.Length() <= Bookmark::KMaxDescriptorLength, User::Panic(Bookmark::KBookmarkErrTooLong, KErrArgument));
+
+ iParent.LeaveIfNotWritableL();
+
+ if (iDescription)
+ {
+ delete iDescription;
+ iDescription = NULL;
+ }
+ iDescription = aDescription.AllocL();
+ SetDirty();
+ }
+
+Bookmark::TAttachmentId CBkmrkProperties::IconId() const
+ {
+ return iIconId;
+ }
+
+void CBkmrkProperties::SetIconIdL(Bookmark::TAttachmentId aIconId)
+ {
+ iParent.LeaveIfNotWritableL();
+ // ensure the icon exists
+ iDatabase.IconL(aIconId);
+ iIconId = aIconId;
+ SetDirty();
+ }
+
+TUint32 CBkmrkProperties::IndexBase()
+ {
+ return iParent.IndexBase();
+ }
+
+void CBkmrkProperties::SetIdFromIndexBase(TUint32 aIndexBase)
+ {
+ return iParent.SetIdFromIndexBase(aIndexBase);
+ }
+
+void CBkmrkProperties::CommitL()
+ {
+ CRepositoryAccessor::CommitL();
+ iCustomProperties->CommitL();
+ }
+
+void CBkmrkProperties::SetDirty()
+ {
+ CRepositoryAccessor::SetDirty();
+ iParent.SetDirty();
+ }
+
+void CBkmrkProperties::TransNewL()
+ {
+ SetModified ();
+
+ TUint32 indexBase = IndexBase();
+ // create entries in the repository
+ TUint32 timeLo = I64LOW(iLastModified.Int64());
+ TUint32 timeHi = I64HIGH(iLastModified.Int64());
+ iRepository->Create(indexBase + KBkmrkLastModifiedLoIndex, static_cast<TInt>(timeLo));
+ iRepository->Create(indexBase + KBkmrkLastModifiedHiIndex, static_cast<TInt>(timeHi));
+ iRepository->Create(indexBase + KCmnDescriptionIndex, Description());
+ iRepository->Create(indexBase + KCmnIconIndex, static_cast<TInt>(iIconId));
+ iCustomProperties->TransNewL();
+ }
+
+void CBkmrkProperties::TransSaveL()
+ {
+ SetModified ();
+
+ TUint32 indexBase = IndexBase();
+ TUint32 timeLo = I64LOW(iLastModified.Int64());
+ TUint32 timeHi = I64HIGH(iLastModified.Int64());
+ iRepository->Set(indexBase + KBkmrkLastModifiedLoIndex, static_cast<TInt>(timeLo));
+ iRepository->Set(indexBase + KBkmrkLastModifiedHiIndex, static_cast<TInt>(timeHi));
+ iRepository->Set(indexBase + KCmnDescriptionIndex, Description());
+ iRepository->Set(indexBase + KCmnIconIndex, static_cast<TInt>(iIconId));
+ iCustomProperties->TransSaveL();
+ }
+
+void CBkmrkProperties::TransLoadL()
+ {
+ TUint32 indexBase = IndexBase();
+ TInt low = 0;
+ TInt high = 0;
+ TInt err = iRepository->Get( indexBase + KBkmrkLastModifiedLoIndex, low );
+ if ( err == KErrNone )
+ {
+ User::LeaveIfError(iRepository->Get(indexBase + KBkmrkLastModifiedHiIndex, high));
+ TUint32 timeLo = static_cast<TUint32>(low);
+ TUint32 timeHi = static_cast<TUint32>(high);
+ TInt64 time = MAKE_TINT64(timeHi, timeLo);
+ iLastModified = time;
+ }
+ else
+ {
+ // Set the time as 1st January 1970 midnight.
+ TDateTime dt ( 1970, EJanuary, 1, 0, 0, 0, 0 );
+ iLastModified = TTime ( dt );
+ }
+
+ HBufC* descBuffer = HBufC::NewLC(Bookmark::KMaxDescriptorLength);
+ TPtr descPtr = descBuffer->Des();
+ User::LeaveIfError(iRepository->Get(indexBase + KCmnDescriptionIndex, descPtr));
+ delete iDescription;
+ iDescription = NULL;
+ iDescription = descPtr.AllocL();
+ CleanupStack::PopAndDestroy(descBuffer);
+
+ TInt retVal;
+ User::LeaveIfError(iRepository->Get(indexBase + KCmnIconIndex, retVal));
+ iIconId = static_cast<Bookmark::TAttachmentId>(retVal);
+
+ iCustomProperties->TransLoadL();
+ SetClean();
+ }
+
+void CBkmrkProperties::TransRemoveL()
+ {
+ TUint32 indexBase = IndexBase();
+ iRepository->Delete(indexBase + KCmnDescriptionIndex);
+ iRepository->Delete(indexBase + KCmnIconIndex);
+ TInt low = 0;
+ TInt err = iRepository->Get( indexBase + KBkmrkLastModifiedLoIndex, low );
+ if ( err == KErrNone )
+ {
+ iRepository->Delete(indexBase + KBkmrkLastModifiedLoIndex);
+ iRepository->Delete(indexBase + KBkmrkLastModifiedHiIndex);
+ }
+ iCustomProperties->TransRemoveL();
+ }
+
+CPropertyList& CBkmrkProperties::CustomProperties()
+ {
+ return *iCustomProperties;
+ }
+
+TTime CBkmrkProperties::LastModified () const
+ {
+ return iLastModified;
+ }
+
+void CBkmrkProperties::SetLastModified ( const TTime& aTime )
+ {
+ iLastModified = aTime.Int64();
+ iUpdateModifiedOnCommit = EFalse;
+ }
+
+void CBkmrkProperties::SetModified ()
+ {
+ if ( iUpdateModifiedOnCommit )
+ {
+ TTime currentTime;
+ currentTime.HomeTime ();
+
+ SetLastModified ( currentTime );
+ }
+ // Reset the value.
+ iUpdateModifiedOnCommit = ETrue;
+ }