appfw/apparchitecture/apserv/APSRECUTIL.H
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/apparchitecture/apserv/APSRECUTIL.H	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,107 @@
+// Copyright (c) 1997-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:
+// apsrecutil.h
+//
+
+
+#ifndef __APSRECUTIL_H__
+#define __APSRECUTIL_H__
+
+#include <e32base.h>
+#include <apmrec.h>
+#include "apsserv.h"
+
+/**
+Reference-counted object which stores a recognition result in a more compact format
+than TDataRecognitionResult does. Also includes the file name.
+
+The reason why instances of this class are reference-counted is that they might 
+be "owned" by the cache and CDirectoryRecognitionResult at the same time. If both
+of them had their own copies unnecessarily much memory would be wasted.
+@internalComponent
+*/
+NONSHARABLE_CLASS(CRecognitionResult) : public CObject
+	{
+public:
+	static CRecognitionResult* NewL(const TDesC& aFileName, const TDataRecognitionResult& aRecognitionResult);
+	TUint GetRequiredBufferSize() const;
+	void WriteToStreamL(RWriteStream& aWriteStream);
+	
+	void Get(TDataRecognitionResult& aRecognitionResult);
+	inline const TDesC8& DataType() const { return *iDataType; }
+	inline const TDesC& FileName() const { return *iFileName; }
+private:
+	CRecognitionResult(HBufC* aFileName, HBufC8* aDataType, TUid aUid, TInt aConfidence);
+	~CRecognitionResult();
+private:
+	const HBufC* const iFileName;
+	const HBufC8* const iDataType;
+	TUid iUid;
+	TInt iConfidence;
+	};
+
+/**
+Holds the recognition results of all files of a directory.
+@internalComponent
+*/
+NONSHARABLE_CLASS(CDirectoryRecognitionResult) : public CBase
+	{
+public:
+	CDirectoryRecognitionResult(HBufC* aPath, HBufC8* aDataTypeFilter);
+	~CDirectoryRecognitionResult();
+	void AppendL(CRecognitionResult* aEntry);
+	void WriteToStreamL(RWriteStream& aWriteStream);
+	inline TInt RequiredBufferSize() const {return iRequiredBufferSize;}
+	inline HBufC& Path() { return *iPath; }
+private:
+	TInt iRequiredBufferSize;
+	HBufC* iPath;
+	HBufC8* iDataTypeFilter;
+	RPointerArray<CRecognitionResult> iEntries;
+	};
+
+/**
+Utility class which does synchronous and asynchronous file recognitions of a directory
+@internalComponent
+*/
+NONSHARABLE_CLASS(CFileRecognitionUtility) : public CActive
+	{
+public:
+	CFileRecognitionUtility(CApaAppArcServer& aServer, TInt aMaxBufSize, RFs& aFs);
+	~CFileRecognitionUtility();
+	void RecognizeSynchronouslyL(CDirectoryRecognitionResult& aResult);
+	void RecognizeAsynchronously(CDirectoryRecognitionResult& aResult, const RMessage2& aMessage);
+	void CancelRecognitionRequest();
+protected:
+	void ReadDirectoryL();
+	void RecognizeFileL();
+private:
+	void NextStep();
+	void RunL();
+	void DoCancel();
+	TInt BufferSizeL() const;
+private:
+	HBufC* iPath;
+	CDirectoryRecognitionResult* iResult;
+	CApaAppArcServer& iServer;
+	TInt iMaxBufSize;
+	RFs& iFs;
+	CDir* iEntryList;
+	TInt iIndex;
+	TInt iStep;
+	RMessage2 iMessage;
+	};
+
+#endif	// __APSRECUTIL_H__
+