pimappservices/calendar/server/src/agspermanentdata.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/server/src/agspermanentdata.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,96 @@
+// 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:
+// CAgnPermanentData is a container to hold the handles/references 
+// to data which is pre-created during server start-up when
+// the Agenda server is started in non-transient mode.
+// 
+//
+
+#include "agspermanentdata.h"
+
+#include "agsfilemanager.h"
+#include "calcommonimpl.h"
+
+
+CAgnPermanentData* CAgnPermanentData::NewL(CAgnServer& aServer, CAgnServFileMgr& aFileMgr)
+	{
+	CAgnPermanentData* self = new (ELeave) CAgnPermanentData(aServer, aFileMgr);
+	return self;
+	}
+
+CAgnPermanentData::CAgnPermanentData(CAgnServer& aServer, CAgnServFileMgr& aFileMgr)
+ : iServer(aServer), iFileMgr(aFileMgr)
+	{
+	}
+
+CAgnPermanentData::~CAgnPermanentData()
+	{
+	Close();
+	}
+
+void CAgnPermanentData::Close()
+	{
+	if (iFile)
+		{
+		iFileMgr.CloseAgenda(*iFile, ETrue);
+		iFile = NULL;
+		}
+	}
+
+/*
+  Starts the creation of the pre-created data. In this case this means opening
+  the default Agenda file and starting the index building process. Building
+  the indices is asynchronously handled within the CAgnServFile object (iFile).
+*/
+void CAgnPermanentData::StartDataCreationL()
+	{
+	if (!iFile)
+		{		
+		CalCommon::TCalFileVersionSupport dummyStatus;
+		iFile = &iFileMgr.OpenAgendaL(KDefaultSecureAgendaFileName(), iServer, dummyStatus);		
+		iFile->DoStartBuildIndex();
+		}
+	}
+
+/*
+  Releases the file if it is being held open by this object.
+  
+@param Filename of Agenda file
+*/
+void CAgnPermanentData::ReleaseFileL(const TDesC& aFilename)
+	{
+	if (iFile && (aFilename.CompareF(iFile->FileName()) == 0))
+		{
+		Close();
+		}
+	}
+
+/*
+  Checks whether this object is the only one that is currently using
+  aFilename.
+  
+@return ETrue if this is the only object referencing aFilename, EFalse otherwise.
+*/
+TBool CAgnPermanentData::IsOnlyClientOfFile(const TDesC& aFilename)
+	{
+	if (iFile)
+		{
+		if ((aFilename.CompareF(iFile->FileName()) == 0) && iFile->ReferenceCount() == 1)
+			{
+			return ETrue;
+			}
+		}
+	return EFalse;
+	}
+