--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/contentiterator/contentiteratordata.cpp Mon Oct 12 10:17:04 2009 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 "contentiteratordata.h"
+
+using namespace ContentAccess;
+
+CContentIteratorData* CContentIteratorData::NewL(const TDesC& aSearchPath, TBool aRecursive, const TDesC8& aMimeType)
+ {
+ CContentIteratorData* self = new (ELeave) CContentIteratorData();
+ CleanupStack::PushL(self);
+ self->ConstructL(aSearchPath, aRecursive, aMimeType);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CContentIteratorData::CContentIteratorData()
+ {
+ }
+
+CContentIteratorData::~CContentIteratorData()
+ {
+ // release semaphore
+ iThreadSemaphore.Signal();
+
+ iDataLockSemaphore.Close();
+ iThreadSemaphore.Close();
+ }
+
+void CContentIteratorData::ConstructL(const TDesC& aSearchPath, TBool aRecursive, const TDesC8& aMimeType)
+ {
+ // Remember search parameters, the CContentIterator::ThreadEntry()
+ // will ask for these later
+ iPath.Copy(aSearchPath);
+ iRecursive = aRecursive;
+ iMimeType.Copy(aMimeType);
+
+
+ // Create semaphores
+ User::LeaveIfError(iDataLockSemaphore.CreateLocal(1, EOwnerProcess));
+ User::LeaveIfError(iThreadSemaphore.CreateLocal(1, EOwnerProcess));
+
+ // Grab semaphore so CContentIterator::ThreadEntry function can't enter the loop yet
+ iThreadSemaphore.Wait();
+ }
+
+
+void CContentIteratorData::Lock()
+ {
+ iDataLockSemaphore.Wait();
+ }
+
+void CContentIteratorData::Unlock()
+ {
+ iDataLockSemaphore.Signal();
+ }
+
+void CContentIteratorData::CompleteClientRequest(TInt aError)
+ {
+ RThread clientThread;
+ clientThread.Open(iClientThreadId);
+ clientThread.RequestComplete(iClientRequest, aError);
+ clientThread.Close();
+ }
+
+
+void CContentIteratorData::SetClientRequest(TThreadId& aClientThreadId, TRequestStatus& aStatus)
+ {
+ // Remember the thread and TRequestStatus that must be completed later
+ iClientThreadId = aClientThreadId;
+ iClientRequest = &aStatus;
+ }
+
+void CContentIteratorData::RunThreadFunction(TFileIteratorOperation aFunction)
+ {
+ // Unblock the CContentIterator::ThreadEntry() function and allow it to run
+ iFunction = aFunction;
+ iThreadSemaphore.Signal();
+ }
+
+TFileIteratorOperation CContentIteratorData::ThreadWait()
+ {
+ // Called by CContentIterator::ThreadEntry() to block execution until RunThreadFunction() is called
+ iThreadSemaphore.Wait();
+ return iFunction;
+ }
+
+
+void CContentIteratorData::SetData(const TDesC& aPath, const TDesC& aUniqueId, const TDesC& aName, const TDesC8& aMimeType)
+ {
+ // Set the results found in the search
+ iPath.Copy(aPath);
+ iMimeType.Copy(aMimeType);
+ iUniqueId.Copy(aUniqueId);
+ iName.Copy(aName);
+ }
+
+const TDesC& CContentIteratorData::Path() const
+ {
+ return iPath;
+ }
+
+const TDesC8& CContentIteratorData::MimeType() const
+ {
+ return iMimeType;
+ }
+
+const TDesC& CContentIteratorData::UniqueId() const
+ {
+ return iUniqueId;
+ }
+
+const TDesC& CContentIteratorData::Name() const
+ {
+ return iName;
+ }
+
+TBool CContentIteratorData::IsRecursive() const
+ {
+ return iRecursive;
+ }