// 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__